/*
 * GoJS v2.2.15 JavaScript Library for HTML Diagrams, https://gojs.net
 * GoJS and Northwoods Software are registered trademarks of Northwoods Software Corporation, https://www.nwoods.com.
 * Copyright (C) 1998-2022 by Northwoods Software Corporation.  All Rights Reserved.
 * THIS SOFTWARE IS LICENSED.  THE LICENSE AGREEMENT IS AT: https://gojs.net/2.2.15/license.html.
 * DO NOT MODIFY THIS FILE.  DO NOT DISTRIBUTE A MODIFIED COPY OF THE CONTENTS OF THIS FILE.  7ca11abfd022028846   7ca11abfd022028846
 */
(function() {
  var t;

  function aa(a) {
    var b = 0;
    return function() {
      return b < a.length
        ? {
            done: !1,
            value: a[b++],
          }
        : {
            done: !0,
          };
    };
  }

  function ba(a) {
    var b =
      'undefined' != typeof Symbol && Symbol.iterator && a[Symbol.iterator];
    return b
      ? b.call(a)
      : {
          next: aa(a),
        };
  }

  function ca(a) {
    for (var b, c = []; !(b = a.next()).done; ) c.push(b.value);
    return c;
  }
  var ea =
      'function' == typeof Object.create
        ? Object.create
        : function(a) {
            function b() {}
            b.prototype = a;
            return new b();
          },
    fa;
  if ('function' == typeof Object.setPrototypeOf) fa = Object.setPrototypeOf;
  else {
    var ha;
    a: {
      var ia = {
          a: !0,
        },
        ja = {};
      try {
        ja.__proto__ = ia;
        ha = ja.a;
        break a;
      } catch (a) {}
      ha = !1;
    }
    fa = ha
      ? function(a, b) {
          a.__proto__ = b;
          if (a.__proto__ !== b) throw new TypeError(a + ' is not extensible');
          return a;
        }
      : null;
  }
  var ka = fa;

  function la(a, b) {
    a.prototype = ea(b.prototype);
    a.prototype.constructor = a;
    if (ka) ka(a, b);
    else
      for (var c in b)
        if ('prototype' != c)
          if (Object.defineProperties) {
            var d = Object.getOwnPropertyDescriptor(b, c);
            d && Object.defineProperty(a, c, d);
          } else a[c] = b[c];
    a.zA = b.prototype;
  }
  var ma = 'undefined' != typeof global && null != global ? global : self,
    na =
      'function' == typeof Object.assign
        ? Object.assign
        : function(a, b) {
            for (var c = 1; c < arguments.length; c++) {
              var d = arguments[c];
              if (d)
                for (var e in d)
                  Object.prototype.hasOwnProperty.call(d, e) && (a[e] = d[e]);
            }
            return a;
          },
    pa =
      'function' == typeof Object.defineProperties
        ? Object.defineProperty
        : function(a, b, c) {
            a != Array.prototype && a != Object.prototype && (a[b] = c.value);
          };

  function qa(a, b) {
    if (b) {
      var c = ma;
      a = a.split('.');
      for (var d = 0; d < a.length - 1; d++) {
        var e = a[d];
        e in c || (c[e] = {});
        c = c[e];
      }
      a = a[a.length - 1];
      d = c[a];
      b = b(d);
      b != d &&
        null != b &&
        pa(c, a, {
          writable: !0,
          value: b,
        });
    }
  }
  qa('Object.assign', function(a) {
    return a || na;
  });
  qa('Array.prototype.fill', function(a) {
    return a
      ? a
      : function(a, c, d) {
          var b = this.length || 0;
          0 > c && (c = Math.max(0, b + c));
          if (null == d || d > b) d = b;
          d = Number(d);
          0 > d && (d = Math.max(0, b + d));
          for (c = Number(c || 0); c < d; c++) this[c] = a;
          return this;
        };
  });
  var x =
    ('object' === typeof globalThis && globalThis) ||
    ('object' === typeof global && global.global === global && global) ||
    ('object' === typeof self && self.self === self && self) ||
    {};
  void 0 === x.requestAnimationFrame &&
    (void 0 === x.setImmediate
      ? (x.requestAnimationFrame = function(a) {
          x.setTimeout(a, 0);
        })
      : (x.requestAnimationFrame = x.setImmediate));

  function ra() {}

  function sa(a, b) {
    var c = -1;
    return function() {
      var d = this,
        e = arguments;
      -1 !== c && x.clearTimeout(c);
      c = ta(function() {
        c = -1;
        a.apply(d, e);
      }, b);
    };
  }

  function ta(a, b) {
    return x.setTimeout(a, b);
  }

  function ua(a) {
    return x.document.createElement(a);
  }

  function C(a) {
    throw Error(a);
  }

  function va(a, b) {
    a =
      'The object is frozen, so its properties cannot be set: ' + a.toString();
    void 0 !== b && (a += '  to value: ' + b);
    C(a);
  }

  function wa(a, b, c, d) {
    c =
      null === c
        ? '*'
        : 'string' === typeof c
        ? c
        : 'function' === typeof c && 'string' === typeof c.className
        ? c.className
        : '';
    void 0 !== d && (c += '.' + d);
    C(c + ' is not in the range ' + b + ': ' + a);
  }

  function xa(a) {
    x.console && x.console.log(a);
  }

  function ya(a) {
    return 'object' === typeof a && null !== a;
  }

  function za(a) {
    return (
      Array.isArray(a) ||
      (x.NodeList && a instanceof x.NodeList) ||
      (x.HTMLCollection && a instanceof x.HTMLCollection)
    );
  }

  function Aa(a) {
    return Array.prototype.slice.call(a);
  }

  function Ca(a, b, c) {
    Array.isArray(a)
      ? b >= a.length
        ? a.push(c)
        : a.splice(b, 0, c)
      : C(
          'Cannot insert an object into an HTMLCollection or NodeList: ' +
            c +
            ' at ' +
            b,
        );
  }

  function Da(a, b) {
    Array.isArray(a)
      ? b >= a.length
        ? a.pop()
        : a.splice(b, 1)
      : C('Cannot remove an object from an HTMLCollection or NodeList at ' + b);
  }

  function Ea() {
    var a = Fa.pop();
    return void 0 === a ? [] : a;
  }

  function Ga(a) {
    a.length = 0;
    Fa.push(a);
  }

  function Ha(a) {
    if ('function' === typeof a) {
      if (a.className) return a.className;
      if (a.name) return a.name;
      var b = a.toString();
      b = b.substring(9, b.indexOf('(')).trim();
      if ('' !== b) return (a._className = b);
    } else if (ya(a) && a.constructor) return Ha(a.constructor);
    return typeof a;
  }

  function Ia(a) {
    var b = a;
    ya(a) &&
      (a.text
        ? (b = a.text)
        : a.name
        ? (b = a.name)
        : void 0 !== a.key
        ? (b = a.key)
        : void 0 !== a.id
        ? (b = a.id)
        : a.constructor === Object &&
          (a.Text
            ? (b = a.Text)
            : a.Name
            ? (b = a.Name)
            : void 0 !== a.Key
            ? (b = a.Key)
            : void 0 !== a.Id
            ? (b = a.Id)
            : void 0 !== a.ID && (b = a.ID)));
    return void 0 === b ? 'undefined' : null === b ? 'null' : b.toString();
  }

  function Ja(a, b) {
    if (a.hasOwnProperty(b)) return !0;
    for (a = Object.getPrototypeOf(a); a && a !== Function; ) {
      if (a.hasOwnProperty(b)) return !0;
      var c = a.lA;
      if (c && c[b]) return !0;
      a = Object.getPrototypeOf(a);
    }
    return !1;
  }

  function Ka(a, b, c) {
    Object.defineProperty(La.prototype, a, {
      get: b,
      set: c,
    });
  }

  function Ma(a) {
    for (var b = [], c = 0; 256 > c; c++)
      b[
        '0123456789abcdef'.charAt(c >> 4) + '0123456789abcdef'.charAt(c & 15)
      ] = String.fromCharCode(c);
    a.length % 2 && (a = '0' + a);
    c = [];
    for (var d = 0, e = 0; e < a.length; e += 2) c[d++] = b[a.substr(e, 2)];
    a = c.join('');
    a = '' === a ? '0' : a;
    b = [];
    for (c = 0; 256 > c; c++) b[c] = c;
    for (c = d = 0; 256 > c; c++)
      (d = (d + b[c] + 119) % 256), (e = b[c]), (b[c] = b[d]), (b[d] = e);
    d = c = 0;
    for (var f = '', g = 0; g < a.length; g++)
      (c = (c + 1) % 256),
        (d = (d + b[c]) % 256),
        (e = b[c]),
        (b[c] = b[d]),
        (b[d] = e),
        (f += String.fromCharCode(a.charCodeAt(g) ^ b[(b[c] + b[d]) % 256]));
    return f;
  }
  var Na =
      void 0 !== x.navigator && 0 < x.navigator.userAgent.indexOf('Trident/7'),
    Pa = void 0 !== x.navigator && 0 < x.navigator.userAgent.indexOf('Edge/'),
    Qa =
      void 0 !== x.navigator &&
      void 0 !== x.navigator.platform &&
      null !== x.navigator.platform.match(/(iPhone|iPod|iPad|Mac)/i),
    Fa = [];
  Object.freeze([]);
  ra.className = 'Util';
  ra.Dx = '32ab5ff3b26f42dc0ed90f21462913b5';
  ra.adym = 'gojs.net';
  ra.vfo = '28e644fdb263';
  ra.className = 'Util';

  function D(a, b, c) {
    Ra(this);
    this.j = a;
    this.va = b;
    this.m = c;
  }
  D.prototype.toString = function() {
    return 'EnumValue.' + this.va;
  };

  function Sa(a, b) {
    return void 0 === b || null === b || '' === b ? null : a[b];
  }
  ma.Object.defineProperties(D.prototype, {
    classType: {
      get: function() {
        return this.j;
      },
    },
    name: {
      get: function() {
        return this.va;
      },
    },
    value: {
      get: function() {
        return this.m;
      },
    },
  });
  D.className = 'EnumValue';

  function Ta() {
    this.Jv = [];
  }
  Ta.prototype.toString = function() {
    return this.Jv.join('');
  };
  Ta.prototype.add = function(a) {
    '' !== a && this.Jv.push(a);
  };
  Ta.className = 'StringBuilder';

  function Wa() {}
  Wa.className = 'PropertyCollection';
  var Xa = {
    nA: !1,
    sA: !1,
    pA: !1,
    rA: !1,
    xA: !1,
    vA: !1,
    Rw: !1,
    oA: null,
    trace: function(a) {
      x.console && x.console.log(a);
    },
    qA: function(a, b, c, d) {
      a.strokeStyle = 'red';
      a.fillStyle = 'red';
      a.font = '8px sans-serif';
      a.beginPath();
      a.moveTo(-10, 0);
      a.lineTo(10, 0);
      a.moveTo(0, -10);
      a.lineTo(0, 10);
      a.stroke();
      a.setTransform(1, 0, 0, 1, 0, 0);
      a.scale(c, c);
      a.transform(b.m11, b.m12, b.m21, b.m22, b.dx, b.dy);
      a.lineWidth = 2;
      a.beginPath();
      a.moveTo(d.left, d.top + 20);
      a.lineTo(d.left, d.top);
      a.lineTo(d.left + 20, d.top);
      a.moveTo(d.right, d.bottom - 20);
      a.lineTo(d.right, d.bottom);
      a.lineTo(d.right - 20, d.bottom);
      a.stroke();
      a.fillText(
        'DB: ' +
          Math.round(d.x) +
          ', ' +
          Math.round(d.y) +
          ', ' +
          Math.round(d.width) +
          ', ' +
          Math.round(d.height),
        d.left,
        d.top - 5,
      );
    },
    mA: function(a) {
      var b = {},
        c;
      for (c in a) {
        b.x = c;
        if ('licenseKey' !== b.x) {
          var d = a[b.x];
          if (void 0 !== d.prototype) {
            b.Gl = Object.getOwnPropertyNames(d.prototype);
            for (
              var e = {
                Lj: 0,
              };
              e.Lj < b.Gl.length;
              e = {
                Lj: e.Lj,
              },
                e.Lj++
            ) {
              var f = Object.getOwnPropertyDescriptor(d.prototype, b.Gl[e.Lj]);
              void 0 !== f.get &&
                void 0 === f.set &&
                Object.defineProperty(d.prototype, b.Gl[e.Lj], {
                  set: (function(a, b) {
                    return function() {
                      throw Error(
                        'Property ' +
                          a.Gl[b.Lj] +
                          ' of ' +
                          a.x +
                          ' is read-only.',
                      );
                    };
                  })(b, e),
                });
            }
          }
        }
        b = {
          Gl: b.Gl,
          x: b.x,
        };
      }
    },
  };

  function Ya() {}
  Ya.prototype.reset = function() {};
  Ya.prototype.next = function() {
    return !1;
  };
  Ya.prototype.ud = function() {
    return !1;
  };
  Ya.prototype.first = function() {
    return null;
  };
  Ya.prototype.any = function() {
    return !1;
  };
  Ya.prototype.all = function() {
    return !0;
  };
  Ya.prototype.each = function() {
    return this;
  };
  Ya.prototype.map = function() {
    return this;
  };
  Ya.prototype.filter = function() {
    return this;
  };
  Ya.prototype.Xd = function() {};
  Ya.prototype.toString = function() {
    return 'EmptyIterator';
  };
  ma.Object.defineProperties(Ya.prototype, {
    iterator: {
      get: function() {
        return this;
      },
    },
    count: {
      get: function() {
        return 0;
      },
    },
  });
  Ya.prototype.first = Ya.prototype.first;
  Ya.prototype.hasNext = Ya.prototype.ud;
  Ya.prototype.next = Ya.prototype.next;
  Ya.prototype.reset = Ya.prototype.reset;
  var Za = null;
  Ya.className = 'EmptyIterator';
  Za = new Ya();

  function $a(a) {
    this.key = -1;
    this.value = a;
  }
  $a.prototype.reset = function() {
    this.key = -1;
  };
  $a.prototype.next = function() {
    return -1 === this.key ? ((this.key = 0), !0) : !1;
  };
  $a.prototype.ud = function() {
    return this.next();
  };
  $a.prototype.first = function() {
    this.key = 0;
    return this.value;
  };
  $a.prototype.any = function(a) {
    this.key = -1;
    return a(this.value);
  };
  $a.prototype.all = function(a) {
    this.key = -1;
    return a(this.value);
  };
  $a.prototype.each = function(a) {
    this.key = -1;
    a(this.value);
    return this;
  };
  $a.prototype.map = function(a) {
    return new $a(a(this.value));
  };
  $a.prototype.filter = function(a) {
    return a(this.value) ? new $a(this.value) : Za;
  };
  $a.prototype.Xd = function() {
    this.value = null;
  };
  $a.prototype.toString = function() {
    return 'SingletonIterator(' + this.value + ')';
  };
  ma.Object.defineProperties($a.prototype, {
    iterator: {
      get: function() {
        return this;
      },
    },
    count: {
      get: function() {
        return 1;
      },
    },
  });
  $a.prototype.first = $a.prototype.first;
  $a.prototype.hasNext = $a.prototype.ud;
  $a.prototype.next = $a.prototype.next;
  $a.prototype.reset = $a.prototype.reset;
  $a.className = 'SingletonIterator';

  function ab(a) {
    this.xb = a;
    this.cf = null;
    a.Pa = null;
    this.na = a.Ia;
    this.Wa = -1;
  }
  ab.prototype.reset = function() {
    var a = this.xb;
    a.Pa = null;
    this.na = a.Ia;
    this.Wa = -1;
  };
  ab.prototype.next = function() {
    var a = this.xb;
    if (a.Ia !== this.na && 0 > this.key) return !1;
    a = a.s;
    var b = a.length,
      c = ++this.Wa,
      d = this.cf;
    if (null !== d)
      for (; c < b; ) {
        var e = a[c];
        if (d(e)) return (this.key = this.Wa = c), (this.value = e), !0;
        c++;
      }
    else {
      if (c < b) return (this.key = c), (this.value = a[c]), !0;
      this.Xd();
    }
    return !1;
  };
  ab.prototype.ud = function() {
    return this.next();
  };
  ab.prototype.first = function() {
    var a = this.xb;
    this.na = a.Ia;
    this.Wa = 0;
    a = a.s;
    var b = a.length,
      c = this.cf;
    if (null !== c) {
      for (var d = 0; d < b; ) {
        var e = a[d];
        if (c(e)) return (this.key = this.Wa = d), (this.value = e);
        d++;
      }
      return null;
    }
    return 0 < b ? ((a = a[0]), (this.key = 0), (this.value = a)) : null;
  };
  ab.prototype.any = function(a) {
    var b = this.xb;
    b.Pa = null;
    this.Wa = -1;
    b = b.s;
    for (var c = b.length, d = this.cf, e = 0; e < c; e++) {
      var f = b[e];
      if ((null === d || d(f)) && a(f)) return !0;
    }
    return !1;
  };
  ab.prototype.all = function(a) {
    var b = this.xb;
    b.Pa = null;
    this.Wa = -1;
    b = b.s;
    for (var c = b.length, d = this.cf, e = 0; e < c; e++) {
      var f = b[e];
      if ((null === d || d(f)) && !a(f)) return !1;
    }
    return !0;
  };
  ab.prototype.each = function(a) {
    var b = this.xb;
    b.Pa = null;
    this.Wa = -1;
    b = b.s;
    for (var c = b.length, d = this.cf, e = 0; e < c; e++) {
      var f = b[e];
      (null === d || d(f)) && a(f);
    }
    return this;
  };
  ab.prototype.map = function(a) {
    var b = this.xb;
    b.Pa = null;
    this.Wa = -1;
    var c = [];
    b = b.s;
    for (var d = b.length, e = this.cf, f = 0; f < d; f++) {
      var g = b[f];
      (null === e || e(g)) && c.push(a(g));
    }
    a = new E();
    a.s = c;
    a.sb();
    return a.iterator;
  };
  ab.prototype.filter = function(a) {
    var b = this.xb;
    b.Pa = null;
    this.Wa = -1;
    var c = [];
    b = b.s;
    for (var d = b.length, e = this.cf, f = 0; f < d; f++) {
      var g = b[f];
      (null === e || e(g)) && a(g) && c.push(g);
    }
    a = new E();
    a.s = c;
    a.sb();
    return a.iterator;
  };
  ab.prototype.Xd = function() {
    this.key = -1;
    this.value = null;
    this.na = -1;
    this.cf = null;
    this.xb.Pa = this;
  };
  ab.prototype.toString = function() {
    return 'ListIterator@' + this.Wa + '/' + this.xb.count;
  };
  ma.Object.defineProperties(ab.prototype, {
    iterator: {
      get: function() {
        return this;
      },
    },
    predicate: {
      get: function() {
        return this.cf;
      },
      set: function(a) {
        this.cf = a;
      },
    },
    count: {
      get: function() {
        var a = this.cf;
        if (null !== a) {
          for (var b = 0, c = this.xb.s, d = c.length, e = 0; e < d; e++)
            a(c[e]) && b++;
          return b;
        }
        return this.xb.s.length;
      },
    },
  });
  ab.prototype.first = ab.prototype.first;
  ab.prototype.hasNext = ab.prototype.ud;
  ab.prototype.next = ab.prototype.next;
  ab.prototype.reset = ab.prototype.reset;
  ab.className = 'ListIterator';

  function bb(a) {
    this.xb = a;
    a.yg = null;
    this.na = a.Ia;
    this.Wa = a.s.length;
  }
  bb.prototype.reset = function() {
    var a = this.xb;
    a.yg = null;
    this.na = a.Ia;
    this.Wa = a.s.length;
  };
  bb.prototype.next = function() {
    var a = this.xb;
    if (a.Ia !== this.na && 0 > this.key) return !1;
    var b = --this.Wa;
    if (0 <= b) return (this.key = b), (this.value = a.s[b]), !0;
    this.Xd();
    return !1;
  };
  bb.prototype.ud = function() {
    return this.next();
  };
  bb.prototype.first = function() {
    var a = this.xb;
    this.na = a.Ia;
    var b = a.s;
    this.Wa = a = b.length - 1;
    return 0 <= a ? ((b = b[a]), (this.key = a), (this.value = b)) : null;
  };
  bb.prototype.any = function(a) {
    var b = this.xb;
    b.yg = null;
    b = b.s;
    var c = b.length;
    this.Wa = c;
    for (--c; 0 <= c; c--) if (a(b[c])) return !0;
    return !1;
  };
  bb.prototype.all = function(a) {
    var b = this.xb;
    b.yg = null;
    b = b.s;
    var c = b.length;
    this.Wa = c;
    for (--c; 0 <= c; c--) if (!a(b[c])) return !1;
    return !0;
  };
  bb.prototype.each = function(a) {
    var b = this.xb;
    b.yg = null;
    b = b.s;
    var c = b.length;
    this.Wa = c;
    for (--c; 0 <= c; c--) a(b[c]);
    return this;
  };
  bb.prototype.map = function(a) {
    var b = this.xb;
    b.yg = null;
    var c = [];
    b = b.s;
    var d = b.length;
    this.Wa = d;
    for (--d; 0 <= d; d--) c.push(a(b[d]));
    a = new E();
    a.s = c;
    a.sb();
    return a.iterator;
  };
  bb.prototype.filter = function(a) {
    var b = this.xb;
    b.yg = null;
    var c = [];
    b = b.s;
    var d = b.length;
    this.Wa = d;
    for (--d; 0 <= d; d--) {
      var e = b[d];
      a(e) && c.push(e);
    }
    a = new E();
    a.s = c;
    a.sb();
    return a.iterator;
  };
  bb.prototype.Xd = function() {
    this.key = -1;
    this.value = null;
    this.na = -1;
    this.xb.yg = this;
  };
  bb.prototype.toString = function() {
    return 'ListIteratorBackwards(' + this.Wa + '/' + this.xb.count + ')';
  };
  ma.Object.defineProperties(bb.prototype, {
    iterator: {
      get: function() {
        return this;
      },
    },
    count: {
      get: function() {
        return this.xb.s.length;
      },
    },
  });
  bb.prototype.first = bb.prototype.first;
  bb.prototype.hasNext = bb.prototype.ud;
  bb.prototype.next = bb.prototype.next;
  bb.prototype.reset = bb.prototype.reset;
  bb.className = 'ListIteratorBackwards';

  function E(a) {
    Ra(this);
    this._isFrozen = !1;
    this.s = [];
    this.Ia = 0;
    this.yg = this.Pa = null;
    'string' === typeof a &&
      C(
        'Error: Since 2.0 List/Map/Set constructors no longer take an argument that enforces type.',
      );
    void 0 !== a && this.addAll(a);
  }
  t = E.prototype;
  t.sb = function() {
    var a = this.Ia;
    a++;
    999999999 < a && (a = 0);
    this.Ia = a;
  };
  t.freeze = function() {
    this._isFrozen = !0;
    return this;
  };
  t.ja = function() {
    this._isFrozen = !1;
    return this;
  };
  t.toString = function() {
    return 'List()#' + cb(this);
  };
  t.add = function(a) {
    if (null === a) return this;
    this._isFrozen && va(this, a);
    this.s.push(a);
    this.sb();
    return this;
  };
  t.push = function(a) {
    this.add(a);
  };
  t.addAll = function(a) {
    if (null === a) return this;
    this._isFrozen && va(this);
    var b = this.s;
    if (za(a)) for (var c = a.length, d = 0; d < c; d++) b.push(a[d]);
    else for (a = a.iterator; a.next(); ) b.push(a.value);
    this.sb();
    return this;
  };
  t.clear = function() {
    this._isFrozen && va(this);
    this.s.length = 0;
    this.sb();
  };
  t.contains = function(a) {
    return null === a ? !1 : -1 !== this.s.indexOf(a);
  };
  t.has = function(a) {
    return this.contains(a);
  };
  t.indexOf = function(a) {
    return null === a ? -1 : this.s.indexOf(a);
  };
  t.K = function(a) {
    var b = this.s;
    (0 > a || a >= b.length) && wa(a, '0 <= i < length', E, 'elt:i');
    return b[a];
  };
  t.get = function(a) {
    return this.K(a);
  };
  t.Vc = function(a, b) {
    var c = this.s;
    (0 > a || a >= c.length) && wa(a, '0 <= i < length', E, 'setElt:i');
    this._isFrozen && va(this, a);
    c[a] = b;
  };
  t.set = function(a, b) {
    this.Vc(a, b);
  };
  t.first = function() {
    var a = this.s;
    return 0 === a.length ? null : a[0];
  };
  t.fc = function() {
    var a = this.s,
      b = a.length;
    return 0 < b ? a[b - 1] : null;
  };
  t.pop = function() {
    this._isFrozen && va(this);
    var a = this.s;
    return 0 < a.length ? a.pop() : null;
  };
  E.prototype.any = function(a) {
    for (var b = this.s, c = b.length, d = 0; d < c; d++)
      if (a(b[d])) return !0;
    return !1;
  };
  E.prototype.all = function(a) {
    for (var b = this.s, c = b.length, d = 0; d < c; d++)
      if (!a(b[d])) return !1;
    return !0;
  };
  E.prototype.each = function(a) {
    for (var b = this.s, c = b.length, d = 0; d < c; d++) a(b[d]);
    return this;
  };
  E.prototype.map = function(a) {
    for (var b = new E(), c = [], d = this.s, e = d.length, f = 0; f < e; f++)
      c.push(a(d[f]));
    b.s = c;
    b.sb();
    return b;
  };
  E.prototype.filter = function(a) {
    for (var b = new E(), c = [], d = this.s, e = d.length, f = 0; f < e; f++) {
      var g = d[f];
      a(g) && c.push(g);
    }
    b.s = c;
    b.sb();
    return b;
  };
  t = E.prototype;
  t.Cb = function(a, b) {
    0 > a && wa(a, '>= 0', E, 'insertAt:i');
    this._isFrozen && va(this, a);
    var c = this.s;
    a >= c.length ? c.push(b) : c.splice(a, 0, b);
    this.sb();
  };
  t.remove = function(a) {
    if (null === a) return !1;
    this._isFrozen && va(this, a);
    var b = this.s;
    a = b.indexOf(a);
    if (-1 === a) return !1;
    a === b.length - 1 ? b.pop() : b.splice(a, 1);
    this.sb();
    return !0;
  };
  t.delete = function(a) {
    return this.remove(a);
  };
  t.mb = function(a) {
    var b = this.s;
    (0 > a || a >= b.length) && wa(a, '0 <= i < length', E, 'removeAt:i');
    this._isFrozen && va(this, a);
    a === b.length - 1 ? b.pop() : b.splice(a, 1);
    this.sb();
  };
  t.removeRange = function(a, b) {
    var c = this.s,
      d = c.length;
    if (0 > a) a = 0;
    else if (a >= d) return this;
    if (0 > b) return this;
    b >= d && (b = d - 1);
    if (a > b) return this;
    this._isFrozen && va(this);
    for (var e = a, f = b + 1; f < d; ) c[e++] = c[f++];
    c.length = d - (b - a + 1);
    this.sb();
    return this;
  };
  E.prototype.copy = function() {
    var a = new E(),
      b = this.s;
    0 < b.length && (a.s = Array.prototype.slice.call(b));
    return a;
  };
  t = E.prototype;
  t.Ea = function() {
    for (var a = this.s, b = this.count, c = Array(b), d = 0; d < b; d++)
      c[d] = a[d];
    return c;
  };
  t.lv = function() {
    for (var a = new G(), b = this.s, c = this.count, d = 0; d < c; d++)
      a.add(b[d]);
    return a;
  };
  t.sort = function(a) {
    this._isFrozen && va(this);
    this.s.sort(a);
    this.sb();
    return this;
  };
  t.ri = function(a, b, c) {
    var d = this.s,
      e = d.length;
    void 0 === b && (b = 0);
    void 0 === c && (c = e);
    this._isFrozen && va(this);
    var f = c - b;
    if (1 >= f) return this;
    (0 > b || b >= e - 1) && wa(b, '0 <= from < length', E, 'sortRange:from');
    if (2 === f)
      return (
        (c = d[b]),
        (e = d[b + 1]),
        0 < a(c, e) && ((d[b] = e), (d[b + 1] = c), this.sb()),
        this
      );
    if (0 === b)
      if (c >= e) d.sort(a);
      else for (b = d.slice(0, c), b.sort(a), a = 0; a < c; a++) d[a] = b[a];
    else if (c >= e)
      for (c = d.slice(b), c.sort(a), a = b; a < e; a++) d[a] = c[a - b];
    else for (e = d.slice(b, c), e.sort(a), a = b; a < c; a++) d[a] = e[a - b];
    this.sb();
    return this;
  };
  t.reverse = function() {
    this._isFrozen && va(this);
    this.s.reverse();
    this.sb();
    return this;
  };
  ma.Object.defineProperties(E.prototype, {
    _dataArray: {
      get: function() {
        return this.s;
      },
    },
    count: {
      get: function() {
        return this.s.length;
      },
    },
    size: {
      get: function() {
        return this.s.length;
      },
    },
    length: {
      get: function() {
        return this.s.length;
      },
    },
    iterator: {
      get: function() {
        if (0 >= this.s.length) return Za;
        var a = this.Pa;
        return null !== a ? (a.reset(), a) : new ab(this);
      },
    },
    iteratorBackwards: {
      get: function() {
        if (0 >= this.s.length) return Za;
        var a = this.yg;
        return null !== a ? (a.reset(), a) : new bb(this);
      },
    },
  });
  E.prototype.reverse = E.prototype.reverse;
  E.prototype.sortRange = E.prototype.ri;
  E.prototype.sort = E.prototype.sort;
  E.prototype.toSet = E.prototype.lv;
  E.prototype.toArray = E.prototype.Ea;
  E.prototype.removeRange = E.prototype.removeRange;
  E.prototype.removeAt = E.prototype.mb;
  E.prototype['delete'] = E.prototype.delete;
  E.prototype.remove = E.prototype.remove;
  E.prototype.insertAt = E.prototype.Cb;
  E.prototype.pop = E.prototype.pop;
  E.prototype.last = E.prototype.fc;
  E.prototype.first = E.prototype.first;
  E.prototype.set = E.prototype.set;
  E.prototype.setElt = E.prototype.Vc;
  E.prototype.get = E.prototype.get;
  E.prototype.elt = E.prototype.K;
  E.prototype.indexOf = E.prototype.indexOf;
  E.prototype.has = E.prototype.has;
  E.prototype.contains = E.prototype.contains;
  E.prototype.clear = E.prototype.clear;
  E.prototype.addAll = E.prototype.addAll;
  E.prototype.push = E.prototype.push;
  E.prototype.add = E.prototype.add;
  E.prototype.thaw = E.prototype.ja;
  E.prototype.freeze = E.prototype.freeze;
  E.className = 'List';

  function fb(a) {
    this.Xf = a;
    a.Pa = null;
    this.na = a.Ia;
    this.ra = null;
  }
  fb.prototype.reset = function() {
    var a = this.Xf;
    a.Pa = null;
    this.na = a.Ia;
    this.ra = null;
  };
  fb.prototype.next = function() {
    var a = this.Xf;
    if (a.Ia !== this.na && null === this.key) return !1;
    var b = this.ra;
    b = null === b ? a.ea : b.ta;
    if (null !== b)
      return (this.ra = b), (this.value = b.value), (this.key = b.key), !0;
    this.Xd();
    return !1;
  };
  fb.prototype.ud = function() {
    return this.next();
  };
  fb.prototype.first = function() {
    var a = this.Xf;
    this.na = a.Ia;
    a = a.ea;
    if (null !== a) {
      this.ra = a;
      var b = a.value;
      this.key = a.key;
      return (this.value = b);
    }
    return null;
  };
  fb.prototype.any = function(a) {
    var b = this.Xf;
    this.ra = b.Pa = null;
    for (b = b.ea; null !== b; ) {
      if (a(b.value)) return !0;
      b = b.ta;
    }
    return !1;
  };
  fb.prototype.all = function(a) {
    var b = this.Xf;
    this.ra = b.Pa = null;
    for (b = b.ea; null !== b; ) {
      if (!a(b.value)) return !1;
      b = b.ta;
    }
    return !0;
  };
  fb.prototype.each = function(a) {
    var b = this.Xf;
    this.ra = b.Pa = null;
    for (b = b.ea; null !== b; ) a(b.value), (b = b.ta);
    return this;
  };
  fb.prototype.map = function(a) {
    var b = this.Xf;
    b.Pa = null;
    var c = new E();
    for (b = b.ea; null !== b; ) c.add(a(b.value)), (b = b.ta);
    return c.iterator;
  };
  fb.prototype.filter = function(a) {
    var b = this.Xf;
    b.Pa = null;
    var c = new E();
    for (b = b.ea; null !== b; ) {
      var d = b.value;
      a(d) && c.add(d);
      b = b.ta;
    }
    return c.iterator;
  };
  fb.prototype.Xd = function() {
    this.value = this.key = null;
    this.na = -1;
    this.Xf.Pa = this;
  };
  fb.prototype.toString = function() {
    return null !== this.ra ? 'SetIterator@' + this.ra.value : 'SetIterator';
  };
  ma.Object.defineProperties(fb.prototype, {
    iterator: {
      get: function() {
        return this;
      },
    },
    count: {
      get: function() {
        return this.Xf.Ob;
      },
    },
  });
  fb.prototype.first = fb.prototype.first;
  fb.prototype.hasNext = fb.prototype.ud;
  fb.prototype.next = fb.prototype.next;
  fb.prototype.reset = fb.prototype.reset;
  fb.className = 'SetIterator';

  function G(a) {
    Ra(this);
    this._isFrozen = !1;
    this.Pb = {};
    this.Ob = 0;
    this.Pa = null;
    this.Ia = 0;
    this.Ye = this.ea = null;
    'string' === typeof a &&
      C(
        'Error: Since 2.0 List/Map/Set constructors no longer take an argument that enforces type.',
      );
    void 0 !== a && this.addAll(a);
  }
  t = G.prototype;
  t.sb = function() {
    var a = this.Ia;
    a++;
    999999999 < a && (a = 0);
    this.Ia = a;
  };
  t.freeze = function() {
    this._isFrozen = !0;
    return this;
  };
  t.ja = function() {
    this._isFrozen = !1;
    return this;
  };
  t.toString = function() {
    return 'Set()#' + cb(this);
  };
  t.add = function(a) {
    if (null === a) return this;
    this._isFrozen && va(this, a);
    var b = a;
    ya(a) && (b = gb(a));
    void 0 === this.Pb[b] &&
      (this.Ob++,
      (a = new jb(a, a)),
      (this.Pb[b] = a),
      (b = this.Ye),
      null === b ? (this.ea = a) : ((a.al = b), (b.ta = a)),
      (this.Ye = a),
      this.sb());
    return this;
  };
  t.addAll = function(a) {
    if (null === a) return this;
    this._isFrozen && va(this);
    if (za(a)) for (var b = a.length, c = 0; c < b; c++) this.add(a[c]);
    else for (a = a.iterator; a.next(); ) this.add(a.value);
    return this;
  };
  t.contains = function(a) {
    if (null === a) return !1;
    var b = a;
    return ya(a) && ((b = cb(a)), void 0 === b) ? !1 : void 0 !== this.Pb[b];
  };
  t.has = function(a) {
    return this.contains(a);
  };
  t.zy = function(a) {
    if (null === a) return !0;
    for (a = a.iterator; a.next(); ) if (!this.contains(a.value)) return !1;
    return !0;
  };
  t.Ay = function(a) {
    if (null === a) return !0;
    for (a = a.iterator; a.next(); ) if (this.contains(a.value)) return !0;
    return !1;
  };
  t.first = function() {
    var a = this.ea;
    return null === a ? null : a.value;
  };
  G.prototype.any = function(a) {
    for (var b = this.ea; null !== b; ) {
      if (a(b.value)) return !0;
      b = b.ta;
    }
    return !1;
  };
  G.prototype.all = function(a) {
    for (var b = this.ea; null !== b; ) {
      if (!a(b.value)) return !1;
      b = b.ta;
    }
    return !0;
  };
  G.prototype.each = function(a) {
    for (var b = this.ea; null !== b; ) a(b.value), (b = b.ta);
    return this;
  };
  G.prototype.map = function(a) {
    for (var b = new G(), c = this.ea; null !== c; )
      b.add(a(c.value)), (c = c.ta);
    return b;
  };
  G.prototype.filter = function(a) {
    for (var b = new G(), c = this.ea; null !== c; ) {
      var d = c.value;
      a(d) && b.add(d);
      c = c.ta;
    }
    return b;
  };
  t = G.prototype;
  t.remove = function(a) {
    if (null === a) return !1;
    this._isFrozen && va(this, a);
    var b = a;
    if (ya(a) && ((b = cb(a)), void 0 === b)) return !1;
    a = this.Pb[b];
    if (void 0 === a) return !1;
    var c = a.ta,
      d = a.al;
    null !== c && (c.al = d);
    null !== d && (d.ta = c);
    this.ea === a && (this.ea = c);
    this.Ye === a && (this.Ye = d);
    delete this.Pb[b];
    this.Ob--;
    this.sb();
    return !0;
  };
  t.delete = function(a) {
    return this.remove(a);
  };
  t.Ko = function(a) {
    if (null === a) return this;
    this._isFrozen && va(this);
    if (za(a)) for (var b = a.length, c = 0; c < b; c++) this.remove(a[c]);
    else for (a = a.iterator; a.next(); ) this.remove(a.value);
    return this;
  };
  t.Wz = function(a) {
    if (null === a || 0 === this.count) return this;
    this._isFrozen && va(this);
    var b = new G();
    b.addAll(a);
    a = [];
    for (var c = this.iterator; c.next(); ) {
      var d = c.value;
      b.contains(d) || a.push(d);
    }
    this.Ko(a);
    return this;
  };
  t.clear = function() {
    this._isFrozen && va(this);
    this.Pb = {};
    this.Ob = 0;
    null !== this.Pa && this.Pa.reset();
    this.Ye = this.ea = null;
    this.sb();
  };
  G.prototype.copy = function() {
    var a = new G(),
      b = this.Pb,
      c;
    for (c in b) a.add(b[c].value);
    return a;
  };
  G.prototype.Ea = function() {
    var a = Array(this.Ob),
      b = this.Pb,
      c = 0,
      d;
    for (d in b) (a[c] = b[d].value), c++;
    return a;
  };
  G.prototype.kv = function() {
    var a = new E(),
      b = this.Pb,
      c;
    for (c in b) a.add(b[c].value);
    return a;
  };

  function Ra(a) {
    a.__gohashid = kb++;
  }

  function gb(a) {
    var b = a.__gohashid;
    void 0 === b && ((b = kb++), (a.__gohashid = b));
    return b;
  }

  function cb(a) {
    return a.__gohashid;
  }
  ma.Object.defineProperties(G.prototype, {
    count: {
      get: function() {
        return this.Ob;
      },
    },
    size: {
      get: function() {
        return this.Ob;
      },
    },
    iterator: {
      get: function() {
        if (0 >= this.Ob) return Za;
        var a = this.Pa;
        return null !== a ? (a.reset(), a) : new fb(this);
      },
    },
  });
  G.prototype.toList = G.prototype.kv;
  G.prototype.toArray = G.prototype.Ea;
  G.prototype.clear = G.prototype.clear;
  G.prototype.retainAll = G.prototype.Wz;
  G.prototype.removeAll = G.prototype.Ko;
  G.prototype['delete'] = G.prototype.delete;
  G.prototype.remove = G.prototype.remove;
  G.prototype.first = G.prototype.first;
  G.prototype.containsAny = G.prototype.Ay;
  G.prototype.containsAll = G.prototype.zy;
  G.prototype.has = G.prototype.has;
  G.prototype.contains = G.prototype.contains;
  G.prototype.addAll = G.prototype.addAll;
  G.prototype.add = G.prototype.add;
  G.prototype.thaw = G.prototype.ja;
  G.prototype.freeze = G.prototype.freeze;
  var kb = 1;
  G.className = 'Set';
  G.uniqueHash = Ra;
  G.hashIdUnique = gb;
  G.hashId = cb;

  function lb(a) {
    this.la = a;
    this.na = a.Ia;
    this.ra = null;
  }
  lb.prototype.reset = function() {
    this.na = this.la.Ia;
    this.ra = null;
  };
  lb.prototype.next = function() {
    var a = this.la;
    if (a.Ia !== this.na && null === this.key) return !1;
    var b = this.ra;
    b = null === b ? a.ea : b.ta;
    if (null !== b)
      return (this.ra = b), (this.value = this.key = a = b.key), !0;
    this.Xd();
    return !1;
  };
  lb.prototype.ud = function() {
    return this.next();
  };
  lb.prototype.first = function() {
    var a = this.la;
    this.na = a.Ia;
    a = a.ea;
    return null !== a
      ? ((this.ra = a), (this.value = this.key = a = a.key))
      : null;
  };
  lb.prototype.any = function(a) {
    var b = this.la;
    this.ra = null;
    for (b = b.ea; null !== b; ) {
      if (a(b.key)) return !0;
      b = b.ta;
    }
    return !1;
  };
  lb.prototype.all = function(a) {
    var b = this.la;
    this.ra = null;
    for (b = b.ea; null !== b; ) {
      if (!a(b.key)) return !1;
      b = b.ta;
    }
    return !0;
  };
  lb.prototype.each = function(a) {
    var b = this.la;
    this.ra = null;
    for (b = b.ea; null !== b; ) a(b.key), (b = b.ta);
    return this;
  };
  lb.prototype.map = function(a) {
    var b = this.la;
    this.ra = null;
    var c = new E();
    for (b = b.ea; null !== b; ) c.add(a(b.key)), (b = b.ta);
    return c.iterator;
  };
  lb.prototype.filter = function(a) {
    var b = this.la;
    this.ra = null;
    var c = new E();
    for (b = b.ea; null !== b; ) {
      var d = b.key;
      a(d) && c.add(d);
      b = b.ta;
    }
    return c.iterator;
  };
  lb.prototype.Xd = function() {
    this.value = this.key = null;
    this.na = -1;
  };
  lb.prototype.toString = function() {
    return null !== this.ra
      ? 'MapKeySetIterator@' + this.ra.value
      : 'MapKeySetIterator';
  };
  ma.Object.defineProperties(lb.prototype, {
    iterator: {
      get: function() {
        return this;
      },
    },
    count: {
      get: function() {
        return this.la.Ob;
      },
    },
  });
  lb.prototype.first = lb.prototype.first;
  lb.prototype.hasNext = lb.prototype.ud;
  lb.prototype.next = lb.prototype.next;
  lb.prototype.reset = lb.prototype.reset;
  lb.className = 'MapKeySetIterator';

  function mb(a) {
    G.call(this);
    Ra(this);
    this._isFrozen = !0;
    this.la = a;
  }
  la(mb, G);
  t = mb.prototype;
  t.freeze = function() {
    return this;
  };
  t.ja = function() {
    return this;
  };
  t.toString = function() {
    return 'MapKeySet(' + this.la.toString() + ')';
  };
  t.add = function() {
    C('This Set is read-only: ' + this.toString());
  };
  t.contains = function(a) {
    return this.la.contains(a);
  };
  t.has = function(a) {
    return this.contains(a);
  };
  t.remove = function() {
    C('This Set is read-only: ' + this.toString());
  };
  t.delete = function(a) {
    return this.remove(a);
  };
  t.clear = function() {
    C('This Set is read-only: ' + this.toString());
  };
  t.first = function() {
    var a = this.la.ea;
    return null !== a ? a.key : null;
  };
  mb.prototype.any = function(a) {
    for (var b = this.la.ea; null !== b; ) {
      if (a(b.key)) return !0;
      b = b.ta;
    }
    return !1;
  };
  mb.prototype.all = function(a) {
    for (var b = this.la.ea; null !== b; ) {
      if (!a(b.key)) return !1;
      b = b.ta;
    }
    return !0;
  };
  mb.prototype.each = function(a) {
    for (var b = this.la.ea; null !== b; ) a(b.key), (b = b.ta);
    return this;
  };
  mb.prototype.map = function(a) {
    for (var b = new G(), c = this.la.ea; null !== c; )
      b.add(a(c.key)), (c = c.ta);
    return b;
  };
  mb.prototype.filter = function(a) {
    for (var b = new G(), c = this.la.ea; null !== c; ) {
      var d = c.key;
      a(d) && b.add(d);
      c = c.ta;
    }
    return b;
  };
  mb.prototype.copy = function() {
    return new mb(this.la);
  };
  mb.prototype.lv = function() {
    var a = new G(),
      b = this.la.Pb,
      c;
    for (c in b) a.add(b[c].key);
    return a;
  };
  mb.prototype.Ea = function() {
    var a = this.la.Pb,
      b = Array(this.la.Ob),
      c = 0,
      d;
    for (d in a) (b[c] = a[d].key), c++;
    return b;
  };
  mb.prototype.kv = function() {
    var a = new E(),
      b = this.la.Pb,
      c;
    for (c in b) a.add(b[c].key);
    return a;
  };
  ma.Object.defineProperties(mb.prototype, {
    count: {
      get: function() {
        return this.la.Ob;
      },
    },
    size: {
      get: function() {
        return this.la.Ob;
      },
    },
    iterator: {
      get: function() {
        return 0 >= this.la.Ob ? Za : new lb(this.la);
      },
    },
  });
  mb.prototype.toList = mb.prototype.kv;
  mb.prototype.toArray = mb.prototype.Ea;
  mb.prototype.toSet = mb.prototype.lv;
  mb.prototype.first = mb.prototype.first;
  mb.prototype.clear = mb.prototype.clear;
  mb.prototype['delete'] = mb.prototype.delete;
  mb.prototype.remove = mb.prototype.remove;
  mb.prototype.has = mb.prototype.has;
  mb.prototype.contains = mb.prototype.contains;
  mb.prototype.add = mb.prototype.add;
  mb.prototype.thaw = mb.prototype.ja;
  mb.prototype.freeze = mb.prototype.freeze;
  mb.className = 'MapKeySet';

  function nb(a) {
    this.la = a;
    a.Xe = null;
    this.na = a.Ia;
    this.ra = null;
  }
  nb.prototype.reset = function() {
    var a = this.la;
    a.Xe = null;
    this.na = a.Ia;
    this.ra = null;
  };
  nb.prototype.next = function() {
    var a = this.la;
    if (a.Ia !== this.na && null === this.key) return !1;
    var b = this.ra;
    b = null === b ? a.ea : b.ta;
    if (null !== b)
      return (this.ra = b), (this.value = b.value), (this.key = b.key), !0;
    this.Xd();
    return !1;
  };
  nb.prototype.ud = function() {
    return this.next();
  };
  nb.prototype.first = function() {
    var a = this.la;
    this.na = a.Ia;
    a = a.ea;
    if (null !== a) {
      this.ra = a;
      var b = a.value;
      this.key = a.key;
      return (this.value = b);
    }
    return null;
  };
  nb.prototype.any = function(a) {
    var b = this.la;
    this.ra = b.Xe = null;
    for (b = b.ea; null !== b; ) {
      if (a(b.value)) return !0;
      b = b.ta;
    }
    return !1;
  };
  nb.prototype.all = function(a) {
    var b = this.la;
    this.ra = b.Xe = null;
    for (b = b.ea; null !== b; ) {
      if (!a(b.value)) return !1;
      b = b.ta;
    }
    return !0;
  };
  nb.prototype.each = function(a) {
    var b = this.la;
    this.ra = b.Xe = null;
    for (b = b.ea; null !== b; ) a(b.value), (b = b.ta);
    return this;
  };
  nb.prototype.map = function(a) {
    var b = this.la;
    this.ra = b.Xe = null;
    var c = new E();
    for (b = b.ea; null !== b; ) c.add(a(b.value)), (b = b.ta);
    return c.iterator;
  };
  nb.prototype.filter = function(a) {
    var b = this.la;
    this.ra = b.Xe = null;
    var c = new E();
    for (b = b.ea; null !== b; ) {
      var d = b.value;
      a(d) && c.add(d);
      b = b.ta;
    }
    return c.iterator;
  };
  nb.prototype.Xd = function() {
    this.value = this.key = null;
    this.na = -1;
    this.la.Xe = this;
  };
  nb.prototype.toString = function() {
    return null !== this.ra
      ? 'MapValueSetIterator@' + this.ra.value
      : 'MapValueSetIterator';
  };
  ma.Object.defineProperties(nb.prototype, {
    iterator: {
      get: function() {
        return this;
      },
    },
    count: {
      get: function() {
        return this.la.Ob;
      },
    },
  });
  nb.prototype.first = nb.prototype.first;
  nb.prototype.hasNext = nb.prototype.ud;
  nb.prototype.next = nb.prototype.next;
  nb.prototype.reset = nb.prototype.reset;
  nb.className = 'MapValueSetIterator';

  function jb(a, b) {
    this.key = a;
    this.value = b;
    this.al = this.ta = null;
  }
  jb.prototype.toString = function() {
    return '{' + this.key + ':' + this.value + '}';
  };
  jb.className = 'KeyValuePair';

  function ob(a) {
    this.la = a;
    a.Pa = null;
    this.na = a.Ia;
    this.ra = null;
  }
  ob.prototype.reset = function() {
    var a = this.la;
    a.Pa = null;
    this.na = a.Ia;
    this.ra = null;
  };
  ob.prototype.next = function() {
    var a = this.la;
    if (a.Ia !== this.na && null === this.key) return !1;
    var b = this.ra;
    b = null === b ? a.ea : b.ta;
    if (null !== b)
      return (this.ra = b), (this.key = b.key), (this.value = b.value), !0;
    this.Xd();
    return !1;
  };
  ob.prototype.ud = function() {
    return this.next();
  };
  ob.prototype.first = function() {
    var a = this.la;
    this.na = a.Ia;
    a = a.ea;
    return null !== a
      ? ((this.ra = a), (this.key = a.key), (this.value = a.value), a)
      : null;
  };
  ob.prototype.any = function(a) {
    var b = this.la;
    this.ra = b.Pa = null;
    for (b = b.ea; null !== b; ) {
      if (a(b)) return !0;
      b = b.ta;
    }
    return !1;
  };
  ob.prototype.all = function(a) {
    var b = this.la;
    this.ra = b.Pa = null;
    for (b = b.ea; null !== b; ) {
      if (!a(b)) return !1;
      b = b.ta;
    }
    return !0;
  };
  ob.prototype.each = function(a) {
    var b = this.la;
    this.ra = b.Pa = null;
    for (b = b.ea; null !== b; ) a(b), (b = b.ta);
    return this;
  };
  ob.prototype.map = function(a) {
    var b = this.la;
    this.ra = b.Pa = null;
    var c = new E();
    for (b = b.ea; null !== b; ) c.add(a(b)), (b = b.ta);
    return c.iterator;
  };
  ob.prototype.filter = function(a) {
    var b = this.la;
    this.ra = b.Pa = null;
    var c = new E();
    for (b = b.ea; null !== b; ) a(b) && c.add(b), (b = b.ta);
    return c.iterator;
  };
  ob.prototype.Xd = function() {
    this.value = this.key = null;
    this.na = -1;
    this.la.Pa = this;
  };
  ob.prototype.toString = function() {
    return null !== this.ra ? 'MapIterator@' + this.ra : 'MapIterator';
  };
  ma.Object.defineProperties(ob.prototype, {
    iterator: {
      get: function() {
        return this;
      },
    },
    count: {
      get: function() {
        return this.la.Ob;
      },
    },
  });
  ob.prototype.first = ob.prototype.first;
  ob.prototype.hasNext = ob.prototype.ud;
  ob.prototype.next = ob.prototype.next;
  ob.prototype.reset = ob.prototype.reset;
  ob.className = 'MapIterator';

  function pb(a) {
    Ra(this);
    this._isFrozen = !1;
    this.Pb = {};
    this.Ob = 0;
    this.Xe = this.Pa = null;
    this.Ia = 0;
    this.Ye = this.ea = null;
    'string' === typeof a &&
      C(
        'Error: Since 2.0 List/Map/Set constructors no longer take an argument that enforces type.',
      );
    void 0 !== a && this.addAll(a);
  }
  t = pb.prototype;
  t.sb = function() {
    var a = this.Ia;
    a++;
    999999999 < a && (a = 0);
    this.Ia = a;
  };
  t.freeze = function() {
    this._isFrozen = !0;
    return this;
  };
  t.ja = function() {
    this._isFrozen = !1;
    return this;
  };
  t.toString = function() {
    return 'Map()#' + cb(this);
  };
  t.add = function(a, b) {
    this._isFrozen && va(this, a);
    var c = a;
    ya(a) && (c = gb(a));
    var d = this.Pb[c];
    void 0 === d
      ? (this.Ob++,
        (a = new jb(a, b)),
        (this.Pb[c] = a),
        (c = this.Ye),
        null === c ? (this.ea = a) : ((a.al = c), (c.ta = a)),
        (this.Ye = a),
        this.sb())
      : (d.value = b);
    return this;
  };
  t.set = function(a, b) {
    return this.add(a, b);
  };
  t.addAll = function(a) {
    if (null === a) return this;
    if (za(a))
      for (var b = a.length, c = 0; c < b; c++) {
        var d = a[c];
        this.add(d.key, d.value);
      }
    else if (a instanceof pb)
      for (a = a.iterator; a.next(); ) this.add(a.key, a.value);
    else
      for (a = a.iterator; a.next(); ) (b = a.value), this.add(b.key, b.value);
    return this;
  };
  t.first = function() {
    return this.ea;
  };
  pb.prototype.any = function(a) {
    for (var b = this.ea; null !== b; ) {
      if (a(b)) return !0;
      b = b.ta;
    }
    return !1;
  };
  pb.prototype.all = function(a) {
    for (var b = this.ea; null !== b; ) {
      if (!a(b)) return !1;
      b = b.ta;
    }
    return !0;
  };
  pb.prototype.each = function(a) {
    for (var b = this.ea; null !== b; ) a(b), (b = b.ta);
    return this;
  };
  pb.prototype.map = function(a) {
    for (var b = new pb(), c = this.ea; null !== c; )
      b.add(c.key, a(c)), (c = c.ta);
    return b;
  };
  pb.prototype.filter = function(a) {
    for (var b = new pb(), c = this.ea; null !== c; )
      a(c) && b.add(c.key, c.value), (c = c.ta);
    return b;
  };
  t = pb.prototype;
  t.contains = function(a) {
    var b = a;
    return ya(a) && ((b = cb(a)), void 0 === b) ? !1 : void 0 !== this.Pb[b];
  };
  t.has = function(a) {
    return this.contains(a);
  };
  t.I = function(a) {
    var b = a;
    if (ya(a) && ((b = cb(a)), void 0 === b)) return null;
    a = this.Pb[b];
    return void 0 === a ? null : a.value;
  };
  t.get = function(a) {
    return this.I(a);
  };
  t.remove = function(a) {
    if (null === a) return !1;
    this._isFrozen && va(this, a);
    var b = a;
    if (ya(a) && ((b = cb(a)), void 0 === b)) return !1;
    a = this.Pb[b];
    if (void 0 === a) return !1;
    var c = a.ta,
      d = a.al;
    null !== c && (c.al = d);
    null !== d && (d.ta = c);
    this.ea === a && (this.ea = c);
    this.Ye === a && (this.Ye = d);
    delete this.Pb[b];
    this.Ob--;
    this.sb();
    return !0;
  };
  t.delete = function(a) {
    return this.remove(a);
  };
  t.clear = function() {
    this._isFrozen && va(this);
    this.Pb = {};
    this.Ob = 0;
    null !== this.Pa && this.Pa.reset();
    null !== this.Xe && this.Xe.reset();
    this.Ye = this.ea = null;
    this.sb();
  };
  pb.prototype.copy = function() {
    var a = new pb(),
      b = this.Pb,
      c;
    for (c in b) {
      var d = b[c];
      a.add(d.key, d.value);
    }
    return a;
  };
  pb.prototype.Ea = function() {
    var a = this.Pb,
      b = Array(this.Ob),
      c = 0,
      d;
    for (d in a) {
      var e = a[d];
      b[c] = new jb(e.key, e.value);
      c++;
    }
    return b;
  };
  pb.prototype.Cf = function() {
    return new mb(this);
  };
  ma.Object.defineProperties(pb.prototype, {
    count: {
      get: function() {
        return this.Ob;
      },
    },
    size: {
      get: function() {
        return this.Ob;
      },
    },
    iterator: {
      get: function() {
        if (0 >= this.count) return Za;
        var a = this.Pa;
        return null !== a ? (a.reset(), a) : new ob(this);
      },
    },
    iteratorKeys: {
      get: function() {
        return 0 >= this.count ? Za : new lb(this);
      },
    },
    iteratorValues: {
      get: function() {
        if (0 >= this.count) return Za;
        var a = this.Xe;
        return null !== a ? (a.reset(), a) : new nb(this);
      },
    },
  });
  pb.prototype.toKeySet = pb.prototype.Cf;
  pb.prototype.toArray = pb.prototype.Ea;
  pb.prototype.clear = pb.prototype.clear;
  pb.prototype['delete'] = pb.prototype.delete;
  pb.prototype.remove = pb.prototype.remove;
  pb.prototype.get = pb.prototype.get;
  pb.prototype.getValue = pb.prototype.I;
  pb.prototype.has = pb.prototype.has;
  pb.prototype.contains = pb.prototype.contains;
  pb.prototype.first = pb.prototype.first;
  pb.prototype.addAll = pb.prototype.addAll;
  pb.prototype.set = pb.prototype.set;
  pb.prototype.add = pb.prototype.add;
  pb.prototype.thaw = pb.prototype.ja;
  pb.prototype.freeze = pb.prototype.freeze;
  pb.className = 'Map';

  function I(a, b) {
    void 0 === a
      ? (this.y = this.x = 0)
      : 'number' === typeof a && 'number' === typeof b
      ? ((this.x = a), (this.y = b))
      : C('Invalid arguments to Point constructor: ' + a + ', ' + b);
    this._isFrozen = !1;
  }
  var qb, rb, sb, tb, ub;
  I.prototype.assign = function(a) {
    this.x = a.x;
    this.y = a.y;
    return this;
  };
  I.prototype.h = function(a, b) {
    this.x = a;
    this.y = b;
    return this;
  };
  I.prototype.kg = function(a, b) {
    this.x = a;
    this.y = b;
    return this;
  };
  I.prototype.set = function(a) {
    this.x = a.x;
    this.y = a.y;
    return this;
  };
  I.prototype.copy = function() {
    var a = new I();
    a.x = this.x;
    a.y = this.y;
    return a;
  };
  t = I.prototype;
  t.ha = function() {
    this._isFrozen = !0;
    Object.freeze(this);
    return this;
  };
  t.J = function() {
    return this._isFrozen || Object.isFrozen(this)
      ? this
      : this.copy().freeze();
  };
  t.freeze = function() {
    this._isFrozen = !0;
    return this;
  };
  t.ja = function() {
    Object.isFrozen(this) && C('cannot thaw constant: ' + this);
    this._isFrozen = !1;
    return this;
  };

  function vb(a) {
    if ('string' === typeof a) {
      a = a.split(' ');
      for (var b = 0, c = 0; '' === a[b]; ) b++;
      var d = a[b++];
      d && (c = parseFloat(d));
      for (var e = 0; '' === a[b]; ) b++;
      (d = a[b++]) && (e = parseFloat(d));
      return new I(c, e);
    }
    return new I();
  }

  function wb(a) {
    return a.x.toString() + ' ' + a.y.toString();
  }
  t.toString = function() {
    return 'Point(' + this.x + ',' + this.y + ')';
  };
  t.C = function(a) {
    return a instanceof I ? this.x === a.x && this.y === a.y : !1;
  };
  t.bi = function(a, b) {
    return this.x === a && this.y === b;
  };
  t.$a = function(a) {
    return J.B(this.x, a.x) && J.B(this.y, a.y);
  };
  t.add = function(a) {
    this.x += a.x;
    this.y += a.y;
    return this;
  };
  t.je = function(a) {
    this.x -= a.x;
    this.y -= a.y;
    return this;
  };
  t.offset = function(a, b) {
    this.x += a;
    this.y += b;
    return this;
  };
  I.prototype.rotate = function(a) {
    if (0 === a) return this;
    var b = this.x,
      c = this.y;
    if (0 === b && 0 === c) return this;
    360 <= a ? (a -= 360) : 0 > a && (a += 360);
    if (90 === a) {
      a = 0;
      var d = 1;
    } else
      180 === a
        ? ((a = -1), (d = 0))
        : 270 === a
        ? ((a = 0), (d = -1))
        : ((d = (a * Math.PI) / 180), (a = Math.cos(d)), (d = Math.sin(d)));
    this.x = a * b - d * c;
    this.y = d * b + a * c;
    return this;
  };
  t = I.prototype;
  t.scale = function(a, b) {
    this.x *= a;
    this.y *= b;
    return this;
  };
  t.rf = function(a) {
    var b = a.x - this.x;
    a = a.y - this.y;
    return b * b + a * a;
  };
  t.td = function(a, b) {
    a -= this.x;
    b -= this.y;
    return a * a + b * b;
  };
  t.normalize = function() {
    var a = this.x,
      b = this.y,
      c = Math.sqrt(a * a + b * b);
    0 < c && ((this.x = a / c), (this.y = b / c));
    return this;
  };
  t.Ya = function(a) {
    return xb(a.x - this.x, a.y - this.y);
  };
  t.direction = function(a, b) {
    return xb(a - this.x, b - this.y);
  };

  function xb(a, b) {
    if (0 === a) return 0 < b ? 90 : 0 > b ? 270 : 0;
    if (0 === b) return 0 < a ? 0 : 180;
    if (isNaN(a) || isNaN(b)) return 0;
    var c = (180 * Math.atan(Math.abs(b / a))) / Math.PI;
    0 > a ? (c = 0 > b ? c + 180 : 180 - c) : 0 > b && (c = 360 - c);
    return c;
  }
  t.yy = function(a, b) {
    return J.sl(a.x, a.y, b.x, b.y, this.x, this.y);
  };
  t.Mz = function(a, b, c, d) {
    J.fh(a, b, c, d, this.x, this.y, this);
    return this;
  };
  t.Nz = function(a, b) {
    J.fh(a.x, a.y, b.x, b.y, this.x, this.y, this);
    return this;
  };
  t.aA = function(a, b, c, d) {
    J.so(this.x, this.y, a, b, c, d, this);
    return this;
  };
  t.bA = function(a, b) {
    J.so(this.x, this.y, a.x, a.y, b.width, b.height, this);
    return this;
  };
  t.oi = function(a, b) {
    this.x = a.x + b.x * a.width + b.offsetX;
    this.y = a.y + b.y * a.height + b.offsetY;
    return this;
  };
  t.pi = function(a, b, c, d, e) {
    this.x = a + e.x * c + e.offsetX;
    this.y = b + e.y * d + e.offsetY;
    return this;
  };
  t.transform = function(a) {
    a.Fa(this);
    return this;
  };

  function yb(a, b) {
    b.Ld(a);
    return a;
  }

  function zb(a, b, c, d, e, f) {
    var g = e - c,
      h = f - d,
      k = g * g + h * h;
    c -= a;
    d -= b;
    var l = -c * g - d * h;
    if (0 >= l || l >= k)
      return (g = e - a), (h = f - b), Math.min(c * c + d * d, g * g + h * h);
    a = g * d - h * c;
    return (a * a) / k;
  }

  function Ab(a, b, c, d) {
    a = c - a;
    b = d - b;
    return a * a + b * b;
  }

  function Bb(a, b, c, d) {
    a = c - a;
    b = d - b;
    if (0 === a) return 0 < b ? 90 : 0 > b ? 270 : 0;
    if (0 === b) return 0 < a ? 0 : 180;
    if (isNaN(a) || isNaN(b)) return 0;
    d = (180 * Math.atan(Math.abs(b / a))) / Math.PI;
    0 > a ? (d = 0 > b ? d + 180 : 180 - d) : 0 > b && (d = 360 - d);
    return d;
  }
  t.v = function() {
    return isFinite(this.x) && isFinite(this.y);
  };
  I.alloc = function() {
    var a = Cb.pop();
    return void 0 === a ? new I() : a;
  };
  I.allocAt = function(a, b) {
    var c = Cb.pop();
    if (void 0 === c) return new I(a, b);
    c.x = a;
    c.y = b;
    return c;
  };
  I.free = function(a) {
    Cb.push(a);
  };
  I.prototype.isReal = I.prototype.v;
  I.prototype.setSpot = I.prototype.pi;
  I.prototype.setRectSpot = I.prototype.oi;
  I.prototype.snapToGridPoint = I.prototype.bA;
  I.prototype.snapToGrid = I.prototype.aA;
  I.prototype.projectOntoLineSegmentPoint = I.prototype.Nz;
  I.prototype.projectOntoLineSegment = I.prototype.Mz;
  I.intersectingLineSegments = function(a, b, c, d, e, f, g, h) {
    return J.zl(a, b, c, d, e, f, g, h);
  };
  I.prototype.compareWithLineSegmentPoint = I.prototype.yy;
  I.compareWithLineSegment = function(a, b, c, d, e, f) {
    return J.sl(a, b, c, d, e, f);
  };
  I.prototype.direction = I.prototype.direction;
  I.prototype.directionPoint = I.prototype.Ya;
  I.prototype.normalize = I.prototype.normalize;
  I.prototype.distanceSquared = I.prototype.td;
  I.prototype.distanceSquaredPoint = I.prototype.rf;
  I.prototype.scale = I.prototype.scale;
  I.prototype.rotate = I.prototype.rotate;
  I.prototype.offset = I.prototype.offset;
  I.prototype.subtract = I.prototype.je;
  I.prototype.add = I.prototype.add;
  I.prototype.equalsApprox = I.prototype.$a;
  I.prototype.equalTo = I.prototype.bi;
  I.prototype.equals = I.prototype.C;
  I.prototype.set = I.prototype.set;
  I.prototype.setTo = I.prototype.kg;
  var Cb = [];
  I.className = 'Point';
  I.parse = vb;
  I.stringify = wb;
  I.distanceLineSegmentSquared = zb;
  I.distanceSquared = Ab;
  I.direction = Bb;
  I.Origin = qb = new I(0, 0).ha();
  I.InfiniteTopLeft = rb = new I(-Infinity, -Infinity).ha();
  I.InfiniteBottomRight = sb = new I(Infinity, Infinity).ha();
  I.SixPoint = tb = new I(6, 6).ha();
  I.NoPoint = ub = new I(NaN, NaN).ha();
  I.parse = vb;
  I.stringify = wb;
  I.distanceLineSegmentSquared = zb;
  I.distanceSquared = Ab;
  I.direction = Bb;

  function K(a, b) {
    void 0 === a
      ? (this.height = this.width = 0)
      : 'number' === typeof a &&
        (0 <= a || isNaN(a)) &&
        'number' === typeof b &&
        (0 <= b || isNaN(b))
      ? ((this.width = a), (this.height = b))
      : C('Invalid arguments to Size constructor: ' + a + ', ' + b);
    this._isFrozen = !1;
  }
  var Db, Eb, Ib, Jb, Kb, Lb, Mb;
  K.prototype.assign = function(a) {
    this.width = a.width;
    this.height = a.height;
    return this;
  };
  K.prototype.h = function(a, b) {
    this.width = a;
    this.height = b;
    return this;
  };
  K.prototype.kg = function(a, b) {
    this.width = a;
    this.height = b;
    return this;
  };
  K.prototype.set = function(a) {
    this.width = a.width;
    this.height = a.height;
    return this;
  };
  K.prototype.copy = function() {
    var a = new K();
    a.width = this.width;
    a.height = this.height;
    return a;
  };
  t = K.prototype;
  t.ha = function() {
    this._isFrozen = !0;
    Object.freeze(this);
    return this;
  };
  t.J = function() {
    return this._isFrozen || Object.isFrozen(this)
      ? this
      : this.copy().freeze();
  };
  t.freeze = function() {
    this._isFrozen = !0;
    return this;
  };
  t.ja = function() {
    Object.isFrozen(this) && C('cannot thaw constant: ' + this);
    this._isFrozen = !1;
    return this;
  };

  function Nb(a) {
    if ('string' === typeof a) {
      a = a.split(' ');
      for (var b = 0, c = 0; '' === a[b]; ) b++;
      var d = a[b++];
      d && (c = parseFloat(d));
      for (var e = 0; '' === a[b]; ) b++;
      (d = a[b++]) && (e = parseFloat(d));
      return new K(c, e);
    }
    return new K();
  }

  function Ob(a) {
    return a.width.toString() + ' ' + a.height.toString();
  }
  t.toString = function() {
    return 'Size(' + this.width + ',' + this.height + ')';
  };
  t.C = function(a) {
    return a instanceof K
      ? this.width === a.width && this.height === a.height
      : !1;
  };
  t.bi = function(a, b) {
    return this.width === a && this.height === b;
  };
  t.$a = function(a) {
    return J.B(this.width, a.width) && J.B(this.height, a.height);
  };
  t.vc = function(a, b) {
    a = this.width + a;
    this.width = 0 <= a ? a : 0;
    b = this.height + b;
    this.height = 0 <= b ? b : 0;
    return this;
  };
  t.v = function() {
    return isFinite(this.width) && isFinite(this.height);
  };
  K.alloc = function() {
    var a = Pb.pop();
    return void 0 === a ? new K() : a;
  };
  K.free = function(a) {
    Pb.push(a);
  };
  K.prototype.isReal = K.prototype.v;
  K.prototype.inflate = K.prototype.vc;
  K.prototype.equalsApprox = K.prototype.$a;
  K.prototype.equalTo = K.prototype.bi;
  K.prototype.equals = K.prototype.C;
  K.prototype.set = K.prototype.set;
  K.prototype.setTo = K.prototype.kg;
  var Pb = [];
  K.className = 'Size';
  K.parse = Nb;
  K.stringify = Ob;
  K.ZeroSize = Db = new K(0, 0).ha();
  K.OneSize = Eb = new K(1, 1).ha();
  K.SixSize = Ib = new K(6, 6).ha();
  K.EightSize = Jb = new K(8, 8).ha();
  K.TenSize = Kb = new K(10, 10).ha();
  K.InfiniteSize = Lb = new K(Infinity, Infinity).ha();
  K.NoSize = Mb = new K(NaN, NaN).ha();
  K.parse = Nb;
  K.stringify = Ob;

  function M(a, b, c, d) {
    void 0 === a
      ? (this.height = this.width = this.y = this.x = 0)
      : 'number' === typeof a &&
        'number' === typeof b &&
        'number' === typeof c &&
        (0 <= c || isNaN(c)) &&
        'number' === typeof d &&
        (0 <= d || isNaN(d))
      ? ((this.x = a), (this.y = b), (this.width = c), (this.height = d))
      : a instanceof I
      ? ((c = a.x),
        (a = a.y),
        b instanceof I
          ? ((d = b.x),
            (b = b.y),
            (this.x = Math.min(c, d)),
            (this.y = Math.min(a, b)),
            (this.width = Math.abs(c - d)),
            (this.height = Math.abs(a - b)))
          : b instanceof K
          ? ((this.x = c),
            (this.y = a),
            (this.width = b.width),
            (this.height = b.height))
          : C('Incorrect second argument supplied to Rect constructor ' + b))
      : C(
          'Invalid arguments to Rect constructor: ' +
            a +
            ', ' +
            b +
            ', ' +
            c +
            ', ' +
            d,
        );
    this._isFrozen = !1;
  }
  t = M.prototype;
  t.assign = function(a) {
    this.x = a.x;
    this.y = a.y;
    this.width = a.width;
    this.height = a.height;
    return this;
  };
  t.h = function(a, b, c, d) {
    this.x = a;
    this.y = b;
    this.width = c;
    this.height = d;
    return this;
  };

  function Qb(a, b, c) {
    a.width = b;
    a.height = c;
  }
  t.kg = function(a, b, c, d) {
    this.x = a;
    this.y = b;
    this.width = c;
    this.height = d;
    return this;
  };
  t.set = function(a) {
    this.x = a.x;
    this.y = a.y;
    this.width = a.width;
    this.height = a.height;
    return this;
  };
  t.Wc = function(a) {
    this.x = a.x;
    this.y = a.y;
    return this;
  };
  t.$z = function(a) {
    this.width = a.width;
    this.height = a.height;
    return this;
  };
  M.prototype.copy = function() {
    var a = new M();
    a.x = this.x;
    a.y = this.y;
    a.width = this.width;
    a.height = this.height;
    return a;
  };
  t = M.prototype;
  t.ha = function() {
    this._isFrozen = !0;
    Object.freeze(this);
    return this;
  };
  t.J = function() {
    return this._isFrozen || Object.isFrozen(this)
      ? this
      : this.copy().freeze();
  };
  t.freeze = function() {
    this._isFrozen = !0;
    return this;
  };
  t.ja = function() {
    Object.isFrozen(this) && C('cannot thaw constant: ' + this);
    this._isFrozen = !1;
    return this;
  };

  function Rb(a) {
    if ('string' === typeof a) {
      a = a.split(' ');
      for (var b = 0, c = 0; '' === a[b]; ) b++;
      var d = a[b++];
      d && (c = parseFloat(d));
      for (var e = 0; '' === a[b]; ) b++;
      (d = a[b++]) && (e = parseFloat(d));
      for (var f = 0; '' === a[b]; ) b++;
      (d = a[b++]) && (f = parseFloat(d));
      for (var g = 0; '' === a[b]; ) b++;
      (d = a[b++]) && (g = parseFloat(d));
      return new M(c, e, f, g);
    }
    return new M();
  }

  function Sb(a) {
    return (
      a.x.toString() +
      ' ' +
      a.y.toString() +
      ' ' +
      a.width.toString() +
      ' ' +
      a.height.toString()
    );
  }
  t.toString = function() {
    return (
      'Rect(' +
      this.x +
      ',' +
      this.y +
      ',' +
      this.width +
      ',' +
      this.height +
      ')'
    );
  };
  t.C = function(a) {
    return a instanceof M
      ? this.x === a.x &&
          this.y === a.y &&
          this.width === a.width &&
          this.height === a.height
      : !1;
  };
  t.bi = function(a, b, c, d) {
    return (
      this.x === a && this.y === b && this.width === c && this.height === d
    );
  };
  t.$a = function(a) {
    return (
      J.B(this.x, a.x) &&
      J.B(this.y, a.y) &&
      J.B(this.width, a.width) &&
      J.B(this.height, a.height)
    );
  };

  function Tb(a, b) {
    return (
      J.ca(a.x, b.x) &&
      J.ca(a.y, b.y) &&
      J.ca(a.width, b.width) &&
      J.ca(a.height, b.height)
    );
  }
  t.ba = function(a) {
    return (
      this.x <= a.x &&
      this.x + this.width >= a.x &&
      this.y <= a.y &&
      this.y + this.height >= a.y
    );
  };
  t.Ee = function(a) {
    return (
      this.x <= a.x &&
      a.x + a.width <= this.x + this.width &&
      this.y <= a.y &&
      a.y + a.height <= this.y + this.height
    );
  };
  t.contains = function(a, b, c, d) {
    void 0 === c && (c = 0);
    void 0 === d && (d = 0);
    return (
      this.x <= a &&
      a + c <= this.x + this.width &&
      this.y <= b &&
      b + d <= this.y + this.height
    );
  };
  t.offset = function(a, b) {
    this.x += a;
    this.y += b;
    return this;
  };
  t.vc = function(a, b) {
    return Ub(this, b, a, b, a);
  };
  t.fo = function(a) {
    return Ub(this, a.top, a.right, a.bottom, a.left);
  };
  t.jv = function(a) {
    return Ub(this, -a.top, -a.right, -a.bottom, -a.left);
  };
  t.oz = function(a, b, c, d) {
    return Ub(this, a, b, c, d);
  };

  function Ub(a, b, c, d, e) {
    var f = a.width;
    c + e <= -f
      ? ((a.x += f / 2), (a.width = 0))
      : ((a.x -= e), (a.width += c + e));
    c = a.height;
    b + d <= -c
      ? ((a.y += c / 2), (a.height = 0))
      : ((a.y -= b), (a.height += b + d));
    return a;
  }
  t.ix = function(a) {
    return Xb(this, a.x, a.y, a.width, a.height);
  };
  t.Gu = function(a, b, c, d) {
    return Xb(this, a, b, c, d);
  };

  function Xb(a, b, c, d, e) {
    var f = Math.max(a.x, b),
      g = Math.max(a.y, c);
    b = Math.min(a.x + a.width, b + d);
    c = Math.min(a.y + a.height, c + e);
    a.x = f;
    a.y = g;
    a.width = Math.max(0, b - f);
    a.height = Math.max(0, c - g);
    return a;
  }
  t.Sc = function(a) {
    return this.Hu(a.x, a.y, a.width, a.height);
  };
  t.Hu = function(a, b, c, d) {
    var e = this.width,
      f = this.x;
    if (
      Infinity !== e &&
      Infinity !== c &&
      ((e += f), (c += a), isNaN(c) || isNaN(e) || f > c || a > e)
    )
      return !1;
    a = this.height;
    c = this.y;
    return Infinity !== a &&
      Infinity !== d &&
      ((a += c), (d += b), isNaN(d) || isNaN(a) || c > d || b > a)
      ? !1
      : !0;
  };

  function Yb(a, b) {
    var c = a.width,
      d = a.x,
      e = b.x - 10;
    if (d > b.width + 10 + 10 + e || e > c + d) return !1;
    c = a.height;
    a = a.y;
    d = b.y - 10;
    return a > b.height + 10 + 10 + d || d > c + a ? !1 : !0;
  }
  t.Me = function(a) {
    return Zb(this, a.x, a.y, 0, 0);
  };
  t.Xc = function(a) {
    return Zb(this, a.x, a.y, a.width, a.height);
  };
  t.nv = function(a, b, c, d) {
    void 0 === c && (c = 0);
    void 0 === d && (d = 0);
    return Zb(this, a, b, c, d);
  };

  function Zb(a, b, c, d, e) {
    var f = Math.min(a.x, b),
      g = Math.min(a.y, c);
    b = Math.max(a.x + a.width, b + d);
    c = Math.max(a.y + a.height, c + e);
    a.x = f;
    a.y = g;
    a.width = b - f;
    a.height = c - g;
    return a;
  }
  t.pi = function(a, b, c) {
    this.x = a - c.offsetX - c.x * this.width;
    this.y = b - c.offsetY - c.y * this.height;
    return this;
  };

  function $b(a, b, c, d, e, f, g, h) {
    void 0 === g && (g = 0);
    void 0 === h && (h = 0);
    return a <= e && e + g <= a + c && b <= f && f + h <= b + d;
  }

  function ac(a, b, c, d, e, f, g, h) {
    return a > g + e || e > c + a ? !1 : b > h + f || f > d + b ? !1 : !0;
  }
  t.v = function() {
    return (
      isFinite(this.x) &&
      isFinite(this.y) &&
      isFinite(this.width) &&
      isFinite(this.height)
    );
  };
  t.vz = function() {
    return 0 === this.width && 0 === this.height;
  };
  M.alloc = function() {
    var a = bc.pop();
    return void 0 === a ? new M() : a;
  };
  M.allocAt = function(a, b, c, d) {
    var e = bc.pop();
    return void 0 === e ? new M(a, b, c, d) : e.h(a, b, c, d);
  };
  M.free = function(a) {
    bc.push(a);
  };
  ma.Object.defineProperties(M.prototype, {
    left: {
      get: function() {
        return this.x;
      },
      set: function(a) {
        this.x = a;
      },
    },
    top: {
      get: function() {
        return this.y;
      },
      set: function(a) {
        this.y = a;
      },
    },
    right: {
      get: function() {
        return this.x + this.width;
      },
      set: function(a) {
        this.x += a - (this.x + this.width);
      },
    },
    bottom: {
      get: function() {
        return this.y + this.height;
      },
      set: function(a) {
        this.y += a - (this.y + this.height);
      },
    },
    position: {
      get: function() {
        return new I(this.x, this.y);
      },
      set: function(a) {
        this.x = a.x;
        this.y = a.y;
      },
    },
    size: {
      get: function() {
        return new K(this.width, this.height);
      },
      set: function(a) {
        this.width = a.width;
        this.height = a.height;
      },
    },
    center: {
      get: function() {
        return new I(this.x + this.width / 2, this.y + this.height / 2);
      },
      set: function(a) {
        this.x = a.x - this.width / 2;
        this.y = a.y - this.height / 2;
      },
    },
    centerX: {
      get: function() {
        return this.x + this.width / 2;
      },
      set: function(a) {
        this.x = a - this.width / 2;
      },
    },
    centerY: {
      get: function() {
        return this.y + this.height / 2;
      },
      set: function(a) {
        this.y = a - this.height / 2;
      },
    },
  });
  M.prototype.isEmpty = M.prototype.vz;
  M.prototype.isReal = M.prototype.v;
  M.intersectsLineSegment = function(a, b, c, d, e, f, g, h) {
    return J.jx(a, b, c, d, e, f, g, h);
  };
  M.prototype.setSpot = M.prototype.pi;
  M.prototype.union = M.prototype.nv;
  M.prototype.unionRect = M.prototype.Xc;
  M.prototype.unionPoint = M.prototype.Me;
  M.prototype.intersects = M.prototype.Hu;
  M.prototype.intersectsRect = M.prototype.Sc;
  M.prototype.intersect = M.prototype.Gu;
  M.prototype.intersectRect = M.prototype.ix;
  M.prototype.grow = M.prototype.oz;
  M.prototype.subtractMargin = M.prototype.jv;
  M.prototype.addMargin = M.prototype.fo;
  M.prototype.inflate = M.prototype.vc;
  M.prototype.offset = M.prototype.offset;
  M.prototype.contains = M.prototype.contains;
  M.prototype.containsRect = M.prototype.Ee;
  M.prototype.containsPoint = M.prototype.ba;
  M.prototype.equalsApprox = M.prototype.$a;
  M.prototype.equalTo = M.prototype.bi;
  M.prototype.equals = M.prototype.C;
  M.prototype.setSize = M.prototype.$z;
  M.prototype.setPoint = M.prototype.Wc;
  M.prototype.set = M.prototype.set;
  M.prototype.setTo = M.prototype.kg;
  var cc = null,
    dc = null,
    bc = [];
  M.className = 'Rect';
  M.parse = Rb;
  M.stringify = Sb;
  M.contains = $b;
  M.intersects = ac;
  M.ZeroRect = cc = new M(0, 0, 0, 0).ha();
  M.NoRect = dc = new M(NaN, NaN, NaN, NaN).ha();
  M.parse = Rb;
  M.stringify = Sb;
  M.contains = $b;
  M.intersects = ac;

  function ec(a, b, c, d) {
    void 0 === a
      ? (this.left = this.bottom = this.right = this.top = 0)
      : void 0 === b
      ? (this.left = this.bottom = this.right = this.top = a)
      : void 0 === c
      ? ((this.top = a), (this.right = b), (this.bottom = a), (this.left = b))
      : void 0 !== d
      ? ((this.top = a), (this.right = b), (this.bottom = c), (this.left = d))
      : C(
          'Invalid arguments to Margin constructor: ' +
            a +
            ', ' +
            b +
            ', ' +
            c +
            ', ' +
            d,
        );
    this._isFrozen = !1;
  }
  ec.prototype.assign = function(a) {
    this.top = a.top;
    this.right = a.right;
    this.bottom = a.bottom;
    this.left = a.left;
    return this;
  };
  ec.prototype.kg = function(a, b, c, d) {
    this.top = a;
    this.right = b;
    this.bottom = c;
    this.left = d;
    return this;
  };
  ec.prototype.set = function(a) {
    this.top = a.top;
    this.right = a.right;
    this.bottom = a.bottom;
    this.left = a.left;
    return this;
  };
  ec.prototype.copy = function() {
    var a = new ec();
    a.top = this.top;
    a.right = this.right;
    a.bottom = this.bottom;
    a.left = this.left;
    return a;
  };
  t = ec.prototype;
  t.ha = function() {
    this._isFrozen = !0;
    Object.freeze(this);
    return this;
  };
  t.J = function() {
    return this._isFrozen || Object.isFrozen(this)
      ? this
      : this.copy().freeze();
  };
  t.freeze = function() {
    this._isFrozen = !0;
    return this;
  };
  t.ja = function() {
    Object.isFrozen(this) && C('cannot thaw constant: ' + this);
    this._isFrozen = !1;
    return this;
  };

  function jc(a) {
    if ('string' === typeof a) {
      a = a.split(' ');
      for (var b = 0, c = NaN; '' === a[b]; ) b++;
      var d = a[b++];
      d && (c = parseFloat(d));
      if (isNaN(c)) return new ec();
      for (var e = NaN; '' === a[b]; ) b++;
      (d = a[b++]) && (e = parseFloat(d));
      if (isNaN(e)) return new ec(c);
      for (var f = NaN; '' === a[b]; ) b++;
      (d = a[b++]) && (f = parseFloat(d));
      if (isNaN(f)) return new ec(c, e);
      for (var g = NaN; '' === a[b]; ) b++;
      (d = a[b++]) && (g = parseFloat(d));
      return isNaN(g) ? new ec(c, e) : new ec(c, e, f, g);
    }
    return new ec();
  }

  function kc(a) {
    return (
      a.top.toString() +
      ' ' +
      a.right.toString() +
      ' ' +
      a.bottom.toString() +
      ' ' +
      a.left.toString()
    );
  }
  t.toString = function() {
    return (
      'Margin(' +
      this.top +
      ',' +
      this.right +
      ',' +
      this.bottom +
      ',' +
      this.left +
      ')'
    );
  };
  t.C = function(a) {
    return a instanceof ec
      ? this.top === a.top &&
          this.right === a.right &&
          this.bottom === a.bottom &&
          this.left === a.left
      : !1;
  };
  t.bi = function(a, b, c, d) {
    return (
      this.top === a && this.right === b && this.bottom === c && this.left === d
    );
  };
  t.$a = function(a) {
    return (
      J.B(this.top, a.top) &&
      J.B(this.right, a.right) &&
      J.B(this.bottom, a.bottom) &&
      J.B(this.left, a.left)
    );
  };
  t.v = function() {
    return (
      isFinite(this.top) &&
      isFinite(this.right) &&
      isFinite(this.bottom) &&
      isFinite(this.left)
    );
  };
  ec.alloc = function() {
    var a = pc.pop();
    return void 0 === a ? new ec() : a;
  };
  ec.free = function(a) {
    pc.push(a);
  };
  ec.prototype.isReal = ec.prototype.v;
  ec.prototype.equalsApprox = ec.prototype.$a;
  ec.prototype.equalTo = ec.prototype.bi;
  ec.prototype.equals = ec.prototype.C;
  ec.prototype.set = ec.prototype.set;
  ec.prototype.setTo = ec.prototype.kg;
  var qc = null,
    rc = null,
    pc = [];
  ec.className = 'Margin';
  ec.parse = jc;
  ec.stringify = kc;
  ec.ZeroMargin = qc = new ec(0, 0, 0, 0).ha();
  ec.TwoMargin = rc = new ec(2, 2, 2, 2).ha();
  ec.parse = jc;
  ec.stringify = kc;

  function N(a, b, c, d) {
    void 0 === a
      ? (this.offsetY = this.offsetX = this.y = this.x = 0)
      : (void 0 === b && (b = 0),
        void 0 === c && (c = 0),
        void 0 === d && (d = 0),
        (this.x = a),
        (this.y = b),
        (this.offsetX = c),
        (this.offsetY = d));
    this._isFrozen = !1;
  }
  var sc,
    tc,
    uc,
    vc,
    xc,
    yc,
    zc,
    Ac,
    Bc,
    Cc,
    Dc,
    Ec,
    Gc,
    Hc,
    Ic,
    Jc,
    Kc,
    Lc,
    Mc,
    Nc,
    Oc,
    Pc,
    Qc,
    Uc,
    Vc,
    Wc,
    Xc,
    Yc,
    Zc,
    $c,
    ad,
    dd,
    ed,
    fd,
    gd,
    hd;
  N.prototype.assign = function(a) {
    this.x = a.x;
    this.y = a.y;
    this.offsetX = a.offsetX;
    this.offsetY = a.offsetY;
    return this;
  };
  N.prototype.kg = function(a, b, c, d) {
    this.x = a;
    this.y = b;
    this.offsetX = c;
    this.offsetY = d;
    return this;
  };
  N.prototype.set = function(a) {
    this.x = a.x;
    this.y = a.y;
    this.offsetX = a.offsetX;
    this.offsetY = a.offsetY;
    return this;
  };
  N.prototype.copy = function() {
    var a = new N();
    a.x = this.x;
    a.y = this.y;
    a.offsetX = this.offsetX;
    a.offsetY = this.offsetY;
    return a;
  };
  t = N.prototype;
  t.ha = function() {
    this._isFrozen = !0;
    Object.freeze(this);
    return this;
  };
  t.J = function() {
    return this._isFrozen || Object.isFrozen(this)
      ? this
      : this.copy().freeze();
  };
  t.freeze = function() {
    this._isFrozen = !0;
    return this;
  };
  t.ja = function() {
    Object.isFrozen(this) && C('cannot thaw constant: ' + this);
    this._isFrozen = !1;
    return this;
  };

  function id(a, b) {
    a.x = NaN;
    a.y = NaN;
    a.offsetX = b;
    return a;
  }

  function jd(a) {
    if ('string' === typeof a) {
      a = a.trim();
      if ('None' === a) return sc;
      if ('TopLeft' === a) return tc;
      if ('Top' === a || 'TopCenter' === a || 'MiddleTop' === a) return uc;
      if ('TopRight' === a) return vc;
      if ('Left' === a || 'LeftCenter' === a || 'MiddleLeft' === a) return xc;
      if ('Center' === a) return yc;
      if ('Right' === a || 'RightCenter' === a || 'MiddleRight' === a)
        return zc;
      if ('BottomLeft' === a) return Ac;
      if ('Bottom' === a || 'BottomCenter' === a || 'MiddleBottom' === a)
        return Bc;
      if ('BottomRight' === a) return Cc;
      if ('TopSide' === a) return Dc;
      if ('LeftSide' === a) return Ec;
      if ('RightSide' === a) return Gc;
      if ('BottomSide' === a) return Hc;
      if ('TopBottomSides' === a) return Ic;
      if ('LeftRightSides' === a) return Jc;
      if ('TopLeftSides' === a) return Kc;
      if ('TopRightSides' === a) return Lc;
      if ('BottomLeftSides' === a) return Mc;
      if ('BottomRightSides' === a) return Nc;
      if ('NotTopSide' === a) return Oc;
      if ('NotLeftSide' === a) return Pc;
      if ('NotRightSide' === a) return Qc;
      if ('NotBottomSide' === a) return Uc;
      if ('AllSides' === a) return Vc;
      if ('Default' === a) return Wc;
      a = a.split(' ');
      for (var b = 0, c = 0; '' === a[b]; ) b++;
      var d = a[b++];
      void 0 !== d && 0 < d.length && (c = parseFloat(d));
      for (var e = 0; '' === a[b]; ) b++;
      d = a[b++];
      void 0 !== d && 0 < d.length && (e = parseFloat(d));
      for (var f = 0; '' === a[b]; ) b++;
      d = a[b++];
      void 0 !== d && 0 < d.length && (f = parseFloat(d));
      for (var g = 0; '' === a[b]; ) b++;
      d = a[b++];
      void 0 !== d && 0 < d.length && (g = parseFloat(d));
      return new N(c, e, f, g);
    }
    return new N();
  }

  function kd(a) {
    return a.pb()
      ? a.x.toString() +
          ' ' +
          a.y.toString() +
          ' ' +
          a.offsetX.toString() +
          ' ' +
          a.offsetY.toString()
      : a.toString();
  }
  t.toString = function() {
    return this.pb()
      ? 0 === this.offsetX && 0 === this.offsetY
        ? 'Spot(' + this.x + ',' + this.y + ')'
        : 'Spot(' +
          this.x +
          ',' +
          this.y +
          ',' +
          this.offsetX +
          ',' +
          this.offsetY +
          ')'
      : this.C(sc)
      ? 'None'
      : this.C(tc)
      ? 'TopLeft'
      : this.C(uc)
      ? 'Top'
      : this.C(vc)
      ? 'TopRight'
      : this.C(xc)
      ? 'Left'
      : this.C(yc)
      ? 'Center'
      : this.C(zc)
      ? 'Right'
      : this.C(Ac)
      ? 'BottomLeft'
      : this.C(Bc)
      ? 'Bottom'
      : this.C(Cc)
      ? 'BottomRight'
      : this.C(Dc)
      ? 'TopSide'
      : this.C(Ec)
      ? 'LeftSide'
      : this.C(Gc)
      ? 'RightSide'
      : this.C(Hc)
      ? 'BottomSide'
      : this.C(Ic)
      ? 'TopBottomSides'
      : this.C(Jc)
      ? 'LeftRightSides'
      : this.C(Kc)
      ? 'TopLeftSides'
      : this.C(Lc)
      ? 'TopRightSides'
      : this.C(Mc)
      ? 'BottomLeftSides'
      : this.C(Nc)
      ? 'BottomRightSides'
      : this.C(Oc)
      ? 'NotTopSide'
      : this.C(Pc)
      ? 'NotLeftSide'
      : this.C(Qc)
      ? 'NotRightSide'
      : this.C(Uc)
      ? 'NotBottomSide'
      : this.C(Vc)
      ? 'AllSides'
      : this.C(Wc)
      ? 'Default'
      : 'None';
  };
  t.C = function(a) {
    return a instanceof N
      ? (this.x === a.x || (isNaN(this.x) && isNaN(a.x))) &&
          (this.y === a.y || (isNaN(this.y) && isNaN(a.y))) &&
          this.offsetX === a.offsetX &&
          this.offsetY === a.offsetY
      : !1;
  };
  t.Qu = function() {
    return new N(
      0.5 - (this.x - 0.5),
      0.5 - (this.y - 0.5),
      -this.offsetX,
      -this.offsetY,
    );
  };
  t.xf = function(a) {
    if (!this.Uc()) return !1;
    if (!a.Uc())
      if (a.C(Xc)) a = Ec;
      else if (a.C(Yc)) a = Gc;
      else if (a.C(Zc)) a = Dc;
      else if (a.C($c)) a = Hc;
      else return !1;
    a = a.offsetY;
    return (this.offsetY & a) === a;
  };
  t.pb = function() {
    return !isNaN(this.x) && !isNaN(this.y);
  };
  t.Fc = function() {
    return isNaN(this.x) || isNaN(this.y);
  };
  t.Uc = function() {
    return (
      isNaN(this.x) && isNaN(this.y) && 1 === this.offsetX && 0 !== this.offsetY
    );
  };
  t.Wr = function() {
    return (
      isNaN(this.x) && isNaN(this.y) && 0 === this.offsetX && 0 === this.offsetY
    );
  };
  t.Sb = function() {
    return (
      isNaN(this.x) &&
      isNaN(this.y) &&
      -1 === this.offsetX &&
      0 === this.offsetY
    );
  };
  N.alloc = function() {
    var a = ld.pop();
    return void 0 === a ? new N() : a;
  };
  N.free = function(a) {
    ld.push(a);
  };
  N.prototype.isDefault = N.prototype.Sb;
  N.prototype.isNone = N.prototype.Wr;
  N.prototype.isSide = N.prototype.Uc;
  N.prototype.isNoSpot = N.prototype.Fc;
  N.prototype.isSpot = N.prototype.pb;
  N.prototype.includesSide = N.prototype.xf;
  N.prototype.opposite = N.prototype.Qu;
  N.prototype.equals = N.prototype.C;
  N.prototype.set = N.prototype.set;
  N.prototype.setTo = N.prototype.kg;
  var ld = [];
  N.className = 'Spot';
  N.parse = jd;
  N.stringify = kd;
  N.None = sc = id(new N(0, 0, 0, 0), 0).ha();
  N.Default = Wc = id(new N(0, 0, -1, 0), -1).ha();
  N.TopLeft = tc = new N(0, 0, 0, 0).ha();
  N.TopCenter = uc = new N(0.5, 0, 0, 0).ha();
  N.TopRight = vc = new N(1, 0, 0, 0).ha();
  N.LeftCenter = xc = new N(0, 0.5, 0, 0).ha();
  N.Center = yc = new N(0.5, 0.5, 0, 0).ha();
  N.RightCenter = zc = new N(1, 0.5, 0, 0).ha();
  N.BottomLeft = Ac = new N(0, 1, 0, 0).ha();
  N.BottomCenter = Bc = new N(0.5, 1, 0, 0).ha();
  N.BottomRight = Cc = new N(1, 1, 0, 0).ha();
  N.MiddleTop = ad = uc;
  N.MiddleLeft = dd = xc;
  N.MiddleRight = ed = zc;
  N.MiddleBottom = fd = Bc;
  N.Top = Zc = uc;
  N.Left = Xc = xc;
  N.Right = Yc = zc;
  N.Bottom = $c = Bc;
  N.TopSide = Dc = id(new N(0, 0, 1, 1), 1).ha();
  N.LeftSide = Ec = id(new N(0, 0, 1, 2), 1).ha();
  N.RightSide = Gc = id(new N(0, 0, 1, 4), 1).ha();
  N.BottomSide = Hc = id(new N(0, 0, 1, 8), 1).ha();
  N.TopBottomSides = Ic = id(new N(0, 0, 1, 9), 1).ha();
  N.LeftRightSides = Jc = id(new N(0, 0, 1, 6), 1).ha();
  N.TopLeftSides = Kc = id(new N(0, 0, 1, 3), 1).ha();
  N.TopRightSides = Lc = id(new N(0, 0, 1, 5), 1).ha();
  N.BottomLeftSides = Mc = id(new N(0, 0, 1, 10), 1).ha();
  N.BottomRightSides = Nc = id(new N(0, 0, 1, 12), 1).ha();
  N.NotTopSide = Oc = id(new N(0, 0, 1, 14), 1).ha();
  N.NotLeftSide = Pc = id(new N(0, 0, 1, 13), 1).ha();
  N.NotRightSide = Qc = id(new N(0, 0, 1, 11), 1).ha();
  N.NotBottomSide = Uc = id(new N(0, 0, 1, 7), 1).ha();
  N.AllSides = Vc = id(new N(0, 0, 1, 15), 1).ha();
  gd = new N(0.156, 0.156).ha();
  hd = new N(0.844, 0.844).ha();
  N.parse = jd;
  N.stringify = kd;

  function md() {
    this.m11 = 1;
    this.m21 = this.m12 = 0;
    this.m22 = 1;
    this.dy = this.dx = 0;
  }
  md.prototype.set = function(a) {
    this.m11 = a.m11;
    this.m12 = a.m12;
    this.m21 = a.m21;
    this.m22 = a.m22;
    this.dx = a.dx;
    this.dy = a.dy;
    return this;
  };
  md.prototype.setTransform = function(a, b, c, d, e, f) {
    this.m11 = a;
    this.m12 = b;
    this.m21 = c;
    this.m22 = d;
    this.dx = e;
    this.dy = f;
    return this;
  };
  md.prototype.copy = function() {
    var a = new md();
    a.m11 = this.m11;
    a.m12 = this.m12;
    a.m21 = this.m21;
    a.m22 = this.m22;
    a.dx = this.dx;
    a.dy = this.dy;
    return a;
  };
  md.prototype.toString = function() {
    return (
      'Transform(' +
      this.m11 +
      ',' +
      this.m12 +
      ',' +
      this.m21 +
      ',' +
      this.m22 +
      ',' +
      this.dx +
      ',' +
      this.dy +
      ')'
    );
  };
  md.prototype.C = function(a) {
    return (
      this.m11 === a.m11 &&
      this.m12 === a.m12 &&
      this.m21 === a.m21 &&
      this.m22 === a.m22 &&
      this.dx === a.dx &&
      this.dy === a.dy
    );
  };
  md.prototype.Ur = function() {
    return (
      0 === this.dx &&
      0 === this.dy &&
      1 === this.m11 &&
      0 === this.m12 &&
      0 === this.m21 &&
      1 === this.m22
    );
  };
  md.prototype.reset = function() {
    this.m11 = 1;
    this.m21 = this.m12 = 0;
    this.m22 = 1;
    this.dy = this.dx = 0;
    return this;
  };
  md.prototype.multiply = function(a) {
    var b = this.m11 * a.m11 + this.m21 * a.m12,
      c = this.m12 * a.m11 + this.m22 * a.m12,
      d = this.m11 * a.m21 + this.m21 * a.m22,
      e = this.m12 * a.m21 + this.m22 * a.m22;
    this.dx = this.m11 * a.dx + this.m21 * a.dy + this.dx;
    this.dy = this.m12 * a.dx + this.m22 * a.dy + this.dy;
    this.m11 = b;
    this.m12 = c;
    this.m21 = d;
    this.m22 = e;
    return this;
  };
  md.prototype.Ou = function(a) {
    var b = 1 / (a.m11 * a.m22 - a.m12 * a.m21),
      c = a.m22 * b,
      d = -a.m12 * b,
      e = -a.m21 * b,
      f = a.m11 * b,
      g = b * (a.m21 * a.dy - a.m22 * a.dx);
    a = b * (a.m12 * a.dx - a.m11 * a.dy);
    b = this.m11 * c + this.m21 * d;
    c = this.m12 * c + this.m22 * d;
    d = this.m11 * e + this.m21 * f;
    e = this.m12 * e + this.m22 * f;
    this.dx = this.m11 * g + this.m21 * a + this.dx;
    this.dy = this.m12 * g + this.m22 * a + this.dy;
    this.m11 = b;
    this.m12 = c;
    this.m21 = d;
    this.m22 = e;
    return this;
  };
  md.prototype.Tr = function() {
    var a = 1 / (this.m11 * this.m22 - this.m12 * this.m21),
      b = -this.m12 * a,
      c = -this.m21 * a,
      d = this.m11 * a,
      e = a * (this.m21 * this.dy - this.m22 * this.dx),
      f = a * (this.m12 * this.dx - this.m11 * this.dy);
    this.m11 = this.m22 * a;
    this.m12 = b;
    this.m21 = c;
    this.m22 = d;
    this.dx = e;
    this.dy = f;
    return this;
  };
  md.prototype.rotate = function(a, b, c) {
    360 <= a ? (a -= 360) : 0 > a && (a += 360);
    if (0 === a) return this;
    this.translate(b, c);
    if (90 === a) {
      a = 0;
      var d = 1;
    } else
      180 === a
        ? ((a = -1), (d = 0))
        : 270 === a
        ? ((a = 0), (d = -1))
        : ((d = (a * Math.PI) / 180), (a = Math.cos(d)), (d = Math.sin(d)));
    var e = this.m12 * a + this.m22 * d,
      f = this.m11 * -d + this.m21 * a,
      g = this.m12 * -d + this.m22 * a;
    this.m11 = this.m11 * a + this.m21 * d;
    this.m12 = e;
    this.m21 = f;
    this.m22 = g;
    this.translate(-b, -c);
    return this;
  };
  t = md.prototype;
  t.translate = function(a, b) {
    this.dx += this.m11 * a + this.m21 * b;
    this.dy += this.m12 * a + this.m22 * b;
    return this;
  };
  t.scale = function(a, b) {
    void 0 === b && (b = a);
    this.m11 *= a;
    this.m12 *= a;
    this.m21 *= b;
    this.m22 *= b;
    return this;
  };
  t.Fa = function(a) {
    var b = a.x,
      c = a.y;
    return a.h(
      b * this.m11 + c * this.m21 + this.dx,
      b * this.m12 + c * this.m22 + this.dy,
    );
  };
  t.Ld = function(a) {
    var b = 1 / (this.m11 * this.m22 - this.m12 * this.m21),
      c = a.x,
      d = a.y;
    return a.h(
      c * this.m22 * b +
        d * -this.m21 * b +
        b * (this.m21 * this.dy - this.m22 * this.dx),
      c * -this.m12 * b +
        d * this.m11 * b +
        b * (this.m12 * this.dx - this.m11 * this.dy),
    );
  };
  t.Fw = function(a) {
    var b = 1 / (this.m11 * this.m22 - this.m12 * this.m21),
      c = 1.25 * a.x,
      d = 1.2 * a.y;
    return a.h(
      c * this.m22 * b +
        d * -this.m21 * b +
        b * (this.m21 * this.dy - this.m22 * this.dx),
      c * -this.m12 * b +
        d * this.m11 * b +
        b * (this.m12 * this.dx - this.m11 * this.dy),
    );
  };
  t.So = function(a) {
    var b = a.x,
      c = a.y,
      d = b + a.width,
      e = c + a.height,
      f = this.m11,
      g = this.m12,
      h = this.m21,
      k = this.m22,
      l = this.dx,
      m = this.dy,
      n = b * f + c * h + l,
      p = b * g + c * k + m,
      r = d * f + c * h + l,
      q = d * g + c * k + m;
    c = b * f + e * h + l;
    b = b * g + e * k + m;
    f = d * f + e * h + l;
    d = d * g + e * k + m;
    e = Math.min(n, r);
    n = Math.max(n, r);
    r = Math.min(p, q);
    p = Math.max(p, q);
    e = Math.min(e, c);
    n = Math.max(n, c);
    r = Math.min(r, b);
    p = Math.max(p, b);
    e = Math.min(e, f);
    n = Math.max(n, f);
    r = Math.min(r, d);
    p = Math.max(p, d);
    a.h(e, r, n - e, p - r);
    return a;
  };
  md.alloc = function() {
    var a = nd.pop();
    return void 0 === a ? new md() : a;
  };
  md.free = function(a) {
    nd.push(a);
  };
  md.prototype.transformRect = md.prototype.So;
  md.prototype.transformPoint = md.prototype.Fa;
  md.prototype.scale = md.prototype.scale;
  md.prototype.translate = md.prototype.translate;
  md.prototype.rotate = md.prototype.rotate;
  md.prototype.invert = md.prototype.Tr;
  md.prototype.multiplyInverted = md.prototype.Ou;
  md.prototype.multiply = md.prototype.multiply;
  md.prototype.reset = md.prototype.reset;
  md.prototype.isIdentity = md.prototype.Ur;
  md.prototype.equals = md.prototype.C;
  md.prototype.setTransform = md.prototype.setTransform;
  md.prototype.set = md.prototype.set;
  var nd = [];
  md.className = 'Transform';
  md.xF = '54a702f3e53909c447824c6706603faf4c';
  var J = {
    jA: '7da71ca0ad381e90',
    ng: ((Math.sqrt(2) - 1) / 3) * 4,
    yv: null,
    sqrt: function(a) {
      if (0 >= a) return 0;
      var b = J.yv;
      if (null === b) {
        b = [];
        for (var c = 0; 2e3 >= c; c++) b[c] = Math.sqrt(c);
        J.yv = b;
      }
      return 1 > a
        ? ((c = 1 / a), 2e3 >= c ? 1 / b[c | 0] : Math.sqrt(a))
        : 2e3 >= a
        ? b[a | 0]
        : Math.sqrt(a);
    },
    B: function(a, b) {
      a -= b;
      return 0.5 > a && -0.5 < a;
    },
    ca: function(a, b) {
      a -= b;
      return 5e-8 > a && -5e-8 < a;
    },
    Tb: function(a, b, c, d, e, f, g) {
      0 >= e && (e = 1e-6);
      if (a < c) {
        var h = a;
        var k = c;
      } else (h = c), (k = a);
      if (b < d) {
        var l = b;
        var m = d;
      } else (l = d), (m = b);
      if (a === c) return l <= g && g <= m && a - e <= f && f <= a + e;
      if (b === d) return h <= f && f <= k && b - e <= g && g <= b + e;
      k += e;
      h -= e;
      if (h <= f && f <= k && ((m += e), (l -= e), l <= g && g <= m))
        if (k - h > m - l)
          if (a - c > e || c - a > e) {
            if (
              ((f = ((d - b) / (c - a)) * (f - a) + b),
              f - e <= g && g <= f + e)
            )
              return !0;
          } else return !0;
        else if (b - d > e || d - b > e) {
          if (
            ((g = ((c - a) / (d - b)) * (g - b) + a), g - e <= f && f <= g + e)
          )
            return !0;
        } else return !0;
      return !1;
    },
    Br: function(a, b, c, d, e, f, g, h, k, l, m, n) {
      if (J.Tb(a, b, g, h, n, c, d) && J.Tb(a, b, g, h, n, e, f))
        return J.Tb(a, b, g, h, n, l, m);
      var p = (a + c) / 2,
        r = (b + d) / 2,
        q = (c + e) / 2,
        u = (d + f) / 2;
      e = (e + g) / 2;
      f = (f + h) / 2;
      d = (p + q) / 2;
      c = (r + u) / 2;
      q = (q + e) / 2;
      u = (u + f) / 2;
      var w = (d + q) / 2,
        v = (c + u) / 2;
      return (
        J.Br(a, b, p, r, d, c, w, v, k, l, m, n) ||
        J.Br(w, v, q, u, e, f, g, h, k, l, m, n)
      );
    },
    Gw: function(a, b, c, d, e, f, g, h, k) {
      var l = (c + e) / 2,
        m = (d + f) / 2;
      k.h(
        (((a + c) / 2 + l) / 2 + (l + (e + g) / 2) / 2) / 2,
        (((b + d) / 2 + m) / 2 + (m + (f + h) / 2) / 2) / 2,
      );
      return k;
    },
    ty: function(a, b, c, d, e, f, g, h) {
      var k = (c + e) / 2,
        l = (d + f) / 2;
      return Bb(
        ((a + c) / 2 + k) / 2,
        ((b + d) / 2 + l) / 2,
        (k + (e + g) / 2) / 2,
        (l + (f + h) / 2) / 2,
      );
    },
    ql: function(a, b, c, d, e, f, g, h, k, l) {
      if (J.Tb(a, b, g, h, k, c, d) && J.Tb(a, b, g, h, k, e, f))
        Zb(l, a, b, 0, 0), Zb(l, g, h, 0, 0);
      else {
        var m = (a + c) / 2,
          n = (b + d) / 2,
          p = (c + e) / 2,
          r = (d + f) / 2;
        e = (e + g) / 2;
        f = (f + h) / 2;
        d = (m + p) / 2;
        c = (n + r) / 2;
        p = (p + e) / 2;
        r = (r + f) / 2;
        var q = (d + p) / 2,
          u = (c + r) / 2;
        J.ql(a, b, m, n, d, c, q, u, k, l);
        J.ql(q, u, p, r, e, f, g, h, k, l);
      }
      return l;
    },
    De: function(a, b, c, d, e, f, g, h, k, l) {
      if (J.Tb(a, b, g, h, k, c, d) && J.Tb(a, b, g, h, k, e, f))
        0 === l.length && (l.push(a), l.push(b)), l.push(g), l.push(h);
      else {
        var m = (a + c) / 2,
          n = (b + d) / 2,
          p = (c + e) / 2,
          r = (d + f) / 2;
        e = (e + g) / 2;
        f = (f + h) / 2;
        d = (m + p) / 2;
        c = (n + r) / 2;
        p = (p + e) / 2;
        r = (r + f) / 2;
        var q = (d + p) / 2,
          u = (c + r) / 2;
        J.De(a, b, m, n, d, c, q, u, k, l);
        J.De(q, u, p, r, e, f, g, h, k, l);
      }
      return l;
    },
    Tu: function(a, b, c, d, e, f, g, h, k, l) {
      if (J.Tb(a, b, e, f, l, c, d)) return J.Tb(a, b, e, f, l, h, k);
      var m = (a + c) / 2,
        n = (b + d) / 2;
      c = (c + e) / 2;
      d = (d + f) / 2;
      var p = (m + c) / 2,
        r = (n + d) / 2;
      return (
        J.Tu(a, b, m, n, p, r, g, h, k, l) || J.Tu(p, r, c, d, e, f, g, h, k, l)
      );
    },
    yA: function(a, b, c, d, e, f, g) {
      g.h(((a + c) / 2 + (c + e) / 2) / 2, ((b + d) / 2 + (d + f) / 2) / 2);
      return g;
    },
    Su: function(a, b, c, d, e, f, g, h) {
      if (J.Tb(a, b, e, f, g, c, d)) Zb(h, a, b, 0, 0), Zb(h, e, f, 0, 0);
      else {
        var k = (a + c) / 2,
          l = (b + d) / 2;
        c = (c + e) / 2;
        d = (d + f) / 2;
        var m = (k + c) / 2,
          n = (l + d) / 2;
        J.Su(a, b, k, l, m, n, g, h);
        J.Su(m, n, c, d, e, f, g, h);
      }
      return h;
    },
    Go: function(a, b, c, d, e, f, g, h) {
      if (J.Tb(a, b, e, f, g, c, d))
        0 === h.length && (h.push(a), h.push(b)), h.push(e), h.push(f);
      else {
        var k = (a + c) / 2,
          l = (b + d) / 2;
        c = (c + e) / 2;
        d = (d + f) / 2;
        var m = (k + c) / 2,
          n = (l + d) / 2;
        J.Go(a, b, k, l, m, n, g, h);
        J.Go(m, n, c, d, e, f, g, h);
      }
      return h;
    },
    io: function(a, b, c, d, e, f, g, h, k, l, m, n, p, r) {
      if (J.Tb(a, b, g, h, p, c, d) && J.Tb(a, b, g, h, p, e, f)) {
        if (!J.zl(a, b, g, h, k, l, m, n)) return !1;
        p = (a - g) * (l - n) - (b - h) * (k - m);
        if (0 === p) return !1;
        r.h(
          ((a * h - b * g) * (k - m) - (a - g) * (k * n - l * m)) / p,
          ((a * h - b * g) * (l - n) - (b - h) * (k * n - l * m)) / p,
        );
        return !0;
      }
      var q = (a + c) / 2,
        u = (b + d) / 2,
        w = (c + e) / 2,
        v = (d + f) / 2;
      e = (e + g) / 2;
      f = (f + h) / 2;
      d = (q + w) / 2;
      c = (u + v) / 2;
      w = (w + e) / 2;
      v = (v + f) / 2;
      var z = (d + w) / 2,
        y = (c + v) / 2,
        A = Infinity,
        B = !1,
        F = 0,
        L = 0;
      J.io(a, b, q, u, d, c, z, y, k, l, m, n, p, r) &&
        ((a = (r.x - k) * (r.x - k) + (r.y - l) * (r.y - l)),
        a < A && ((A = a), (B = !0), (F = r.x), (L = r.y)));
      J.io(z, y, w, v, e, f, g, h, k, l, m, n, p, r) &&
        (r.x - k) * (r.x - k) + (r.y - l) * (r.y - l) < A &&
        ((B = !0), (F = r.x), (L = r.y));
      B && ((r.x = F), (r.y = L));
      return B;
    },
    jo: function(a, b, c, d, e, f, g, h, k, l, m, n, p) {
      var r = 0;
      if (J.Tb(a, b, g, h, p, c, d) && J.Tb(a, b, g, h, p, e, f)) {
        p = (a - g) * (l - n) - (b - h) * (k - m);
        if (0 === p) return r;
        var q = ((a * h - b * g) * (k - m) - (a - g) * (k * n - l * m)) / p,
          u = ((a * h - b * g) * (l - n) - (b - h) * (k * n - l * m)) / p;
        if (q >= m) return r;
        if ((k > m ? k - m : m - k) < (l > n ? l - n : n - l)) {
          if ((b < h ? ((k = b), (a = h)) : ((k = h), (a = b)), u < k || u > a))
            return r;
        } else if ((a < g ? ((k = a), (a = g)) : (k = g), q < k || q > a))
          return r;
        0 < p ? r++ : 0 > p && r--;
      } else {
        q = (a + c) / 2;
        u = (b + d) / 2;
        var w = (c + e) / 2,
          v = (d + f) / 2;
        e = (e + g) / 2;
        f = (f + h) / 2;
        d = (q + w) / 2;
        c = (u + v) / 2;
        w = (w + e) / 2;
        v = (v + f) / 2;
        var z = (d + w) / 2,
          y = (c + v) / 2;
        r += J.jo(a, b, q, u, d, c, z, y, k, l, m, n, p);
        r += J.jo(z, y, w, v, e, f, g, h, k, l, m, n, p);
      }
      return r;
    },
    fh: function(a, b, c, d, e, f, g) {
      if (J.ca(a, c)) {
        b < d ? ((c = b), (b = d)) : (c = d);
        if (f < c) return g.h(a, c), !1;
        if (f > b) return g.h(a, b), !1;
        g.h(a, f);
        return !0;
      }
      if (J.ca(b, d)) {
        a < c ? ((d = a), (a = c)) : (d = c);
        if (e < d) return g.h(d, b), !1;
        if (e > a) return g.h(a, b), !1;
        g.h(e, b);
        return !0;
      }
      e =
        ((a - e) * (a - c) + (b - f) * (b - d)) /
        ((c - a) * (c - a) + (d - b) * (d - b));
      if (-5e-6 > e) return g.h(a, b), !1;
      if (1.000005 < e) return g.h(c, d), !1;
      g.h(a + e * (c - a), b + e * (d - b));
      return !0;
    },
    Je: function(a, b, c, d, e, f, g, h, k) {
      if (J.B(a, c) && J.B(b, d)) return k.h(a, b), !1;
      if (J.ca(e, g))
        return J.ca(a, c)
          ? (J.fh(a, b, c, d, e, f, k), !1)
          : J.fh(a, b, c, d, e, ((d - b) / (c - a)) * (e - a) + b, k);
      h = (h - f) / (g - e);
      if (J.ca(a, c)) {
        c = h * (a - e) + f;
        b < d ? ((e = b), (b = d)) : (e = d);
        if (c < e) return k.h(a, e), !1;
        if (c > b) return k.h(a, b), !1;
        k.h(a, c);
        return !0;
      }
      g = (d - b) / (c - a);
      if (J.ca(h, g)) return J.fh(a, b, c, d, e, f, k), !1;
      e = (g * a - h * e + f - b) / (g - h);
      if (J.ca(g, 0)) {
        a < c ? ((d = a), (a = c)) : (d = c);
        if (e < d) return k.h(d, b), !1;
        if (e > a) return k.h(a, b), !1;
        k.h(e, b);
        return !0;
      }
      return J.fh(a, b, c, d, e, g * (e - a) + b, k);
    },
    wA: function(a, b, c, d, e) {
      return J.Je(c.x, c.y, d.x, d.y, a.x, a.y, b.x, b.y, e);
    },
    uA: function(a, b, c, d, e, f, g, h, k, l) {
      function m(c, d) {
        var e = (c - a) * (c - a) + (d - b) * (d - b);
        e < n && ((n = e), k.h(c, d));
      }
      var n = Infinity;
      m(k.x, k.y);
      var p = 0,
        r = 0,
        q = 0,
        u = 0;
      e < g ? ((p = e), (r = g)) : ((p = g), (r = e));
      f < h ? ((q = e), (u = g)) : ((q = g), (u = e));
      p = (r - p) / 2 + l;
      l = (u - q) / 2 + l;
      e = (e + g) / 2;
      f = (f + h) / 2;
      if (0 === p || 0 === l) return k;
      if (0.5 > (c > a ? c - a : a - c)) {
        p = 1 - ((c - e) * (c - e)) / (p * p);
        if (0 > p) return k;
        p = Math.sqrt(p);
        d = -l * p + f;
        m(c, l * p + f);
        m(c, d);
      } else {
        c = (d - b) / (c - a);
        d = 1 / (p * p) + (c * c) / (l * l);
        h =
          (2 * c * (b - c * a)) / (l * l) -
          (2 * c * f) / (l * l) -
          (2 * e) / (p * p);
        p =
          h * h -
          4 *
            d *
            ((2 * c * a * f) / (l * l) -
              (2 * b * f) / (l * l) +
              (f * f) / (l * l) +
              (e * e) / (p * p) -
              1 +
              ((b - c * a) * (b - c * a)) / (l * l));
        if (0 > p) return k;
        p = Math.sqrt(p);
        l = (-h + p) / (2 * d);
        m(l, c * l - c * a + b);
        p = (-h - p) / (2 * d);
        m(p, c * p - c * a + b);
      }
      return k;
    },
    wf: function(a, b, c, d, e, f, g, h, k) {
      var l = 1e21,
        m = a,
        n = b;
      if (J.Je(a, b, a, d, e, f, g, h, k)) {
        var p = (k.x - e) * (k.x - e) + (k.y - f) * (k.y - f);
        p < l && ((l = p), (m = k.x), (n = k.y));
      }
      J.Je(c, b, c, d, e, f, g, h, k) &&
        ((p = (k.x - e) * (k.x - e) + (k.y - f) * (k.y - f)),
        p < l && ((l = p), (m = k.x), (n = k.y)));
      J.Je(a, b, c, b, e, f, g, h, k) &&
        ((b = (k.x - e) * (k.x - e) + (k.y - f) * (k.y - f)),
        b < l && ((l = b), (m = k.x), (n = k.y)));
      J.Je(a, d, c, d, e, f, g, h, k) &&
        ((a = (k.x - e) * (k.x - e) + (k.y - f) * (k.y - f)),
        a < l && ((l = a), (m = k.x), (n = k.y)));
      k.h(m, n);
      return 1e21 > l;
    },
    tA: function(a, b, c, d, e, f, g, h, k) {
      c = a - c;
      g = e - g;
      0 === c || 0 === g
        ? 0 === c
          ? ((b = (f - h) / g), (h = a), (e = b * h + (f - b * e)))
          : ((f = (b - d) / c), (h = e), (e = f * h + (b - f * a)))
        : ((d = (b - d) / c),
          (h = (f - h) / g),
          (a = b - d * a),
          (h = (f - h * e - a) / (d - h)),
          (e = d * h + a));
      k.h(h, e);
      return k;
    },
    Rr: function(a, b, c) {
      return J.jx(a.x, a.y, a.width, a.height, b.x, b.y, c.x, c.y);
    },
    jx: function(a, b, c, d, e, f, g, h) {
      var k = a + c,
        l = b + d;
      return e === g
        ? (f < h ? ((g = f), (f = h)) : (g = h),
          a <= e && e <= k && g <= l && f >= b)
        : f === h
        ? (e < g ? ((h = e), (e = g)) : (h = g),
          b <= f && f <= l && h <= k && e >= a)
        : $b(a, b, c, d, e, f) ||
          $b(a, b, c, d, g, h) ||
          J.zl(a, b, k, b, e, f, g, h) ||
          J.zl(k, b, k, l, e, f, g, h) ||
          J.zl(k, l, a, l, e, f, g, h) ||
          J.zl(a, l, a, b, e, f, g, h)
        ? !0
        : !1;
    },
    zl: function(a, b, c, d, e, f, g, h) {
      return (
        0 >= J.sl(a, b, c, d, e, f) * J.sl(a, b, c, d, g, h) &&
        0 >= J.sl(e, f, g, h, a, b) * J.sl(e, f, g, h, c, d)
      );
    },
    sl: function(a, b, c, d, e, f) {
      c -= a;
      d -= b;
      a = e - a;
      b = f - b;
      f = a * d - b * c;
      0 === f &&
        ((f = a * c + b * d),
        0 < f && ((f = (a - c) * c + (b - d) * d), 0 > f && (f = 0)));
      return f;
    },
    Eo: function(a) {
      0 > a && (a += 360);
      360 <= a && (a -= 360);
      return a;
    },
    Mw: function(a, b, c, d, e, f) {
      var g = Math.PI;
      f || ((d *= g / 180), (e *= g / 180));
      var h = d > e ? -1 : 1;
      f = [];
      var k = g / 2,
        l = d;
      d = Math.min(2 * g, Math.abs(e - d));
      if (1e-5 > d)
        return (
          (k = l + h * Math.min(d, k)),
          (h = a + c * Math.cos(l)),
          (l = b + c * Math.sin(l)),
          (a += c * Math.cos(k)),
          (b += c * Math.sin(k)),
          (c = (h + a) / 2),
          (k = (l + b) / 2),
          f.push([h, l, c, k, c, k, a, b]),
          f
        );
      for (; 1e-5 < d; )
        (e = l + h * Math.min(d, k)),
          f.push(J.Cy(c, l, e, a, b)),
          (d -= Math.abs(e - l)),
          (l = e);
      return f;
    },
    Cy: function(a, b, c, d, e) {
      var f = (c - b) / 2,
        g = a * Math.cos(f),
        h = a * Math.sin(f),
        k = -h,
        l = g * g + k * k,
        m = l + g * g + k * h;
      l = ((4 / 3) * (Math.sqrt(2 * l * m) - m)) / (g * h - k * g);
      h = g - l * k;
      g = k + l * g;
      k = -g;
      l = f + b;
      f = Math.cos(l);
      l = Math.sin(l);
      return [
        d + a * Math.cos(b),
        e + a * Math.sin(b),
        d + h * f - g * l,
        e + h * l + g * f,
        d + h * f - k * l,
        e + h * l + k * f,
        d + a * Math.cos(c),
        e + a * Math.sin(c),
      ];
    },
    so: function(a, b, c, d, e, f, g) {
      c = Math.floor((a - c) / e) * e + c;
      d = Math.floor((b - d) / f) * f + d;
      var h = c;
      c + e - a < e / 2 && (h = c + e);
      a = d;
      d + f - b < f / 2 && (a = d + f);
      g.h(h, a);
      return g;
    },
    Xw: function(a, b) {
      var c = Math.max(a, b);
      a = Math.min(a, b);
      var d;
      do (b = c % a), (c = d = a), (a = b);
      while (0 < b);
      return d;
    },
    Hy: function(a, b, c, d) {
      var e = 0 > c,
        f = 0 > d;
      if (a < b) {
        var g = 1;
        var h = 0;
      } else (g = 0), (h = 1);
      var k = 0 === g ? a : b;
      var l = 0 === g ? c : d;
      if (0 === g ? e : f) l = -l;
      g = h;
      c = 0 === g ? c : d;
      if (0 === g ? e : f) c = -c;
      return J.Iy(k, 0 === g ? a : b, l, c, 0, 0);
    },
    Iy: function(a, b, c, d, e, f) {
      if (0 < d)
        if (0 < c) {
          e = a * a;
          f = b * b;
          a *= c;
          var g = b * d,
            h = -f + g,
            k = -f + Math.sqrt(a * a + g * g);
          b = h;
          for (var l = 0; 9999999999 > l; ++l) {
            b = 0.5 * (h + k);
            if (b === h || b === k) break;
            var m = a / (b + e),
              n = g / (b + f);
            m = m * m + n * n - 1;
            if (0 < m) h = b;
            else if (0 > m) k = b;
            else break;
          }
          c = (e * c) / (b + e) - c;
          d = (f * d) / (b + f) - d;
          c = Math.sqrt(c * c + d * d);
        } else c = Math.abs(d - b);
      else
        (d = a * a - b * b),
          (f = a * c),
          f < d
            ? ((d = f / d),
              (f = b * Math.sqrt(Math.abs(1 - d * d))),
              (c = a * d - c),
              (c = Math.sqrt(c * c + f * f)))
            : (c = Math.abs(c - a));
      return c;
    },
    Oe: new Wa(),
    dm: new Wa(),
    Df: new Wa(),
    Ef: 0,
    em: 100,
  };
  J.za = J.jA;

  function O(a) {
    Ra(this);
    this.o = 2;
    void 0 === a && (a = O.m);
    this.qa = a;
    this.yc = this.xc = this.hd = this.gd = 0;
    a === O.m
      ? (this.Yd = new E())
      : (null === O.W && (O.W = new E().freeze()), (this.Yd = O.W));
    this.Ep = this.Yd.Ia;
    this.lp = new M().freeze();
    this.gm = this.gk = null;
    this.hm = NaN;
    this.Yf = tc;
    this.Zf = Cc;
    this.Gk = this.Hk = NaN;
    this.Kf = td;
  }
  O.prototype.copy = function() {
    var a = new O();
    a.o = this.o & -2;
    a.qa = this.qa;
    a.gd = this.gd;
    a.hd = this.hd;
    a.xc = this.xc;
    a.yc = this.yc;
    if (this.qa === O.m) {
      for (var b = this.Yd.s, c = a.Yd, d = 0; d < b.length; d++)
        c.add(b[d].copy());
      a.Yd = c;
    } else a.Yd = this.Yd;
    a.Ep = this.Ep;
    a.lp.assign(this.lp);
    a.gk = this.gk;
    a.gm = this.gm;
    a.hm = this.hm;
    a.Yf = this.Yf.J();
    a.Zf = this.Zf.J();
    a.Hk = this.Hk;
    a.Gk = this.Gk;
    a.Kf = this.Kf;
    return a;
  };
  O.prototype.ha = function() {
    this.freeze();
    Object.freeze(this);
    return this;
  };
  O.prototype.freeze = function() {
    this._isFrozen = !0;
    if (this.type !== O.m) return this;
    var a = this.figures;
    a.freeze();
    a = a.s;
    for (var b = a.length, c = 0; c < b; c++) a[c].freeze();
    return this;
  };
  O.prototype.ja = function() {
    Object.isFrozen(this) && C('cannot thaw constant: ' + this);
    this._isFrozen = !1;
    if (this.type !== O.m) return this;
    var a = this.figures;
    a.ja();
    a = a.s;
    for (var b = a.length, c = 0; c < b; c++) a[c].ja();
    return this;
  };
  O.prototype.$a = function(a) {
    if (!(a instanceof O)) return !1;
    if (this.type !== a.type)
      return this.type === O.j && a.type === O.m
        ? ud(this, a)
        : a.type === O.j && this.type === O.m
        ? ud(a, this)
        : !1;
    if (this.type === O.m) {
      var b = this.figures.s;
      a = a.figures.s;
      var c = b.length;
      if (c !== a.length) return !1;
      for (var d = 0; d < c; d++) if (!b[d].$a(a[d])) return !1;
      return !0;
    }
    return (
      J.B(this.startX, a.startX) &&
      J.B(this.startY, a.startY) &&
      J.B(this.endX, a.endX) &&
      J.B(this.endY, a.endY)
    );
  };

  function ud(a, b) {
    return a.type !== O.j || b.type !== O.m
      ? !1
      : 1 === b.figures.count &&
        ((b = b.figures.K(0)),
        1 === b.segments.count &&
          J.B(a.startX, b.startX) &&
          J.B(a.startY, b.startY) &&
          ((b = b.segments.K(0)),
          b.type === vd && J.B(a.endX, b.endX) && J.B(a.endY, b.endY)))
      ? !0
      : !1;
  }
  O.ga = function(a) {
    return a.toString();
  };
  O.prototype.ob = function(a) {
    a.classType === O && (this.type = a);
  };
  O.prototype.toString = function(a) {
    void 0 === a && (a = -1);
    switch (this.type) {
      case O.j:
        return 0 > a
          ? 'M' +
              this.startX.toString() +
              ' ' +
              this.startY.toString() +
              'L' +
              this.endX.toString() +
              ' ' +
              this.endY.toString()
          : 'M' +
              this.startX.toFixed(a) +
              ' ' +
              this.startY.toFixed(a) +
              'L' +
              this.endX.toFixed(a) +
              ' ' +
              this.endY.toFixed(a);
      case O.u:
        var b = new M(this.startX, this.startY, 0, 0);
        b.nv(this.endX, this.endY, 0, 0);
        return 0 > a
          ? 'M' +
              b.x.toString() +
              ' ' +
              b.y.toString() +
              'H' +
              b.right.toString() +
              'V' +
              b.bottom.toString() +
              'H' +
              b.left.toString() +
              'z'
          : 'M' +
              b.x.toFixed(a) +
              ' ' +
              b.y.toFixed(a) +
              'H' +
              b.right.toFixed(a) +
              'V' +
              b.bottom.toFixed(a) +
              'H' +
              b.left.toFixed(a) +
              'z';
      case O.F:
        b = new M(this.startX, this.startY, 0, 0);
        b.nv(this.endX, this.endY, 0, 0);
        if (0 > a)
          return (
            (a = b.left.toString() + ' ' + (b.y + b.height / 2).toString()),
            'M' +
              a +
              'A' +
              (b.width / 2).toString() +
              ' ' +
              (b.height / 2).toString() +
              ' 0 0 1 ' +
              (b.right.toString() + ' ' + (b.y + b.height / 2).toString()) +
              'A' +
              (b.width / 2).toString() +
              ' ' +
              (b.height / 2).toString() +
              ' 0 0 1 ' +
              a
          );
        var c = b.left.toFixed(a) + ' ' + (b.y + b.height / 2).toFixed(a);
        return (
          'M' +
          c +
          'A' +
          (b.width / 2).toFixed(a) +
          ' ' +
          (b.height / 2).toFixed(a) +
          ' 0 0 1 ' +
          (b.right.toFixed(a) + ' ' + (b.y + b.height / 2).toFixed(a)) +
          'A' +
          (b.width / 2).toFixed(a) +
          ' ' +
          (b.height / 2).toFixed(a) +
          ' 0 0 1 ' +
          c
        );
      case O.m:
        b = '';
        c = this.figures.s;
        for (var d = c.length, e = 0; e < d; e++) {
          var f = c[e];
          0 < e && (b += ' x ');
          f.isFilled && (b += 'F ');
          b += f.toString(a);
        }
        return b;
      default:
        return this.type.toString();
    }
  };
  O.hb = function(a) {
    a = a.split(/[Xx]/);
    for (var b = a.length, c = '', d = 0; d < b; d++) {
      var e = a[d];
      c =
        null !== e.match(/[Ff]/)
          ? 0 === d
            ? c + e
            : c + ('X' + (' ' === e[0] ? '' : ' ') + e)
          : c + ((0 === d ? '' : 'X ') + 'F' + (' ' === e[0] ? '' : ' ') + e);
    }
    return c;
  };
  O.parse = function(a, b) {
    function c() {
      return u >= A - 1 ? !0 : null !== l[u + 1].match(B);
    }

    function d() {
      u++;
      return l[u];
    }

    function e(a) {
      var b = parseFloat(d()),
        c = parseFloat(d());
      w === w.toLowerCase() && ((b = y.x + b), (c = y.y + c));
      a.h(b, c);
    }

    function f() {
      e(y);
      return y;
    }

    function g() {
      e(z);
      return z;
    }

    function h() {
      var a = v.toLowerCase();
      return 'c' !== a && 's' !== a && 'q' !== a && 't' !== a
        ? y
        : new I(2 * y.x - z.x, 2 * y.y - z.y);
    }
    void 0 === b && (b = !1);
    var k = /([UuBbMmZzLlHhVvCcSsQqTtAaFfXx])([UuBbMmZzLlHhVvCcSsQqTtAaFfXx])/gm;
    a = a.replace(/,/gm, ' ');
    a = a.replace(k, '$1 $2');
    a = a.replace(k, '$1 $2');
    a = a.replace(/([UuBbMmZzLlHhVvCcSsQqTtAaFfXx])([^s])/gm, '$1 $2');
    a = a.replace(/([^s])([UuBbMmZzLlHhVvCcSsQqTtAaFfXx])/gm, '$1 $2');
    a = a.replace(/([0-9])([+\-])/gm, '$1 $2');
    a = a.replace(/[\s\r\t\n]+/gm, ' ');
    a = a.replace(/^\s+|\s+$/g, '');
    var l = a.split(' ');
    for (a = 0; a < l.length; a++) {
      var m = l[a];
      if (null !== m.match(/(\.[0-9]*)(\.)/gm)) {
        k = Ea();
        for (var n = '', p = !1, r = 0; r < m.length; r++) {
          var q = m[r];
          '.' !== q || p
            ? '.' === q
              ? (k.push(n), (n = '.'))
              : (n += q)
            : ((p = !0), (n += q));
        }
        k.push(n);
        l.splice(a, 1);
        for (m = 0; m < k.length; m++) l.splice(a + m, 0, k[m]);
        a += k.length - 1;
        Ga(k);
      }
    }
    var u = -1,
      w = '',
      v = '';
    k = new I(0, 0);
    var z = new I(0, 0),
      y = new I(0, 0),
      A = l.length;
    a = wd(null);
    n = m = !1;
    p = !0;
    r = null;
    for (var B = /[UuBbMmZzLlHhVvCcSsQqTtAaFfXx]/; !(u >= A - 1); )
      if (((v = w), (w = d()), '' !== w))
        switch (w.toUpperCase()) {
          case 'X':
            p = !0;
            n = m = !1;
            break;
          case 'M':
            r = f();
            null === a.pc || !0 === p
              ? (xd(a, r.x, r.y, m, !n), (p = !1))
              : a.moveTo(r.x, r.y);
            for (k.assign(y); !c(); ) (r = f()), a.lineTo(r.x, r.y);
            break;
          case 'L':
            for (; !c(); ) (r = f()), a.lineTo(r.x, r.y);
            break;
          case 'H':
            for (; !c(); )
              (y = new I(
                (w === w.toLowerCase() ? y.x : 0) + parseFloat(d()),
                y.y,
              )),
                a.lineTo(y.x, y.y);
            break;
          case 'V':
            for (; !c(); )
              (y = new I(
                y.x,
                (w === w.toLowerCase() ? y.y : 0) + parseFloat(d()),
              )),
                a.lineTo(y.x, y.y);
            break;
          case 'C':
            for (; !c(); ) {
              r = new I();
              e(r);
              q = g();
              var F = f();
              yd(a, r.x, r.y, q.x, q.y, F.x, F.y);
            }
            break;
          case 'S':
            for (; !c(); )
              (r = h()),
                (q = g()),
                (F = f()),
                yd(a, r.x, r.y, q.x, q.y, F.x, F.y);
            break;
          case 'Q':
            for (; !c(); ) (r = g()), (q = f()), zd(a, r.x, r.y, q.x, q.y);
            break;
          case 'T':
            for (; !c(); ) (z = r = h()), (q = f()), zd(a, r.x, r.y, q.x, q.y);
            break;
          case 'B':
            for (; !c(); ) {
              r = parseFloat(d());
              q = parseFloat(d());
              F = parseFloat(d());
              var L = parseFloat(d()),
                S = parseFloat(d()),
                R = S,
                P = !1;
              c() ||
                ((R = parseFloat(d())), c() || (P = 0 !== parseFloat(d())));
              w === w.toLowerCase() && ((F += y.x), (L += y.y));
              a.arcTo(r, q, F, L, S, R, P);
            }
            break;
          case 'A':
            for (; !c(); )
              (r = Math.abs(parseFloat(d()))),
                (q = Math.abs(parseFloat(d()))),
                (F = parseFloat(d())),
                (S = L = !1),
                (P = R = 0),
                (R = d()),
                1 === R.length
                  ? ((L = !!parseFloat(R)),
                    (S = !!parseFloat(d())),
                    (R = parseFloat(d())))
                  : 2 === R.length
                  ? ((L = !!parseFloat(R[0])),
                    (S = !!parseFloat(R[1])),
                    (R = parseFloat(d())))
                  : ((L = !!parseFloat(R[0])),
                    (S = !!parseFloat(R[1])),
                    (R = parseFloat(R.slice(2)))),
                (P = parseFloat(d())),
                w === w.toLowerCase() && ((R = y.x + R), (P = y.y + P)),
                y.h(R, P),
                Ad(a, r, q, F, L, S, R, P);
            break;
          case 'Z':
            Gd(a);
            y.assign(k);
            break;
          case 'F':
            r = '';
            for (q = 1; l[u + q]; )
              if (null !== l[u + q].match(/[Uu]/)) q++;
              else if (null === l[u + q].match(B)) q++;
              else {
                r = l[u + q];
                break;
              }
            r.match(/[Mm]/)
              ? (m = !0)
              : 0 < a.pc.segments.length && (a.pc.isFilled = !0);
            break;
          case 'U':
            r = '';
            for (q = 1; l[u + q]; )
              if (null !== l[u + q].match(/[Ff]/)) q++;
              else if (null === l[u + q].match(B)) q++;
              else {
                r = l[u + q];
                break;
              }
            r.match(/[Mm]/) ? (n = !0) : a.Xl(!1);
        }
    k = a.Lr;
    Hd = a;
    if (b) for (b = k.figures.iterator; b.next(); ) b.value.isFilled = !0;
    return k;
  };
  O.Ga = function(a, b) {
    for (var c = a.length, d = I.alloc(), e = 0; e < c; e++) {
      var f = a[e];
      d.x = f[0];
      d.y = f[1];
      b.Fa(d);
      f[0] = d.x;
      f[1] = d.y;
      d.x = f[2];
      d.y = f[3];
      b.Fa(d);
      f[2] = d.x;
      f[3] = d.y;
      d.x = f[4];
      d.y = f[5];
      b.Fa(d);
      f[4] = d.x;
      f[5] = d.y;
      d.x = f[6];
      d.y = f[7];
      b.Fa(d);
      f[6] = d.x;
      f[7] = d.y;
    }
    I.free(d);
  };
  O.prototype.Lu = function() {
    if (this._isInvalidBounds) return !0;
    if (this.type === O.m) {
      if (this.Ep !== this.figures.Ia) return !0;
      for (var a = this.figures.s, b = a.length, c = 0; c < b; c++)
        if (a[c].Lu()) return !0;
    }
    return !1;
  };
  O.prototype.computeBounds = function() {
    this._isInvalidBounds = !1;
    this.gm = this.gk = null;
    this.hm = NaN;
    if (this.type === O.m) {
      this.Ep = this.figures.Ia;
      for (var a = this.figures.s, b = a.length, c = 0; c < b; c++) {
        var d = a[c];
        d._isInvalidBounds = !1;
        var e = d.segments;
        d.Pq = e.Ia;
        d = e.s;
        e = d.length;
        for (var f = 0; f < e; f++) {
          var g = d[f];
          g._isInvalidBounds = !1;
          g.Ud = null;
        }
      }
    }
    a = this.lp;
    a.ja();
    isNaN(this.Hk) || isNaN(this.Gk)
      ? a.h(0, 0, 0, 0)
      : a.h(0, 0, this.Hk, this.Gk);
    Id(this, a, !1);
    Zb(a, 0, 0, 0, 0);
    a.freeze();
  };
  O.prototype.Lw = function() {
    var a = new M();
    Id(this, a, !0);
    return a;
  };

  function Id(a, b, c) {
    switch (a.type) {
      case O.j:
      case O.u:
      case O.F:
        c ? b.h(a.gd, a.hd, 0, 0) : Zb(b, a.gd, a.hd, 0, 0);
        Zb(b, a.xc, a.yc, 0, 0);
        break;
      case O.m:
        var d = a.figures;
        a = d.s;
        d = d.length;
        for (var e = 0; e < d; e++) {
          var f = a[e];
          c && 0 === e
            ? b.h(f.startX, f.startY, 0, 0)
            : Zb(b, f.startX, f.startY, 0, 0);
          for (
            var g = f.segments.s,
              h = g.length,
              k = f.startX,
              l = f.startY,
              m = 0;
            m < h;
            m++
          ) {
            var n = g[m];
            switch (n.type) {
              case vd:
              case Jd:
                k = n.endX;
                l = n.endY;
                Zb(b, k, l, 0, 0);
                break;
              case Kd:
                J.ql(
                  k,
                  l,
                  n.point1X,
                  n.point1Y,
                  n.point2X,
                  n.point2Y,
                  n.endX,
                  n.endY,
                  0.5,
                  b,
                );
                k = n.endX;
                l = n.endY;
                break;
              case Ld:
                J.Su(k, l, n.point1X, n.point1Y, n.endX, n.endY, 0.5, b);
                k = n.endX;
                l = n.endY;
                break;
              case Md:
              case Qd:
                var p = n.type === Md ? Rd(n, f) : Sd(n, f, k, l),
                  r = p.length;
                if (0 === r) {
                  k = n.type === Md ? n.centerX : n.endX;
                  l = n.type === Md ? n.centerY : n.endY;
                  Zb(b, k, l, 0, 0);
                  break;
                }
                n = null;
                for (var q = 0; q < r; q++)
                  (n = p[q]),
                    J.ql(
                      n[0],
                      n[1],
                      n[2],
                      n[3],
                      n[4],
                      n[5],
                      n[6],
                      n[7],
                      0.5,
                      b,
                    );
                null !== n && ((k = n[6]), (l = n[7]));
                break;
              default:
                C('Unknown Segment type: ' + n.type);
            }
          }
        }
        break;
      default:
        C('Unknown Geometry type: ' + a.type);
    }
  }
  O.prototype.normalize = function() {
    this._isFrozen && va(this);
    var a = this.Lw();
    this.offset(-a.x, -a.y);
    return new I(-a.x, -a.y);
  };
  O.prototype.offset = function(a, b) {
    this._isFrozen && va(this);
    this.transform(1, 0, 0, 1, a, b);
    return this;
  };
  O.prototype.scale = function(a, b) {
    this._isFrozen && va(this);
    this.transform(a, 0, 0, b, 0, 0);
    return this;
  };
  O.prototype.rotate = function(a, b, c) {
    this._isFrozen && va(this);
    void 0 === b && (b = 0);
    void 0 === c && (c = 0);
    var d = md.alloc();
    d.reset();
    d.rotate(a, b, c);
    this.transform(d.m11, d.m12, d.m21, d.m22, d.dx, d.dy);
    md.free(d);
    return this;
  };
  t = O.prototype;
  t.transform = function(a, b, c, d, e, f) {
    switch (this.type) {
      case O.j:
      case O.u:
      case O.F:
        var g = this.gd;
        var h = this.hd;
        this.gd = g * a + h * c + e;
        this.hd = g * b + h * d + f;
        g = this.xc;
        h = this.yc;
        this.xc = g * a + h * c + e;
        this.yc = g * b + h * d + f;
        break;
      case O.m:
        for (var k = this.figures.s, l = k.length, m = 0; m < l; m++) {
          var n = k[m];
          g = n.startX;
          h = n.startY;
          n.startX = g * a + h * c + e;
          n.startY = g * b + h * d + f;
          n = n.segments.s;
          for (var p = n.length, r = 0; r < p; r++) {
            var q = n[r];
            switch (q.type) {
              case vd:
              case Jd:
                g = q.endX;
                h = q.endY;
                q.endX = g * a + h * c + e;
                q.endY = g * b + h * d + f;
                break;
              case Kd:
                g = q.point1X;
                h = q.point1Y;
                q.point1X = g * a + h * c + e;
                q.point1Y = g * b + h * d + f;
                g = q.point2X;
                h = q.point2Y;
                q.point2X = g * a + h * c + e;
                q.point2Y = g * b + h * d + f;
                g = q.endX;
                h = q.endY;
                q.endX = g * a + h * c + e;
                q.endY = g * b + h * d + f;
                break;
              case Ld:
                g = q.point1X;
                h = q.point1Y;
                q.point1X = g * a + h * c + e;
                q.point1Y = g * b + h * d + f;
                g = q.endX;
                h = q.endY;
                q.endX = g * a + h * c + e;
                q.endY = g * b + h * d + f;
                break;
              case Md:
                g = q.centerX;
                h = q.centerY;
                q.centerX = g * a + h * c + e;
                q.centerY = g * b + h * d + f;
                0 !== b &&
                  ((g = (180 * Math.atan2(b, a)) / Math.PI),
                  0 > g && (g += 360),
                  (q.startAngle += g));
                0 > a &&
                  ((q.startAngle = 180 - q.startAngle),
                  (q.sweepAngle = -q.sweepAngle));
                0 > d &&
                  ((q.startAngle = -q.startAngle),
                  (q.sweepAngle = -q.sweepAngle));
                q.radiusX *= Math.sqrt(a * a + c * c);
                void 0 !== q.radiusY && (q.radiusY *= Math.sqrt(b * b + d * d));
                break;
              case Qd:
                g = q.endX;
                h = q.endY;
                q.endX = g * a + h * c + e;
                q.endY = g * b + h * d + f;
                if (0 === q.radiusX || 0 === q.radiusY) break;
                0 !== b &&
                  ((g = (180 * Math.atan2(b, a)) / Math.PI),
                  0 > g && (g += 360),
                  (q.xAxisRotation += g));
                0 > a &&
                  ((q.xAxisRotation = 180 - q.xAxisRotation),
                  (q.isClockwiseArc = !q.isClockwiseArc));
                0 > d &&
                  ((q.xAxisRotation = -q.xAxisRotation),
                  (q.isClockwiseArc = !q.isClockwiseArc));
                q.radiusX *= Math.sqrt(a * a + c * c);
                q.radiusY *= Math.sqrt(b * b + d * d);
                break;
              default:
                C('Unknown Segment type: ' + q.type);
            }
          }
        }
    }
    this._isInvalidBounds = !0;
    return this;
  };
  t.ba = function(a, b) {
    void 0 === b && (b = 0);
    var c = this.gd,
      d = this.hd,
      e = this.xc,
      f = this.yc;
    switch (this.type) {
      case O.j:
        return J.Tb(c, d, e, f, b, a.x, a.y);
      case O.u:
        var g = M.allocAt(
          Math.min(c, e) - b,
          Math.min(d, f) - b,
          Math.abs(e - c) + 2 * b,
          Math.abs(f - d) + 2 * b,
        );
        a = g.ba(a);
        M.free(g);
        return a;
      case O.F:
        g = Math.min(c, e) - b;
        var h = Math.min(d, f) - b;
        c = (Math.abs(e - c) + 2 * b) / 2;
        b = (Math.abs(f - d) + 2 * b) / 2;
        if (0 >= c || 0 >= b) return !1;
        g = a.x - (g + c);
        h = a.y - (h + b);
        return 1 >= (g * g) / (c * c) + (h * h) / (b * b);
      case O.m:
        return Td(this, a, b, !0, !1);
      default:
        return !1;
    }
  };

  function Td(a, b, c, d, e) {
    var f = b.x;
    b = b.y;
    for (
      var g = a.bounds.x - 20,
        h = 0,
        k,
        l,
        m,
        n,
        p = a.figures.s,
        r = p.length,
        q = 0;
      q < r;
      q++
    ) {
      var u = p[q];
      if (u.isFilled) {
        if (d && u.ba(f, b, c)) return !0;
        var w = u.segments;
        k = u.startX;
        l = u.startY;
        for (var v = k, z = l, y = w.s, A = 0; A <= w.length; A++) {
          var B = void 0;
          if (A !== w.length) {
            B = y[A];
            var F = B.type;
            a = B.endX;
            n = B.endY;
          } else (F = vd), (a = v), (n = z);
          switch (F) {
            case Jd:
              v = Ud(f, b, g, b, k, l, v, z);
              if (isNaN(v)) return !0;
              h += v;
              v = a;
              z = n;
              break;
            case vd:
              k = Ud(f, b, g, b, k, l, a, n);
              if (isNaN(k)) return !0;
              h += k;
              break;
            case Kd:
              m = J.jo(
                k,
                l,
                B.point1X,
                B.point1Y,
                B.point2X,
                B.point2Y,
                a,
                n,
                g,
                b,
                f,
                b,
                0.5,
              );
              h += m;
              break;
            case Ld:
              m = J.jo(
                k,
                l,
                (k + 2 * B.point1X) / 3,
                (l + 2 * B.point1Y) / 3,
                (2 * B.point1X + a) / 3,
                (2 * B.point1Y + n) / 3,
                a,
                n,
                g,
                b,
                f,
                b,
                0.5,
              );
              h += m;
              break;
            case Md:
            case Qd:
              F = B.type === Md ? Rd(B, u) : Sd(B, u, k, l);
              var L = F.length;
              if (0 === L) {
                k = Ud(
                  f,
                  b,
                  g,
                  b,
                  k,
                  l,
                  B.type === Md ? B.centerX : B.endX,
                  B.type === Md ? B.centerY : B.endY,
                );
                if (isNaN(k)) return !0;
                h += k;
                break;
              }
              B = null;
              for (var S = 0; S < L; S++) {
                B = F[S];
                if (0 === S) {
                  m = Ud(f, b, g, b, k, l, B[0], B[1]);
                  if (isNaN(m)) return !0;
                  h += m;
                }
                m = J.jo(
                  B[0],
                  B[1],
                  B[2],
                  B[3],
                  B[4],
                  B[5],
                  B[6],
                  B[7],
                  g,
                  b,
                  f,
                  b,
                  0.5,
                );
                h += m;
              }
              null !== B && ((a = B[6]), (n = B[7]));
              break;
            default:
              C('Unknown Segment type: ' + B.type);
          }
          k = a;
          l = n;
        }
        if (0 !== h) return !0;
        h = 0;
      } else if (u.ba(f, b, e ? c : c + 2)) return !0;
    }
    return 0 !== h;
  }

  function Ud(a, b, c, d, e, f, g, h) {
    if (J.Tb(e, f, g, h, 0.05, a, b)) return NaN;
    var k = (a - c) * (f - h);
    if (0 === k) return 0;
    var l = ((a * d - b * c) * (e - g) - (a - c) * (e * h - f * g)) / k;
    b = ((a * d - b * c) * (f - h)) / k;
    if (l >= a) return 0;
    if ((e > g ? e - g : g - e) < (f > h ? f - h : h - f))
      if (f < h) {
        if (b < f || b > h) return 0;
      } else {
        if (b < h || b > f) return 0;
      }
    else if (e < g) {
      if (l < e || l > g) return 0;
    } else if (l < g || l > e) return 0;
    return 0 < k ? 1 : -1;
  }

  function Vd(a, b, c, d) {
    a = a.figures.s;
    for (var e = a.length, f = 0; f < e; f++) if (a[f].ba(b, c, d)) return !0;
    return !1;
  }
  t.Bu = function(a, b) {
    0 > a ? (a = 0) : 1 < a && (a = 1);
    void 0 === b && (b = new I());
    if (this.type === O.j)
      return (
        b.h(
          this.startX + a * (this.endX - this.startX),
          this.startY + a * (this.endY - this.startY),
        ),
        b
      );
    for (
      var c = this.flattenedSegments,
        d = this.flattenedLengths,
        e = c.length,
        f = this.flattenedTotalLength * a,
        g = 0,
        h = 0;
      h < e;
      h++
    ) {
      var k = d[h],
        l = k.length;
      for (a = 0; a < l; a++) {
        var m = k[a];
        if (g + m >= f)
          return (
            (d = f - g),
            (d = 0 === m ? 0 : d / m),
            (c = c[h]),
            (h = c[2 * a]),
            (e = c[2 * a + 1]),
            b.h(h + (c[2 * a + 2] - h) * d, e + (c[2 * a + 3] - e) * d),
            b
          );
        g += m;
      }
    }
    return b;
  };
  t.Yw = function(a) {
    0 > a ? (a = 0) : 1 < a && (a = 1);
    if (this.type === O.j)
      return (
        (180 * Math.atan2(this.endY - this.startY, this.endX - this.startX)) /
        Math.PI
      );
    for (
      var b = this.flattenedSegments,
        c = this.flattenedLengths,
        d = b.length,
        e = this.flattenedTotalLength * a,
        f = 0,
        g = 0;
      g < d;
      g++
    ) {
      var h = c[g],
        k = h.length;
      for (a = 0; a < k; a++) {
        var l = h[a];
        if (f + l >= e)
          return (
            (e = b[g]),
            (b = e[2 * a]),
            (c = e[2 * a + 1]),
            (d = e[2 * a + 2]),
            (a = e[2 * a + 3]),
            1 > Math.abs(d - b) && 1 > Math.abs(a - c)
              ? 0
              : 1 > Math.abs(d - b)
              ? 0 <= a - c
                ? 90
                : 270
              : 1 > Math.abs(a - c)
              ? 0 <= d - b
                ? 0
                : 180
              : (180 * Math.atan2(a - c, d - b)) / Math.PI
          );
        f += l;
      }
    }
    return NaN;
  };
  t.Cu = function(a, b) {
    0 > a ? (a = 0) : 1 < a && (a = 1);
    void 0 === b && (b = []);
    b.length = 3;
    if (this.type === O.j)
      return (
        (b[0] = this.startX + a * (this.endX - this.startX)),
        (b[1] = this.startY + a * (this.endY - this.startY)),
        (b[2] =
          (180 * Math.atan2(this.endY - this.startY, this.endX - this.startX)) /
          Math.PI),
        b
      );
    for (
      var c = this.flattenedSegments,
        d = this.flattenedLengths,
        e = c.length,
        f = this.flattenedTotalLength * a,
        g = 0,
        h = 0;
      h < e;
      h++
    ) {
      var k = d[h],
        l = k.length;
      for (a = 0; a < l; a++) {
        var m = k[a];
        if (g + m >= f)
          return (
            (d = f - g),
            (d = 0 === m ? 0 : d / m),
            (m = c[h]),
            (c = m[2 * a]),
            (h = m[2 * a + 1]),
            (e = m[2 * a + 2]),
            (a = m[2 * a + 3]),
            (b[0] = c + (e - c) * d),
            (b[1] = h + (a - h) * d),
            (b[2] =
              1 > Math.abs(e - c) && 1 > Math.abs(a - h)
                ? 0
                : 1 > Math.abs(e - c)
                ? 0 <= a - h
                  ? 90
                  : 270
                : 1 > Math.abs(a - h)
                ? 0 <= e - c
                  ? 0
                  : 180
                : (180 * Math.atan2(a - h, e - c)) / Math.PI),
            b
          );
        g += m;
      }
    }
    return b;
  };
  t.Zw = function(a) {
    if (this.type === O.j) {
      var b = this.startX,
        c = this.startY,
        d = this.endX,
        e = this.endY;
      if (b !== d || c !== e) {
        var f = a.x;
        a = a.y;
        if (b === d) {
          if (c < e) {
            var g = c;
            d = e;
          } else (g = e), (d = c);
          return a <= g
            ? g === c
              ? 0
              : 1
            : a >= d
            ? d === c
              ? 0
              : 1
            : Math.abs(a - c) / (d - g);
        }
        if (c === e)
          return (
            b < d ? (g = b) : ((g = d), (d = b)),
            f <= g
              ? g === b
                ? 0
                : 1
              : f >= d
              ? d === b
                ? 0
                : 1
              : Math.abs(f - b) / (d - g)
          );
        g = (d - b) * (d - b) + (e - c) * (e - c);
        var h = I.alloc();
        J.fh(b, c, d, e, f, a, h);
        a = h.x;
        f = h.y;
        I.free(h);
        return Math.sqrt(((a - b) * (a - b) + (f - c) * (f - c)) / g);
      }
    } else if (this.type === O.u) {
      g = this.startX;
      h = this.startY;
      var k = this.endX;
      e = this.endY;
      if (g !== k || h !== e) {
        b = k - g;
        c = e - h;
        f = 2 * b + 2 * c;
        d = a.x;
        a = a.y;
        d = Math.min(Math.max(d, g), k);
        a = Math.min(Math.max(a, h), e);
        g = Math.abs(d - g);
        k = Math.abs(d - k);
        h = Math.abs(a - h);
        e = Math.abs(a - e);
        var l = Math.min(g, k, h, e);
        if (l === h) return d / f;
        if (l === k) return (b + a) / f;
        if (l === e) return (2 * b + c - d) / f;
        if (l === g) return (2 * b + 2 * c - a) / f;
      }
    } else {
      b = this.flattenedSegments;
      c = this.flattenedLengths;
      f = this.flattenedTotalLength;
      d = I.alloc();
      e = Infinity;
      h = g = 0;
      k = b.length;
      for (var m = (l = 0), n = 0; n < k; n++)
        for (var p = b[n], r = c[n], q = p.length, u = 0; u < q; u += 2) {
          var w = p[u],
            v = p[u + 1];
          if (0 !== u) {
            J.fh(l, m, w, v, a.x, a.y, d);
            var z = (d.x - a.x) * (d.x - a.x) + (d.y - a.y) * (d.y - a.y);
            z < e &&
              ((e = z),
              (g = h),
              (g += Math.sqrt((d.x - l) * (d.x - l) + (d.y - m) * (d.y - m))));
            h += r[(u - 2) / 2];
          }
          l = w;
          m = v;
        }
      I.free(d);
      a = g / f;
      return 0 > a ? 0 : 1 < a ? 1 : a;
    }
    return 0;
  };

  function Wd(a) {
    if (null === a.gk) {
      var b = (a.gk = []),
        c = (a.gm = []),
        d = [],
        e = [];
      if (a.type === O.j)
        d.push(a.startX),
          d.push(a.startY),
          d.push(a.endX),
          d.push(a.endY),
          b.push(d),
          e.push(
            Math.sqrt(
              (a.startX - a.endX) * (a.startX - a.endX) +
                (a.startY - a.endY) * (a.startY - a.endY),
            ),
          ),
          c.push(e);
      else if (a.type === O.u)
        d.push(a.startX),
          d.push(a.startY),
          d.push(a.endX),
          d.push(a.startY),
          d.push(a.endX),
          d.push(a.endY),
          d.push(a.startX),
          d.push(a.endY),
          d.push(a.startX),
          d.push(a.startY),
          b.push(d),
          e.push(Math.abs(a.startX - a.endX)),
          e.push(Math.abs(a.startY - a.endY)),
          e.push(Math.abs(a.startX - a.endX)),
          e.push(Math.abs(a.startY - a.endY)),
          c.push(e);
      else if (a.type === O.F) {
        var f = new Xd();
        f.startX = a.endX;
        f.startY = (a.startY + a.endY) / 2;
        var g = new Yd(Md);
        g.startAngle = 0;
        g.sweepAngle = 360;
        g.centerX = (a.startX + a.endX) / 2;
        g.centerY = (a.startY + a.endY) / 2;
        g.radiusX = Math.abs(a.startX - a.endX) / 2;
        g.radiusY = Math.abs(a.startY - a.endY) / 2;
        f.add(g);
        a = Rd(g, f);
        e = a.length;
        if (0 === e) d.push(g.centerX), d.push(g.centerY);
        else {
          g = f.startX;
          f = f.startY;
          for (var h = 0; h < e; h++) {
            var k = a[h];
            J.De(g, f, k[2], k[3], k[4], k[5], k[6], k[7], 0.5, d);
            g = k[6];
            f = k[7];
          }
        }
        b.push(d);
        c.push(Zd(d));
      } else
        for (a = a.figures.iterator; a.next(); ) {
          e = a.value;
          d = [];
          d.push(e.startX);
          d.push(e.startY);
          g = e.startX;
          f = e.startY;
          h = g;
          k = f;
          for (var l = e.segments.s, m = l.length, n = 0; n < m; n++) {
            var p = l[n];
            switch (p.type) {
              case Jd:
                4 <= d.length && (b.push(d), c.push(Zd(d)));
                d = [];
                d.push(p.endX);
                d.push(p.endY);
                g = p.endX;
                f = p.endY;
                h = g;
                k = f;
                break;
              case vd:
                d.push(p.endX);
                d.push(p.endY);
                g = p.endX;
                f = p.endY;
                break;
              case Kd:
                J.De(
                  g,
                  f,
                  p.point1X,
                  p.point1Y,
                  p.point2X,
                  p.point2Y,
                  p.endX,
                  p.endY,
                  0.5,
                  d,
                );
                g = p.endX;
                f = p.endY;
                break;
              case Ld:
                J.Go(g, f, p.point1X, p.point1Y, p.endX, p.endY, 0.5, d);
                g = p.endX;
                f = p.endY;
                break;
              case Md:
                var r = Rd(p, e),
                  q = r.length;
                if (0 === q) {
                  d.push(p.centerX);
                  d.push(p.centerY);
                  g = p.centerX;
                  f = p.centerY;
                  break;
                }
                for (var u = 0; u < q; u++) {
                  var w = r[u];
                  J.De(g, f, w[2], w[3], w[4], w[5], w[6], w[7], 0.5, d);
                  g = w[6];
                  f = w[7];
                }
                break;
              case Qd:
                r = Sd(p, e, g, f);
                q = r.length;
                u = p.endX;
                w = p.endY;
                if (0 === q) {
                  d.push(u);
                  d.push(w);
                  g = u;
                  f = w;
                  break;
                }
                for (u = 0; u < q; u++)
                  (w = r[u]),
                    J.De(g, f, w[2], w[3], w[4], w[5], w[6], w[7], 0.5, d),
                    (g = w[6]),
                    (f = w[7]);
                break;
              default:
                C('Segment not of valid type: ' + p.type);
            }
            p.isClosed && (d.push(h), d.push(k));
          }
          4 <= d.length && (b.push(d), c.push(Zd(d)));
        }
    }
  }

  function Zd(a) {
    for (var b = [], c = 0, d = 0, e = a.length, f = 0; f < e; f += 2) {
      var g = a[f],
        h = a[f + 1];
      0 !== f && b.push(Math.sqrt(Ab(c, d, g, h)));
      c = g;
      d = h;
    }
    return b;
  }
  t.add = function(a) {
    this.Yd.add(a);
    return this;
  };
  t.Yl = function(a, b, c, d, e, f, g, h) {
    this._isFrozen && va(this);
    this.Yf = new N(a, b, e, f).freeze();
    this.Zf = new N(c, d, g, h).freeze();
    return this;
  };
  ma.Object.defineProperties(O.prototype, {
    _isFrozen: {
      get: function() {
        return 0 !== (this.o & 1);
      },
      set: function(a) {
        this.o = a ? this.o | 1 : this.o & -2;
      },
    },
    _isInvalidBounds: {
      get: function() {
        return 0 !== (this.o & 2);
      },
      set: function(a) {
        this.o = a ? this.o | 2 : this.o & -3;
      },
    },
    flattenedSegments: {
      get: function() {
        Wd(this);
        return this.gk;
      },
    },
    flattenedLengths: {
      get: function() {
        Wd(this);
        return this.gm;
      },
    },
    flattenedTotalLength: {
      get: function() {
        var a = this.hm;
        if (isNaN(a)) {
          if (this.type === O.j) {
            a = Math.abs(this.endX - this.startX);
            var b = Math.abs(this.endY - this.startY);
            a = Math.sqrt(a * a + b * b);
          } else if (this.type === O.u)
            a =
              2 * Math.abs(this.endX - this.startX) +
              2 * Math.abs(this.endY - this.startY);
          else {
            b = this.flattenedLengths;
            for (var c = b.length, d = (a = 0); d < c; d++)
              for (var e = b[d], f = e.length, g = 0; g < f; g++) a += e[g];
          }
          this.hm = a;
        }
        return a;
      },
    },
    type: {
      get: function() {
        return this.qa;
      },
      set: function(a) {
        this.qa !== a &&
          (this._isFrozen && va(this, a),
          (this.qa = a),
          a === O.m
            ? (this.Yd = new E())
            : (null === O.W && (O.W = new E().freeze()), (this.Yd = O.W)),
          (this._isInvalidBounds = !0));
      },
    },
    startX: {
      get: function() {
        return this.gd;
      },
      set: function(a) {
        this.gd !== a &&
          (this._isFrozen && va(this, a),
          (this.gd = a),
          (this._isInvalidBounds = !0));
      },
    },
    startY: {
      get: function() {
        return this.hd;
      },
      set: function(a) {
        this.hd !== a &&
          (this._isFrozen && va(this, a),
          (this.hd = a),
          (this._isInvalidBounds = !0));
      },
    },
    endX: {
      get: function() {
        return this.xc;
      },
      set: function(a) {
        this.xc !== a &&
          (this._isFrozen && va(this, a),
          (this.xc = a),
          (this._isInvalidBounds = !0));
      },
    },
    endY: {
      get: function() {
        return this.yc;
      },
      set: function(a) {
        this.yc !== a &&
          (this._isFrozen && va(this, a),
          (this.yc = a),
          (this._isInvalidBounds = !0));
      },
    },
    figures: {
      get: function() {
        return this.Yd;
      },
      set: function(a) {
        this.Yd !== a &&
          (this._isFrozen && va(this, a),
          (this.Yd = a),
          (this._isInvalidBounds = !0));
      },
    },
    spot1: {
      get: function() {
        return this.Yf;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Yf = a.J();
      },
    },
    spot2: {
      get: function() {
        return this.Zf;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Zf = a.J();
      },
    },
    defaultStretch: {
      get: function() {
        return this.Kf;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Kf = a;
      },
    },
    bounds: {
      get: function() {
        this.Lu() && this.computeBounds();
        return this.lp;
      },
    },
  });
  O.prototype.setSpots = O.prototype.Yl;
  O.prototype.add = O.prototype.add;
  O.prototype.getFractionForPoint = O.prototype.Zw;
  O.prototype.getPointAndAngleAlongPath = O.prototype.Cu;
  O.prototype.getAngleAlongPath = O.prototype.Yw;
  O.prototype.getPointAlongPath = O.prototype.Bu;
  O.prototype.containsPoint = O.prototype.ba;
  O.prototype.transform = O.prototype.transform;
  O.prototype.rotate = O.prototype.rotate;
  O.prototype.scale = O.prototype.scale;
  O.prototype.offset = O.prototype.offset;
  O.prototype.normalize = O.prototype.normalize;
  O.prototype.computeBoundsWithoutOrigin = O.prototype.Lw;
  O.prototype.equalsApprox = O.prototype.$a;
  O.className = 'Geometry';
  O.j = new D(O, 'Line', 0);
  O.u = new D(O, 'Rectangle', 1);
  O.F = new D(O, 'Ellipse', 2);
  O.m = new D(O, 'Path', 3);
  O.W = null;
  O.cb = 'UuBbMmZzLlHhVvCcSsQqTtAaFfXx';
  O.className = 'Geometry';
  O.stringify = O.ga;
  O.fillPath = O.hb;
  O.parse = O.parse;
  O.Line = O.j;
  O.Rectangle = O.u;
  O.Ellipse = O.F;
  O.Path = O.m;

  function Xd(a, b, c, d) {
    Ra(this);
    void 0 === c && (c = !0);
    void 0 === d && (d = !0);
    this.o = 2 | (c ? 4 : 0) | (d ? 8 : 0);
    void 0 !== a ? (this.gd = a) : (this.gd = 0);
    void 0 !== b ? (this.hd = b) : (this.hd = 0);
    this.el = new E();
    this.Pq = this.el.Ia;
    this.Kv = null;
  }
  Xd.prototype.copy = function() {
    var a = new Xd();
    a.o = this.o & -2;
    a.gd = this.gd;
    a.hd = this.hd;
    for (var b = this.el.s, c = b.length, d = a.el, e = 0; e < c; e++) {
      var f = b[e].copy();
      d.add(f);
    }
    a.Pq = this.Pq;
    a.Kv = this.Kv;
    return a;
  };
  t = Xd.prototype;
  t.$a = function(a) {
    if (
      !(
        a instanceof Xd &&
        J.B(this.startX, a.startX) &&
        J.B(this.startY, a.startY)
      )
    )
      return !1;
    var b = this.segments.s;
    a = a.segments.s;
    var c = b.length;
    if (c !== a.length) return !1;
    for (var d = 0; d < c; d++) if (!b[d].$a(a[d])) return !1;
    return !0;
  };
  t.toString = function(a) {
    void 0 === a && (a = -1);
    var b =
      0 > a
        ? 'M' + this.startX.toString() + ' ' + this.startY.toString()
        : 'M' + this.startX.toFixed(a) + ' ' + this.startY.toFixed(a);
    for (var c = this.segments.s, d = c.length, e = 0; e < d; e++)
      b += ' ' + c[e].toString(a);
    return b;
  };
  t.freeze = function() {
    this._isFrozen = !0;
    var a = this.segments;
    a.freeze();
    var b = a.s;
    a = a.length;
    for (var c = 0; c < a; c++) b[c].freeze();
    return this;
  };
  t.ja = function() {
    this._isFrozen = !1;
    var a = this.segments;
    a.ja();
    a = a.s;
    for (var b = a.length, c = 0; c < b; c++) a[c].ja();
    return this;
  };
  t.Lu = function() {
    if (this._isInvalidBounds) return !0;
    var a = this.segments;
    if (this.Pq !== a.Ia) return !0;
    a = a.s;
    for (var b = a.length, c = 0; c < b; c++)
      if (a[c]._isInvalidBounds) return !0;
    return !1;
  };
  t.add = function(a) {
    this.el.add(a);
    return this;
  };
  t.ba = function(a, b, c) {
    for (
      var d = this.startX,
        e = this.startY,
        f = d,
        g = e,
        h = this.segments.s,
        k = h.length,
        l = 0;
      l < k;
      l++
    ) {
      var m = h[l];
      switch (m.type) {
        case Jd:
          f = m.endX;
          g = m.endY;
          d = m.endX;
          e = m.endY;
          break;
        case vd:
          if (J.Tb(d, e, m.endX, m.endY, c, a, b)) return !0;
          d = m.endX;
          e = m.endY;
          break;
        case Kd:
          if (
            J.Br(
              d,
              e,
              m.point1X,
              m.point1Y,
              m.point2X,
              m.point2Y,
              m.endX,
              m.endY,
              0.5,
              a,
              b,
              c,
            )
          )
            return !0;
          d = m.endX;
          e = m.endY;
          break;
        case Ld:
          if (J.Tu(d, e, m.point1X, m.point1Y, m.endX, m.endY, 0.5, a, b, c))
            return !0;
          d = m.endX;
          e = m.endY;
          break;
        case Md:
        case Qd:
          var n = m.type === Md ? Rd(m, this) : Sd(m, this, d, e),
            p = n.length,
            r = m.type === Md ? m.centerX : m.endX,
            q = m.type === Md ? m.centerY : m.endY;
          if (0 === p) {
            if (J.Tb(d, e, r, q, c, a, b)) return !0;
            d = r;
            e = q;
            break;
          }
          r = null;
          for (q = 0; q < p; q++)
            if (
              ((r = n[q]),
              (0 === q && J.Tb(d, e, r[0], r[1], c, a, b)) ||
                J.Br(
                  r[0],
                  r[1],
                  r[2],
                  r[3],
                  r[4],
                  r[5],
                  r[6],
                  r[7],
                  0.5,
                  a,
                  b,
                  c,
                ))
            )
              return !0;
          null !== r && ((d = r[6]), (e = r[7]));
          break;
        default:
          C('Unknown Segment type: ' + m.type);
      }
      if (m.isClosed && (d !== f || e !== g) && J.Tb(d, e, f, g, c, a, b))
        return !0;
    }
    return !1;
  };
  ma.Object.defineProperties(Xd.prototype, {
    _isFrozen: {
      get: function() {
        return 0 !== (this.o & 1);
      },
      set: function(a) {
        this.o = a ? this.o | 1 : this.o & -2;
      },
    },
    _isInvalidBounds: {
      get: function() {
        return 0 !== (this.o & 2);
      },
      set: function(a) {
        this.o = a ? this.o | 2 : this.o & -3;
      },
    },
    isFilled: {
      get: function() {
        return 0 !== (this.o & 4);
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.o = a ? this.o | 4 : this.o & -5;
      },
    },
    isShadowed: {
      get: function() {
        return 0 !== (this.o & 8);
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.o = a ? this.o | 8 : this.o & -9;
      },
    },
    startX: {
      get: function() {
        return this.gd;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.gd = a;
        this._isInvalidBounds = !0;
      },
    },
    startY: {
      get: function() {
        return this.hd;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.hd = a;
        this._isInvalidBounds = !0;
      },
    },
    segments: {
      get: function() {
        return this.el;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.el = a;
        this._isInvalidBounds = !0;
      },
    },
  });
  Xd.prototype.add = Xd.prototype.add;
  Xd.prototype.equalsApprox = Xd.prototype.$a;
  Xd.className = 'PathFigure';

  function Yd(a, b, c, d, e, f, g, h) {
    Ra(this);
    void 0 === a && (a = vd);
    this.qa = a;
    this.o = 2;
    void 0 !== b ? (this.xc = b) : (this.xc = 0);
    void 0 !== c ? (this.yc = c) : (this.yc = 0);
    void 0 === d && (d = 0);
    void 0 === e && (e = 0);
    void 0 === f && (f = 0);
    void 0 === g && (g = 0);
    a === Qd
      ? ((a = f % 360),
        0 > a && (a += 360),
        (this.Be = a),
        (this.Oh = 0),
        (this.Ph = Math.max(d, 0)),
        (this.Gg = Math.max(e, 0)),
        'boolean' === typeof g
          ? g && (this.isLargeArc = !0)
          : 'number' === typeof g && g && (this.isLargeArc = !0),
        h && (this.isClockwiseArc = !0))
      : ((this.Be = d),
        (this.Oh = e),
        a === Md && (f = Math.max(f, 0)),
        (this.Ph = f),
        'number' === typeof g
          ? (a === Md && (g = Math.max(g, 0)), (this.Gg = g))
          : (this.Gg = 0));
    this.Ud = null;
  }
  Yd.prototype.copy = function() {
    var a = new Yd();
    a.qa = this.qa;
    a.o = this.o & -2;
    a.xc = this.xc;
    a.yc = this.yc;
    a.Be = this.Be;
    a.Oh = this.Oh;
    a.Ph = this.Ph;
    a.Gg = this.Gg;
    return a;
  };
  t = Yd.prototype;
  t.$a = function(a) {
    if (
      !(a instanceof Yd) ||
      this.type !== a.type ||
      this.isClosed !== a.isClosed
    )
      return !1;
    switch (this.type) {
      case Jd:
      case vd:
        return J.B(this.endX, a.endX) && J.B(this.endY, a.endY);
      case Kd:
        return (
          J.B(this.endX, a.endX) &&
          J.B(this.endY, a.endY) &&
          J.B(this.point1X, a.point1X) &&
          J.B(this.point1Y, a.point1Y) &&
          J.B(this.point2X, a.point2X) &&
          J.B(this.point2Y, a.point2Y)
        );
      case Ld:
        return (
          J.B(this.endX, a.endX) &&
          J.B(this.endY, a.endY) &&
          J.B(this.point1X, a.point1X) &&
          J.B(this.point1Y, a.point1Y)
        );
      case Md:
        return (
          J.B(this.startAngle, a.startAngle) &&
          J.B(this.sweepAngle, a.sweepAngle) &&
          J.B(this.centerX, a.centerX) &&
          J.B(this.centerY, a.centerY) &&
          J.B(this.radiusX, a.radiusX) &&
          J.B(this.radiusY, a.radiusY)
        );
      case Qd:
        return (
          this.isClockwiseArc === a.isClockwiseArc &&
          this.isLargeArc === a.isLargeArc &&
          J.B(this.xAxisRotation, a.xAxisRotation) &&
          J.B(this.endX, a.endX) &&
          J.B(this.endY, a.endY) &&
          J.B(this.radiusX, a.radiusX) &&
          J.B(this.radiusY, a.radiusY)
        );
      default:
        return !1;
    }
  };
  t.ob = function(a) {
    a.classType === Yd && (this.type = a);
  };
  t.toString = function(a) {
    void 0 === a && (a = -1);
    switch (this.type) {
      case Jd:
        a =
          0 > a
            ? 'M' + this.endX.toString() + ' ' + this.endY.toString()
            : 'M' + this.endX.toFixed(a) + ' ' + this.endY.toFixed(a);
        break;
      case vd:
        a =
          0 > a
            ? 'L' + this.endX.toString() + ' ' + this.endY.toString()
            : 'L' + this.endX.toFixed(a) + ' ' + this.endY.toFixed(a);
        break;
      case Kd:
        a =
          0 > a
            ? 'C' +
              this.point1X.toString() +
              ' ' +
              this.point1Y.toString() +
              ' ' +
              this.point2X.toString() +
              ' ' +
              this.point2Y.toString() +
              ' ' +
              this.endX.toString() +
              ' ' +
              this.endY.toString()
            : 'C' +
              this.point1X.toFixed(a) +
              ' ' +
              this.point1Y.toFixed(a) +
              ' ' +
              this.point2X.toFixed(a) +
              ' ' +
              this.point2Y.toFixed(a) +
              ' ' +
              this.endX.toFixed(a) +
              ' ' +
              this.endY.toFixed(a);
        break;
      case Ld:
        a =
          0 > a
            ? 'Q' +
              this.point1X.toString() +
              ' ' +
              this.point1Y.toString() +
              ' ' +
              this.endX.toString() +
              ' ' +
              this.endY.toString()
            : 'Q' +
              this.point1X.toFixed(a) +
              ' ' +
              this.point1Y.toFixed(a) +
              ' ' +
              this.endX.toFixed(a) +
              ' ' +
              this.endY.toFixed(a);
        break;
      case Md:
        a =
          0 > a
            ? 'B' +
              this.startAngle.toString() +
              ' ' +
              this.sweepAngle.toString() +
              ' ' +
              this.centerX.toString() +
              ' ' +
              this.centerY.toString() +
              ' ' +
              this.radiusX.toString() +
              ' ' +
              this.radiusY.toString()
            : 'B' +
              this.startAngle.toFixed(a) +
              ' ' +
              this.sweepAngle.toFixed(a) +
              ' ' +
              this.centerX.toFixed(a) +
              ' ' +
              this.centerY.toFixed(a) +
              ' ' +
              this.radiusX.toFixed(a) +
              ' ' +
              this.radiusY.toFixed(a);
        break;
      case Qd:
        a =
          0 > a
            ? 'A' +
              this.radiusX.toString() +
              ' ' +
              this.radiusY.toString() +
              ' ' +
              this.xAxisRotation.toString() +
              ' ' +
              (this.isLargeArc ? 1 : 0) +
              ' ' +
              (this.isClockwiseArc ? 1 : 0) +
              ' ' +
              this.endX.toString() +
              ' ' +
              this.endY.toString()
            : 'A' +
              this.radiusX.toFixed(a) +
              ' ' +
              this.radiusY.toFixed(a) +
              ' ' +
              this.xAxisRotation.toFixed(a) +
              ' ' +
              (this.isLargeArc ? 1 : 0) +
              ' ' +
              (this.isClockwiseArc ? 1 : 0) +
              ' ' +
              this.endX.toFixed(a) +
              ' ' +
              this.endY.toFixed(a);
        break;
      default:
        a = this.type.toString();
    }
    return a + (this.isClosed ? 'z' : '');
  };
  t.freeze = function() {
    this._isFrozen = !0;
    return this;
  };
  t.ja = function() {
    this._isFrozen = !1;
    return this;
  };
  t.close = function() {
    this.isClosed = !0;
    return this;
  };

  function Rd(a, b) {
    if (null !== a.Ud && !1 === b._isInvalidBounds) return a.Ud;
    var c = a.radiusX,
      d = a.radiusY;
    void 0 === d && (d = c);
    if (0 === c || 0 === d) return (a.Ud = []), a.Ud;
    b = a.Be;
    var e = a.Oh,
      f = J.Mw(
        0,
        0,
        c < d ? c : d,
        a.startAngle,
        a.startAngle + a.sweepAngle,
        !1,
      );
    if (c !== d) {
      var g = md.alloc();
      g.reset();
      c < d ? g.scale(1, d / c) : g.scale(c / d, 1);
      O.Ga(f, g);
      md.free(g);
    }
    c = f.length;
    for (d = 0; d < c; d++)
      (g = f[d]),
        (g[0] += b),
        (g[1] += e),
        (g[2] += b),
        (g[3] += e),
        (g[4] += b),
        (g[5] += e),
        (g[6] += b),
        (g[7] += e);
    a.Ud = f;
    return a.Ud;
  }

  function Sd(a, b, c, d) {
    function e(a, b, c, d) {
      return (
        (a * d < b * c ? -1 : 1) *
        Math.acos(
          (a * c + b * d) /
            (Math.sqrt(a * a + b * b) * Math.sqrt(c * c + d * d)),
        )
      );
    }
    if (null !== a.Ud && !1 === b._isInvalidBounds) return a.Ud;
    if (0 === a.radiusX || 0 === a.radiusY) return (a.Ud = []), a.Ud;
    b = a.Ph;
    var f = a.Gg;
    0 === b && (b = 1e-4);
    0 === f && (f = 1e-4);
    var g = (Math.PI / 180) * a.Be,
      h = a.isLargeArc,
      k = a.isClockwiseArc,
      l = a.xc,
      m = a.yc,
      n = Math.cos(g),
      p = Math.sin(g),
      r = (n * (c - l)) / 2 + (p * (d - m)) / 2;
    g = (-p * (c - l)) / 2 + (n * (d - m)) / 2;
    var q = (r * r) / (b * b) + (g * g) / (f * f);
    1 < q && ((b *= Math.sqrt(q)), (f *= Math.sqrt(q)));
    q =
      (h === k ? -1 : 1) *
      Math.sqrt(
        (b * b * f * f - b * b * g * g - f * f * r * r) /
          (b * b * g * g + f * f * r * r),
      );
    isNaN(q) && (q = 0);
    h = (q * b * g) / f;
    q = (q * -f * r) / b;
    isNaN(h) && (h = 0);
    isNaN(q) && (q = 0);
    c = (c + l) / 2 + n * h - p * q;
    d = (d + m) / 2 + p * h + n * q;
    m = e(1, 0, (r - h) / b, (g - q) / f);
    n = (r - h) / b;
    l = (g - q) / f;
    r = (-r - h) / b;
    h = (-g - q) / f;
    g = e(n, l, r, h);
    r = (n * r + l * h) / (Math.sqrt(n * n + l * l) * Math.sqrt(r * r + h * h));
    -1 >= r ? (g = Math.PI) : 1 <= r && (g = 0);
    !k && 0 < g && (g -= 2 * Math.PI);
    k && 0 > g && (g += 2 * Math.PI);
    k = b > f ? 1 : b / f;
    r = b > f ? f / b : 1;
    b = J.Mw(0, 0, b > f ? b : f, m, m + g, !0);
    f = md.alloc();
    f.reset();
    f.translate(c, d);
    f.rotate(a.Be, 0, 0);
    f.scale(k, r);
    O.Ga(b, f);
    md.free(f);
    a.Ud = b;
    return a.Ud;
  }
  ma.Object.defineProperties(Yd.prototype, {
    _isFrozen: {
      get: function() {
        return 0 !== (this.o & 1);
      },
      set: function(a) {
        this.o = a ? this.o | 1 : this.o & -2;
      },
    },
    _isInvalidBounds: {
      get: function() {
        return 0 !== (this.o & 2);
      },
      set: function(a) {
        this.o = a ? this.o | 2 : this.o & -3;
      },
    },
    isClosed: {
      get: function() {
        return 0 !== (this.o & 8);
      },
      set: function(a) {
        this.isClosed !== a &&
          ((this.o = a ? this.o | 8 : this.o & -9),
          (this._isInvalidBounds = !0));
      },
    },
    type: {
      get: function() {
        return this.qa;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.qa = a;
        this._isInvalidBounds = !0;
      },
    },
    endX: {
      get: function() {
        return this.xc;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.xc = a;
        this._isInvalidBounds = !0;
      },
    },
    endY: {
      get: function() {
        return this.yc;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.yc = a;
        this._isInvalidBounds = !0;
      },
    },
    point1X: {
      get: function() {
        return this.Be;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Be = a;
        this._isInvalidBounds = !0;
      },
    },
    point1Y: {
      get: function() {
        return this.Oh;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Oh = a;
        this._isInvalidBounds = !0;
      },
    },
    point2X: {
      get: function() {
        return this.Ph;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Ph = a;
        this._isInvalidBounds = !0;
      },
    },
    point2Y: {
      get: function() {
        return this.Gg;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Gg = a;
        this._isInvalidBounds = !0;
      },
    },
    centerX: {
      get: function() {
        return this.Be;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Be = a;
        this._isInvalidBounds = !0;
      },
    },
    centerY: {
      get: function() {
        return this.Oh;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Oh = a;
        this._isInvalidBounds = !0;
      },
    },
    radiusX: {
      get: function() {
        return this.Ph;
      },
      set: function(a) {
        0 > a && wa(a, '>= zero', Yd, 'radiusX');
        this._isFrozen && va(this, a);
        this.Ph = a;
        this._isInvalidBounds = !0;
      },
    },
    radiusY: {
      get: function() {
        return this.Gg;
      },
      set: function(a) {
        0 > a && wa(a, '>= zero', Yd, 'radiusY');
        this._isFrozen && va(this, a);
        this.Gg = a;
        this._isInvalidBounds = !0;
      },
    },
    startAngle: {
      get: function() {
        return this.xc;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        a %= 360;
        0 > a && (a += 360);
        this.xc = a;
        this._isInvalidBounds = !0;
      },
    },
    sweepAngle: {
      get: function() {
        return this.yc;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        360 < a && (a = 360);
        -360 > a && (a = -360);
        this.yc = a;
        this._isInvalidBounds = !0;
      },
    },
    isClockwiseArc: {
      get: function() {
        return 0 !== (this.o & 4);
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.o = a ? this.o | 4 : this.o & -5;
        this._isInvalidBounds = !0;
      },
    },
    isLargeArc: {
      get: function() {
        return 0 !== (this.o & 16);
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.o = a ? this.o | 16 : this.o & -17;
        this._isInvalidBounds = !0;
      },
    },
    xAxisRotation: {
      get: function() {
        return this.Be;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        a %= 360;
        0 > a && (a += 360);
        this.Be = a;
        this._isInvalidBounds = !0;
      },
    },
  });
  Yd.prototype.equalsApprox = Yd.prototype.$a;
  var Jd = new D(Yd, 'Move', 0),
    vd = new D(Yd, 'Line', 1),
    Kd = new D(Yd, 'Bezier', 2),
    Ld = new D(Yd, 'QuadraticBezier', 3),
    Md = new D(Yd, 'Arc', 4),
    Qd = new D(Yd, 'SvgArc', 4);
  Yd.className = 'PathSegment';
  Yd.Move = Jd;
  Yd.Line = vd;
  Yd.Bezier = Kd;
  Yd.QuadraticBezier = Ld;
  Yd.Arc = Md;
  Yd.SvgArc = Qd;

  function $d() {
    this.H = null;
    this.cu = new I(0, 0).freeze();
    this.Os = new I(0, 0).freeze();
    this.ep = this.qq = 0;
    this.fp = 1;
    this.yh = '';
    this.vr = this.xp = !1;
    this.vp = this.hp = 0;
    this.og = this.Pp = this.Vp = !1;
    this.Cp = null;
    this.qr = 0;
    this.sd = this.lr = null;
  }
  $d.prototype.copy = function() {
    var a = new $d();
    return this.clone(a);
  };
  $d.prototype.clone = function(a) {
    a.H = this.H;
    a.cu.assign(this.viewPoint);
    a.Os.assign(this.documentPoint);
    a.qq = this.qq;
    a.ep = this.ep;
    a.fp = this.fp;
    a.yh = this.yh;
    a.xp = this.xp;
    a.vr = this.vr;
    a.hp = this.hp;
    a.vp = this.vp;
    a.Vp = this.Vp;
    a.Pp = this.Pp;
    a.og = this.og;
    a.Cp = this.Cp;
    a.qr = this.qr;
    a.lr = this.lr;
    a.sd = this.sd;
    return a;
  };
  $d.prototype.toString = function() {
    var a = '^';
    0 !== this.modifiers && (a += 'M:' + this.modifiers);
    0 !== this.button && (a += 'B:' + this.button);
    '' !== this.key && (a += 'K:' + this.key);
    0 !== this.clickCount && (a += 'C:' + this.clickCount);
    0 !== this.delta && (a += 'D:' + this.delta);
    this.handled && (a += 'h');
    this.bubbles && (a += 'b');
    null !== this.documentPoint && (a += '@' + this.documentPoint.toString());
    return a;
  };
  $d.prototype.vo = function(a, b) {
    var c = this.diagram;
    if (null === c) return b;
    ae(c, this.event, a, b);
    return b;
  };
  $d.prototype.iz = function(a, b) {
    var c = this.diagram;
    if (null === c) return b;
    ae(c, this.event, a, b);
    b.assign(c.rs(b));
    return b;
  };
  ma.Object.defineProperties($d.prototype, {
    diagram: {
      get: function() {
        return this.H;
      },
      set: function(a) {
        this.H = a;
      },
    },
    viewPoint: {
      get: function() {
        return this.cu;
      },
      set: function(a) {
        this.cu.assign(a);
      },
    },
    documentPoint: {
      get: function() {
        return this.Os;
      },
      set: function(a) {
        this.Os.assign(a);
      },
    },
    modifiers: {
      get: function() {
        return this.qq;
      },
      set: function(a) {
        this.qq = a;
      },
    },
    button: {
      get: function() {
        return this.ep;
      },
      set: function(a) {
        this.ep = a;
        if (null === this.event)
          switch (a) {
            case 0:
              this.buttons = 1;
              break;
            case 1:
              this.buttons = 4;
              break;
            case 2:
              this.buttons = 2;
          }
      },
    },
    buttons: {
      get: function() {
        return this.fp;
      },
      set: function(a) {
        this.fp = a;
      },
    },
    key: {
      get: function() {
        return this.yh;
      },
      set: function(a) {
        this.yh = a;
      },
    },
    down: {
      get: function() {
        return this.xp;
      },
      set: function(a) {
        this.xp = a;
      },
    },
    up: {
      get: function() {
        return this.vr;
      },
      set: function(a) {
        this.vr = a;
      },
    },
    clickCount: {
      get: function() {
        return this.hp;
      },
      set: function(a) {
        this.hp = a;
      },
    },
    delta: {
      get: function() {
        return this.vp;
      },
      set: function(a) {
        this.vp = a;
      },
    },
    isMultiTouch: {
      get: function() {
        return this.Vp;
      },
      set: function(a) {
        this.Vp = a;
      },
    },
    handled: {
      get: function() {
        return this.Pp;
      },
      set: function(a) {
        this.Pp = a;
      },
    },
    bubbles: {
      get: function() {
        return this.og;
      },
      set: function(a) {
        this.og = a;
      },
    },
    event: {
      get: function() {
        return this.Cp;
      },
      set: function(a) {
        this.Cp = a;
      },
    },
    isTouchEvent: {
      get: function() {
        var a = x.TouchEvent,
          b = this.event;
        return a && b instanceof a
          ? !0
          : (a = x.PointerEvent) &&
              b instanceof a &&
              ('touch' === b.pointerType || 'pen' === b.pointerType);
      },
    },
    timestamp: {
      get: function() {
        return this.qr;
      },
      set: function(a) {
        this.qr = a;
      },
    },
    targetDiagram: {
      get: function() {
        return this.lr;
      },
      set: function(a) {
        this.lr = a;
      },
    },
    targetObject: {
      get: function() {
        return this.sd;
      },
      set: function(a) {
        this.sd = a;
      },
    },
    control: {
      get: function() {
        return 0 !== (this.modifiers & 1);
      },
      set: function(a) {
        this.modifiers = a ? this.modifiers | 1 : this.modifiers & -2;
      },
    },
    shift: {
      get: function() {
        return 0 !== (this.modifiers & 4);
      },
      set: function(a) {
        this.modifiers = a ? this.modifiers | 4 : this.modifiers & -5;
      },
    },
    alt: {
      get: function() {
        return 0 !== (this.modifiers & 2);
      },
      set: function(a) {
        this.modifiers = a ? this.modifiers | 2 : this.modifiers & -3;
      },
    },
    meta: {
      get: function() {
        return 0 !== (this.modifiers & 8);
      },
      set: function(a) {
        this.modifiers = a ? this.modifiers | 8 : this.modifiers & -9;
      },
    },
    left: {
      get: function() {
        var a = this.event;
        return null === a ||
          ('mousedown' !== a.type &&
            'mouseup' !== a.type &&
            'pointerdown' !== a.type &&
            'pointerup' !== a.type)
          ? 0 !== (this.buttons & 1)
          : 0 === this.button;
      },
      set: function(a) {
        this.buttons = a ? this.buttons | 1 : this.buttons & -2;
      },
    },
    right: {
      get: function() {
        var a = this.event;
        return null === a ||
          ('mousedown' !== a.type &&
            'mouseup' !== a.type &&
            'pointerdown' !== a.type &&
            'pointerup' !== a.type)
          ? 0 !== (this.buttons & 2)
          : 2 === this.button;
      },
      set: function(a) {
        this.buttons = a ? this.buttons | 2 : this.buttons & -3;
      },
    },
    middle: {
      get: function() {
        var a = this.event;
        return null === a ||
          ('mousedown' !== a.type &&
            'mouseup' !== a.type &&
            'pointerdown' !== a.type &&
            'pointerup' !== a.type)
          ? 0 !== (this.buttons & 4)
          : 1 === this.button;
      },
      set: function(a) {
        this.buttons = a ? this.buttons | 4 : this.buttons & -5;
      },
    },
  });
  $d.prototype.getMultiTouchDocumentPoint = $d.prototype.iz;
  $d.prototype.getMultiTouchViewPoint = $d.prototype.vo;
  $d.className = 'InputEvent';

  function be() {
    this.H = null;
    this.va = '';
    this.zq = this.hr = null;
  }
  be.prototype.copy = function() {
    var a = new be();
    a.H = this.H;
    a.va = this.va;
    a.hr = this.hr;
    a.zq = this.zq;
    return a;
  };
  be.prototype.toString = function() {
    var a = '*' + this.name;
    null !== this.subject && (a += ':' + this.subject.toString());
    null !== this.parameter && (a += '(' + this.parameter.toString() + ')');
    return a;
  };
  ma.Object.defineProperties(be.prototype, {
    diagram: {
      get: function() {
        return this.H;
      },
      set: function(a) {
        this.H = a;
      },
    },
    name: {
      get: function() {
        return this.va;
      },
      set: function(a) {
        this.va = a;
      },
    },
    subject: {
      get: function() {
        return this.hr;
      },
      set: function(a) {
        this.hr = a;
      },
    },
    parameter: {
      get: function() {
        return this.zq;
      },
      set: function(a) {
        this.zq = a;
      },
    },
  });
  be.className = 'DiagramEvent';

  function ce() {
    this.nm = de;
    this.df = this.pq = '';
    this.sn = this.tn = this.yn = this.zn = this.xn = this.H = this.ac = null;
  }
  ce.prototype.clear = function() {
    this.sn = this.tn = this.yn = this.zn = this.xn = this.H = this.ac = null;
  };
  ce.prototype.copy = function() {
    var a = new ce();
    a.nm = this.nm;
    a.pq = this.pq;
    a.df = this.df;
    a.ac = this.ac;
    a.H = this.H;
    a.xn = this.xn;
    var b = this.zn;
    a.zn = ya(b) && 'function' === typeof b.J ? b.J() : b;
    b = this.yn;
    a.yn = ya(b) && 'function' === typeof b.J ? b.J() : b;
    b = this.tn;
    a.tn = ya(b) && 'function' === typeof b.J ? b.J() : b;
    b = this.sn;
    a.sn = ya(b) && 'function' === typeof b.J ? b.J() : b;
    return a;
  };
  ce.prototype.ob = function(a) {
    a.classType === ce && (this.change = a);
  };
  ce.prototype.toString = function() {
    var a = '';
    a =
      this.change === ee
        ? a + '* '
        : this.change === de
        ? a + (null !== this.model ? '!m' : '!d')
        : a + ((null !== this.model ? '!m' : '!d') + this.change);
    this.propertyName &&
      'string' === typeof this.propertyName &&
      (a += ' ' + this.propertyName);
    this.modelChange &&
      this.modelChange !== this.propertyName &&
      (a += ' ' + this.modelChange);
    a += ': ';
    this.change === ee
      ? null !== this.oldValue && (a += ' ' + this.oldValue)
      : (null !== this.object && (a += Ia(this.object)),
        null !== this.oldValue && (a += '  old: ' + Ia(this.oldValue)),
        null !== this.oldParam && (a += ' ' + this.oldParam),
        null !== this.newValue && (a += '  new: ' + Ia(this.newValue)),
        null !== this.newParam && (a += ' ' + this.newParam));
    return a;
  };
  ce.prototype.I = function(a) {
    return a ? this.oldValue : this.newValue;
  };
  ce.prototype.kz = function(a) {
    return a ? this.oldParam : this.newParam;
  };
  ce.prototype.canUndo = function() {
    return null !== this.model || null !== this.diagram ? !0 : !1;
  };
  ce.prototype.undo = function() {
    this.canUndo() &&
      (null !== this.model
        ? this.model.changeState(this, !0)
        : null !== this.diagram && this.diagram.changeState(this, !0));
  };
  ce.prototype.canRedo = function() {
    return null !== this.model || null !== this.diagram ? !0 : !1;
  };
  ce.prototype.redo = function() {
    this.canRedo() &&
      (null !== this.model
        ? this.model.changeState(this, !1)
        : null !== this.diagram && this.diagram.changeState(this, !1));
  };
  ma.Object.defineProperties(ce.prototype, {
    model: {
      get: function() {
        return this.ac;
      },
      set: function(a) {
        this.ac = a;
      },
    },
    diagram: {
      get: function() {
        return this.H;
      },
      set: function(a) {
        this.H = a;
      },
    },
    change: {
      get: function() {
        return this.nm;
      },
      set: function(a) {
        this.nm = a;
      },
    },
    modelChange: {
      get: function() {
        return this.pq;
      },
      set: function(a) {
        this.pq = a;
      },
    },
    propertyName: {
      get: function() {
        return this.df;
      },
      set: function(a) {
        this.df = a;
      },
    },
    isTransactionFinished: {
      get: function() {
        return (
          this.nm === ee &&
          ('CommittedTransaction' === this.df ||
            'FinishedUndo' === this.df ||
            'FinishedRedo' === this.df)
        );
      },
    },
    object: {
      get: function() {
        return this.xn;
      },
      set: function(a) {
        this.xn = a;
      },
    },
    oldValue: {
      get: function() {
        return this.zn;
      },
      set: function(a) {
        this.zn = a;
      },
    },
    oldParam: {
      get: function() {
        return this.yn;
      },
      set: function(a) {
        this.yn = a;
      },
    },
    newValue: {
      get: function() {
        return this.tn;
      },
      set: function(a) {
        this.tn = a;
      },
    },
    newParam: {
      get: function() {
        return this.sn;
      },
      set: function(a) {
        this.sn = a;
      },
    },
  });
  ce.prototype.redo = ce.prototype.redo;
  ce.prototype.canRedo = ce.prototype.canRedo;
  ce.prototype.undo = ce.prototype.undo;
  ce.prototype.canUndo = ce.prototype.canUndo;
  ce.prototype.getParam = ce.prototype.kz;
  ce.prototype.getValue = ce.prototype.I;
  ce.prototype.clear = ce.prototype.clear;
  var ee = new D(ce, 'Transaction', -1),
    de = new D(ce, 'Property', 0),
    fe = new D(ce, 'Insert', 1),
    ge = new D(ce, 'Remove', 2);
  ce.className = 'ChangedEvent';
  ce.Transaction = ee;
  ce.Property = de;
  ce.Insert = fe;
  ce.Remove = ge;

  function he() {
    this.m = new E().freeze();
    this.va = '';
    this.j = !1;
  }
  he.prototype.toString = function(a) {
    var b =
      'Transaction: ' +
      this.name +
      ' ' +
      this.changes.count.toString() +
      (this.isComplete ? '' : ', incomplete');
    if (void 0 !== a && 0 < a) {
      a = this.changes.count;
      for (var c = 0; c < a; c++) {
        var d = this.changes.K(c);
        null !== d && (b += '\n  ' + d.toString());
      }
    }
    return b;
  };
  he.prototype.clear = function() {
    var a = this.changes;
    a.ja();
    for (var b = a.count - 1; 0 <= b; b--) {
      var c = a.K(b);
      null !== c && c.clear();
    }
    a.clear();
    a.freeze();
  };
  he.prototype.canUndo = function() {
    return this.isComplete;
  };
  he.prototype.undo = function() {
    if (this.canUndo())
      for (var a = this.changes.count - 1; 0 <= a; a--) {
        var b = this.changes.K(a);
        null !== b && b.undo();
      }
  };
  he.prototype.canRedo = function() {
    return this.isComplete;
  };
  he.prototype.redo = function() {
    if (this.canRedo())
      for (var a = this.changes.count, b = 0; b < a; b++) {
        var c = this.changes.K(b);
        null !== c && c.redo();
      }
  };
  he.prototype.Vj = function() {
    if (this.isComplete) {
      var a = this.changes;
      a.ja();
      for (var b = new pb(), c = 0; c < a.count; c++) {
        var d = a.K(c);
        if (null !== d && d.change === de && d.object) {
          var e = b.get(d.object);
          e || ((e = new pb()), b.set(d.object, e));
          var f = e.get(d.propertyName);
          null === f
            ? e.set(d.propertyName, -1)
            : (0 < f && a.Vc(f, null), e.set(d.propertyName, c));
        }
      }
      for (c = b = 0; c < a.count; c++)
        (d = a.K(c)), null !== d && (c > b && a.Vc(b, d), b++);
      for (; a.length > b; ) a.pop();
      a.freeze();
    }
  };
  ma.Object.defineProperties(he.prototype, {
    changes: {
      get: function() {
        return this.m;
      },
    },
    name: {
      get: function() {
        return this.va;
      },
      set: function(a) {
        this.va = a;
      },
    },
    isComplete: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j = a;
      },
    },
  });
  he.prototype.optimize = he.prototype.Vj;
  he.prototype.redo = he.prototype.redo;
  he.prototype.canRedo = he.prototype.canRedo;
  he.prototype.undo = he.prototype.undo;
  he.prototype.canUndo = he.prototype.canUndo;
  he.prototype.clear = he.prototype.clear;
  he.className = 'Transaction';

  function ie() {
    this.ut = new G();
    this.Ad = !1;
    this.u = new E().freeze();
    this.se = -1;
    this.m = 999;
    this.ue = !1;
    this.qp = null;
    this.Vh = 0;
    this.j = !1;
    this.xe = new E().freeze();
    this.Wk = new E();
    this.Ws = !0;
    this.ft = this.Tp = this.it = this.ht = !1;
  }
  ie.prototype.toString = function(a) {
    var b =
      'UndoManager ' +
      this.historyIndex +
      '<' +
      this.history.count +
      '<=' +
      this.maxHistoryLength;
    b += '[';
    for (var c = this.nestedTransactionNames.count, d = 0; d < c; d++)
      0 < d && (b += ' '), (b += this.nestedTransactionNames.K(d));
    b += ']';
    if (void 0 !== a && 0 < a)
      for (c = this.history.count, d = 0; d < c; d++)
        b += '\n ' + this.history.K(d).toString(a - 1);
    return b;
  };
  ie.prototype.clear = function() {
    var a = this.history;
    a.ja();
    for (var b = a.count - 1; 0 <= b; b--) {
      var c = a.K(b);
      null !== c && c.clear();
    }
    a.clear();
    this.se = -1;
    a.freeze();
    this.ue = !1;
    this.qp = null;
    this.Vh = 0;
    this.xe.ja();
    this.xe.clear();
    this.xe.freeze();
    this.Wk.clear();
    this.ft = this.Tp = this.it = this.ht = !1;
  };
  ie.prototype.copyProperties = function(a) {
    this.isEnabled = a.isEnabled;
    this.maxHistoryLength = a.maxHistoryLength;
    this.checksTransactionLevel = a.checksTransactionLevel;
  };
  t = ie.prototype;
  t.Bw = function(a) {
    this.ut.add(a);
  };
  t.yx = function(a) {
    this.ut.remove(a);
  };
  t.Da = function(a) {
    void 0 === a && (a = '');
    null === a && (a = '');
    if (this.isUndoingRedoing) return !1;
    !0 === this.Ws &&
      ((this.Ws = !1),
      this.Vh++,
      this.isInternalTransaction ||
        this.Kb('StartingFirstTransaction', a, this.currentTransaction),
      0 < this.Vh && this.Vh--);
    this.isEnabled &&
      (this.xe.ja(),
      this.xe.add(a),
      this.xe.freeze(),
      null === this.currentTransaction
        ? this.Wk.add(0)
        : this.Wk.add(this.currentTransaction.changes.count));
    this.Vh++;
    var b = 1 === this.transactionLevel;
    b &&
      (this.isInternalTransaction ||
        this.Kb('StartedTransaction', a, this.currentTransaction));
    return b;
  };
  t.eb = function(a) {
    void 0 === a && (a = '');
    return je(this, !0, a);
  };
  t.Bf = function() {
    return je(this, !1, '');
  };

  function je(a, b, c) {
    if (a.isUndoingRedoing) return !1;
    a.checksTransactionLevel &&
      1 > a.transactionLevel &&
      xa('Ending transaction without having started a transaction: ' + c);
    var d = 1 === a.transactionLevel,
      e = a.currentTransaction;
    d && b && (a.isInternalTransaction || a.Kb('CommittingTransaction', c, e));
    var f = 0;
    if (0 < a.transactionLevel && (a.Vh--, a.isEnabled)) {
      var g = a.xe.count;
      0 < g &&
        ('' === c && (c = a.xe.K(0)), a.xe.ja(), a.xe.mb(g - 1), a.xe.freeze());
      g = a.Wk.count;
      0 < g && ((f = a.Wk.K(g - 1)), a.Wk.mb(g - 1));
    }
    if (d) {
      if (b) {
        a.Tp = !1;
        null === e && '' !== c && (e = a.currentTransaction);
        if (a.isEnabled && null !== e) {
          e.isComplete || ((e.isComplete = !0), (e.name = c));
          b = a.history;
          b.ja();
          for (d = b.count - 1; d > a.historyIndex; d--)
            (f = b.K(d)), null !== f && f.clear(), b.mb(d), (a.Tp = !0);
          d = a.maxHistoryLength;
          0 <= d &&
            (0 === d
              ? b.clear()
              : b.count >= d &&
                ((f = b.K(0)), null !== f && f.clear(), b.mb(0), a.se--));
          0 === d ||
            (0 !== b.count && b.get(b.count - 1) === e) ||
            (b.add(e), a.se++);
          b.freeze();
        }
        a.isInternalTransaction || a.Kb('CommittedTransaction', c, e);
      } else {
        a.ue = !0;
        try {
          a.isEnabled && null !== e && ((e.isComplete = !0), e.undo());
        } finally {
          a.isInternalTransaction || a.Kb('RolledBackTransaction', c, e),
            (a.ue = !1);
        }
        null !== e && e.clear();
      }
      a.qp = null;
      a.isPendingClear && a.clear();
      a.isPendingClear = !1;
      a.isPendingUnmodified = !1;
      return !0;
    }
    if (a.isEnabled && !b && null !== e) {
      a = f;
      c = e.changes;
      for (e = c.count - 1; e >= a; e--)
        (b = c.K(e)), null !== b && b.undo(), c.ja(), c.mb(e);
      c.freeze();
    }
    return !1;
  }
  ie.prototype.canUndo = function() {
    if (!this.isEnabled || 0 < this.transactionLevel) return !1;
    var a = this.transactionToUndo;
    return null !== a && a.canUndo() ? !0 : !1;
  };
  ie.prototype.undo = function() {
    if (this.canUndo()) {
      var a = this.transactionToUndo;
      try {
        (this.ue = !0), this.Kb('StartingUndo', 'Undo', a), this.se--, a.undo();
      } catch (b) {
        xa('undo error: ' + b.toString());
      } finally {
        this.Kb('FinishedUndo', 'Undo', a), (this.ue = !1);
      }
    }
  };
  ie.prototype.canRedo = function() {
    if (!this.isEnabled || 0 < this.transactionLevel) return !1;
    var a = this.transactionToRedo;
    return null !== a && a.canRedo() ? !0 : !1;
  };
  ie.prototype.redo = function() {
    if (this.canRedo()) {
      var a = this.transactionToRedo;
      try {
        (this.ue = !0), this.Kb('StartingRedo', 'Redo', a), this.se++, a.redo();
      } catch (b) {
        xa('redo error: ' + b.toString());
      } finally {
        this.Kb('FinishedRedo', 'Redo', a), (this.ue = !1);
      }
    }
  };
  ie.prototype.Kb = function(a, b, c) {
    void 0 === c && (c = null);
    var d = new ce();
    d.change = ee;
    d.propertyName = a;
    d.object = c;
    d.oldValue = b;
    for (a = this.models; a.next(); ) (b = a.value), (d.model = b), b.Cr(d);
  };
  ie.prototype.Fu = function(a) {
    if (this.isEnabled && !this.isUndoingRedoing && !this.skipsEvent(a)) {
      var b = this.currentTransaction;
      null === b && (this.qp = b = new he());
      var c = a.copy();
      b = b.changes;
      b.ja();
      b.add(c);
      b.freeze();
      this.checksTransactionLevel &&
        0 >= this.transactionLevel &&
        !this.Ws &&
        ((a = a.diagram),
        (null !== a && !1 === a.ji) ||
          xa('Change not within a transaction: ' + c.toString()));
    }
  };
  ie.prototype.skipsEvent = function(a) {
    if (null === a || 0 > a.change.value) return !0;
    a = a.object;
    if (null === a) return !1;
    if (void 0 !== a.layer) {
      if (((a = a.layer), null !== a && a.isTemporary)) return !0;
    } else if (a.isTemporary) return !0;
    return !1;
  };
  ma.Object.defineProperties(ie.prototype, {
    models: {
      get: function() {
        return this.ut.iterator;
      },
    },
    isEnabled: {
      get: function() {
        return this.Ad;
      },
      set: function(a) {
        this.Ad = a;
      },
    },
    transactionToUndo: {
      get: function() {
        return 0 <= this.historyIndex &&
          this.historyIndex <= this.history.count - 1
          ? this.history.K(this.historyIndex)
          : null;
      },
    },
    transactionToRedo: {
      get: function() {
        return this.historyIndex < this.history.count - 1
          ? this.history.K(this.historyIndex + 1)
          : null;
      },
    },
    isUndoingRedoing: {
      get: function() {
        return this.ue;
      },
    },
    history: {
      get: function() {
        return this.u;
      },
    },
    maxHistoryLength: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a;
      },
    },
    historyIndex: {
      get: function() {
        return this.se;
      },
    },
    currentTransaction: {
      get: function() {
        return this.qp;
      },
    },
    transactionLevel: {
      get: function() {
        return this.Vh;
      },
    },
    isInTransaction: {
      get: function() {
        return 0 < this.Vh;
      },
    },
    checksTransactionLevel: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j = a;
      },
    },
    nestedTransactionNames: {
      get: function() {
        return this.xe;
      },
    },
    isPendingClear: {
      get: function() {
        return this.ht;
      },
      set: function(a) {
        this.ht = a;
      },
    },
    isPendingUnmodified: {
      get: function() {
        return this.it;
      },
      set: function(a) {
        this.it = a;
      },
    },
    isInternalTransaction: {
      get: function() {
        return this.ft;
      },
      set: function(a) {
        this.ft = a;
      },
    },
    isJustDiscarded: {
      get: function() {
        return this.Tp;
      },
    },
  });
  ie.prototype.handleChanged = ie.prototype.Fu;
  ie.prototype.redo = ie.prototype.redo;
  ie.prototype.undo = ie.prototype.undo;
  ie.prototype.canUndo = ie.prototype.canUndo;
  ie.prototype.rollbackTransaction = ie.prototype.Bf;
  ie.prototype.commitTransaction = ie.prototype.eb;
  ie.prototype.startTransaction = ie.prototype.Da;
  ie.prototype.removeModel = ie.prototype.yx;
  ie.prototype.addModel = ie.prototype.Bw;
  ie.prototype.clear = ie.prototype.clear;
  ie.className = 'UndoManager';

  function ke() {
    Ra(this);
    this.H = le;
    this.va = '';
    this.Ad = !0;
    this.hb = !1;
    this.xi = null;
    this.gy = new $d();
    this.yr = -1;
  }
  ke.prototype.toString = function() {
    return '' !== this.name ? this.name + ' Tool' : Ha(this.constructor);
  };
  ke.prototype.updateAdornments = function() {};
  ke.prototype.canStart = function() {
    return this.isEnabled;
  };
  ke.prototype.doStart = function() {};
  ke.prototype.doActivate = function() {
    this.isActive = !0;
  };
  ke.prototype.doDeactivate = function() {
    this.isActive = !1;
  };
  ke.prototype.doStop = function() {};
  ke.prototype.doCancel = function() {
    this.transactionResult = null;
    this.stopTool();
  };
  ke.prototype.stopTool = function() {
    var a = this.diagram;
    a.currentTool === this && ((a.currentTool = null), (a.currentCursor = ''));
  };
  ke.prototype.doMouseDown = function() {
    !this.isActive && this.canStart() && this.doActivate();
  };
  ke.prototype.doMouseMove = function() {};
  ke.prototype.doMouseUp = function() {
    this.stopTool();
  };
  ke.prototype.doMouseWheel = function() {};
  ke.prototype.canStartMultiTouch = function() {
    return !0;
  };
  ke.prototype.standardPinchZoomStart = function() {
    var a = this.diagram,
      b = a.lastInput,
      c = b.vo(0, I.allocAt(NaN, NaN)),
      d = b.vo(1, I.allocAt(NaN, NaN));
    if (c.v() && d.v() && (this.doCancel(), a.yl('hasGestureZoom'))) {
      a.fw = a.scale;
      var e = d.x - c.x,
        f = d.y - c.y;
      a.nw = Math.sqrt(e * e + f * f);
      b.bubbles = !1;
    }
    I.free(c);
    I.free(d);
  };
  ke.prototype.standardPinchZoomMove = function() {
    var a = this.diagram,
      b = a.lastInput,
      c = b.vo(0, I.allocAt(NaN, NaN)),
      d = b.vo(1, I.allocAt(NaN, NaN));
    if (c.v() && d.v() && (this.doCancel(), a.yl('hasGestureZoom'))) {
      var e = d.x - c.x,
        f = d.y - c.y;
      f = Math.sqrt(e * e + f * f) / a.nw;
      e = new I(
        (Math.min(d.x, c.x) + Math.max(d.x, c.x)) / 2,
        (Math.min(d.y, c.y) + Math.max(d.y, c.y)) / 2,
      );
      f *= a.fw;
      var g = a.commandHandler;
      if (f !== a.scale && g.canResetZoom(f)) {
        var h = a.zoomPoint;
        a.zoomPoint = e;
        g.resetZoom(f);
        a.zoomPoint = h;
      }
      b.bubbles = !1;
    }
    I.free(c);
    I.free(d);
  };
  ke.prototype.doKeyDown = function() {
    'Esc' === this.diagram.lastInput.key && this.doCancel();
  };
  ke.prototype.doKeyUp = function() {};
  ke.prototype.Da = function(a) {
    void 0 === a && (a = this.name);
    this.transactionResult = null;
    return this.diagram.Da(a);
  };
  ke.prototype.stopTransaction = function() {
    var a = this.diagram;
    return null === this.transactionResult
      ? a.Bf()
      : a.eb(this.transactionResult);
  };
  ke.prototype.standardMouseSelect = function() {
    var a = this.diagram;
    if (a.allowSelect) {
      var b = a.lastInput,
        c = a.wl(b.documentPoint, !1);
      if (null !== c)
        if (Qa ? b.meta : b.control) {
          a.P('ChangingSelection', a.selection);
          for (b = c; null !== b && !b.canSelect(); ) b = b.containingGroup;
          null !== b && (b.isSelected = !b.isSelected);
          a.P('ChangedSelection', a.selection);
        } else if (b.shift) {
          if (!c.isSelected) {
            a.P('ChangingSelection', a.selection);
            for (b = c; null !== b && !b.canSelect(); ) b = b.containingGroup;
            null !== b && (b.isSelected = !0);
            a.P('ChangedSelection', a.selection);
          }
        } else {
          if (!c.isSelected) {
            for (b = c; null !== b && !b.canSelect(); ) b = b.containingGroup;
            null !== b && a.select(b);
          }
        }
      else
        !b.left || (Qa ? b.meta : b.control) || b.shift || a.clearSelection();
    }
  };
  ke.prototype.standardMouseClick = function(a, b) {
    void 0 === a && (a = null);
    void 0 === b &&
      (b = function(a) {
        return !a.layer.isTemporary;
      });
    var c = this.diagram,
      d = c.lastInput;
    a = c.ec(d.documentPoint, a, b);
    d.targetObject = a;
    re(a, d, c);
    return d.handled;
  };

  function re(a, b, c) {
    b.handled = !1;
    if (null === a || a.yf()) {
      var d = 0;
      b.left
        ? (d = 1 === b.clickCount ? 1 : 2 === b.clickCount ? 2 : 1)
        : b.right && 1 === b.clickCount && (d = 3);
      var e = 'ObjectSingleClicked';
      if (null !== a) {
        switch (d) {
          case 1:
            e = 'ObjectSingleClicked';
            break;
          case 2:
            e = 'ObjectDoubleClicked';
            break;
          case 3:
            e = 'ObjectContextClicked';
        }
        0 !== d && c.P(e, a);
      } else {
        switch (d) {
          case 1:
            e = 'BackgroundSingleClicked';
            break;
          case 2:
            e = 'BackgroundDoubleClicked';
            break;
          case 3:
            e = 'BackgroundContextClicked';
        }
        0 !== d && c.P(e);
      }
      if (null !== a)
        for (; null !== a; ) {
          c = null;
          switch (d) {
            case 1:
              c = a.click;
              break;
            case 2:
              c = a.doubleClick ? a.doubleClick : a.click;
              break;
            case 3:
              c = a.contextClick;
          }
          if (null !== c && (c(b, a), b.handled)) break;
          a = a.panel;
        }
      else {
        a = null;
        switch (d) {
          case 1:
            a = c.click;
            break;
          case 2:
            a = c.doubleClick ? c.doubleClick : c.click;
            break;
          case 3:
            a = c.contextClick;
        }
        null !== a && a(b);
      }
    }
  }
  ke.prototype.standardMouseOver = function() {
    var a = this.diagram,
      b = a.lastInput;
    if (!0 !== a.animationManager.zb) {
      var c = a.skipsUndoManager;
      a.skipsUndoManager = !0;
      var d = a.viewportBounds.ba(b.documentPoint)
        ? a.ec(b.documentPoint, null, null)
        : null;
      b.targetObject = d;
      var e = !1;
      if (d !== a.qk) {
        var f = a.qk,
          g = f;
        a.qk = d;
        this.doCurrentObjectChanged(f, d);
        for (b.handled = !1; null !== f; ) {
          var h = f.mouseLeave;
          if (null !== h) {
            if (d === f) break;
            if (null !== d && d.jg(f)) break;
            h(b, f, d);
            e = !0;
            if (b.handled) break;
          }
          f = f.panel;
        }
        f = g;
        for (b.handled = !1; null !== d; ) {
          g = d.mouseEnter;
          if (null !== g) {
            if (f === d) break;
            if (null !== f && f.jg(d)) break;
            g(b, d, f);
            e = !0;
            if (b.handled) break;
          }
          d = d.panel;
        }
        d = a.qk;
      }
      if (null !== d) {
        f = d;
        for (g = ''; null !== f; ) {
          g = f.cursor;
          if ('' !== g) break;
          f = f.panel;
        }
        a.currentCursor = g;
        b.handled = !1;
        for (f = d; null !== f; ) {
          d = f.mouseOver;
          if (null !== d && (d(b, f), (e = !0), b.handled)) break;
          f = f.panel;
        }
      } else
        (a.currentCursor = ''),
          (d = a.mouseOver),
          null !== d && (d(b), (e = !0));
      e && a.Mb();
      a.skipsUndoManager = c;
    }
  };
  ke.prototype.doCurrentObjectChanged = function() {};
  ke.prototype.standardMouseWheel = function() {
    var a = this.diagram,
      b = a.lastInput,
      c = b.delta;
    if (0 !== c && a.documentBounds.v()) {
      var d = a.commandHandler,
        e = a.toolManager.mouseWheelBehavior;
      if (null !== d && ((e === se && !b.shift) || (e === te && b.control))) {
        if (0 < c ? d.canIncreaseZoom() : d.canDecreaseZoom())
          (e = a.zoomPoint),
            (a.zoomPoint = b.viewPoint),
            0 < c ? d.increaseZoom() : d.decreaseZoom(),
            (a.zoomPoint = e);
        b.bubbles = !1;
      } else if ((e === se && b.shift) || (e === te && !b.control)) {
        d = a.position.copy();
        var f = 0 < c ? c : -c,
          g = b.event,
          h = g.deltaMode;
        e = g.deltaX;
        g = g.deltaY;
        if (Na || Pa)
          (h = 1),
            0 < e && (e = 3),
            0 > e && (e = -3),
            0 < g && (g = 3),
            0 > g && (g = -3);
        if (
          void 0 === h ||
          void 0 === e ||
          void 0 === g ||
          (0 === e && 0 === g) ||
          b.shift
        )
          !b.shift && a.allowVerticalScroll
            ? ((f = 3 * f * a.scrollVerticalLineChange),
              0 < c ? a.scroll('pixel', 'up', f) : a.scroll('pixel', 'down', f))
            : b.shift &&
              a.allowHorizontalScroll &&
              ((f = 3 * f * a.scrollHorizontalLineChange),
              0 < c
                ? a.scroll('pixel', 'left', f)
                : a.scroll('pixel', 'right', f));
        else {
          switch (h) {
            case 0:
              c = 'pixel';
              break;
            case 1:
              c = 'line';
              break;
            case 2:
              c = 'page';
              break;
            default:
              c = 'pixel';
          }
          0 !== e &&
            a.allowHorizontalScroll &&
            ((e *= a.scrollHorizontalLineChange / 16),
            0 < e ? a.scroll(c, 'left', -e) : a.scroll(c, 'right', e));
          0 !== g &&
            a.allowVerticalScroll &&
            ((g *= a.scrollVerticalLineChange / 16),
            0 < g ? a.scroll(c, 'up', -g) : a.scroll(c, 'down', g));
        }
        a.position.C(d) || (b.bubbles = !1);
      }
    }
  };
  ke.prototype.standardWaitAfter = function(a, b) {
    void 0 === b && (b = this.diagram.lastInput);
    this.cancelWaitAfter();
    var c = this,
      d = b.clone(this.gy);
    this.yr = ta(function() {
      c.doWaitAfter(d);
    }, a);
  };
  ke.prototype.cancelWaitAfter = function() {
    -1 !== this.yr && x.clearTimeout(this.yr);
    this.yr = -1;
  };
  ke.prototype.doWaitAfter = function() {};
  ke.prototype.findToolHandleAt = function(a, b) {
    a = this.diagram.ec(a, function(a) {
      for (; null !== a && !(a.panel instanceof ue); ) a = a.panel;
      return a;
    });
    return null === a ? null : a.part.category === b ? a : null;
  };
  ke.prototype.isBeyondDragSize = function(a, b) {
    var c = this.diagram;
    void 0 === a && (a = c.firstInput.viewPoint);
    void 0 === b && (b = c.lastInput.viewPoint);
    var d = c.toolManager.dragSize,
      e = d.width;
    d = d.height;
    c.firstInput.isTouchEvent && ((e += 6), (d += 6));
    return Math.abs(b.x - a.x) > e || Math.abs(b.y - a.y) > d;
  };
  ma.Object.defineProperties(ke.prototype, {
    diagram: {
      get: function() {
        return this.H;
      },
      set: function(a) {
        a instanceof Q && (this.H = a);
      },
    },
    name: {
      get: function() {
        return this.va;
      },
      set: function(a) {
        this.va = a;
      },
    },
    isEnabled: {
      get: function() {
        return this.Ad;
      },
      set: function(a) {
        this.Ad = a;
      },
    },
    isActive: {
      get: function() {
        return this.hb;
      },
      set: function(a) {
        this.hb = a;
      },
    },
    transactionResult: {
      get: function() {
        return this.xi;
      },
      set: function(a) {
        this.xi = a;
      },
    },
  });
  ke.prototype.startTransaction = ke.prototype.Da;
  ke.className = 'Tool';

  function La() {
    ke.call(this);
    this.name = 'ToolManager';
    this.cb = new E();
    this.nb = new E();
    this.Db = new E();
    this.F = this.W = 850;
    this.m = new K(2, 2).ha();
    this.Ga = 5e3;
    this.ga = te;
    this.u = ve;
    this.pp = this.j = null;
    this.uj = -1;
  }
  la(La, ke);
  La.prototype.initializeStandardTools = function() {};
  La.prototype.updateAdornments = function(a) {
    var b = this.currentToolTip;
    if (b instanceof ue && this.pp === a) {
      var c = b.adornedObject;
      (null !== a
      ? c.part === a
      : null === c)
        ? this.showToolTip(b, c)
        : this.hideToolTip();
    }
  };
  La.prototype.doMouseDown = function() {
    var a = this.diagram,
      b = a.lastInput;
    b.isTouchEvent && this.gestureBehavior === we && (b.bubbles = !1);
    if (b.isMultiTouch) {
      this.cancelWaitAfter();
      if (this.gestureBehavior === xe) {
        b.bubbles = !0;
        return;
      }
      if (this.gestureBehavior === we) return;
      if (a.currentTool.canStartMultiTouch()) {
        a.currentTool.standardPinchZoomStart();
        return;
      }
    }
    for (var c = this.mouseDownTools.length, d = 0; d < c; d++) {
      var e = this.mouseDownTools.K(d);
      e.diagram = this.diagram;
      if (e.canStart()) {
        a.doFocus();
        a.currentTool = e;
        a.currentTool === e && (e.isActive || e.doActivate(), e.doMouseDown());
        return;
      }
    }
    1 === a.lastInput.button &&
      (this.mouseWheelBehavior === te
        ? (this.mouseWheelBehavior = se)
        : this.mouseWheelBehavior === se && (this.mouseWheelBehavior = te));
    this.doActivate();
    this.standardWaitAfter(this.holdDelay, b);
  };
  La.prototype.doMouseMove = function() {
    var a = this.diagram,
      b = a.lastInput;
    if (b.isMultiTouch) {
      if (this.gestureBehavior === xe) {
        b.bubbles = !0;
        return;
      }
      if (this.gestureBehavior === we) return;
      if (a.currentTool.canStartMultiTouch()) {
        a.currentTool.standardPinchZoomMove();
        return;
      }
    }
    if (this.isActive)
      for (var c = this.mouseMoveTools.length, d = 0; d < c; d++) {
        var e = this.mouseMoveTools.K(d);
        e.diagram = this.diagram;
        if (e.canStart()) {
          a.doFocus();
          a.currentTool = e;
          a.currentTool === e &&
            (e.isActive || e.doActivate(), e.doMouseMove());
          return;
        }
      }
    ye(this, a);
    a = b.event;
    null === a ||
      ('pointermove' !== a.type && a.cancelable) ||
      (b.bubbles = !0);
  };

  function ye(a, b) {
    a.standardMouseOver();
    a.isBeyondDragSize() &&
      a.standardWaitAfter(a.isActive ? a.holdDelay : a.hoverDelay, b.lastInput);
  }
  La.prototype.doCurrentObjectChanged = function(a, b) {
    a = this.currentToolTip;
    null === a ||
      (null !== b && a instanceof ue && (b === a || b.jg(a))) ||
      this.hideToolTip();
  };
  La.prototype.doWaitAfter = function(a) {
    var b = this.diagram;
    b.Ha &&
      (this.doMouseHover(),
      this.isActive || this.doToolTip(),
      a.isTouchEvent &&
        !b.lastInput.handled &&
        ((a = a.copy()),
        (a.button = 2),
        (a.buttons = 2),
        (b.lastInput = a),
        (b.Wt = !0),
        b.doMouseUp()));
  };
  La.prototype.doMouseHover = function() {
    var a = this.diagram,
      b = a.lastInput;
    null === b.targetObject &&
      (b.targetObject = a.ec(b.documentPoint, null, null));
    var c = b.targetObject;
    if (null !== c)
      for (b.handled = !1; null !== c; ) {
        a = this.isActive ? c.mouseHold : c.mouseHover;
        if (null !== a && (a(b, c), b.handled)) break;
        c = c.panel;
      }
    else (c = this.isActive ? a.mouseHold : a.mouseHover), null !== c && c(b);
  };
  La.prototype.doToolTip = function() {
    var a = this.diagram,
      b = a.lastInput;
    null === b.targetObject &&
      (b.targetObject = a.ec(b.documentPoint, null, null));
    b = b.targetObject;
    if (null !== b) {
      if (
        ((a = this.currentToolTip), !(a instanceof ue) || (b !== a && !b.jg(a)))
      ) {
        for (; null !== b; ) {
          a = b.toolTip;
          if (null !== a) {
            this.showToolTip(a, b);
            return;
          }
          b = b.panel;
        }
        this.hideToolTip();
      }
    } else
      (b = a.toolTip),
        null !== b ? this.showToolTip(b, null) : this.hideToolTip();
  };
  La.prototype.showToolTip = function(a, b) {
    var c = this.diagram;
    a !== this.currentToolTip && this.hideToolTip();
    if (a instanceof ue) {
      a.layerName = 'Tool';
      a.selectable = !1;
      a.scale = 1 / c.scale;
      a.category = 'ToolTip';
      null !== a.placeholder && (a.placeholder.scale = c.scale);
      var d = a.diagram;
      null !== d && d !== c && d.remove(a);
      c.add(a);
      null !== b ? (a.adornedObject = b) : (a.data = c.model);
      a.Za();
      this.positionToolTip(a, b);
    } else a instanceof ze && a !== this.currentToolTip && a.show(b, c, this);
    this.currentToolTip = a;
    -1 !== this.uj && (x.clearTimeout(this.uj), (this.uj = -1));
    a = this.toolTipDuration;
    if (0 < a && Infinity !== a) {
      var e = this;
      this.uj = ta(function() {
        e.hideToolTip();
      }, a);
    }
  };
  La.prototype.positionToolTip = function(a) {
    if (null === a.placeholder) {
      var b = this.diagram,
        c = b.lastInput.documentPoint.copy(),
        d = a.measuredBounds,
        e = b.viewportBounds;
      b.lastInput.isTouchEvent && (c.x -= d.width);
      c.x + d.width > e.right && (c.x -= d.width + 5 / b.scale);
      c.x < e.x && (c.x = e.x);
      c.y =
        c.y + 20 / b.scale + d.height > e.bottom
          ? c.y - (d.height + 5 / b.scale)
          : c.y + 20 / b.scale;
      c.y < e.y && (c.y = e.y);
      a.position = c;
    }
  };
  La.prototype.hideToolTip = function() {
    -1 !== this.uj && (x.clearTimeout(this.uj), (this.uj = -1));
    var a = this.diagram,
      b = this.currentToolTip;
    null !== b &&
      (b instanceof ue
        ? (a.remove(b),
          null !== this.pp && this.pp.Af(b.category),
          (b.data = null),
          (b.adornedObject = null))
        : b instanceof ze && null !== b.hide && b.hide(a, this),
      (this.currentToolTip = null));
  };
  La.prototype.doMouseUp = function() {
    this.cancelWaitAfter();
    var a = this.diagram;
    if (this.isActive)
      for (var b = this.mouseUpTools.length, c = 0; c < b; c++) {
        var d = this.mouseUpTools.K(c);
        d.diagram = this.diagram;
        if (d.canStart()) {
          a.doFocus();
          a.currentTool = d;
          a.currentTool === d && (d.isActive || d.doActivate(), d.doMouseUp());
          return;
        }
      }
    a.doFocus();
    this.doDeactivate();
  };
  La.prototype.doMouseWheel = function() {
    this.standardMouseWheel();
  };
  La.prototype.doKeyDown = function() {
    var a = this.diagram;
    null !== a.commandHandler && a.commandHandler.doKeyDown();
  };
  La.prototype.doKeyUp = function() {
    var a = this.diagram;
    null !== a.commandHandler && a.commandHandler.doKeyUp();
  };
  La.prototype.findTool = function(a) {
    for (var b = this.mouseDownTools.length, c = 0; c < b; c++) {
      var d = this.mouseDownTools.K(c);
      if (d.name === a) return d;
    }
    b = this.mouseMoveTools.length;
    for (c = 0; c < b; c++)
      if (((d = this.mouseMoveTools.K(c)), d.name === a)) return d;
    b = this.mouseUpTools.length;
    for (c = 0; c < b; c++)
      if (((d = this.mouseUpTools.K(c)), d.name === a)) return d;
    return null;
  };
  La.prototype.replaceTool = function(a, b) {
    null !== b && (b.diagram = this.diagram);
    for (var c = this.mouseDownTools.length, d = 0; d < c; d++) {
      var e = this.mouseDownTools.K(d);
      if (e.name === a)
        return (
          null !== b ? this.mouseDownTools.Vc(d, b) : this.mouseDownTools.mb(d),
          e
        );
    }
    c = this.mouseMoveTools.length;
    for (d = 0; d < c; d++)
      if (((e = this.mouseMoveTools.K(d)), e.name === a))
        return (
          null !== b ? this.mouseMoveTools.Vc(d, b) : this.mouseMoveTools.mb(d),
          e
        );
    c = this.mouseUpTools.length;
    for (d = 0; d < c; d++)
      if (((e = this.mouseUpTools.K(d)), e.name === a))
        return (
          null !== b ? this.mouseUpTools.Vc(d, b) : this.mouseUpTools.mb(d), e
        );
    return null;
  };
  La.prototype.gb = function(a, b, c) {
    null !== b && ((b.name = a), (b.diagram = this.diagram));
    this.findTool(a) ? this.replaceTool(a, b) : null !== b && c.add(b);
  };
  ma.Object.defineProperties(La.prototype, {
    mouseWheelBehavior: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        this.ga = a;
      },
    },
    gestureBehavior: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u = a;
      },
    },
    currentToolTip: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j = a;
        this.pp = null !== a && a instanceof ue ? a.adornedPart : null;
      },
    },
    mouseDownTools: {
      get: function() {
        return this.cb;
      },
    },
    mouseMoveTools: {
      get: function() {
        return this.nb;
      },
    },
    mouseUpTools: {
      get: function() {
        return this.Db;
      },
    },
    hoverDelay: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W = a;
      },
    },
    holdDelay: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F = a;
      },
    },
    dragSize: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a.J();
      },
    },
    toolTipDuration: {
      get: function() {
        return this.Ga;
      },
      set: function(a) {
        this.Ga = a;
      },
    },
  });
  La.prototype.replaceStandardTool = La.prototype.gb;
  var te = new D(La, 'WheelScroll', 0),
    se = new D(La, 'WheelZoom', 1),
    Ae = new D(La, 'WheelNone', 2),
    ve = new D(La, 'GestureZoom', 3),
    we = new D(La, 'GestureCancel', 4),
    xe = new D(La, 'GestureNone', 5);
  La.className = 'ToolManager';
  La.WheelScroll = te;
  La.WheelZoom = se;
  La.WheelNone = Ae;
  La.GestureZoom = ve;
  La.GestureCancel = we;
  La.GestureNone = xe;

  function Be() {
    ke.call(this);
    this.name = 'Dragging';
    this.u = this.ww = this.nb = !0;
    this.m = this.Ga = this.W = this.Ce = null;
    this.Gm = this.Db = !1;
    this.il = new I(NaN, NaN);
    this.br = new I();
    this.cb = !0;
    this.wk = 100;
    this.tg = [];
    this.le = new G().freeze();
    this.ga = new Ce();
    this.hn = null;
    this.F = 'copy';
    this.Hc = '';
    this.Ic = 'no-drop';
  }
  var De;
  la(Be, ke);
  Be.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    if (
      (a.isReadOnly && !a.allowDragOut) ||
      (!a.allowMove && !a.allowCopy && !a.allowDragOut) ||
      !a.allowSelect
    )
      return !1;
    var b = a.lastInput;
    return !b.left ||
      (a.currentTool !== this &&
        (!this.isBeyondDragSize() ||
          (b.isTouchEvent && b.timestamp - a.firstInput.timestamp < this.wk)))
      ? !1
      : null !== this.findDraggablePart();
  };
  Be.prototype.findDraggablePart = function() {
    var a = this.diagram;
    a = a.wl(a.firstInput.documentPoint, !1);
    if (null === a) return null;
    for (; null !== a && !a.canSelect(); ) a = a.containingGroup;
    return null !== a && (a.canMove() || a.canCopy()) ? a : null;
  };
  Be.prototype.standardMouseSelect = function() {
    var a = this.diagram;
    if (a.allowSelect) {
      var b = a.wl(a.firstInput.documentPoint, !1);
      if (null !== b) {
        for (; null !== b && !b.canSelect(); ) b = b.containingGroup;
        this.currentPart = b;
        null === this.currentPart ||
          this.currentPart.isSelected ||
          (a.P('ChangingSelection', a.selection),
          (b = a.lastInput),
          (Qa ? b.meta : b.control) || b.shift || a.clearSelection(!0),
          (this.currentPart.isSelected = !0),
          a.P('ChangedSelection', a.selection));
      }
    }
  };
  Be.prototype.doActivate = function() {
    var a = this.diagram;
    this.hn = null;
    null === this.currentPart && this.standardMouseSelect();
    var b = this.currentPart;
    null !== b &&
      (b.canMove() || b.canCopy()) &&
      (a.lu(!0),
      (Ee = null),
      (this.isActive = !0),
      this.il.set(a.position),
      Fe(this, a.selection),
      (this.tg.length = 0),
      a.animationManager.wc(),
      (this.draggedParts = this.computeEffectiveCollection(
        a.selection,
        this.dragOptions,
      )),
      (this.ww = this.diagram.layout.isRealtime),
      (this.diagram.layout.isRealtime = !1),
      (a.os = !0),
      !0 === a.Ge('temporaryPixelRatio') && 30 < a.Ew && Ge(a),
      He(a, this.draggedParts),
      this.Da('Drag'),
      (this.startPoint = a.firstInput.documentPoint),
      (a.isMouseCaptured = !0),
      a.allowDragOut &&
        ((this.isDragOutStarted = !0),
        (this.Gm = !1),
        (Ee = this),
        (Ie = this.diagram),
        this.doSimulatedDragOut()));
  };

  function Fe(a, b) {
    if (a.dragsLink) {
      var c = a.diagram;
      c.allowRelink &&
        (c.model.Nj() && 1 === b.count && b.first() instanceof T
          ? ((a.draggedLink = b.first()),
            a.draggedLink.canRelinkFrom() &&
              a.draggedLink.canRelinkTo() &&
              a.draggedLink.zj(),
            (a.Ce = c.toolManager.findTool('Relinking')),
            null === a.Ce && ((a.Ce = new Se()), (a.Ce.diagram = c)),
            (a.Ce.originalLink = a.draggedLink))
          : ((a.draggedLink = null), (a.Ce = null)));
    }
  }
  Be.prototype.computeEffectiveCollection = function(a, b) {
    return this.diagram.commandHandler.computeEffectiveCollection(a, b);
  };
  Be.prototype.Fd = function(a) {
    return void 0 === a
      ? new Te(qb)
      : this.isGridSnapEnabled
      ? new Te(new I(Math.round(1e3 * a.x) / 1e3, Math.round(1e3 * a.y) / 1e3))
      : new Te(a.copy());
  };
  Be.prototype.doDeactivate = function() {
    this.isActive = !1;
    var a = this.diagram;
    this.diagram.layout.isRealtime = this.ww;
    a.lu(!1);
    a.lg();
    Ue(this);
    Ve(a, this.draggedParts);
    this.draggedParts = this.currentPart = this.hn = null;
    this.Gm = this.isDragOutStarted = !1;
    if (0 < De.count) {
      for (var b = De, c = b.length, d = 0; d < c; d++) {
        var e = b.K(d);
        We(e);
        Xe(e);
        Ue(e);
        e.diagram.lg();
      }
      b.clear();
    }
    We(this);
    this.il.h(NaN, NaN);
    null !== Ie && (Ie.currentCursor = '');
    Ee = Ie = null;
    Xe(this);
    a.isMouseCaptured = !1;
    a.currentCursor = '';
    a.os = !1;
    this.stopTransaction();
    Ye(a, !0);
  };
  Be.prototype.stopTransaction = function() {
    var a = this.diagram,
      b = ke.prototype.stopTransaction.call(this);
    b &&
      null !== a.undoManager.transactionToUndo &&
      a.undoManager.transactionToUndo.Vj();
    return b;
  };

  function Ue(a) {
    var b = a.diagram,
      c = b.skipsUndoManager;
    b.skipsUndoManager = !0;
    Ze(a, b.lastInput, null);
    b.skipsUndoManager = c;
    a.tg.length = 0;
  }

  function $e() {
    var a = Ee;
    Xe(a);
    af(a);
    var b = a.diagram;
    a.il.v() && (b.position = a.il);
    b.lg();
  }
  Be.prototype.doCancel = function() {
    Xe(this);
    af(this);
    var a = this.diagram;
    this.il.v() && (a.position = this.il);
    this.stopTool();
  };
  Be.prototype.doKeyDown = function() {
    var a = this.diagram,
      b = a.lastInput;
    this.isActive &&
      ('Esc' === b.key
        ? this.doCancel()
        : b.key !== a.previousInput.key && this.doMouseMove());
  };
  Be.prototype.doKeyUp = function() {
    this.isActive && this.doMouseMove();
  };

  function bf(a, b) {
    if (null === a.copiedParts) {
      var c = a.diagram;
      if (
        (!b || (!c.isReadOnly && !c.isModelReadOnly)) &&
        null !== a.draggedParts
      ) {
        var d = c.undoManager;
        d.isEnabled && d.isInTransaction
          ? null !== d.currentTransaction &&
            0 < d.currentTransaction.changes.count &&
            (c.undoManager.Bf(), c.Da('Drag'))
          : af(a);
        c.skipsUndoManager = !b;
        c.partManager.addsToTemporaryLayer = !b;
        a.startPoint = c.firstInput.documentPoint;
        b = a.copiesEffectiveCollection ? a.draggedParts.Cf() : c.selection;
        b = c.Ej(b, c, !0);
        c = new pb();
        for (d = a.draggedParts.iterator; d.next(); ) {
          var e = d.key;
          if (e.Tc() && e.canCopy()) {
            var f = b.I(e);
            null !== f &&
              ((f.location = e.location), f.Za(), c.add(f, a.Fd(f.location)));
          }
        }
        for (b = b.iterator; b.next(); )
          (d = b.value), d instanceof T && d.canCopy() && c.add(d, a.Fd());
        a.copiedParts = c;
        Fe(a, c.Cf());
        null !== a.draggedLink &&
          ((c = a.draggedLink),
          (b = c.routeBounds),
          cf(
            c,
            a.startPoint.x - (b.x + b.width / 2),
            a.startPoint.y - (b.y + b.height / 2),
          ));
        a.doUpdateCursor(null, !0);
      }
    }
  }

  function Xe(a) {
    var b = a.diagram;
    if (null !== a.copiedParts) {
      b.hs(a.copiedParts.Cf(), !1);
      a.copiedParts = null;
      if (null !== a.draggedParts)
        for (var c = a.draggedParts.iterator; c.next(); )
          c.key instanceof T && (c.value.point = new I(0, 0));
      a.doUpdateCursor(null, !0);
    }
    b.skipsUndoManager = !1;
    b.partManager.addsToTemporaryLayer = !1;
    a.startPoint = b.firstInput.documentPoint;
  }

  function We(a) {
    if (null !== a.draggedLink) {
      if (a.dragsLink && null !== a.Ce) {
        var b = a.Ce;
        b.diagram.remove(b.temporaryFromNode);
        b.diagram.remove(b.temporaryToNode);
        a.Ce.originalLink = null;
      }
      a.draggedLink = null;
      a.Ce = null;
    }
  }

  function df(a, b, c) {
    var d = a.diagram,
      e = a.startPoint,
      f = I.alloc();
    f.assign(d.lastInput.documentPoint);
    a.moveParts(b, f.je(e), c);
    I.free(f);
    !0 === d.Ge('temporaryPixelRatio') &&
      null === d.Rh &&
      30 < d.Ew &&
      (Ge(d), d.Jo());
  }
  Be.prototype.moveParts = function(a, b, c) {
    void 0 === c && (c = !1);
    var d = this.diagram;
    null !== d && ef(d, a, b, this.dragOptions, c);
  };

  function af(a) {
    if (null !== a.draggedParts) {
      for (var b = a.diagram, c = a.draggedParts.iterator; c.next(); ) {
        var d = c.key;
        d.Tc() && (d.location = c.value.point);
      }
      for (c = a.draggedParts.iterator; c.next(); )
        if (((d = c.key), d instanceof T && d.suspendsRouting)) {
          var e = c.value.point;
          a.draggedParts.add(d, a.Fd());
          cf(d, -e.x, -e.y);
        }
      b.nd();
    }
  }

  function ff(a, b) {
    var c = a.diagram;
    a.dragsLink &&
      (null !== a.draggedLink &&
        ((a.draggedLink.fromNode = null), (a.draggedLink.toNode = null)),
      pf(a, !1));
    var d = a.findDragOverObject(b),
      e = c.lastInput;
    e.targetObject = d;
    a.doUpdateCursor(d, !1);
    var f = c.skipsUndoManager,
      g = !1;
    try {
      c.skipsUndoManager = !0;
      g = Ze(a, e, d);
      if (!a.isActive && null === Ee) return;
      var h = null !== d ? d.part : null;
      if (
        null === h ||
        (c.handlesDragDropForTopLevelParts &&
          h.isTopLevel &&
          !(h instanceof qf))
      ) {
        var k = c.mouseDragOver;
        null !== k && (k(e), (g = !0));
      }
      if (!a.isActive && null === Ee) return;
      a.doDragOver(b, d);
      if (!a.isActive && null === Ee) return;
    } finally {
      (c.skipsUndoManager = f), g && c.nd();
    }
    a.hn = d;
    c.isReadOnly ||
      (!c.allowMove && !c.allowCopy) ||
      (!c.allowHorizontalScroll && !c.allowVerticalScroll) ||
      c.Fr(e.viewPoint);
  }
  Be.prototype.findDragOverObject = function(a) {
    var b = this;
    return rf(this.diagram, a, null, function(a) {
      null === a
        ? (a = !0)
        : ((a = a.part),
          (a =
            null === a ||
            a instanceof ue ||
            a.layer.isTemporary ||
            (b.draggedParts && b.draggedParts.contains(a)) ||
            (b.copiedParts && b.copiedParts.contains(a))
              ? !0
              : !1));
      return !a;
    });
  };
  Be.prototype.doUpdateCursor = function(a, b) {
    var c = this.diagram;
    if (b || this.hn !== a)
      !this.diagram.currentTool.isActive || this.mayCopy()
        ? (c.currentCursor = this.copyCursor)
        : this.mayMove()
        ? (c.currentCursor = this.moveCursor)
        : this.mayDragOut() && (c.currentCursor = this.nodropCursor);
  };

  function Ze(a, b, c) {
    var d = !1,
      e = a.tg.length,
      f = 0 < e ? a.tg[0] : null;
    if (c === f) return !1;
    b.handled = !1;
    for (var g = 0; g < e; g++) {
      var h = a.tg[g],
        k = h.mouseDragLeave;
      if (null !== k && (k(b, h, c), (d = !0), b.handled)) break;
    }
    a.tg.length = 0;
    if ((!a.isActive && null === Ee) || null === c) return d;
    b.handled = !1;
    for (e = c; null !== e; ) a.tg.push(e), (e = sf(e));
    e = a.tg.length;
    for (
      c = 0;
      c < e &&
      ((g = a.tg[c]),
      (h = g.mouseDragEnter),
      null === h || (h(b, g, f), (d = !0), !b.handled));
      c++
    );
    return d;
  }

  function sf(a) {
    var b = a.panel;
    return null !== b
      ? b
      : a instanceof U &&
        !(a instanceof qf) &&
        ((a = a.containingGroup), null !== a && a.handlesDragDropForMembers)
      ? a
      : null;
  }

  function tf(a, b, c) {
    var d = a.Ce;
    if (null === d) return null;
    var e = a.diagram.hg(b, d.portGravity, function(a) {
      return d.findValidLinkablePort(a, c);
    });
    a = I.alloc();
    var f = Infinity,
      g = null;
    for (e = e.iterator; e.next(); ) {
      var h = e.value;
      if (null !== h.part) {
        var k = h.ia(yc, a);
        k = b.rf(k);
        k < f && ((g = h), (f = k));
      }
    }
    I.free(a);
    return g;
  }

  function pf(a, b) {
    var c = a.draggedLink;
    if (null !== c && !(2 > c.pointsCount)) {
      var d = a.diagram;
      if (!d.isReadOnly) {
        var e = a.Ce;
        if (null !== e) {
          var f = null,
            g = null;
          null === c.fromNode &&
            ((f = tf(a, c.i(0), !1)), null !== f && (g = f.part));
          var h = null,
            k = null;
          null === c.toNode &&
            ((h = tf(a, c.i(c.pointsCount - 1), !0)),
            null !== h && (k = h.part));
          e.isValidLink(g, f, k, h)
            ? b
              ? ((c.defaultFromPoint = c.i(0)),
                (c.defaultToPoint = c.i(c.pointsCount - 1)),
                (c.suspendsRouting = !1),
                (c.fromNode = g),
                null !== f && (c.fromPortId = f.portId),
                (c.toNode = k),
                null !== h && (c.toPortId = h.portId),
                c.fromPort !== d.tx && d.P('LinkRelinked', c, d.tx),
                c.toPort !== d.ux && d.P('LinkRelinked', c, d.ux))
              : uf(e, g, f, k, h)
            : uf(e, null, null, null, null);
        }
      }
    }
  }
  Be.prototype.doDragOver = function() {};

  function vf(a, b) {
    var c = a.diagram;
    a.dragsLink && pf(a, !0);
    Ue(a);
    var d = a.findDragOverObject(b),
      e = c.lastInput;
    e.targetObject = d;
    if (null !== d) {
      e.handled = !1;
      for (var f = d; null !== f; ) {
        var g = f.mouseDrop;
        if (null !== g && (g(e, f), e.handled)) break;
        wf(a, e, f);
        f = sf(f);
      }
    } else (f = c.mouseDrop), null !== f && f(e);
    if (a.isActive || null !== Ee) {
      for (e = (a.copiedParts || a.draggedParts).iterator; e.next(); )
        (f = e.key),
          f instanceof V &&
            f.linksConnected.each(function(a) {
              a.suspendsRouting = !1;
            });
      a.doDropOnto(b, d);
      if (a.isActive || null !== Ee) {
        a = M.alloc();
        for (b = c.selection.iterator; b.next(); )
          (d = b.value), d instanceof V && xf(c, d, a);
        M.free(a);
      }
    }
  }

  function wf(a, b, c) {
    a = a.diagram;
    c = c.part;
    !a.handlesDragDropForTopLevelParts ||
      !c.isTopLevel ||
      c instanceof qf ||
      ((c = a.mouseDrop), null !== c && c(b));
  }

  function xf(a, b, c) {
    var d = !1;
    b.getAvoidableRect(c);
    a.viewportBounds.Ee(c) && (d = !0);
    a = a.zu(
      c,
      function(a) {
        return a.part;
      },
      function(a) {
        return a instanceof T;
      },
      !0,
      function(a) {
        return a instanceof T;
      },
      d,
    );
    if (0 !== a.count)
      for (a = a.iterator; a.next(); )
        (c = a.value), !c.Md(b) && c.isAvoiding && c.ab();
  }
  Be.prototype.doDropOnto = function() {};
  Be.prototype.doMouseMove = function() {
    if (this.isActive) {
      var a = this.diagram,
        b = a.lastInput;
      this.simulatedMouseMove(b.event, b.documentPoint, b.targetDiagram) ||
        null === this.currentPart ||
        null === this.draggedParts ||
        (this.mayCopy()
          ? (bf(this, !1),
            He(a, this.copiedParts),
            df(this, this.copiedParts, !1),
            Ve(a, this.copiedParts))
          : this.mayMove()
          ? (Xe(this), df(this, this.draggedParts, !0))
          : this.mayDragOut()
          ? (bf(this, !1), df(this, this.copiedParts, !1))
          : Xe(this),
        ff(this, a.lastInput.documentPoint));
    }
  };
  Be.prototype.doMouseUp = function() {
    if (this.isActive) {
      var a = this.diagram,
        b = a.lastInput;
      if (!this.simulatedMouseUp(b.event, b.documentPoint, b.targetDiagram)) {
        b = !1;
        var c = this.mayCopy();
        c && null !== this.copiedParts
          ? (Xe(this),
            bf(this, !0),
            He(a, this.copiedParts),
            df(this, this.copiedParts, !1),
            Ve(a, this.copiedParts),
            null !== this.copiedParts &&
              (a.P('ChangingSelection', a.selection),
              a.clearSelection(!0),
              this.copiedParts.iteratorKeys.each(function(a) {
                a.isSelected = !0;
              })))
          : ((b = !0),
            Xe(this),
            this.mayMove() &&
              (df(this, this.draggedParts, !0),
              ff(this, a.lastInput.documentPoint)));
        this.Gm = !0;
        vf(this, a.lastInput.documentPoint);
        if (this.isActive) {
          var d = c ? this.copiedParts.Cf() : this.draggedParts.Cf();
          this.copiedParts = null;
          b && yf(this);
          a.Va();
          Ve(a, this.draggedParts);
          this.transactionResult = c ? 'Copy' : 'Move';
          a.P(c ? 'SelectionCopied' : 'SelectionMoved', d);
        }
        this.stopTool();
        c && a.P('ChangedSelection', a.selection);
      }
    }
  };
  Be.prototype.simulatedMouseMove = function(a, b, c) {
    if (null === Ee) return !1;
    var d = Ee.diagram;
    c instanceof Q || (c = null);
    var e = Ie;
    c !== e &&
      (null !== e &&
        e !== d &&
        (e.lg(),
        (Ee.isDragOutStarted = !1),
        (e = e.toolManager.findTool('Dragging')),
        null !== e && e.doSimulatedDragLeave()),
      (Ie = c),
      null !== c &&
        c !== d &&
        ($e(),
        (e = c.toolManager.findTool('Dragging')),
        null !== e && (De.contains(e) || De.add(e), e.doSimulatedDragEnter())),
      this.doUpdateCursor(null, !0));
    if (null === c || c === d || !c.allowDrop || c.isReadOnly || !c.allowInsert)
      return !1;
    d = c.toolManager.findTool('Dragging');
    null !== d &&
      (null !== a &&
        (void 0 !== a.targetTouches &&
          (0 < a.targetTouches.length
            ? (a = a.targetTouches[0])
            : 0 < a.changedTouches.length && (a = a.changedTouches[0])),
        (b = c.getMouse(a))),
      (c.lastInput.documentPoint = b),
      (c.lastInput.viewPoint = c.Ro(b)),
      (c.lastInput.down = !1),
      (c.lastInput.up = !1),
      d.doSimulatedDragOver());
    return !0;
  };
  Be.prototype.simulatedMouseUp = function(a, b, c) {
    if (null === Ee) return !1;
    var d = Ie,
      e = Ee.diagram;
    if (null === c) return Ee.doCancel(), !0;
    if (c !== d) {
      var f = d.toolManager.findTool('Dragging');
      if (null !== d && d !== e && null !== f)
        return d.lg(), (Ee.isDragOutStarted = !1), f.doSimulatedDragLeave(), !1;
      Ie = c;
      d = c.toolManager.findTool('Dragging');
      null !== d &&
        ($e(), De.contains(d) || De.add(d), d.doSimulatedDragEnter());
    }
    return c !== this.diagram
      ? (null !== a
          ? (void 0 !== a.targetTouches &&
              (0 < a.targetTouches.length
                ? (a = a.targetTouches[0])
                : 0 < a.changedTouches.length && (a = a.changedTouches[0])),
            (b = c.getMouse(a)))
          : null === b && (b = new I()),
        (c.lastInput.documentPoint = b),
        (c.lastInput.viewPoint = c.Ro(b)),
        (c.lastInput.down = !1),
        (c.lastInput.up = !0),
        (a = c.toolManager.findTool('Dragging')),
        null !== a && a.doSimulatedDrop(),
        (a = Ee),
        null !== a &&
          ((c = a.mayCopy()),
          (a.transactionResult = c ? 'Copy' : 'Move'),
          a.stopTool()),
        !0)
      : !1;
  };

  function yf(a) {
    if (null !== a.draggedParts)
      for (var b = a.draggedParts.iterator; b.next(); ) {
        var c = b.key;
        c instanceof V &&
          ((c = c.containingGroup),
          null === c ||
            null === c.placeholder ||
            a.draggedParts.contains(c) ||
            c.placeholder.w());
      }
  }
  Be.prototype.mayCopy = function() {
    if (!this.isCopyEnabled) return !1;
    var a = this.diagram;
    if (
      a.isReadOnly ||
      a.isModelReadOnly ||
      !a.allowInsert ||
      !a.allowCopy ||
      (Qa ? !a.lastInput.alt : !a.lastInput.control)
    )
      return !1;
    for (a = a.selection.iterator; a.next(); ) if (a.value.canCopy()) return !0;
    return null !== this.draggedLink &&
      this.dragsLink &&
      this.draggedLink.canCopy()
      ? !0
      : !1;
  };
  Be.prototype.mayDragOut = function() {
    if (!this.isCopyEnabled) return !1;
    var a = this.diagram;
    if (!a.allowDragOut || !a.allowCopy || a.allowMove) return !1;
    for (a = a.selection.iterator; a.next(); ) if (a.value.canCopy()) return !0;
    return null !== this.draggedLink &&
      this.dragsLink &&
      this.draggedLink.canCopy()
      ? !0
      : !1;
  };
  Be.prototype.mayMove = function() {
    var a = this.diagram;
    if (a.isReadOnly || !a.allowMove) return !1;
    for (a = a.selection.iterator; a.next(); ) if (a.value.canMove()) return !0;
    return null !== this.draggedLink &&
      this.dragsLink &&
      this.draggedLink.canMove()
      ? !0
      : !1;
  };
  Be.prototype.computeBorder = function(a, b, c) {
    return this.Gm ||
      null === this.draggedParts ||
      this.draggedParts.contains(a)
      ? null
      : c.assign(b);
  };
  Be.prototype.hz = function() {
    return Ee;
  };
  Be.prototype.mayDragIn = function() {
    var a = this.diagram;
    if (!a.allowDrop || a.isReadOnly || a.isModelReadOnly || !a.allowInsert)
      return !1;
    var b = Ee;
    return null === b || b.diagram.model.dataFormat !== a.model.dataFormat
      ? !1
      : !0;
  };
  Be.prototype.doSimulatedDragEnter = function() {
    if (this.mayDragIn()) {
      var a = this.diagram;
      a.animationManager.wc();
      zf(a);
      a.animationManager.wc();
      a = Ee;
      null !== a && (a.diagram.os = !1);
      this.doUpdateCursor(null, !0);
    }
  };
  Be.prototype.doSimulatedDragLeave = function() {
    var a = Ee;
    null !== a && a.doSimulatedDragOut();
    this.doCancel();
  };
  Be.prototype.doSimulatedDragOver = function() {
    var a = this.diagram;
    a.animationManager.lm = !0;
    var b = Ee;
    if (null !== b && null !== b.draggedParts) {
      if (!this.mayDragIn()) return;
      Af(this, b.draggedParts.Cf(), !1, a.firstInput);
      df(this, this.copiedParts, !1);
      ff(this, a.lastInput.documentPoint);
    }
    a.animationManager.lm = !1;
  };
  Be.prototype.doSimulatedDrop = function() {
    var a = this.diagram,
      b = Ee;
    if (null !== b) {
      var c = b.diagram;
      b.Gm = !0;
      Xe(this);
      if (!this.mayDragIn()) return;
      a.animationManager.lm = !0;
      a.P('ChangingSelection', a.selection);
      this.Da('Drop');
      Af(this, b.draggedParts.Cf(), !0, a.lastInput);
      df(this, this.copiedParts, !1);
      null !== this.copiedParts &&
        (a.clearSelection(!0),
        this.copiedParts.iteratorKeys.each(function(a) {
          a.isSelected = !0;
        }));
      vf(this, a.lastInput.documentPoint);
      a.Va();
      b = a.selection;
      null !== this.copiedParts
        ? (this.transactionResult = 'ExternalCopy')
        : (b = new G());
      this.copiedParts = null;
      a.doFocus();
      a.P('ExternalObjectsDropped', b, c);
      this.stopTransaction();
      a.P('ChangedSelection', a.selection);
    }
    a.animationManager.lm = !1;
  };

  function Af(a, b, c, d) {
    if (null === a.copiedParts) {
      var e = a.diagram;
      if (!e.isReadOnly && !e.isModelReadOnly) {
        e.skipsUndoManager = !c;
        e.partManager.addsToTemporaryLayer = !c;
        a.startPoint = d.documentPoint;
        c = e.Ej(b, e, !0);
        var f = M.alloc();
        e = d = Infinity;
        for (var g = -Infinity, h = -Infinity, k = b.iterator; k.next(); ) {
          var l = k.value;
          if (l.isVisible()) {
            var m = l.location;
            l = m.x;
            m = m.y;
            isNaN(l) ||
              isNaN(m) ||
              (l < d && (d = l),
              m < e && (e = m),
              l > g && (g = l),
              m > h && (h = m));
          }
        }
        Infinity === d ? f.h(0, 0, 0, 0) : f.h(d, e, g - d, h - e);
        d = f.x + f.width / 2;
        e = f.y + f.height / 2;
        M.free(f);
        f = a.br;
        g = new pb();
        h = I.alloc();
        for (k = b.iterator; k.next(); )
          (l = k.value),
            l instanceof T &&
              l.canCopy() &&
              ((m = c.I(l)),
              null !== m &&
                ((m.points = l.points),
                cf(m, f.x - d, f.y - e),
                (m.suspendsRouting = !0),
                g.add(m, a.Fd())));
        for (b = b.iterator; b.next(); )
          (l = b.value),
            l.Tc() &&
              l.canCopy() &&
              ((k = c.I(l)),
              null !== k &&
                ((l = l.location),
                h.h(f.x - (d - l.x), f.y - (e - l.y)),
                (k.location = h),
                k.Za(),
                g.add(k, a.Fd(h))));
        I.free(h);
        a.copiedParts = g;
        Fe(a, g.Cf());
        null !== a.draggedLink &&
          ((c = a.draggedLink),
          (b = c.routeBounds),
          cf(
            c,
            a.startPoint.x - (b.x + b.width / 2),
            a.startPoint.y - (b.y + b.height / 2),
          ));
        a.doUpdateCursor(null, !0);
      }
    }
  }
  Be.prototype.doSimulatedDragOut = function() {
    var a = this.diagram;
    a.os = !1;
    this.mayCopy() || this.mayMove()
      ? (a.currentCursor = '')
      : (a.currentCursor = this.nodropCursor);
    this.hn = null;
  };
  Be.prototype.computeMove = function(a, b, c, d) {
    c = this.diagram;
    return null !== c ? c.computeMove(a, b, this.dragOptions, d) : new I();
  };
  ma.Object.defineProperties(Be.prototype, {
    isCopyEnabled: {
      get: function() {
        return this.nb;
      },
      set: function(a) {
        this.nb = a;
      },
    },
    copiesEffectiveCollection: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u = a;
      },
    },
    dragOptions: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        this.ga = a;
      },
    },
    isGridSnapEnabled: {
      get: function() {
        return this.dragOptions.isGridSnapEnabled;
      },
      set: function(a) {
        this.dragOptions.isGridSnapEnabled = a;
      },
    },
    isComplexRoutingRealtime: {
      get: function() {
        return this.cb;
      },
      set: function(a) {
        this.cb = a;
      },
    },
    isGridSnapRealtime: {
      get: function() {
        return this.dragOptions.isGridSnapRealtime;
      },
      set: function(a) {
        this.dragOptions.isGridSnapRealtime = a;
      },
    },
    gridSnapCellSize: {
      get: function() {
        return this.dragOptions.gridSnapCellSize;
      },
      set: function(a) {
        this.dragOptions.gridSnapCellSize.C(a) ||
          ((a = a.J()), (this.dragOptions.gridSnapCellSize = a));
      },
    },
    gridSnapCellSpot: {
      get: function() {
        return this.dragOptions.gridSnapCellSpot;
      },
      set: function(a) {
        this.dragOptions.gridSnapCellSpot.C(a) ||
          ((a = a.J()), (this.dragOptions.gridSnapCellSpot = a));
      },
    },
    gridSnapOrigin: {
      get: function() {
        return this.dragOptions.gridSnapOrigin;
      },
      set: function(a) {
        this.dragOptions.gridSnapOrigin.C(a) ||
          ((a = a.J()), (this.dragOptions.gridSnapOrigin = a));
      },
    },
    dragsLink: {
      get: function() {
        return this.dragOptions.dragsLink;
      },
      set: function(a) {
        this.dragOptions.dragsLink = a;
      },
    },
    dragsTree: {
      get: function() {
        return this.dragOptions.dragsTree;
      },
      set: function(a) {
        this.dragOptions.dragsTree = a;
      },
    },
    copyCursor: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F = a;
      },
    },
    moveCursor: {
      get: function() {
        return this.Hc;
      },
      set: function(a) {
        this.Hc = a;
      },
    },
    nodropCursor: {
      get: function() {
        return this.Ic;
      },
      set: function(a) {
        this.Ic = a;
      },
    },
    currentPart: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W = a;
      },
    },
    copiedParts: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a;
      },
    },
    draggedParts: {
      get: function() {
        return this.Ga;
      },
      set: function(a) {
        this.Ga = a;
      },
    },
    draggingParts: {
      get: function() {
        return null !== this.copiedParts
          ? this.copiedParts.Cf()
          : null !== this.draggedParts
          ? this.draggedParts.Cf()
          : this.le;
      },
    },
    draggedLink: {
      get: function() {
        return this.diagram.draggedLink;
      },
      set: function(a) {
        this.diagram.draggedLink = a;
      },
    },
    isDragOutStarted: {
      get: function() {
        return this.Db;
      },
      set: function(a) {
        this.Db = a;
      },
    },
    startPoint: {
      get: function() {
        return this.br;
      },
      set: function(a) {
        this.br.C(a) || this.br.assign(a);
      },
    },
    delay: {
      get: function() {
        return this.wk;
      },
      set: function(a) {
        this.wk = a;
      },
    },
  });
  Be.prototype.getDraggingSource = Be.prototype.hz;
  var Ee = null,
    Ie = null;
  Be.className = 'DraggingTool';
  De = new E();
  Ka(
    'draggingTool',
    function() {
      return this.findTool('Dragging');
    },
    function(a) {
      this.gb('Dragging', a, this.mouseMoveTools);
    },
  );
  La.prototype.doCancel = function() {
    null !== Ee && Ee.doCancel();
    ke.prototype.doCancel.call(this);
  };

  function Bf() {
    ke.call(this);
    this.le = 100;
    this.Ga = !1;
    this.u = 'pointer';
    var a = new T(),
      b = new Cf();
    b.isPanelMain = !0;
    b.stroke = 'blue';
    a.add(b);
    b = new Cf();
    b.toArrow = 'Standard';
    b.fill = 'blue';
    b.stroke = 'blue';
    a.add(b);
    a.layerName = 'Tool';
    this.vi = a;
    a = new V();
    b = new Cf();
    b.portId = '';
    b.figure = 'Rectangle';
    b.fill = null;
    b.stroke = 'magenta';
    b.strokeWidth = 2;
    b.desiredSize = Eb;
    a.add(b);
    a.selectable = !1;
    a.layerName = 'Tool';
    this.ui = a;
    this.j = b;
    a = new V();
    b = new Cf();
    b.portId = '';
    b.figure = 'Rectangle';
    b.fill = null;
    b.stroke = 'magenta';
    b.strokeWidth = 2;
    b.desiredSize = Eb;
    a.add(b);
    a.selectable = !1;
    a.layerName = 'Tool';
    this.wi = a;
    this.m = b;
    this.Ic = this.Hc = this.nb = this.cb = this.Db = null;
    this.ga = !0;
    this.Wo = new pb();
    this.Ff = this.bj = this.Gf = null;
  }
  la(Bf, ke);
  Bf.prototype.doStop = function() {
    this.diagram.lg();
    this.originalToPort = this.originalToNode = this.originalFromPort = this.originalFromNode = this.originalLink = null;
    this.validPortsCache.clear();
    this.targetPort = null;
  };
  Bf.prototype.copyPortProperties = function(a, b, c, d, e) {
    if (null !== a && null !== b && null !== c && null !== d) {
      var f = b.uf(),
        g = K.alloc();
      g.width = b.naturalBounds.width * f;
      g.height = b.naturalBounds.height * f;
      d.desiredSize = g;
      K.free(g);
      e
        ? ((d.toSpot = b.toSpot), (d.toEndSegmentLength = b.toEndSegmentLength))
        : ((d.fromSpot = b.fromSpot),
          (d.fromEndSegmentLength = b.fromEndSegmentLength));
      c.locationSpot = yc;
      f = I.alloc();
      c.location = b.ia(yc, f);
      I.free(f);
      d.angle = b.fi();
      null !== this.portTargeted && this.portTargeted(a, b, c, d, e);
    }
  };
  Bf.prototype.setNoTargetPortProperties = function(a, b, c) {
    null !== b && ((b.desiredSize = Eb), (b.fromSpot = sc), (b.toSpot = sc));
    null !== a && (a.location = this.diagram.lastInput.documentPoint);
    null !== this.portTargeted && this.portTargeted(null, null, a, b, c);
  };
  Bf.prototype.doMouseDown = function() {
    this.isActive && this.doMouseMove();
  };
  Bf.prototype.doMouseMove = function() {
    if (this.isActive) {
      var a = this.diagram;
      this.targetPort = this.findTargetPort(this.isForwards);
      if (null !== this.targetPort && this.targetPort.part instanceof V) {
        var b = this.targetPort.part;
        this.isForwards
          ? this.copyPortProperties(
              b,
              this.targetPort,
              this.temporaryToNode,
              this.temporaryToPort,
              !0,
            )
          : this.copyPortProperties(
              b,
              this.targetPort,
              this.temporaryFromNode,
              this.temporaryFromPort,
              !1,
            );
      } else
        this.isForwards
          ? this.setNoTargetPortProperties(
              this.temporaryToNode,
              this.temporaryToPort,
              !0,
            )
          : this.setNoTargetPortProperties(
              this.temporaryFromNode,
              this.temporaryFromPort,
              !1,
            );
      (a.allowHorizontalScroll || a.allowVerticalScroll) &&
        a.Fr(a.lastInput.viewPoint);
    }
  };
  Bf.prototype.findValidLinkablePort = function(a, b) {
    if (null === a) return null;
    var c = a.part;
    if (!(c instanceof V)) return null;
    for (; null !== a; ) {
      var d = b ? a.toLinkable : a.fromLinkable;
      if (
        !0 === d &&
        (null !== a.portId || a instanceof V) &&
        (b ? this.isValidTo(c, a) : this.isValidFrom(c, a))
      )
        return a;
      if (!1 === d) break;
      a = a.panel;
    }
    return null;
  };
  Bf.prototype.findTargetPort = function(a) {
    var b = this.diagram,
      c = b.lastInput.documentPoint,
      d = this.portGravity;
    0 >= d && (d = 0.1);
    var e = this,
      f = b.hg(
        c,
        d,
        function(b) {
          return e.findValidLinkablePort(b, a);
        },
        null,
        !0,
      );
    d = Infinity;
    b = null;
    for (f = f.iterator; f.next(); ) {
      var g = f.value,
        h = g.part;
      if (h instanceof V) {
        var k = g.ia(yc, I.alloc()),
          l = c.x - k.x,
          m = c.y - k.y;
        I.free(k);
        k = l * l + m * m;
        k < d &&
          ((l = this.validPortsCache.I(g)),
          null !== l
            ? l && ((b = g), (d = k))
            : (a &&
                this.isValidLink(
                  this.originalFromNode,
                  this.originalFromPort,
                  h,
                  g,
                )) ||
              (!a &&
                this.isValidLink(
                  h,
                  g,
                  this.originalToNode,
                  this.originalToPort,
                ))
            ? (this.validPortsCache.add(g, !0), (b = g), (d = k))
            : this.validPortsCache.add(g, !1));
      }
    }
    return null !== b &&
      ((c = b.part), c instanceof V && (null === c.layer || c.layer.allowLink))
      ? b
      : null;
  };
  Bf.prototype.isValidFrom = function(a, b) {
    if (null === a || null === b) return this.isUnconnectedLinkValid;
    if (
      this.diagram.currentTool === this &&
      ((null !== a.layer && !a.layer.allowLink) || !0 !== b.fromLinkable)
    )
      return !1;
    var c = b.fromMaxLinks;
    if (Infinity > c) {
      if (
        null !== this.originalLink &&
        a === this.originalFromNode &&
        b === this.originalFromPort
      )
        return !0;
      b = b.portId;
      null === b && (b = '');
      if (a.ro(b).count >= c) return !1;
    }
    return !0;
  };
  Bf.prototype.isValidTo = function(a, b) {
    if (null === a || null === b) return this.isUnconnectedLinkValid;
    if (
      this.diagram.currentTool === this &&
      ((null !== a.layer && !a.layer.allowLink) || !0 !== b.toLinkable)
    )
      return !1;
    var c = b.toMaxLinks;
    if (Infinity > c) {
      if (
        null !== this.originalLink &&
        a === this.originalToNode &&
        b === this.originalToPort
      )
        return !0;
      b = b.portId;
      null === b && (b = '');
      if (a.Kd(b).count >= c) return !1;
    }
    return !0;
  };
  Bf.prototype.isInSameNode = function(a, b) {
    if (null === a || null === b) return !1;
    if (a === b) return !0;
    a = a.part;
    b = b.part;
    return null !== a && a === b;
  };
  Bf.prototype.isLinked = function(a, b) {
    if (null === a || null === b) return !1;
    var c = a.part;
    if (!(c instanceof V)) return !1;
    a = a.portId;
    null === a && (a = '');
    var d = b.part;
    if (!(d instanceof V)) return !1;
    b = b.portId;
    null === b && (b = '');
    for (b = d.Kd(b); b.next(); )
      if (((d = b.value), d.fromNode === c && d.fromPortId === a)) return !0;
    return !1;
  };
  Bf.prototype.isValidLink = function(a, b, c, d) {
    if (
      !this.isValidFrom(a, b) ||
      !this.isValidTo(c, d) ||
      !(
        null === b ||
        null === d ||
        (((b.fromLinkableSelfNode && d.toLinkableSelfNode) ||
          !this.isInSameNode(b, d)) &&
          ((b.fromLinkableDuplicates && d.toLinkableDuplicates) ||
            !this.isLinked(b, d)))
      ) ||
      (null !== this.originalLink &&
        ((null !== a && this.isLabelDependentOnLink(a, this.originalLink)) ||
          (null !== c && this.isLabelDependentOnLink(c, this.originalLink)))) ||
      (null !== a &&
        null !== c &&
        ((null === a.data && null !== c.data) ||
          (null !== a.data && null === c.data))) ||
      !this.isValidCycle(a, c, this.originalLink)
    )
      return !1;
    if (null !== a) {
      var e = a.linkValidation;
      if (null !== e && !e(a, b, c, d, this.originalLink)) return !1;
    }
    if (
      null !== c &&
      ((e = c.linkValidation), null !== e && !e(a, b, c, d, this.originalLink))
    )
      return !1;
    e = this.linkValidation;
    return null !== e ? e(a, b, c, d, this.originalLink) : !0;
  };
  Bf.prototype.isLabelDependentOnLink = function(a, b) {
    if (null === a) return !1;
    var c = a.labeledLink;
    if (null === c) return !1;
    if (c === b) return !0;
    var d = new G();
    d.add(a);
    return Df(this, c, b, d);
  };

  function Df(a, b, c, d) {
    if (b === c) return !0;
    var e = b.fromNode;
    if (null !== e && e.isLinkLabel && (d.add(e), Df(a, e.labeledLink, c, d)))
      return !0;
    b = b.toNode;
    return null !== b && b.isLinkLabel && (d.add(b), Df(a, b.labeledLink, c, d))
      ? !0
      : !1;
  }
  Bf.prototype.isValidCycle = function(a, b, c) {
    void 0 === c && (c = null);
    if (null === a || null === b) return this.isUnconnectedLinkValid;
    var d = this.diagram.validCycle;
    if (d !== Ef) {
      if (d === Ff) {
        d = c || this.temporaryLink;
        if (null !== d && !d.isTreeLink) return !0;
        for (d = b.linksConnected; d.next(); ) {
          var e = d.value;
          if (e !== c && e.isTreeLink && e.toNode === b) return !1;
        }
        return !Gf(this, a, b, c, !0);
      }
      if (d === Hf) {
        d = c || this.temporaryLink;
        if (null !== d && !d.isTreeLink) return !0;
        for (d = a.linksConnected; d.next(); )
          if (((e = d.value), e !== c && e.isTreeLink && e.fromNode === a))
            return !1;
        return !Gf(this, a, b, c, !0);
      }
      if (d === If)
        return (
          a === b
            ? (a = !0)
            : ((d = new G()), d.add(b), (a = Jf(this, d, a, b, c))),
          !a
        );
      if (d === Kf) return !Gf(this, a, b, c, !1);
      if (d === Lf)
        return (
          a === b
            ? (a = !0)
            : ((d = new G()), d.add(b), (a = Tf(this, d, a, b, c))),
          !a
        );
    }
    return !0;
  };

  function Gf(a, b, c, d, e) {
    if (b === c) return !0;
    if (null === b || null === c) return !1;
    for (var f = b.linksConnected; f.next(); ) {
      var g = f.value;
      if (
        g !== d &&
        (!e || g.isTreeLink) &&
        g.toNode === b &&
        ((g = g.fromNode), g !== b && Gf(a, g, c, d, e))
      )
        return !0;
    }
    return !1;
  }

  function Jf(a, b, c, d, e) {
    if (c === d) return !0;
    if (null === c || null === d || b.contains(c)) return !1;
    b.add(c);
    for (var f = c.linksConnected; f.next(); ) {
      var g = f.value;
      if (
        g !== e &&
        g.toNode === c &&
        ((g = g.fromNode), g !== c && Jf(a, b, g, d, e))
      )
        return !0;
    }
    return !1;
  }

  function Tf(a, b, c, d, e) {
    if (c === d) return !0;
    if (null === c || null === d || b.contains(c)) return !1;
    b.add(c);
    for (var f = c.linksConnected; f.next(); ) {
      var g = f.value;
      if (g !== e) {
        var h = g.fromNode;
        g = g.toNode;
        h = h === c ? g : h;
        if (h !== c && Tf(a, b, h, d, e)) return !0;
      }
    }
    return !1;
  }
  ma.Object.defineProperties(Bf.prototype, {
    portGravity: {
      get: function() {
        return this.le;
      },
      set: function(a) {
        0 <= a && (this.le = a);
      },
    },
    isUnconnectedLinkValid: {
      get: function() {
        return this.Ga;
      },
      set: function(a) {
        this.Ga = a;
      },
    },
    linkingCursor: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u = a;
      },
    },
    temporaryLink: {
      get: function() {
        return this.vi;
      },
      set: function(a) {
        this.vi = a;
      },
    },
    temporaryFromNode: {
      get: function() {
        return this.ui;
      },
      set: function(a) {
        if ((this.ui = a)) this.j = a.port;
      },
    },
    temporaryFromPort: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        if (null !== this.j) {
          var b = this.j.panel;
          if (null !== b) {
            var c = b.R.indexOf(this.j);
            b.mb(c);
            b.Cb(c, a);
          }
        }
        this.j = a;
      },
    },
    temporaryToNode: {
      get: function() {
        return this.wi;
      },
      set: function(a) {
        if ((this.wi = a)) this.m = a.port;
      },
    },
    temporaryToPort: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        if (null !== this.m) {
          var b = this.m.panel;
          if (null !== b) {
            var c = b.R.indexOf(this.m);
            b.mb(c);
            b.Cb(c, a);
          }
        }
        this.m = a;
      },
    },
    originalLink: {
      get: function() {
        return this.Db;
      },
      set: function(a) {
        this.Db = a;
      },
    },
    originalFromNode: {
      get: function() {
        return this.cb;
      },
      set: function(a) {
        this.cb = a;
      },
    },
    originalFromPort: {
      get: function() {
        return this.nb;
      },
      set: function(a) {
        this.nb = a;
      },
    },
    originalToNode: {
      get: function() {
        return this.Hc;
      },
      set: function(a) {
        this.Hc = a;
      },
    },
    originalToPort: {
      get: function() {
        return this.Ic;
      },
      set: function(a) {
        this.Ic = a;
      },
    },
    isForwards: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        this.ga = a;
      },
    },
    validPortsCache: {
      get: function() {
        return this.Wo;
      },
    },
    targetPort: {
      get: function() {
        return this.Gf;
      },
      set: function(a) {
        this.Gf = a;
      },
    },
    linkValidation: {
      get: function() {
        return this.bj;
      },
      set: function(a) {
        this.bj = a;
      },
    },
    portTargeted: {
      get: function() {
        return this.Ff;
      },
      set: function(a) {
        this.Ff = a;
      },
    },
  });
  Bf.className = 'LinkingBaseTool';

  function Uf() {
    Bf.call(this);
    this.name = 'Linking';
    this.W = {};
    this.F = null;
    this.L = Vf;
    this.Qd = null;
  }
  la(Uf, Bf);
  Uf.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    return a.isReadOnly ||
      a.isModelReadOnly ||
      !a.allowLink ||
      !a.model.Vr() ||
      !a.lastInput.left ||
      (a.currentTool !== this && !this.isBeyondDragSize())
      ? !1
      : null !== this.findLinkablePort();
  };
  Uf.prototype.findLinkablePort = function() {
    var a = this.diagram,
      b = this.startObject;
    null === b && (b = a.ec(a.firstInput.documentPoint, null, null));
    if (null === b) return null;
    a = b.part;
    if (!(a instanceof V)) return null;
    var c = this.direction;
    if (c === Vf || c === Wf) {
      var d = this.findValidLinkablePort(b, !1);
      if (
        null !== d ||
        (this.startObject === a &&
          ((d = a.port), this.findValidLinkablePort(d, !1)))
      )
        return (this.isForwards = !0), d;
    }
    if (c === Vf || c === Xf)
      if (
        ((b = this.findValidLinkablePort(b, !0)),
        null !== b ||
          (this.startObject === a &&
            ((b = a.port), this.findValidLinkablePort(b, !0))))
      )
        return (this.isForwards = !1), b;
    return null;
  };
  Uf.prototype.doActivate = function() {
    var a = this.diagram,
      b = this.findLinkablePort();
    null === b
      ? this.stopTool()
      : (this.Da(this.name),
        (a.isMouseCaptured = !0),
        (a.currentCursor = this.linkingCursor),
        this.isForwards
          ? (null === this.temporaryToNode ||
              this.temporaryToNode.location.v() ||
              (this.temporaryToNode.location = a.lastInput.documentPoint),
            (this.originalFromPort = b),
            (b = this.originalFromPort.part),
            b instanceof V && (this.originalFromNode = b),
            this.copyPortProperties(
              this.originalFromNode,
              this.originalFromPort,
              this.temporaryFromNode,
              this.temporaryFromPort,
              !1,
            ))
          : (null === this.temporaryFromNode ||
              this.temporaryFromNode.location.v() ||
              (this.temporaryFromNode.location = a.lastInput.documentPoint),
            (this.originalToPort = b),
            (b = this.originalToPort.part),
            b instanceof V && (this.originalToNode = b),
            this.copyPortProperties(
              this.originalToNode,
              this.originalToPort,
              this.temporaryToNode,
              this.temporaryToPort,
              !0,
            )),
        a.add(this.temporaryFromNode),
        a.add(this.temporaryToNode),
        null !== this.temporaryLink &&
          (null !== this.temporaryFromNode &&
            (this.temporaryLink.fromNode = this.temporaryFromNode),
          null !== this.temporaryToNode &&
            (this.temporaryLink.toNode = this.temporaryToNode),
          (this.temporaryLink.isTreeLink = this.isNewTreeLink()),
          this.temporaryLink.ab(),
          a.add(this.temporaryLink)),
        (this.isActive = !0));
  };
  Uf.prototype.doDeactivate = function() {
    this.isActive = !1;
    var a = this.diagram;
    a.remove(this.temporaryLink);
    a.remove(this.temporaryFromNode);
    a.remove(this.temporaryToNode);
    a.isMouseCaptured = !1;
    a.currentCursor = '';
    this.stopTransaction();
  };
  Uf.prototype.doStop = function() {
    Bf.prototype.doStop.call(this);
    this.startObject = null;
  };
  Uf.prototype.doMouseUp = function() {
    if (this.isActive) {
      var a = this.diagram,
        b = (this.transactionResult = null),
        c = null,
        d = null,
        e = null,
        f = null;
      try {
        var g = (this.targetPort = this.findTargetPort(this.isForwards));
        if (null !== g) {
          var h = g.part;
          h instanceof V &&
            (this.isForwards
              ? (null !== this.originalFromNode &&
                  ((b = this.originalFromNode), (c = this.originalFromPort)),
                (d = h),
                (e = g))
              : ((b = h),
                (c = g),
                null !== this.originalToNode &&
                  ((d = this.originalToNode), (e = this.originalToPort))));
        } else
          this.isForwards
            ? null !== this.originalFromNode &&
              this.isUnconnectedLinkValid &&
              ((b = this.originalFromNode), (c = this.originalFromPort))
            : null !== this.originalToNode &&
              this.isUnconnectedLinkValid &&
              ((d = this.originalToNode), (e = this.originalToPort));
        null !== b || null !== d
          ? ((f = this.insertLink(b, c, d, e)),
            null !== f
              ? (null === g &&
                  (this.isForwards
                    ? (f.defaultToPoint = a.lastInput.documentPoint)
                    : (f.defaultFromPoint = a.lastInput.documentPoint)),
                a.allowSelect &&
                  (a.P('ChangingSelection', a.selection),
                  a.clearSelection(!0),
                  (f.isSelected = !0)),
                (this.transactionResult = this.name),
                a.P('LinkDrawn', f))
              : this.doNoLink(b, c, d, e))
          : this.isForwards
          ? this.doNoLink(
              this.originalFromNode,
              this.originalFromPort,
              null,
              null,
            )
          : this.doNoLink(null, null, this.originalToNode, this.originalToPort);
      } finally {
        this.stopTool(),
          f && a.allowSelect && a.P('ChangedSelection', a.selection);
      }
    }
  };
  Uf.prototype.isNewTreeLink = function() {
    var a = this.archetypeLinkData;
    if (null === a) return !0;
    if (a instanceof T) return a.isTreeLink;
    var b = this.diagram;
    if (null === b) return !0;
    a = b.partManager.getLinkCategoryForData(a);
    b = b.partManager.findLinkTemplateForCategory(a);
    return null !== b ? b.isTreeLink : !0;
  };
  Uf.prototype.insertLink = function(a, b, c, d) {
    return this.diagram.partManager.insertLink(a, b, c, d);
  };
  Uf.prototype.doNoLink = function() {};
  ma.Object.defineProperties(Uf.prototype, {
    archetypeLinkData: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W = a;
      },
    },
    archetypeLabelNodeData: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F = a;
      },
    },
    direction: {
      get: function() {
        return this.L;
      },
      set: function(a) {
        this.L = a;
      },
    },
    startObject: {
      get: function() {
        return this.Qd;
      },
      set: function(a) {
        this.Qd = a;
      },
    },
  });
  var Vf = new D(Uf, 'Either', 0),
    Wf = new D(Uf, 'ForwardsOnly', 0),
    Xf = new D(Uf, 'BackwardsOnly', 0);
  Uf.className = 'LinkingTool';
  Uf.Either = Vf;
  Uf.ForwardsOnly = Wf;
  Uf.BackwardsOnly = Xf;

  function Se() {
    Bf.call(this);
    this.name = 'Relinking';
    var a = new Cf();
    a.figure = 'Diamond';
    a.desiredSize = Jb;
    a.fill = 'lightblue';
    a.stroke = 'dodgerblue';
    a.cursor = this.linkingCursor;
    a.segmentIndex = 0;
    this.W = a;
    a = new Cf();
    a.figure = 'Diamond';
    a.desiredSize = Jb;
    a.fill = 'lightblue';
    a.stroke = 'dodgerblue';
    a.cursor = this.linkingCursor;
    a.segmentIndex = -1;
    this.Qd = a;
    this.F = null;
    this.iw = new M();
  }
  la(Se, Bf);
  Se.prototype.updateAdornments = function(a) {
    if (null !== a && a instanceof T) {
      var b = 'RelinkFrom',
        c = null;
      if (a.isSelected && !this.diagram.isReadOnly) {
        var d = a.selectionObject;
        null !== d &&
          a.canRelinkFrom() &&
          a.actualBounds.v() &&
          a.isVisible() &&
          d.actualBounds.v() &&
          d.zf() &&
          ((c = a.Hj(b)),
          null === c && ((c = this.makeAdornment(d, !1)), a.Tg(b, c)));
      }
      null === c && a.Af(b);
      b = 'RelinkTo';
      c = null;
      a.isSelected &&
        !this.diagram.isReadOnly &&
        ((d = a.selectionObject),
        null !== d &&
          a.canRelinkTo() &&
          a.actualBounds.v() &&
          a.isVisible() &&
          d.actualBounds.v() &&
          d.zf() &&
          ((c = a.Hj(b)),
          null === c ? ((c = this.makeAdornment(d, !0)), a.Tg(b, c)) : c.w()));
      null === c && a.Af(b);
    }
  };
  Se.prototype.makeAdornment = function(a, b) {
    var c = new ue();
    c.type = W.Link;
    b = b ? this.toHandleArchetype : this.fromHandleArchetype;
    null !== b && c.add(b.copy());
    c.adornedObject = a;
    return c;
  };
  Se.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    if (
      a.isReadOnly ||
      a.isModelReadOnly ||
      !a.allowRelink ||
      !a.model.Vr() ||
      !a.lastInput.left
    )
      return !1;
    var b = this.findToolHandleAt(a.firstInput.documentPoint, 'RelinkFrom');
    null === b &&
      (b = this.findToolHandleAt(a.firstInput.documentPoint, 'RelinkTo'));
    return null !== b;
  };
  Se.prototype.doActivate = function() {
    var a = this.diagram;
    if (null === this.originalLink) {
      var b = this.handle;
      null === b &&
        ((b = this.findToolHandleAt(a.firstInput.documentPoint, 'RelinkFrom')),
        null === b &&
          (b = this.findToolHandleAt(a.firstInput.documentPoint, 'RelinkTo')));
      if (null === b) return;
      var c = b.part;
      if (!(c instanceof ue && c.adornedPart instanceof T)) return;
      this.handle = b;
      this.isForwards = null === c || 'RelinkTo' === c.category;
      this.originalLink = c.adornedPart;
    }
    this.Da(this.name);
    a.isMouseCaptured = !0;
    a.currentCursor = this.linkingCursor;
    this.originalFromPort = this.originalLink.fromPort;
    this.originalFromNode = this.originalLink.fromNode;
    this.originalToPort = this.originalLink.toPort;
    this.originalToNode = this.originalLink.toNode;
    this.iw.set(this.originalLink.actualBounds);
    null !== this.originalLink &&
      0 < this.originalLink.pointsCount &&
      (null === this.originalLink.fromNode &&
        (null !== this.temporaryFromPort &&
          (this.temporaryFromPort.desiredSize = Db),
        null !== this.temporaryFromNode &&
          (this.temporaryFromNode.location = this.originalLink.i(0))),
      null === this.originalLink.toNode &&
        (null !== this.temporaryToPort &&
          (this.temporaryToPort.desiredSize = Db),
        null !== this.temporaryToNode &&
          (this.temporaryToNode.location = this.originalLink.i(
            this.originalLink.pointsCount - 1,
          ))));
    this.copyPortProperties(
      this.originalFromNode,
      this.originalFromPort,
      this.temporaryFromNode,
      this.temporaryFromPort,
      !1,
    );
    this.copyPortProperties(
      this.originalToNode,
      this.originalToPort,
      this.temporaryToNode,
      this.temporaryToPort,
      !0,
    );
    a.add(this.temporaryFromNode);
    a.add(this.temporaryToNode);
    null !== this.temporaryLink &&
      (null !== this.temporaryFromNode &&
        (this.temporaryLink.fromNode = this.temporaryFromNode),
      null !== this.temporaryToNode &&
        (this.temporaryLink.toNode = this.temporaryToNode),
      this.copyLinkProperties(this.originalLink, this.temporaryLink),
      this.temporaryLink.ab(),
      a.add(this.temporaryLink));
    this.isActive = !0;
  };
  Se.prototype.copyLinkProperties = function(a, b) {
    if (null !== a && null !== b) {
      b.adjusting = a.adjusting;
      b.corner = a.corner;
      var c = a.curve;
      if (c === Yf || c === Zf) c = $f;
      b.curve = c;
      b.curviness = a.curviness;
      b.isTreeLink = a.isTreeLink;
      b.points = a.points;
      b.routing = a.routing;
      b.smoothness = a.smoothness;
      b.fromSpot = a.fromSpot;
      b.fromEndSegmentLength = a.fromEndSegmentLength;
      b.fromShortLength = a.fromShortLength;
      b.toSpot = a.toSpot;
      b.toEndSegmentLength = a.toEndSegmentLength;
      b.toShortLength = a.toShortLength;
    }
  };
  Se.prototype.doDeactivate = function() {
    this.isActive = !1;
    var a = this.diagram;
    a.remove(this.temporaryLink);
    a.remove(this.temporaryFromNode);
    a.remove(this.temporaryToNode);
    a.isMouseCaptured = !1;
    a.currentCursor = '';
    this.stopTransaction();
  };
  Se.prototype.doStop = function() {
    Bf.prototype.doStop.call(this);
    this.handle = null;
  };
  Se.prototype.doMouseUp = function() {
    if (this.isActive) {
      var a = this.diagram;
      this.transactionResult = null;
      var b = this.originalFromNode,
        c = this.originalFromPort,
        d = this.originalToNode,
        e = this.originalToPort,
        f = this.originalLink;
      try {
        this.targetPort = this.findTargetPort(this.isForwards);
        if (null !== this.targetPort) {
          var g = this.targetPort.part;
          g instanceof V &&
            (this.isForwards
              ? ((d = g), (e = this.targetPort))
              : ((b = g), (c = this.targetPort)));
        } else
          this.isUnconnectedLinkValid
            ? this.isForwards
              ? (e = d = null)
              : (c = b = null)
            : (f = null);
        null !== f
          ? (this.reconnectLink(
              f,
              this.isForwards ? d : b,
              this.isForwards ? e : c,
              this.isForwards,
            ),
            null === this.targetPort &&
              (this.isForwards
                ? (f.defaultToPoint = a.lastInput.documentPoint)
                : (f.defaultFromPoint = a.lastInput.documentPoint),
              f.ab()),
            (this.transactionResult = this.name),
            a.P(
              'LinkRelinked',
              f,
              this.isForwards ? this.originalToPort : this.originalFromPort,
            ))
          : this.doNoRelink(this.originalLink, this.isForwards);
        this.originalLink.Ao(this.iw);
      } finally {
        this.stopTool();
      }
    }
  };
  Se.prototype.reconnectLink = function(a, b, c, d) {
    c = null !== c && null !== c.portId ? c.portId : '';
    d
      ? ((a.toNode = b), (a.toPortId = c))
      : ((a.fromNode = b), (a.fromPortId = c));
    return !0;
  };
  Se.prototype.doNoRelink = function() {};

  function uf(a, b, c, d, e) {
    null !== b
      ? (a.copyPortProperties(
          b,
          c,
          a.temporaryFromNode,
          a.temporaryFromPort,
          !1,
        ),
        a.diagram.add(a.temporaryFromNode))
      : a.diagram.remove(a.temporaryFromNode);
    null !== d
      ? (a.copyPortProperties(d, e, a.temporaryToNode, a.temporaryToPort, !0),
        a.diagram.add(a.temporaryToNode))
      : a.diagram.remove(a.temporaryToNode);
  }
  ma.Object.defineProperties(Se.prototype, {
    fromHandleArchetype: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W = a;
      },
    },
    toHandleArchetype: {
      get: function() {
        return this.Qd;
      },
      set: function(a) {
        this.Qd = a;
      },
    },
    handle: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        if (null !== a && !(a.part instanceof ue))
          throw Error('new handle is not in an Adornment: ' + a);
        this.F = a;
      },
    },
  });
  Se.className = 'RelinkingTool';
  Ka(
    'linkingTool',
    function() {
      return this.findTool('Linking');
    },
    function(a) {
      this.gb('Linking', a, this.mouseMoveTools);
    },
  );
  Ka(
    'relinkingTool',
    function() {
      return this.findTool('Relinking');
    },
    function(a) {
      this.gb('Relinking', a, this.mouseDownTools);
    },
  );

  function ag() {
    ke.call(this);
    this.name = 'LinkReshaping';
    var a = new Cf();
    a.figure = 'Rectangle';
    a.desiredSize = Ib;
    a.fill = 'lightblue';
    a.stroke = 'dodgerblue';
    this.m = a;
    a = new Cf();
    a.figure = 'Diamond';
    a.desiredSize = Jb;
    a.fill = 'lightblue';
    a.stroke = 'dodgerblue';
    a.cursor = 'move';
    this.u = a;
    this.F = 3;
    this.vs = this.j = null;
    this.jw = new I();
    this.xq = new E();
  }
  la(ag, ke);
  ag.prototype.Du = function(a) {
    return a && 0 !== a.reshapingBehavior.value ? a.reshapingBehavior : bg;
  };
  ag.prototype.Wl = function(a, b) {
    a.reshapingBehavior = b;
  };
  ag.prototype.updateAdornments = function(a) {
    if (null !== a && a instanceof T) {
      var b = null;
      if (a.isSelected && !this.diagram.isReadOnly) {
        var c = a.path;
        null !== c &&
          a.canReshape() &&
          a.actualBounds.v() &&
          a.isVisible() &&
          c.actualBounds.v() &&
          c.zf() &&
          ((b = a.Hj(this.name)),
          null === b || b.ew !== a.pointsCount || b.yw !== a.resegmentable) &&
          ((b = this.makeAdornment(c)),
          null !== b &&
            ((b.ew = a.pointsCount),
            (b.yw = a.resegmentable),
            a.Tg(this.name, b)));
      }
      null === b && a.Af(this.name);
    }
  };
  ag.prototype.makeAdornment = function(a) {
    var b = a.part,
      c = b.pointsCount,
      d = b.isOrthogonal,
      e = null;
    if (null !== b.points && 1 < c) {
      e = new ue();
      e.type = W.Link;
      c = b.firstPickIndex;
      var f = b.lastPickIndex,
        g = d ? 1 : 0;
      if (b.resegmentable && b.computeCurve() !== cg)
        for (var h = c + g; h < f - g; h++) {
          var k = this.makeResegmentHandle(a, h);
          null !== k &&
            ((k.segmentIndex = h),
            (k.segmentFraction = 0.5),
            (k.fromMaxLinks = 999),
            e.add(k));
        }
      for (g = c + 1; g < f; g++)
        if (((h = this.makeHandle(a, g)), null !== h)) {
          h.segmentIndex = g;
          if (g !== c)
            if (g === c + 1 && d) {
              k = b.i(c);
              var l = b.i(c + 1);
              J.B(k.x, l.x) && J.B(k.y, l.y) && (l = b.i(c - 1));
              J.B(k.x, l.x)
                ? (this.Wl(h, dg), (h.cursor = 'n-resize'))
                : J.B(k.y, l.y) && (this.Wl(h, eg), (h.cursor = 'w-resize'));
            } else
              g === f - 1 && d
                ? ((k = b.i(f - 1)),
                  (l = b.i(f)),
                  J.B(k.x, l.x) && J.B(k.y, l.y) && (k = b.i(f + 1)),
                  J.B(k.x, l.x)
                    ? (this.Wl(h, dg), (h.cursor = 'n-resize'))
                    : J.B(k.y, l.y) &&
                      (this.Wl(h, eg), (h.cursor = 'w-resize')))
                : g !== f && (this.Wl(h, fg), (h.cursor = 'move'));
          e.add(h);
        }
      e.adornedObject = a;
    }
    return e;
  };
  ag.prototype.makeHandle = function() {
    var a = this.handleArchetype;
    return null === a ? null : a.copy();
  };
  ag.prototype.makeResegmentHandle = function() {
    var a = this.midHandleArchetype;
    return null === a ? null : a.copy();
  };
  ag.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    return !a.isReadOnly && a.allowReshape && a.lastInput.left
      ? null !== this.findToolHandleAt(a.firstInput.documentPoint, this.name)
      : !1;
  };
  ag.prototype.doActivate = function() {
    var a = this.diagram;
    null === this.handle &&
      (this.handle = this.findToolHandleAt(
        a.firstInput.documentPoint,
        this.name,
      ));
    if (null !== this.handle) {
      var b = this.handle.part.adornedPart;
      if (b instanceof T) {
        this.vs = b;
        a.isMouseCaptured = !0;
        this.Da(this.name);
        if (b.resegmentable && 999 === this.handle.fromMaxLinks) {
          var c = b.points.copy(),
            d = this.getResegmentingPoint();
          c.Cb(this.handle.segmentIndex + 1, d);
          b.isOrthogonal && c.Cb(this.handle.segmentIndex + 1, d);
          b.points = c;
          b.Rb();
          b.updateAdornments();
          this.handle = this.findToolHandleAt(
            a.firstInput.documentPoint,
            this.name,
          );
          if (null === this.handle) {
            this.doDeactivate();
            return;
          }
        }
        this.jw = b.i(this.handle.segmentIndex);
        this.xq = b.points.copy();
        this.isActive = !0;
      }
    }
  };
  ag.prototype.doDeactivate = function() {
    this.stopTransaction();
    this.vs = this.handle = null;
    this.isActive = this.diagram.isMouseCaptured = !1;
  };
  ag.prototype.stopTransaction = function() {
    var a = this.diagram,
      b = ke.prototype.stopTransaction.call(this);
    b &&
      null !== a.undoManager.transactionToUndo &&
      a.undoManager.transactionToUndo.Vj();
    return b;
  };
  ag.prototype.doCancel = function() {
    var a = this.adornedLink;
    null !== a && (a.points = this.xq);
    this.stopTool();
  };
  ag.prototype.getResegmentingPoint = function() {
    return this.handle.ia(yc);
  };
  ag.prototype.doMouseMove = function() {
    var a = this.diagram;
    this.isActive &&
      ((a = this.computeReshape(a.lastInput.documentPoint)), this.reshape(a));
  };
  ag.prototype.doMouseUp = function() {
    var a = this.diagram;
    if (this.isActive) {
      var b = this.computeReshape(a.lastInput.documentPoint);
      this.reshape(b);
      b = this.adornedLink;
      if (null !== b && b.resegmentable) {
        var c = this.handle.segmentIndex,
          d = b.i(c - 1),
          e = b.i(c),
          f = b.i(c + 1);
        if (b.isOrthogonal) {
          if (c > b.firstPickIndex + 1 && c < b.lastPickIndex - 1) {
            var g = b.i(c - 2);
            if (
              Math.abs(d.x - e.x) < this.resegmentingDistance &&
              Math.abs(d.y - e.y) < this.resegmentingDistance &&
              (gg(this, g, d, e, f, !0) || gg(this, g, d, e, f, !1))
            ) {
              var h = b.points.copy();
              gg(this, g, d, e, f, !0)
                ? (h.Vc(c - 2, new I(g.x, (f.y + g.y) / 2)),
                  h.Vc(c + 1, new I(f.x, (f.y + g.y) / 2)))
                : (h.Vc(c - 2, new I((f.x + g.x) / 2, g.y)),
                  h.Vc(c + 1, new I((f.x + g.x) / 2, f.y)));
              h.mb(c);
              h.mb(c - 1);
              b.points = h;
              b.Rb();
            } else
              (g = b.i(c + 2)),
                Math.abs(e.x - f.x) < this.resegmentingDistance &&
                  Math.abs(e.y - f.y) < this.resegmentingDistance &&
                  (gg(this, d, e, f, g, !0) || gg(this, d, e, f, g, !1)) &&
                  ((h = b.points.copy()),
                  gg(this, d, e, f, g, !0)
                    ? (h.Vc(c - 1, new I(d.x, (d.y + g.y) / 2)),
                      h.Vc(c + 2, new I(g.x, (d.y + g.y) / 2)))
                    : (h.Vc(c - 1, new I((d.x + g.x) / 2, d.y)),
                      h.Vc(c + 2, new I((d.x + g.x) / 2, g.y))),
                  h.mb(c + 1),
                  h.mb(c),
                  (b.points = h),
                  b.Rb());
          }
        } else
          (g = I.alloc()),
            J.fh(d.x, d.y, f.x, f.y, e.x, e.y, g) &&
              g.rf(e) < this.resegmentingDistance * this.resegmentingDistance &&
              ((d = b.points.copy()), d.mb(c), (b.points = d), b.Rb()),
            I.free(g);
      }
      a.Va();
      this.transactionResult = this.name;
      a.P('LinkReshaped', this.adornedLink, this.xq);
    }
    this.stopTool();
  };

  function gg(a, b, c, d, e, f) {
    return f
      ? Math.abs(b.y - c.y) < a.resegmentingDistance &&
          Math.abs(c.y - d.y) < a.resegmentingDistance &&
          Math.abs(d.y - e.y) < a.resegmentingDistance
      : Math.abs(b.x - c.x) < a.resegmentingDistance &&
          Math.abs(c.x - d.x) < a.resegmentingDistance &&
          Math.abs(d.x - e.x) < a.resegmentingDistance;
  }
  ag.prototype.reshape = function(a) {
    var b = this.adornedLink;
    b.jh();
    var c = this.handle.segmentIndex,
      d = this.Du(this.handle);
    if (b.isOrthogonal)
      if (c === b.firstPickIndex + 1)
        (c = b.firstPickIndex + 1),
          d === dg
            ? (b.M(c, b.i(c - 1).x, a.y), b.M(c + 1, b.i(c + 2).x, a.y))
            : d === eg &&
              (b.M(c, a.x, b.i(c - 1).y), b.M(c + 1, a.x, b.i(c + 2).y));
      else if (c === b.lastPickIndex - 1)
        (c = b.lastPickIndex - 1),
          d === dg
            ? (b.M(c - 1, b.i(c - 2).x, a.y), b.M(c, b.i(c + 1).x, a.y))
            : d === eg &&
              (b.M(c - 1, a.x, b.i(c - 2).y), b.M(c, a.x, b.i(c + 1).y));
      else {
        d = c;
        var e = b.i(d),
          f = b.i(d - 1),
          g = b.i(d + 1);
        J.B(f.x, e.x) && J.B(e.y, g.y)
          ? (J.B(f.x, b.i(d - 2).x) && !J.B(f.y, b.i(d - 2).y)
              ? (b.l(d, a.x, f.y), c++, d++)
              : b.M(d - 1, a.x, f.y),
            J.B(g.y, b.i(d + 2).y) && !J.B(g.x, b.i(d + 2).x)
              ? b.l(d + 1, g.x, a.y)
              : b.M(d + 1, g.x, a.y))
          : J.B(f.y, e.y) && J.B(e.x, g.x)
          ? (J.B(f.y, b.i(d - 2).y) && !J.B(f.x, b.i(d - 2).x)
              ? (b.l(d, f.x, a.y), c++, d++)
              : b.M(d - 1, f.x, a.y),
            J.B(g.x, b.i(d + 2).x) && !J.B(g.y, b.i(d + 2).y)
              ? b.l(d + 1, a.x, g.y)
              : b.M(d + 1, a.x, g.y))
          : J.B(f.x, e.x) && J.B(e.x, g.x)
          ? (J.B(f.x, b.i(d - 2).x) && !J.B(f.y, b.i(d - 2).y)
              ? (b.l(d, a.x, f.y), c++, d++)
              : b.M(d - 1, a.x, f.y),
            J.B(g.x, b.i(d + 2).x) && !J.B(g.y, b.i(d + 2).y)
              ? b.l(d + 1, a.x, g.y)
              : b.M(d + 1, a.x, g.y))
          : J.B(f.y, e.y) &&
            J.B(e.y, g.y) &&
            (J.B(f.y, b.i(d - 2).y) && !J.B(f.x, b.i(d - 2).x)
              ? (b.l(d, f.x, a.y), c++, d++)
              : b.M(d - 1, f.x, a.y),
            J.B(g.y, b.i(d + 2).y) && !J.B(g.x, b.i(d + 2).x)
              ? b.l(d + 1, g.x, a.y)
              : b.M(d + 1, g.x, a.y));
        b.M(c, a.x, a.y);
      }
    else
      b.M(c, a.x, a.y),
        (d = b.fromNode),
        (e = b.fromPort),
        null !== d &&
          ((f = d.findVisibleNode()),
          null !== f && f !== d && ((d = f), (e = d.port))),
        1 === c &&
          b.computeSpot(!0, e).Fc() &&
          ((f = e.ia(yc, I.alloc())),
          (d = b.getLinkPointFromPoint(d, e, f, a, !0, I.alloc())),
          b.M(0, d.x, d.y),
          I.free(f),
          I.free(d)),
        (d = b.toNode),
        (e = b.toPort),
        null !== d &&
          ((f = d.findVisibleNode()),
          null !== f && f !== d && ((d = f), (e = d.port))),
        c === b.pointsCount - 2 &&
          b.computeSpot(!1, e).Fc() &&
          ((c = e.ia(yc, I.alloc())),
          (a = b.getLinkPointFromPoint(d, e, c, a, !1, I.alloc())),
          b.M(b.pointsCount - 1, a.x, a.y),
          I.free(c),
          I.free(a));
    b.pf();
  };
  ag.prototype.computeReshape = function(a) {
    var b = this.adornedLink,
      c = this.handle.segmentIndex;
    switch (this.Du(this.handle)) {
      case fg:
        return a;
      case dg:
        return new I(b.i(c).x, a.y);
      case eg:
        return new I(a.x, b.i(c).y);
      default:
      case bg:
        return b.i(c);
    }
  };
  ma.Object.defineProperties(ag.prototype, {
    handleArchetype: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a;
      },
    },
    midHandleArchetype: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u = a;
      },
    },
    handle: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        if (null !== a && !(a.part instanceof ue))
          throw Error('new handle is not in an Adornment: ' + a);
        this.j = a;
      },
    },
    adornedLink: {
      get: function() {
        return this.vs;
      },
    },
    resegmentingDistance: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F = a;
      },
    },
    originalPoint: {
      get: function() {
        return this.jw;
      },
    },
    originalPoints: {
      get: function() {
        return this.xq;
      },
    },
  });
  ag.prototype.setReshapingBehavior = ag.prototype.Wl;
  ag.prototype.getReshapingBehavior = ag.prototype.Du;
  var bg = new D(ag, 'None', 0),
    eg = new D(ag, 'Horizontal', 1),
    dg = new D(ag, 'Vertical', 2),
    fg = new D(ag, 'All', 3);
  ag.className = 'LinkReshapingTool';
  ag.None = bg;
  ag.Horizontal = eg;
  ag.Vertical = dg;
  ag.All = fg;
  Ka(
    'linkReshapingTool',
    function() {
      return this.findTool('LinkReshaping');
    },
    function(a) {
      this.gb('LinkReshaping', a, this.mouseDownTools);
    },
  );

  function hg() {
    ke.call(this);
    this.name = 'Resizing';
    this.m = new K(1, 1).freeze();
    this.j = new K(9999, 9999).freeze();
    this.pg = new K(NaN, NaN).freeze();
    this.W = !1;
    this.ga = !0;
    this.me = null;
    var a = new Cf();
    a.alignmentFocus = yc;
    a.figure = 'Rectangle';
    a.desiredSize = Ib;
    a.fill = 'lightblue';
    a.stroke = 'dodgerblue';
    a.strokeWidth = 1;
    a.cursor = 'pointer';
    this.F = a;
    this.u = null;
    this.wq = new I();
    this.hw = new K();
    this.An = new I();
    this.Us = new K(0, 0);
    this.Ts = new K(Infinity, Infinity);
    this.Ss = new K(1, 1);
  }
  la(hg, ke);
  hg.prototype.updateAdornments = function(a) {
    if (!(null === a || a instanceof T)) {
      if (a.isSelected && !this.diagram.isReadOnly) {
        var b = a.resizeObject,
          c = a.Hj(this.name);
        if (
          null !== b &&
          a.canResize() &&
          a.actualBounds.v() &&
          a.isVisible() &&
          b.actualBounds.v() &&
          b.zf()
        ) {
          if (null === c || c.adornedObject !== b) c = this.makeAdornment(b);
          if (null !== c) {
            b = b.fi();
            ig(a) && this.updateResizeHandles(c, b);
            a.Tg(this.name, c);
            return;
          }
        }
      }
      a.Af(this.name);
    }
  };
  hg.prototype.makeAdornment = function(a) {
    var b = a.part.resizeAdornmentTemplate;
    if (null === b) {
      b = new ue();
      b.type = W.Spot;
      b.locationSpot = yc;
      var c = new jg();
      c.isPanelMain = !0;
      b.add(c);
      b.add(this.makeHandle(a, tc));
      b.add(this.makeHandle(a, vc));
      b.add(this.makeHandle(a, Cc));
      b.add(this.makeHandle(a, Ac));
      b.add(this.makeHandle(a, ad));
      b.add(this.makeHandle(a, ed));
      b.add(this.makeHandle(a, fd));
      b.add(this.makeHandle(a, dd));
    } else if ((kg(b), (b = b.copy()), null === b)) return null;
    b.adornedObject = a;
    return b;
  };
  hg.prototype.makeHandle = function(a, b) {
    a = this.handleArchetype;
    if (null === a) return null;
    a = a.copy();
    a.alignment = b;
    return a;
  };
  hg.prototype.updateResizeHandles = function(a, b) {
    if (null !== a)
      if (
        !a.alignment.Sb() &&
        ('pointer' === a.cursor || 0 < a.cursor.indexOf('resize'))
      )
        a: {
          var c = a.alignment;
          c.Fc() && (c = yc);
          if (0 >= c.x) b = 0 >= c.y ? b + 225 : 1 <= c.y ? b + 135 : b + 180;
          else if (1 <= c.x) 0 >= c.y ? (b += 315) : 1 <= c.y && (b += 45);
          else if (0 >= c.y) b += 270;
          else if (1 <= c.y) b += 90;
          else break a;
          0 > b ? (b += 360) : 360 <= b && (b -= 360);
          a.cursor =
            22.5 > b
              ? 'e-resize'
              : 67.5 > b
              ? 'se-resize'
              : 112.5 > b
              ? 's-resize'
              : 157.5 > b
              ? 'sw-resize'
              : 202.5 > b
              ? 'w-resize'
              : 247.5 > b
              ? 'nw-resize'
              : 292.5 > b
              ? 'n-resize'
              : 337.5 > b
              ? 'ne-resize'
              : 'e-resize';
        }
      else if (a instanceof W)
        for (a = a.elements; a.next(); ) this.updateResizeHandles(a.value, b);
  };
  hg.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    return !a.isReadOnly && a.allowResize && a.lastInput.left
      ? null !== this.findToolHandleAt(a.firstInput.documentPoint, this.name)
      : !1;
  };
  hg.prototype.doActivate = function() {
    var a = this.diagram;
    null === this.handle &&
      (this.handle = this.findToolHandleAt(
        a.firstInput.documentPoint,
        this.name,
      ));
    null !== this.handle &&
      ((this.adornedObject = this.handle.part.adornedObject),
      null !== this.adornedObject &&
        ((a.isMouseCaptured = !0),
        a.animationManager.wc(),
        this.Da(this.name),
        this.wq.set(this.adornedObject.ia(this.handle.alignment.Qu())),
        this.An.set(this.adornedObject.part.location),
        this.hw.set(this.adornedObject.desiredSize),
        (this.Ss = this.computeCellSize()),
        (this.Us = this.computeMinSize()),
        (this.Ts = this.computeMaxSize()),
        (this.isActive = !0)));
  };
  hg.prototype.doDeactivate = function() {
    var a = this.diagram;
    this.stopTransaction();
    this.me = this.handle = null;
    this.isActive = a.isMouseCaptured = !1;
  };
  hg.prototype.stopTransaction = function() {
    var a = this.diagram,
      b = ke.prototype.stopTransaction.call(this);
    b &&
      null !== a.undoManager.transactionToUndo &&
      a.undoManager.transactionToUndo.Vj();
    return b;
  };
  hg.prototype.doCancel = function() {
    null !== this.adornedObject &&
      ((this.adornedObject.desiredSize = this.originalDesiredSize),
      (this.adornedObject.part.location = this.originalLocation));
    this.stopTool();
  };
  hg.prototype.doMouseMove = function() {
    var a = this.diagram;
    if (this.isActive) {
      var b = this.Us,
        c = this.Ts,
        d = this.Ss,
        e = this.adornedObject.Nr(a.lastInput.documentPoint, I.alloc()),
        f = this.computeReshape();
      b = this.computeResize(e, this.handle.alignment, b, c, d, f);
      this.resize(b);
      a.nd();
      I.free(e);
    }
  };
  hg.prototype.doMouseUp = function() {
    var a = this.diagram;
    if (this.isActive) {
      var b = this.Us,
        c = this.Ts,
        d = this.Ss,
        e = this.adornedObject.Nr(a.lastInput.documentPoint, I.alloc()),
        f = this.computeReshape();
      b = this.computeResize(e, this.handle.alignment, b, c, d, f);
      this.resize(b);
      I.free(e);
      a.Va();
      this.transactionResult = this.name;
      a.P('PartResized', this.adornedObject, this.originalDesiredSize);
    }
    this.stopTool();
  };
  hg.prototype.resize = function(a) {
    var b = this.diagram,
      c = this.adornedObject;
    if (null !== c) {
      c.desiredSize = a.size;
      a = c.part;
      a.Za();
      c = c.ia(this.handle.alignment.Qu());
      if (a instanceof qf) {
        var d = new E();
        d.add(a);
        if (!this.dragsMembers && null === a.placeholder) {
          var e = new Ce();
          e.dragsMembers = !1;
        }
        b.moveParts(d, this.oppositePoint.copy().je(c), !0, e);
      } else
        a.location = a.location
          .copy()
          .je(c)
          .add(this.oppositePoint);
      b.nd();
    }
  };
  hg.prototype.computeResize = function(a, b, c, d, e, f) {
    b.Fc() && (b = yc);
    var g = this.adornedObject.naturalBounds,
      h = g.x,
      k = g.y,
      l = g.x + g.width,
      m = g.y + g.height,
      n = 1;
    if (!f) {
      n = g.width;
      var p = g.height;
      0 >= n && (n = 1);
      0 >= p && (p = 1);
      n = p / n;
    }
    p = I.alloc();
    J.so(a.x, a.y, h, k, e.width, e.height, p);
    a = g.copy();
    0 >= b.x
      ? 0 >= b.y
        ? ((a.x = Math.max(p.x, l - d.width)),
          (a.x = Math.min(a.x, l - c.width)),
          (a.width = Math.max(l - a.x, c.width)),
          (a.y = Math.max(p.y, m - d.height)),
          (a.y = Math.min(a.y, m - c.height)),
          (a.height = Math.max(m - a.y, c.height)),
          f ||
            (1 <= a.height / a.width
              ? ((a.height = Math.max(
                  Math.min(n * a.width, d.height),
                  c.height,
                )),
                (a.width = a.height / n))
              : ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)),
                (a.height = n * a.width)),
            (a.x = l - a.width),
            (a.y = m - a.height)))
        : 1 <= b.y
        ? ((a.x = Math.max(p.x, l - d.width)),
          (a.x = Math.min(a.x, l - c.width)),
          (a.width = Math.max(l - a.x, c.width)),
          (a.height = Math.max(Math.min(p.y - k, d.height), c.height)),
          f ||
            (1 <= a.height / a.width
              ? ((a.height = Math.max(
                  Math.min(n * a.width, d.height),
                  c.height,
                )),
                (a.width = a.height / n))
              : ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)),
                (a.height = n * a.width)),
            (a.x = l - a.width)))
        : ((a.x = Math.max(p.x, l - d.width)),
          (a.x = Math.min(a.x, l - c.width)),
          (a.width = l - a.x),
          f ||
            ((a.height = Math.max(Math.min(n * a.width, d.height), c.height)),
            (a.width = a.height / n),
            (a.y = k + 0.5 * (m - k - a.height))))
      : 1 <= b.x
      ? 0 >= b.y
        ? ((a.width = Math.max(Math.min(p.x - h, d.width), c.width)),
          (a.y = Math.max(p.y, m - d.height)),
          (a.y = Math.min(a.y, m - c.height)),
          (a.height = Math.max(m - a.y, c.height)),
          f ||
            (1 <= a.height / a.width
              ? ((a.height = Math.max(
                  Math.min(n * a.width, d.height),
                  c.height,
                )),
                (a.width = a.height / n))
              : ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)),
                (a.height = n * a.width)),
            (a.y = m - a.height)))
        : 1 <= b.y
        ? ((a.width = Math.max(Math.min(p.x - h, d.width), c.width)),
          (a.height = Math.max(Math.min(p.y - k, d.height), c.height)),
          f ||
            (1 <= a.height / a.width
              ? ((a.height = Math.max(
                  Math.min(n * a.width, d.height),
                  c.height,
                )),
                (a.width = a.height / n))
              : ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)),
                (a.height = n * a.width))))
        : ((a.width = Math.max(Math.min(p.x - h, d.width), c.width)),
          f ||
            ((a.height = Math.max(Math.min(n * a.width, d.height), c.height)),
            (a.width = a.height / n),
            (a.y = k + 0.5 * (m - k - a.height))))
      : 0 >= b.y
      ? ((a.y = Math.max(p.y, m - d.height)),
        (a.y = Math.min(a.y, m - c.height)),
        (a.height = m - a.y),
        f ||
          ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)),
          (a.height = n * a.width),
          (a.x = h + 0.5 * (l - h - a.width))))
      : 1 <= b.y &&
        ((a.height = Math.max(Math.min(p.y - k, d.height), c.height)),
        f ||
          ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)),
          (a.height = n * a.width),
          (a.x = h + 0.5 * (l - h - a.width))));
    I.free(p);
    return a;
  };
  hg.prototype.computeReshape = function() {
    var a = lg;
    this.adornedObject instanceof Cf && (a = mg(this.adornedObject));
    return !(a === ng || this.diagram.lastInput.shift);
  };
  hg.prototype.computeMinSize = function() {
    var a = this.adornedObject.minSize.copy(),
      b = this.minSize;
    !isNaN(b.width) && b.width > a.width && (a.width = b.width);
    !isNaN(b.height) && b.height > a.height && (a.height = b.height);
    return a;
  };
  hg.prototype.computeMaxSize = function() {
    var a = this.adornedObject.maxSize.copy(),
      b = this.maxSize;
    !isNaN(b.width) && b.width < a.width && (a.width = b.width);
    !isNaN(b.height) && b.height < a.height && (a.height = b.height);
    return a;
  };
  hg.prototype.computeCellSize = function() {
    var a = new K(NaN, NaN),
      b = this.adornedObject.part;
    null !== b &&
      ((b = b.resizeCellSize),
      !isNaN(b.width) && 0 < b.width && (a.width = b.width),
      !isNaN(b.height) && 0 < b.height && (a.height = b.height));
    b = this.cellSize;
    isNaN(a.width) && !isNaN(b.width) && 0 < b.width && (a.width = b.width);
    isNaN(a.height) &&
      !isNaN(b.height) &&
      0 < b.height &&
      (a.height = b.height);
    b = this.diagram;
    (isNaN(a.width) || isNaN(a.height)) &&
      b &&
      ((b = b.grid),
      null !== b &&
        b.visible &&
        this.isGridSnapEnabled &&
        ((b = b.gridCellSize),
        isNaN(a.width) && !isNaN(b.width) && 0 < b.width && (a.width = b.width),
        isNaN(a.height) &&
          !isNaN(b.height) &&
          0 < b.height &&
          (a.height = b.height)));
    if (isNaN(a.width) || 0 === a.width || Infinity === a.width) a.width = 1;
    if (isNaN(a.height) || 0 === a.height || Infinity === a.height)
      a.height = 1;
    return a;
  };
  ma.Object.defineProperties(hg.prototype, {
    handleArchetype: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F = a;
      },
    },
    handle: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        if (null !== a && !(a.part instanceof ue))
          throw Error('new handle is not in an Adornment: ' + a);
        this.u = a;
      },
    },
    adornedObject: {
      get: function() {
        return this.me;
      },
      set: function(a) {
        if (null !== a && a.part instanceof ue)
          throw Error('new handle must not be in an Adornment: ' + a);
        this.me = a;
      },
    },
    minSize: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        if (!this.m.C(a)) {
          var b = a.width;
          isNaN(b) && (b = 0);
          a = a.height;
          isNaN(a) && (a = 0);
          this.m.h(b, a);
        }
      },
    },
    maxSize: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        if (!this.j.C(a)) {
          var b = a.width;
          isNaN(b) && (b = Infinity);
          a = a.height;
          isNaN(a) && (a = Infinity);
          this.j.h(b, a);
        }
      },
    },
    cellSize: {
      get: function() {
        return this.pg;
      },
      set: function(a) {
        this.pg.C(a) || this.pg.assign(a);
      },
    },
    isGridSnapEnabled: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W = a;
      },
    },
    dragsMembers: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        this.ga = a;
      },
    },
    oppositePoint: {
      get: function() {
        return this.wq;
      },
      set: function(a) {
        this.wq.C(a) || this.wq.assign(a);
      },
    },
    originalDesiredSize: {
      get: function() {
        return this.hw;
      },
    },
    originalLocation: {
      get: function() {
        return this.An;
      },
    },
  });
  hg.className = 'ResizingTool';
  Ka(
    'resizingTool',
    function() {
      return this.findTool('Resizing');
    },
    function(a) {
      this.gb('Resizing', a, this.mouseDownTools);
    },
  );

  function og() {
    ke.call(this);
    this.name = 'Rotating';
    this.ga = 45;
    this.W = 2;
    this.An = new I();
    this.me = null;
    var a = new Cf();
    a.figure = 'Ellipse';
    a.desiredSize = Jb;
    a.fill = 'lightblue';
    a.stroke = 'dodgerblue';
    a.strokeWidth = 1;
    a.cursor = 'pointer';
    this.m = a;
    this.j = null;
    this.gw = 0;
    this.Jq = new I(NaN, NaN);
    this.u = 0;
    this.F = 50;
  }
  la(og, ke);
  og.prototype.updateAdornments = function(a) {
    if (null !== a) {
      if (a.eh()) {
        var b = a.rotateObject;
        if (b === a || b === a.path || b.isPanelMain) return;
      }
      if (
        a.isSelected &&
        !this.diagram.isReadOnly &&
        ((b = a.rotateObject),
        null !== b &&
          a.canRotate() &&
          a.actualBounds.v() &&
          a.isVisible() &&
          b.actualBounds.v() &&
          b.zf())
      ) {
        var c = a.Hj(this.name);
        if (null === c || c.adornedObject !== b) c = this.makeAdornment(b);
        if (null !== c) {
          c.angle = b.fi();
          null === c.placeholder &&
            (c.location = this.computeAdornmentLocation(b));
          a.Tg(this.name, c);
          return;
        }
      }
      a.Af(this.name);
    }
  };
  og.prototype.makeAdornment = function(a) {
    var b = a.part.rotateAdornmentTemplate;
    if (null === b) {
      b = new ue();
      b.type = W.Position;
      b.locationSpot = yc;
      var c = this.handleArchetype;
      null !== c && b.add(c.copy());
    } else if ((kg(b), (b = b.copy()), null === b)) return null;
    b.adornedObject = a;
    return b;
  };
  og.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    return !a.isReadOnly && a.allowRotate && a.lastInput.left
      ? null !== this.findToolHandleAt(a.firstInput.documentPoint, this.name)
      : !1;
  };
  og.prototype.doActivate = function() {
    var a = this.diagram;
    if (null === this.adornedObject) {
      null === this.handle &&
        (this.handle = this.findToolHandleAt(
          a.firstInput.documentPoint,
          this.name,
        ));
      if (null === this.handle) return;
      this.adornedObject = this.handle.part.adornedObject;
    }
    null !== this.adornedObject &&
      ((a.isMouseCaptured = !0),
      (a.delaysLayout = !0),
      this.Da(this.name),
      (this.gw = this.adornedObject.angle),
      (this.Jq = this.computeRotationPoint(this.adornedObject)),
      (this.An = this.adornedObject.part.location.copy()),
      (this.isActive = !0));
  };
  og.prototype.computeRotationPoint = function(a) {
    var b = a.part,
      c = b.locationObject;
    return b.rotationSpot.pb()
      ? a.ia(b.rotationSpot)
      : a === b || a === c
      ? c.ia(b.locationSpot)
      : a.ia(yc);
  };
  og.prototype.computeAdornmentLocation = function(a) {
    var b = this.rotationPoint;
    b.v() || (b = this.computeRotationPoint(a));
    b = a.Nr(b);
    var c = this.handleAngle;
    0 > c ? (c += 360) : 360 <= c && (c -= 360);
    c = Math.round(45 * Math.round(c / 45));
    var d = this.handleDistance;
    0 === c
      ? (b.x = a.naturalBounds.width + d)
      : 45 === c
      ? ((b.x = a.naturalBounds.width + d), (b.y = a.naturalBounds.height + d))
      : 90 === c
      ? (b.y = a.naturalBounds.height + d)
      : 135 === c
      ? ((b.x = -d), (b.y = a.naturalBounds.height + d))
      : 180 === c
      ? (b.x = -d)
      : 225 === c
      ? ((b.x = -d), (b.y = -d))
      : 270 === c
      ? (b.y = -d)
      : 315 === c && ((b.x = a.naturalBounds.width + d), (b.y = -d));
    return a.ia(b);
  };
  og.prototype.doDeactivate = function() {
    var a = this.diagram;
    this.stopTransaction();
    this.me = this.handle = null;
    this.Jq = new I(NaN, NaN);
    this.isActive = a.isMouseCaptured = !1;
  };
  og.prototype.stopTransaction = function() {
    var a = this.diagram,
      b = ke.prototype.stopTransaction.call(this);
    b &&
      null !== a.undoManager.transactionToUndo &&
      a.undoManager.transactionToUndo.Vj();
    return b;
  };
  og.prototype.doCancel = function() {
    this.diagram.delaysLayout = !1;
    this.rotate(this.originalAngle);
    this.stopTool();
  };
  og.prototype.doMouseMove = function() {
    var a = this.diagram;
    this.isActive &&
      ((a = this.computeRotate(a.lastInput.documentPoint)), this.rotate(a));
  };
  og.prototype.doMouseUp = function() {
    var a = this.diagram;
    if (this.isActive) {
      a.delaysLayout = !1;
      var b = this.computeRotate(a.lastInput.documentPoint);
      this.rotate(b);
      a.Va();
      this.transactionResult = this.name;
      a.P('PartRotated', this.adornedObject, this.originalAngle);
    }
    this.stopTool();
  };
  og.prototype.rotate = function(a) {
    var b = this.adornedObject;
    if (null !== b) {
      b.angle = a;
      b = b.part;
      b.Za();
      var c = b.locationObject,
        d = b.rotateObject;
      if (c === d || c.jg(d))
        (c = this.An.copy()),
          (b.location = c
            .je(this.rotationPoint)
            .rotate(a - this.originalAngle)
            .add(this.rotationPoint));
      this.diagram.nd();
    }
  };
  og.prototype.computeRotate = function(a) {
    a = this.rotationPoint.Ya(a) - this.handleAngle;
    var b = this.adornedObject.panel;
    null !== b && (a -= b.fi());
    360 <= a ? (a -= 360) : 0 > a && (a += 360);
    b = Math.min(Math.abs(this.snapAngleMultiple), 180);
    var c = Math.min(Math.abs(this.snapAngleEpsilon), b / 2);
    !this.diagram.lastInput.shift &&
      0 < b &&
      0 < c &&
      (a % b < c
        ? (a = Math.floor(a / b) * b)
        : a % b > b - c && (a = (Math.floor(a / b) + 1) * b));
    360 <= a ? (a -= 360) : 0 > a && (a += 360);
    return a;
  };
  ma.Object.defineProperties(og.prototype, {
    handleArchetype: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a;
      },
    },
    handle: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        if (null !== a && !(a.part instanceof ue))
          throw Error('new handle is not in an Adornment: ' + a);
        this.j = a;
      },
    },
    adornedObject: {
      get: function() {
        return this.me;
      },
      set: function(a) {
        if (null !== a && a.part instanceof ue)
          throw Error('new handle must not be in an Adornment: ' + a);
        this.me = a;
      },
    },
    snapAngleMultiple: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        this.ga = a;
      },
    },
    snapAngleEpsilon: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W = a;
      },
    },
    originalAngle: {
      get: function() {
        return this.gw;
      },
    },
    rotationPoint: {
      get: function() {
        return this.Jq;
      },
      set: function(a) {
        this.Jq = a.copy();
      },
    },
    handleAngle: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u = a;
      },
    },
    handleDistance: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F = a;
      },
    },
  });
  og.className = 'RotatingTool';
  Ka(
    'rotatingTool',
    function() {
      return this.findTool('Rotating');
    },
    function(a) {
      this.gb('Rotating', a, this.mouseDownTools);
    },
  );

  function pg() {
    ke.call(this);
    this.name = 'ClickSelecting';
  }
  la(pg, ke);
  pg.prototype.canStart = function() {
    return !this.isEnabled || this.isBeyondDragSize() ? !1 : !0;
  };
  pg.prototype.doMouseUp = function() {
    this.isActive &&
      (this.standardMouseSelect(),
      !this.standardMouseClick() &&
        this.diagram.lastInput.isTouchEvent &&
        this.diagram.toolManager.doToolTip());
    this.stopTool();
  };
  pg.className = 'ClickSelectingTool';

  function qg() {
    ke.call(this);
    this.name = 'Action';
    this.ck = null;
  }
  la(qg, ke);
  qg.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram,
      b = a.lastInput,
      c = a.ec(b.documentPoint, function(a) {
        for (; null !== a.panel && !a.isActionable; ) a = a.panel;
        return a;
      });
    if (null !== c) {
      if (!c.isActionable) return !1;
      this.ck = c;
      a.qk = a.ec(b.documentPoint, null, null);
      return !0;
    }
    return !1;
  };
  qg.prototype.doMouseDown = function() {
    if (this.isActive) {
      var a = this.diagram.lastInput,
        b = this.ck;
      null !== b &&
        ((a.targetObject = b), null !== b.actionDown && b.actionDown(a, b));
    } else this.canStart() && this.doActivate();
  };
  qg.prototype.doMouseMove = function() {
    if (this.isActive) {
      var a = this.diagram.lastInput,
        b = this.ck;
      null !== b &&
        ((a.targetObject = b), null !== b.actionMove && b.actionMove(a, b));
    }
  };
  qg.prototype.doMouseUp = function() {
    if (this.isActive) {
      var a = this.diagram.lastInput,
        b = this.ck;
      if (null === b) return;
      a.targetObject = b;
      null !== b.actionUp && b.actionUp(a, b);
      this.standardMouseClick(
        function(a) {
          for (; null !== a.panel && (!a.isActionable || a !== b); )
            a = a.panel;
          return a;
        },
        function(a) {
          return a === b;
        },
      );
    }
    this.stopTool();
  };
  qg.prototype.doCancel = function() {
    var a = this.diagram.lastInput,
      b = this.ck;
    null !== b &&
      ((a.targetObject = b),
      null !== b.actionCancel && b.actionCancel(a, b),
      this.stopTool());
  };
  qg.prototype.doStop = function() {
    this.ck = null;
  };
  qg.className = 'ActionTool';

  function rg() {
    ke.call(this);
    this.name = 'ClickCreating';
    this.Li = null;
    this.m = !0;
    this.j = !1;
    this.Rv = new I(0, 0);
  }
  la(rg, ke);
  rg.prototype.canStart = function() {
    if (!this.isEnabled || null === this.archetypeNodeData) return !1;
    var a = this.diagram;
    if (
      a.isReadOnly ||
      a.isModelReadOnly ||
      !a.allowInsert ||
      !a.lastInput.left ||
      this.isBeyondDragSize()
    )
      return !1;
    if (this.isDoubleClick) {
      if (
        (1 === a.lastInput.clickCount &&
          (this.Rv = a.lastInput.viewPoint.copy()),
        2 !== a.lastInput.clickCount || this.isBeyondDragSize(this.Rv))
      )
        return !1;
    } else if (1 !== a.lastInput.clickCount) return !1;
    return a.currentTool !== this &&
      null !== a.wl(a.lastInput.documentPoint, !0)
      ? !1
      : !0;
  };
  rg.prototype.doMouseUp = function() {
    var a = this.diagram;
    this.isActive && this.insertPart(a.lastInput.documentPoint);
    this.stopTool();
  };
  rg.prototype.insertPart = function(a) {
    var b = this.diagram,
      c = this.archetypeNodeData;
    if (null === c) return null;
    var d = null;
    try {
      b.P('ChangingSelection', b.selection);
      this.Da(this.name);
      if (c instanceof U)
        c.Tc() && (kg(c), (d = c.copy()), null !== d && b.add(d));
      else if (null !== c) {
        var e = b.model.copyNodeData(c);
        ya(e) && (b.model.lf(e), (d = b.Ec(e)));
      }
      if (null !== d) {
        var f = I.allocAt(a.x, a.y);
        this.isGridSnapEnabled && Ag(this.diagram, d, a, f);
        d.location = f;
        b.allowSelect && (b.clearSelection(!0), (d.isSelected = !0));
        I.free(f);
      }
      b.Va();
      this.transactionResult = this.name;
      b.P('PartCreated', d);
    } finally {
      this.stopTransaction(), b.P('ChangedSelection', b.selection);
    }
    return d;
  };
  ma.Object.defineProperties(rg.prototype, {
    archetypeNodeData: {
      get: function() {
        return this.Li;
      },
      set: function(a) {
        this.Li = a;
      },
    },
    isDoubleClick: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a;
      },
    },
    isGridSnapEnabled: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j = a;
      },
    },
  });
  rg.className = 'ClickCreatingTool';

  function Bg() {
    ke.call(this);
    this.name = 'DragSelecting';
    this.wk = 175;
    this.m = !1;
    var a = new U();
    a.layerName = 'Tool';
    a.selectable = !1;
    var b = new Cf();
    b.name = 'SHAPE';
    b.figure = 'Rectangle';
    b.fill = null;
    b.stroke = 'magenta';
    a.add(b);
    this.j = a;
  }
  la(Bg, ke);
  Bg.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    if (!a.allowSelect) return !1;
    var b = a.lastInput;
    return !b.left ||
      (a.currentTool !== this &&
        (!this.isBeyondDragSize() ||
          b.timestamp - a.firstInput.timestamp < this.delay ||
          null !== a.wl(b.documentPoint, !0)))
      ? !1
      : !0;
  };
  Bg.prototype.doActivate = function() {
    var a = this.diagram;
    this.isActive = !0;
    a.isMouseCaptured = !0;
    a.skipsUndoManager = !0;
    a.add(this.box);
    this.doMouseMove();
  };
  Bg.prototype.doDeactivate = function() {
    var a = this.diagram;
    a.lg();
    a.remove(this.box);
    a.skipsUndoManager = !1;
    this.isActive = a.isMouseCaptured = !1;
  };
  Bg.prototype.doMouseMove = function() {
    var a = this.diagram;
    if (this.isActive && null !== this.box) {
      var b = this.computeBoxBounds(),
        c = this.box.fb('SHAPE');
      null === c && (c = this.box.vb());
      var d = K.alloc().h(b.width, b.height);
      c.desiredSize = d;
      this.box.Ul(b.x, b.y, !1);
      K.free(d);
      (a.allowHorizontalScroll || a.allowVerticalScroll) &&
        a.Fr(a.lastInput.viewPoint);
    }
  };
  Bg.prototype.doMouseUp = function() {
    if (this.isActive) {
      var a = this.diagram;
      a.remove(this.box);
      try {
        (a.currentCursor = 'wait'),
          a.P('ChangingSelection', a.selection),
          this.selectInRect(this.computeBoxBounds()),
          a.P('ChangedSelection', a.selection);
      } finally {
        a.currentCursor = '';
      }
    }
    this.stopTool();
  };
  Bg.prototype.computeBoxBounds = function() {
    var a = this.diagram;
    return new M(a.firstInput.documentPoint, a.lastInput.documentPoint);
  };
  Bg.prototype.selectInRect = function(a) {
    var b = this.diagram,
      c = b.lastInput;
    a = b.Ww(a, this.isPartialInclusion);
    if (Qa ? c.meta : c.control)
      if (c.shift)
        for (a = a.iterator; a.next(); )
          (b = a.value), b.isSelected && (b.isSelected = !1);
      else
        for (a = a.iterator; a.next(); )
          (b = a.value), (b.isSelected = !b.isSelected);
    else if (c.shift)
      for (a = a.iterator; a.next(); )
        (b = a.value), b.isSelected || (b.isSelected = !0);
    else {
      c = new E();
      for (b = b.selection.iterator; b.next(); ) {
        var d = b.value;
        a.contains(d) || c.add(d);
      }
      for (b = c.iterator; b.next(); ) b.value.isSelected = !1;
      for (a = a.iterator; a.next(); )
        (b = a.value), b.isSelected || (b.isSelected = !0);
    }
  };
  ma.Object.defineProperties(Bg.prototype, {
    delay: {
      get: function() {
        return this.wk;
      },
      set: function(a) {
        this.wk = a;
      },
    },
    isPartialInclusion: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a;
      },
    },
    box: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j = a;
      },
    },
  });
  Bg.className = 'DragSelectingTool';

  function Cg() {
    ke.call(this);
    this.name = 'Panning';
    this.Ct = new I();
    this.ey = new I();
    this.og = !1;
    var a = this;
    this.ow = function() {
      var b = a.diagram;
      null !== b && b.removeEventListener(x.document, 'scroll', a.ow, !1);
      a.stopTool();
    };
  }
  la(Cg, ke);
  Cg.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    return (!a.allowHorizontalScroll && !a.allowVerticalScroll) ||
      !a.lastInput.left ||
      (a.currentTool !== this && !this.isBeyondDragSize())
      ? !1
      : !0;
  };
  Cg.prototype.doActivate = function() {
    var a = this.diagram;
    this.og
      ? ((a.lastInput.bubbles = !0),
        a.addEventListener(x.document, 'scroll', this.ow, !1))
      : ((a.currentCursor = 'move'),
        (a.isMouseCaptured = !0),
        this.Ct.assign(a.position));
    this.isActive = !0;
  };
  Cg.prototype.doDeactivate = function() {
    var a = this.diagram;
    a.currentCursor = '';
    this.isActive = a.isMouseCaptured = !1;
  };
  Cg.prototype.doCancel = function() {
    var a = this.diagram;
    a.position = this.Ct;
    a.isMouseCaptured = !1;
    this.stopTool();
  };
  Cg.prototype.doMouseMove = function() {
    this.move();
  };
  Cg.prototype.doMouseUp = function() {
    this.move();
    this.stopTool();
  };
  Cg.prototype.move = function() {
    var a = this.diagram;
    if (this.isActive && a)
      if (this.og) a.lastInput.bubbles = !0;
      else {
        var b = a.position,
          c = a.firstInput.documentPoint,
          d = a.lastInput.documentPoint,
          e = b.x + c.x - d.x;
        c = b.y + c.y - d.y;
        a.allowHorizontalScroll || (e = b.x);
        a.allowVerticalScroll || (c = b.y);
        a.position = this.ey.h(e, c);
      }
  };
  ma.Object.defineProperties(Cg.prototype, {
    bubbles: {
      get: function() {
        return this.og;
      },
      set: function(a) {
        this.og = a;
      },
    },
    originalPosition: {
      get: function() {
        return this.Ct;
      },
    },
  });
  Cg.className = 'PanningTool';
  Ka(
    'clickCreatingTool',
    function() {
      return this.findTool('ClickCreating');
    },
    function(a) {
      this.gb('ClickCreating', a, this.mouseUpTools);
    },
  );
  Ka(
    'clickSelectingTool',
    function() {
      return this.findTool('ClickSelecting');
    },
    function(a) {
      this.gb('ClickSelecting', a, this.mouseUpTools);
    },
  );
  Ka(
    'panningTool',
    function() {
      return this.findTool('Panning');
    },
    function(a) {
      this.gb('Panning', a, this.mouseMoveTools);
    },
  );
  Ka(
    'dragSelectingTool',
    function() {
      return this.findTool('DragSelecting');
    },
    function(a) {
      this.gb('DragSelecting', a, this.mouseMoveTools);
    },
  );
  Ka(
    'actionTool',
    function() {
      return this.findTool('Action');
    },
    function(a) {
      this.gb('Action', a, this.mouseDownTools);
    },
  );

  function ze() {
    this.F = this.u = this.j = this.m = null;
  }
  ma.Object.defineProperties(ze.prototype, {
    mainElement: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u = a;
      },
    },
    show: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m !== a && (this.m = a);
      },
    },
    hide: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j !== a && (this.j = a);
      },
    },
    valueFunction: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F = a;
      },
    },
  });
  ze.className = 'HTMLInfo';

  function Dg(a, b, c) {
    this.text = a;
    this.Kw = b;
    this.visible = c;
  }
  Dg.className = 'ContextMenuButtonInfo';

  function Eg() {
    ke.call(this);
    this.name = 'ContextMenu';
    this.m = this.Js = this.j = null;
    this.cw = new I();
    this.Ls = null;
    this.gt = !1;
    var a = this;
    this.Zt = function() {
      a.stopTool();
    };
  }
  la(Eg, ke);

  function Fg(a) {
    var b = new ze();
    b.show = function(a, b, c) {
      c.showDefaultContextMenu();
    };
    b.hide = function(a, b) {
      b.hideDefaultContextMenu();
    };
    Gg = b;
    a.Zt = function() {
      a.stopTool();
    };
    b = ua('div');
    var c = ua('div');
    b.style.cssText =
      'top: 0px;z-index:10002;position: fixed;display: none;text-align: center;left: 25%;width: 50%;background-color: #F5F5F5;padding: 16px;border: 16px solid #444;border-radius: 10px;margin-top: 10px';
    c.style.cssText =
      'z-index:10001;position: fixed;display: none;top: 0;left: 0;width: 100%;height: 100%;background-color: black;opacity: 0.8;';
    var d = ua('style');
    x.document.getElementsByTagName('head')[0].appendChild(d);
    d.sheet.insertRule('.goCXul { list-style: none; }', 0);
    d.sheet.insertRule(
      '.goCXli {font:700 1.5em Helvetica, Arial, sans-serif;position: relative;min-width: 60px; }',
      0,
    );
    d.sheet.insertRule(
      '.goCXa {color: #444;display: inline-block;padding: 4px;text-decoration: none;margin: 2px;border: 1px solid gray;border-radius: 10px; }',
      0,
    );
    d = a.diagram;
    null !== d &&
      (d.addEventListener(b, 'contextmenu', Hg, !1),
      d.addEventListener(b, 'selectstart', Hg, !1),
      d.addEventListener(c, 'contextmenu', Hg, !1));
    b.className = 'goCXforeground';
    c.className = 'goCXbackground';
    x.document.body &&
      (x.document.body.appendChild(b), x.document.body.appendChild(c));
    Ig = b;
    Jg = c;
    Kg = !0;
  }

  function Hg(a) {
    a.preventDefault();
    return !1;
  }
  Eg.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    return this.isBeyondDragSize() ||
      !a.lastInput.right ||
      1 < a.lastInput.clickCount
      ? !1
      : (a.lastInput.isTouchEvent && null !== this.defaultTouchContextMenu) ||
        null !== this.findObjectWithContextMenu()
      ? !0
      : !1;
  };
  Eg.prototype.doStart = function() {
    this.cw.set(this.diagram.firstInput.documentPoint);
  };
  Eg.prototype.doStop = function() {
    this.hideContextMenu();
    this.currentObject = null;
  };
  Eg.prototype.findObjectWithContextMenu = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram,
      c = b.lastInput,
      d = null;
    a instanceof Q ||
      (a instanceof Y
        ? (d = a)
        : (d = b.ec(c.documentPoint, null, function(a) {
            return !a.layer.isTemporary;
          })));
    if (null !== d) {
      for (a = d; null !== a; ) {
        if (null !== a.contextMenu) return a;
        a = a.panel;
      }
      if (b.lastInput.isTouchEvent && this.defaultTouchContextMenu)
        return d.part;
    } else if (null !== b.contextMenu) return b;
    return null;
  };
  Eg.prototype.doActivate = function() {};
  Eg.prototype.doMouseDown = function() {
    ke.prototype.doMouseDown.call(this);
    if (this.isActive && this.currentContextMenu instanceof ue) {
      var a = this.diagram.toolManager.findTool('Action');
      null !== a &&
        a.canStart() &&
        (a.doActivate(), a.doMouseDown(), a.doDeactivate());
    }
    this.diagram.toolManager.mouseDownTools.contains(this) && Lg(this);
  };
  Eg.prototype.doMouseUp = function() {
    if (this.isActive && this.currentContextMenu instanceof ue) {
      var a = this.diagram.toolManager.findTool('Action');
      null !== a &&
        a.canStart() &&
        (a.doActivate(), a.doCancel(), a.doDeactivate());
    }
    Lg(this);
  };

  function Lg(a) {
    var b = a.diagram;
    if (a.isActive) {
      var c = a.currentContextMenu;
      if (null !== c) {
        if (!(c instanceof ze)) {
          var d = b.ec(b.lastInput.documentPoint, null, null);
          null !== d && d.jg(c) && a.standardMouseClick(null, null);
        }
        a.stopTool();
        a.canStart() && ((b.currentTool = a), a.doMouseUp());
      }
    } else a.canStart() && (Mg(a, !0), a.isActive || a.stopTool());
  }

  function Mg(a, b, c) {
    void 0 === c && (c = null);
    if (
      !a.gt &&
      ((a.gt = !0),
      b && a.standardMouseSelect(),
      (b = a.standardMouseClick()),
      (a.gt = !1),
      !b)
    ) {
      a.isActive = !0;
      b = Gg;
      null === c && (c = a.findObjectWithContextMenu());
      if (null !== c) {
        var d = c.contextMenu;
        null !== d
          ? ((a.currentObject = c instanceof Y ? c : null),
            a.showContextMenu(d, a.currentObject))
          : null !== b && a.showContextMenu(b, a.currentObject);
      } else null !== b && a.showContextMenu(b, null);
      a.currentContextMenu instanceof ue &&
        !a.currentContextMenu.visible &&
        a.stopTool();
    }
  }
  Eg.prototype.doMouseMove = function() {
    var a = this.diagram.toolManager.findTool('Action');
    null !== a && a.doMouseMove();
    this.isActive && this.diagram.toolManager.doMouseMove();
  };
  Eg.prototype.showContextMenu = function(a, b) {
    var c = this.diagram;
    a !== this.currentContextMenu && this.hideContextMenu();
    if (a instanceof ue) {
      a.layerName = 'Tool';
      a.selectable = !1;
      a.scale = 1 / c.scale;
      a.category = this.name;
      null !== a.placeholder && (a.placeholder.scale = c.scale);
      var d = a.diagram;
      null !== d && d !== c && d.remove(a);
      c.add(a);
      null !== b ? (a.adornedObject = b) : (a.data = c.model);
      a.Za();
      this.positionContextMenu(a, b);
    } else a instanceof ze && a.show(b, c, this);
    this.currentContextMenu = a;
  };
  Eg.prototype.positionContextMenu = function(a) {
    if (null === a.placeholder) {
      var b = this.diagram,
        c = b.lastInput.documentPoint.copy(),
        d = a.measuredBounds,
        e = b.viewportBounds;
      b.lastInput.isTouchEvent && (c.x -= d.width);
      c.x + d.width > e.right && (c.x -= d.width + 5 / b.scale);
      c.x < e.x && (c.x = e.x);
      c.y + d.height > e.bottom && (c.y -= d.height + 5 / b.scale);
      c.y < e.y && (c.y = e.y);
      a.position = c;
    }
  };
  Eg.prototype.hideContextMenu = function() {
    var a = this.diagram,
      b = this.currentContextMenu;
    null !== b &&
      (b instanceof ue
        ? (a.remove(b),
          null !== this.Js && this.Js.Af(b.category),
          (b.data = null),
          (b.adornedObject = null))
        : b instanceof ze &&
          (null !== b.hide
            ? b.hide(a, this)
            : null !== b.mainElement && (b.mainElement.style.display = 'none')),
      (this.currentContextMenu = null),
      this.standardMouseOver());
  };

  function Ng(a) {
    var b = new E();
    b.add(
      new Dg(
        'Copy',
        function(a) {
          a.commandHandler.copySelection();
        },
        function(a) {
          return a.commandHandler.canCopySelection();
        },
      ),
    );
    b.add(
      new Dg(
        'Cut',
        function(a) {
          a.commandHandler.cutSelection();
        },
        function(a) {
          return a.commandHandler.canCutSelection();
        },
      ),
    );
    b.add(
      new Dg(
        'Delete',
        function(a) {
          a.commandHandler.deleteSelection();
        },
        function(a) {
          return a.commandHandler.canDeleteSelection();
        },
      ),
    );
    b.add(
      new Dg(
        'Paste',
        function(b) {
          b.commandHandler.pasteSelection(a.mouseDownPoint);
        },
        function(b) {
          return b.commandHandler.canPasteSelection(a.mouseDownPoint);
        },
      ),
    );
    b.add(
      new Dg(
        'Select All',
        function(a) {
          a.commandHandler.selectAll();
        },
        function(a) {
          return a.commandHandler.canSelectAll();
        },
      ),
    );
    b.add(
      new Dg(
        'Undo',
        function(a) {
          a.commandHandler.undo();
        },
        function(a) {
          return a.commandHandler.canUndo();
        },
      ),
    );
    b.add(
      new Dg(
        'Redo',
        function(a) {
          a.commandHandler.redo();
        },
        function(a) {
          return a.commandHandler.canRedo();
        },
      ),
    );
    b.add(
      new Dg(
        'Scroll To Part',
        function(a) {
          a.commandHandler.scrollToPart();
        },
        function(a) {
          return a.commandHandler.canScrollToPart();
        },
      ),
    );
    b.add(
      new Dg(
        'Zoom To Fit',
        function(a) {
          a.commandHandler.zoomToFit();
        },
        function(a) {
          return a.commandHandler.canZoomToFit();
        },
      ),
    );
    b.add(
      new Dg(
        'Reset Zoom',
        function(a) {
          a.commandHandler.resetZoom();
        },
        function(a) {
          return a.commandHandler.canResetZoom();
        },
      ),
    );
    b.add(
      new Dg(
        'Group Selection',
        function(a) {
          a.commandHandler.groupSelection();
        },
        function(a) {
          return a.commandHandler.canGroupSelection();
        },
      ),
    );
    b.add(
      new Dg(
        'Ungroup Selection',
        function(a) {
          a.commandHandler.ungroupSelection();
        },
        function(a) {
          return a.commandHandler.canUngroupSelection();
        },
      ),
    );
    b.add(
      new Dg(
        'Edit Text',
        function(a) {
          a.commandHandler.editTextBlock();
        },
        function(a) {
          return a.commandHandler.canEditTextBlock();
        },
      ),
    );
    return b;
  }
  Eg.prototype.showDefaultContextMenu = function() {
    var a = this.diagram;
    null === this.Ls && (this.Ls = Ng(this));
    Ig.innerHTML = '';
    Jg.addEventListener('pointerdown', this.Zt, !1);
    var b = this,
      c = ua('ul');
    c.className = 'goCXul';
    Ig.appendChild(c);
    c.innerHTML = '';
    for (var d = this.Ls.iterator; d.next(); ) {
      var e = d.value,
        f = e.visible;
      if ('function' === typeof e.Kw && ('function' !== typeof f || f(a))) {
        f = ua('li');
        f.className = 'goCXli';
        var g = ua('a');
        g.className = 'goCXa';
        g.href = '#';
        g.Qx = e.Kw;
        g.addEventListener(
          'pointerdown',
          function(c) {
            this.Qx(a);
            b.stopTool();
            c.preventDefault();
            return !1;
          },
          !1,
        );
        g.textContent = e.text;
        f.appendChild(g);
        c.appendChild(f);
      }
    }
    Ig.style.display = 'block';
    Jg.style.display = 'block';
  };
  Eg.prototype.hideDefaultContextMenu = function() {
    if (null !== this.currentContextMenu && this.currentContextMenu === Gg) {
      Ig.style.display = 'none';
      Jg.style.display = 'none';
      var a = this.diagram;
      null !== a && a.removeEventListener(Jg, 'pointerdown', this.Zt, !1);
      this.currentContextMenu = null;
    }
  };
  ma.Object.defineProperties(Eg.prototype, {
    currentContextMenu: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j = a;
        this.Js = a instanceof ue ? a.adornedPart : null;
      },
    },
    defaultTouchContextMenu: {
      get: function() {
        !1 === Kg && null === Gg && Og && Fg(this);
        return Gg;
      },
      set: function(a) {
        null === a && (Kg = !0);
        Gg = a;
      },
    },
    currentObject: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a;
      },
    },
    mouseDownPoint: {
      get: function() {
        return this.cw;
      },
    },
  });
  var Gg = null,
    Kg = !1,
    Jg = null,
    Ig = null;
  Eg.className = 'ContextMenuTool';
  Ka(
    'contextMenuTool',
    function() {
      return this.findTool('ContextMenu');
    },
    function(a) {
      this.gb('ContextMenu', a, this.mouseUpTools);
    },
  );

  function Pg() {
    ke.call(this);
    this.name = 'TextEditing';
    this.Sh = new Qg();
    this.ga = null;
    this.W = Rg;
    this.qj = null;
    this.na = Sg;
    this.u = 1;
    this.F = !0;
    this.m = null;
    this.j = new ze();
    this.Ms = null;
    Tg(this, this.j);
  }
  la(Pg, ke);

  function Tg(a, b) {
    if (Og) {
      var c = ua('textarea');
      a.Ms = c;
      c.addEventListener(
        'input',
        function() {
          if (null !== a.textBlock) {
            var b = a.qx(this.value);
            this.style.width = 20 + b.measuredBounds.width * this.cA + 'px';
            this.rows = b.lineCount;
          }
        },
        !1,
      );
      c.addEventListener(
        'keydown',
        function(b) {
          if (null !== a.textBlock) {
            var c = b.key;
            'Enter' === c
              ? (!1 === a.textBlock.isMultiline && b.preventDefault(),
                a.acceptText(Ug))
              : 'Tab' === c
              ? (a.acceptText(Vg), b.preventDefault())
              : 'Escape' === c &&
                (a.doCancel(), null !== a.diagram && a.diagram.doFocus());
          }
        },
        !1,
      );
      c.addEventListener(
        'focus',
        function() {
          if (null !== a.currentTextEditor && a.state !== Sg) {
            var b = a.Ms;
            a.na === Wg && (a.na = Xg);
            'function' === typeof b.select &&
              a.selectsTextOnActivate &&
              (b.select(), b.setSelectionRange(0, 9999));
          }
        },
        !1,
      );
      c.addEventListener(
        'blur',
        function() {
          if (null !== a.currentTextEditor && a.state !== Sg) {
            var b = a.Ms;
            'function' === typeof b.focus && b.focus();
            'function' === typeof b.select &&
              a.selectsTextOnActivate &&
              (b.select(), b.setSelectionRange(0, 9999));
          }
        },
        !1,
      );
      b.valueFunction = function() {
        return c.value;
      };
      b.mainElement = c;
      b.show = function(a, b, f) {
        if (a instanceof Qg && f instanceof Pg)
          if (f.state === Yg) (c.style.border = '3px solid red'), c.focus();
          else {
            var d = a.ia(yc),
              e = b.position,
              k = b.scale,
              l = a.uf() * k;
            l < f.minimumEditorScale && (l = f.minimumEditorScale);
            var m = a.naturalBounds.width * l + 6,
              n = a.naturalBounds.height * l + 2,
              p = (d.x - e.x) * k;
            d = (d.y - e.y) * k;
            e = a.verticalAlignment;
            k =
              (a.lineHeight + a.spacingAbove + a.spacingBelow) *
              a.lineCount *
              l;
            n = e.y * n - e.y * k + e.offsetY - (0.5 * n - 0.5 * k) - k / 2;
            c.value = a.text;
            b.div.style.font = a.font;
            c.style.position = 'absolute';
            c.style.zIndex = '100';
            c.style.font = 'inherit';
            c.style.fontSize = 100 * l + '%';
            c.style.lineHeight = 'normal';
            c.style.width = m + 'px';
            c.style.left = ((p - m / 2) | 0) - 1 + 'px';
            c.style.top = ((d + n) | 0) - 1 + 'px';
            c.style.textAlign = a.textAlign;
            c.style.margin = '0';
            c.style.padding = '1px';
            c.style.border = '0';
            c.style.outline = 'none';
            c.style.whiteSpace = 'pre-wrap';
            c.style.overflow = 'hidden';
            c.rows = a.lineCount;
            c.cA = l;
            c.className = 'goTXarea';
            b.div.appendChild(c);
            c.focus();
            f.selectsTextOnActivate &&
              (c.select(), c.setSelectionRange(0, 9999));
          }
      };
      b.hide = function(a) {
        a.div.removeChild(c);
      };
    }
  }
  Pg.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    if (
      null === a ||
      a.isReadOnly ||
      (Zg && Zg !== this && (Zg.acceptText($g), Zg && Zg !== this)) ||
      !a.lastInput.left ||
      this.isBeyondDragSize()
    )
      return !1;
    var b = a.ec(a.lastInput.documentPoint);
    if (!(null !== b && b instanceof Qg && b.editable && b.part.canEdit()))
      return !1;
    b = b.part;
    return null === b ||
      (this.starting === Rg && !b.isSelected) ||
      (this.starting === ah && 2 > a.lastInput.clickCount)
      ? !1
      : !0;
  };
  Pg.prototype.doStart = function() {
    Zg = this;
    null !== this.textBlock && this.doActivate();
  };
  Pg.prototype.doActivate = function() {
    if (!this.isActive) {
      var a = this.diagram;
      if (null !== a) {
        var b = this.textBlock;
        null === b && (b = a.ec(a.lastInput.documentPoint));
        if (
          null !== b &&
          b instanceof Qg &&
          ((this.textBlock = b), null !== b.part)
        ) {
          a.animationManager.wc();
          this.isActive = !0;
          this.na = Wg;
          var c = this.defaultTextEditor;
          null !== b.textEditor && (c = b.textEditor);
          this.Sh = this.textBlock.copy();
          var d = new M(this.textBlock.ia(tc), this.textBlock.ia(Cc));
          a.bv(d);
          c.show(b, a, this);
          this.currentTextEditor = c;
        }
      }
    }
  };
  Pg.prototype.doCancel = function() {
    this.stopTool();
  };
  Pg.prototype.doMouseUp = function() {
    this.canStart() && this.doActivate();
  };
  Pg.prototype.doMouseDown = function() {
    this.isActive && this.acceptText($g);
  };
  Pg.prototype.acceptText = function(a) {
    switch (a) {
      case $g:
        if (this.na === bh)
          this.currentTextEditor instanceof HTMLElement &&
            this.currentTextEditor.focus();
        else if (this.na === Wg || this.na === Yg || this.na === Xg)
          (this.na = ch), dh(this);
        break;
      case eh:
      case Ug:
      case Vg:
        if (Ug !== a || !0 !== this.textBlock.isMultiline)
          if (this.na === Wg || this.na === Yg || this.na === Xg)
            (this.na = ch), dh(this);
    }
  };

  function dh(a) {
    var b = a.textBlock,
      c = a.diagram,
      d = a.currentTextEditor;
    if (null !== b && null !== d) {
      var e = b.text,
        f = '';
      null !== d.valueFunction && (f = d.valueFunction());
      a.isValidText(b, e, f)
        ? (a.Da(a.name),
          (a.na = bh),
          (a.transactionResult = a.name),
          (b.text = f),
          a.doSuccess(e, f),
          null !== c && c.P('TextEdited', b, e),
          a.stopTransaction(),
          a.stopTool(),
          null !== c && c.doFocus())
        : ((a.na = Yg), a.doError(e, f));
    }
  }
  Pg.prototype.doError = function(a, b) {
    var c = this.textBlock;
    null !== c.errorFunction && c.errorFunction(this, a, b);
    (a = this.currentTextEditor) && a.show(c, this.diagram, this);
  };
  Pg.prototype.doSuccess = function(a, b) {
    var c = this.textBlock;
    null !== c.textEdited && c.textEdited(c, a, b);
  };
  Pg.prototype.doDeactivate = function() {
    var a = this.diagram;
    null !== a &&
      ((this.na = Sg),
      null !== this.currentTextEditor && this.currentTextEditor.hide(a, this),
      (this.textBlock = null),
      (this.isActive = !1));
  };
  Pg.prototype.doStop = function() {
    Zg = null;
  };
  Pg.prototype.isValidText = function(a, b, c) {
    var d = this.textValidation;
    if (null !== d && !d(a, b, c)) return !1;
    d = a.textValidation;
    return null === d || d(a, b, c) ? !0 : !1;
  };
  Pg.prototype.qx = function(a) {
    var b = this.Sh;
    b.text = a;
    b.measure(this.textBlock.zh, Infinity);
    return b;
  };
  ma.Object.defineProperties(Pg.prototype, {
    textBlock: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        this.ga = a;
      },
    },
    currentTextEditor: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a;
      },
    },
    defaultTextEditor: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j = a;
      },
    },
    starting: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W = a;
      },
    },
    textValidation: {
      get: function() {
        return this.qj;
      },
      set: function(a) {
        this.qj = a;
      },
    },
    minimumEditorScale: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u = a;
      },
    },
    selectsTextOnActivate: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F = a;
      },
    },
    state: {
      get: function() {
        return this.na;
      },
      set: function(a) {
        this.na !== a && (this.na = a);
      },
    },
  });
  Pg.prototype.measureTemporaryTextBlock = Pg.prototype.qx;
  var eh = new D(Pg, 'LostFocus', 0),
    $g = new D(Pg, 'MouseDown', 1),
    Vg = new D(Pg, 'Tab', 2),
    Ug = new D(Pg, 'Enter', 3),
    fh = new D(Pg, 'SingleClick', 0),
    Rg = new D(Pg, 'SingleClickSelected', 1),
    ah = new D(Pg, 'DoubleClick', 2),
    Sg = new D(Pg, 'StateNone', 0),
    Wg = new D(Pg, 'StateActive', 1),
    Xg = new D(Pg, 'StateEditing', 2),
    ch = new D(Pg, 'StateValidating', 3),
    Yg = new D(Pg, 'StateInvalid', 4),
    bh = new D(Pg, 'StateValidated', 5),
    Zg = null;
  Pg.className = 'TextEditingTool';
  Pg.LostFocus = eh;
  Pg.MouseDown = $g;
  Pg.Tab = Vg;
  Pg.Enter = Ug;
  Pg.SingleClick = fh;
  Pg.SingleClickSelected = Rg;
  Pg.DoubleClick = ah;
  Pg.StateNone = Sg;
  Pg.StateActive = Wg;
  Pg.StateEditing = Xg;
  Pg.StateValidating = ch;
  Pg.StateInvalid = Yg;
  Pg.StateValidated = bh;
  Ka(
    'textEditingTool',
    function() {
      return this.findTool('TextEditing');
    },
    function(a) {
      this.gb('TextEditing', a, this.mouseUpTools);
    },
  );

  function gh(a) {
    hh || (ih(), (hh = !0));
    this.H = le;
    this.Dk = this.zb = this.Xp = this.$b = !1;
    this.uw = !0;
    this.Ek = jh;
    this.lm = !1;
    this.wh = this.Ad = !0;
    this.ug = 600;
    this.Hv = this.sw = !1;
    this.Sd = new G();
    this.Wd = new kh();
    this.Wd.Rd = this;
    this.yi = new G();
    this.Vt = new G();
    this.rr = new G();
    this.dl = new G();
    a && Object.assign(this, a);
  }
  gh.prototype.Le = function(a) {
    this.H = a;
  };
  gh.prototype.canStart = function() {
    return !0;
  };

  function lh(a, b) {
    a.Ad &&
      a.canStart(b) &&
      (a.Sd.add(b),
      a.defaultAnimation.isAnimating && a.wc(),
      mh(a.H),
      (a.zb = !0));
  }

  function nh(a) {
    if (a.Ad && a.zb) {
      var b = a.Wd,
        c = a.H,
        d = a.Sd.contains('Model');
      d &&
        ((a.Dk = !0),
        a.Ek === jh
          ? ((b.isViewportUnconstrained = !0),
            b.rc.clear(),
            b.add(c, 'position', c.position.copy().offset(0, -200), c.position),
            b.add(c, 'opacity', 0, 1))
          : a.Ek === oh && b.rc.clear(),
        (a.uw = a.Ek === ph && c.Jt.C(c.pa) ? !0 : !1),
        c.P('InitialAnimationStarting', a));
      (d && !a.wh) || 0 === b.rc.count
        ? (a.Sd.clear(),
          (a.zb = !1),
          b.rc.clear(),
          qh(b, c),
          (a.Dk = !1),
          c.N())
        : (a.Sd.clear(),
          (c.cg = !1),
          (d = b.rc.get(c)),
          c.autoScale !== rh &&
            null !== d &&
            (delete d.start.scale, delete d.end.scale),
          x.requestAnimationFrame(function() {
            !1 === a.zb ||
              b.$b ||
              (c.Ge('temporaryPixelRatio') && Ge(c),
              sh(c),
              (a.zb = !1),
              b.start(),
              b.$b &&
                (th(a),
                c.Va(),
                uh(b, 0),
                zf(c, !0),
                vh(a),
                c.P('AnimationStarting', a)));
          }));
    }
  }

  function wh(a) {
    return a.Sd.contains('Trigger') && 1 === a.Sd.count;
  }

  function xh(a, b, c, d) {
    a.isTicking ||
      wh(a) ||
      (b instanceof T && (null !== b.fromNode || null !== b.toNode)) ||
      a.Wd.add(b, 'position', c, d, !1);
  }
  t = gh.prototype;
  t.es = function(a) {
    return this.Wd.es(a);
  };
  t.Ju = function(a) {
    return this.Wd.Ju(a);
  };

  function yh(a, b) {
    function c() {
      0 < e.rr.count && (d.addAll(e.rr), e.rr.clear(), (e.$b = !0));
      if (!1 !== e.$b && 0 !== d.count) {
        e.Vt.addAll(d);
        for (var a = e.Vt.iterator; a.next(); ) {
          var b = a.value;
          if (!1 !== b.$b) {
            a: if (0 < b.nl.count) var h = !0;
            else {
              for (h = b.rc.iterator; h.next(); ) {
                var k = h.key;
                if ((k instanceof Y && null !== k.diagram) || k instanceof Q) {
                  h = !0;
                  break a;
                }
              }
              h = !1;
            }
            h ? zh(b, !1) : (b.Mk = !0);
          }
        }
        e.Vt.clear();
        !1 !== e.$b && (th(e), zf(e.H), vh(e), x.requestAnimationFrame(c));
      }
    }
    var d = a.yi,
      e = a;
    a.$b
      ? a.rr.add(b)
      : ((a.$b = !0),
        d.add(b),
        x.requestAnimationFrame(function() {
          c();
        }));
  }

  function Ah(a) {
    for (a = a.yi.iterator; a.next(); ) a.value.Mk = !1;
  }

  function th(a) {
    if (!a.Xp) {
      var b = a.H;
      a.sw = b.skipsUndoManager;
      a.Hv = b.skipsModelSourceBindings;
      b.skipsUndoManager = !0;
      b.skipsModelSourceBindings = !0;
      a.Xp = !0;
    }
  }

  function vh(a) {
    var b = a.H;
    b.skipsUndoManager = a.sw;
    b.skipsModelSourceBindings = a.Hv;
    a.Xp = !1;
  }
  t.wc = function(a) {
    var b = this.Wd;
    !0 === this.zb &&
      ((this.Dk = this.zb = !1),
      this.Sd.clear(),
      0 < b.rc.count && this.H.Mb());
    if (this.$b) {
      if ((b.ul(!0), b.rc.clear(), qh(b, null), !0 === a))
        for (a = this.yi.Ea(), b = 0; b < a.length; b++) a[b].ul(!0);
    } else b.rc.clear(), qh(b, this.H);
  };
  t.ul = function(a) {
    a === this.defaultAnimation && this.defaultAnimation.rc.clear();
    this.yi.remove(a);
    0 === this.yi.count && ((this.$b = !1), this.H.Mb());
    a === this.defaultAnimation &&
      (this.defaultAnimation.rc.clear(), this.H.P('AnimationFinished', this));
  };
  t.xj = function(a, b) {
    this.zb &&
      (this.Sd.contains('Expand Tree') ||
        this.Sd.contains('Expand SubGraph')) &&
      (this.Wd.xj(a, b), Bh(this, a));
  };
  t.vj = function(a, b) {
    this.zb &&
      (this.Sd.contains('Collapse Tree') ||
        this.Sd.contains('Collapse SubGraph')) &&
      (this.Wd.vj(a, b),
      Ch(this.Wd, b, 'position', b.position, b.position),
      Bh(this, a));
  };

  function Nh(a, b, c) {
    !a.zb ||
      b.C(c) ||
      wh(a) ||
      (a.H.ji || (b = c.copy()), Ch(a.Wd, a.H, 'position', b, c));
  }

  function Bh(a, b) {
    for (b = b.findLinksConnected(); b.next(); ) {
      var c = b.value;
      c.ef = c.points.copy();
      a.dl.add(c);
    }
  }

  function Oh(a, b, c, d, e) {
    null === a && (a = [0, 0, 0, 0]);
    null === b && (b = [0, 0, 0, 0]);
    var f = a[0],
      g = a[1],
      h = a[2];
    a = a[3];
    var k = b[0],
      l = b[1],
      m = b[2];
    b = b[3];
    if (0 === h || 100 === h) (f = k), (g = l);
    else if (0 === m || 100 === m) (k = f), (l = g);
    180 < Math.abs(k - f) && (k > f ? (f += 360) : (k += 360));
    f = e(c, f, k - f, d) % 360;
    g = e(c, g, l - g, d);
    h = e(c, h, m - h, d);
    c = e(c, a, b - a, d);
    return 'hsla(' + f + ', ' + g + '%, ' + h + '%, ' + c + ')';
  }

  function ih() {
    function a(a, b, e, f, g, h) {
      a.position = new I(f(g, b.x, e.x - b.x, h), f(g, b.y, e.y - b.y, h));
    }
    var b = new pb();
    b.add('position:diagram', a);
    b.add('position', a);
    b.add('position:part', function(a, b, e, f, g, h) {
      g < h
        ? a.Ul(f(g, b.x, e.x - b.x, h), f(g, b.y, e.y - b.y, h), !1)
        : (a.position = new I(
            f(g, b.x, e.x - b.x, h),
            f(g, b.y, e.y - b.y, h),
          ));
    });
    b.add('location', function(a, b, e, f, g, h) {
      g < h
        ? a.Ul(f(g, b.x, e.x - b.x, h), f(g, b.y, e.y - b.y, h), !0)
        : (a.location = new I(
            f(g, b.x, e.x - b.x, h),
            f(g, b.y, e.y - b.y, h),
          ));
    });
    b.add('position:placeholder', function(a, b, e, f, g, h) {
      g < h
        ? a.Ul(f(g, b.x, e.x - b.x, h), f(g, b.y, e.y - b.y, h), !1)
        : (a.position = new I(
            f(g, b.x, e.x - b.x, h),
            f(g, b.y, e.y - b.y, h),
          ));
    });
    b.add('position:nodeCollapse', function(a, b, e, f, g, h) {
      var c = a.actualBounds,
        d = e.actualBounds;
      e = d.x + d.width / 2 - c.width / 2;
      c = d.y + d.height / 2 - c.height / 2;
      g < h
        ? a.Ul(f(g, b.x, e - b.x, h), f(g, b.y, c - b.y, h), !1)
        : (a.position = new I(f(g, b.x, e - b.x, h), f(g, b.y, c - b.y, h)));
    });
    b.add('desiredSize', function(a, b, e, f, g, h) {
      a.desiredSize = new M(
        f(g, b.width, e.width - b.width, h),
        f(g, b.height, e.height - b.height, h),
      );
    });
    b.add('width', function(a, b, e, f, g, h) {
      a.width = f(g, b, e - b, h);
    });
    b.add('height', function(a, b, e, f, g, h) {
      a.height = f(g, b, e - b, h);
    });
    b.add('fill', function(a, b, e, f, g, h) {
      a.fill = Oh(b, e, g, h, f);
    });
    b.add('stroke', function(a, b, e, f, g, h) {
      a.stroke = Oh(b, e, g, h, f);
    });
    b.add('strokeWidth', function(a, b, e, f, g, h) {
      a.strokeWidth = f(g, b, e - b, h);
    });
    b.add('strokeDashOffset', function(a, b, e, f, g, h) {
      a.strokeDashOffset = f(g, b, e - b, h);
    });
    b.add('background', function(a, b, e, f, g, h) {
      a.background = Oh(b, e, g, h, f);
    });
    b.add('areaBackground', function(a, b, e, f, g, h) {
      a.areaBackground = Oh(b, e, g, h, f);
    });
    b.add('opacity', function(a, b, e, f, g, h) {
      a.opacity = f(g, b, e - b, h);
    });
    b.add('scale', function(a, b, e, f, g, h) {
      a.scale = f(g, b, e - b, h);
    });
    b.add('angle', function(a, b, e, f, g, h) {
      a.angle = f(g, b, e - b, h);
    });
    Ph = b;
  }
  ma.Object.defineProperties(gh.prototype, {
    animationReasons: {
      get: function() {
        return this.Sd;
      },
    },
    isEnabled: {
      get: function() {
        return this.Ad;
      },
      set: function(a) {
        (this.Ad = a) &&
          this.yi.each(function(a) {
            a.isAnimating || Infinity !== a.runCount || a.start();
          });
      },
    },
    duration: {
      get: function() {
        return this.ug;
      },
      set: function(a) {
        1 > a && wa(a, '>= 1', gh, 'duration');
        this.ug = a;
      },
    },
    isAnimating: {
      get: function() {
        return this.$b;
      },
    },
    isTicking: {
      get: function() {
        return this.Xp;
      },
    },
    isInitial: {
      get: function() {
        return this.wh;
      },
      set: function(a) {
        this.wh = a;
      },
    },
    defaultAnimation: {
      get: function() {
        return this.Wd;
      },
    },
    activeAnimations: {
      get: function() {
        return this.yi;
      },
    },
    initialAnimationStyle: {
      get: function() {
        return this.Ek;
      },
      set: function(a) {
        this.Ek = a;
      },
    },
  });
  gh.prototype.stopAnimation = gh.prototype.wc;
  var Ph = null,
    hh = !1,
    jh = new D(gh, 'Default', 1),
    ph = new D(gh, 'AnimateLocations', 2),
    oh = new D(gh, 'None', 3);
  gh.className = 'AnimationManager';
  gh.defineAnimationEffect = function(a, b) {
    hh || (ih(), (hh = !0));
    Ph.add(a, b);
  };
  gh.Default = jh;
  gh.AnimateLocations = ph;
  gh.None = oh;

  function kh(a) {
    this.au = this.rw = this.Rd = this.H = null;
    this.Mk = this.$b = this.j = !1;
    this.Km = this.Gd = 0;
    this.op = this.Rs = Qh;
    this.Lk = this.Kn = !1;
    this.It = 1;
    this.Gt = 0;
    this.yd = this.ug = NaN;
    this.Lv = 0;
    this.Lm = null;
    this.m = qb;
    this.rc = new pb();
    this.yt = new pb();
    this.nl = new G();
    this.zt = new G();
    this.Iv = Rh;
    a && Object.assign(this, a);
  }
  kh.prototype.suspend = function() {
    this.Mk = !0;
  };
  kh.prototype.advanceTo = function(a, b) {
    b && (this.Mk = !1);
    this.Kn && a >= this.yd && ((this.Lk = !0), (a -= this.yd));
    this.Lv = a;
    zh(this, !0);
    th(this.Rd);
    zf(this.H);
    vh(this.Rd);
    this.H.redraw();
  };

  function qh(a, b) {
    a.yt.clear();
    a.Lk = !1;
    a.Gt = 0;
    a.yd = NaN;
    0 < a.nl.count && a.nl.clear();
    0 < a.zt.count && a.zt.clear();
    if (null !== b) for (a = b.links; a.next(); ) a.value.ef = null;
  }
  t = kh.prototype;
  t.start = function() {
    if (0 === this.rc.count || this.$b) return this;
    for (var a = this.H, b = this.rc.iterator; b.next(); ) {
      var c = b.value.end,
        d = b.key;
      if (c['position:placeholder']) {
        var e = d.findVisibleNode();
        if (e instanceof qf && null !== e.placeholder) {
          var f = e.placeholder;
          e = f.ia(tc);
          f = f.padding;
          e.x += f.left;
          e.y += f.top;
          c['position:placeholder'] = e;
        }
      }
      null === a &&
        (d instanceof Q ? (a = d) : d instanceof Y && (a = d.diagram));
    }
    if (null !== a) (this.H = a), (this.Rd = a.animationManager);
    else return this;
    b = this.Rd;
    if (!1 === b.isEnabled) return this;
    this.yd = isNaN(this.ug) ? b.duration : this.ug;
    this.op = this.Rs;
    b.Dk &&
      b.Ek === jh &&
      this === b.defaultAnimation &&
      ((this.op = Sh),
      (this.yd = isNaN(this.ug)
        ? 600 === b.duration
          ? 900
          : b.duration
        : this.ug));
    this.Iv = a.scrollMode;
    this.isViewportUnconstrained && (a.nj = Th);
    th(b);
    this.nl.each(function(b) {
      b.data = null;
      a.add(b);
    });
    vh(b);
    this.$b = !0;
    this.Gd = +new Date();
    this.Km = this.Gd + this.yd;
    yh(b, this);
    return this;
  };
  t.oy = function(a, b) {
    if (!a.Tc()) return this;
    this.nl.add(a);
    this.H = b;
    return this;
  };
  t.add = function(a, b, c, d, e) {
    if ('position' === b && c.C(d)) return this;
    null === this.H &&
      (a instanceof Q
        ? (this.H = a)
        : a instanceof Y && null !== a.diagram && (this.H = a.diagram));
    if (a instanceof U) {
      if (!a.isAnimated) return this;
      'position' === b && (b = 'position:part');
    }
    Ch(this, a, b, c, d, e);
    return this;
  };

  function Ch(a, b, c, d, e, f) {
    var g = a.rc;
    b instanceof Q && 'position' === c && (c = 'position:diagram');
    if (
      'fill' === c ||
      'stroke' === c ||
      'background' === c ||
      'areaBackground' === c
    )
      Uh(d),
        Vh(),
        (d = [Wh.j, Wh.u, Wh.m, Wh.F]),
        Uh(e),
        Vh(),
        (e = [Wh.j, Wh.u, Wh.m, Wh.F]);
    if (g.contains(b)) {
      var h = g.I(b);
      var k = h.start;
      var l = h.end;
      void 0 === k[c] && (k[c] = Xh(d));
      l[c] = Xh(e);
    } else
      (k = {}),
        (l = {}),
        (k[c] = Xh(d)),
        (l[c] = Xh(e)),
        (h = k.position),
        b instanceof Y &&
          h instanceof I &&
          !h.v() &&
          b.diagram.animationManager.Sd.contains('Expand SubGraph') &&
          h.assign(l.position),
        (h = new Yh(k, l, f)),
        g.add(b, h);
    g = k[c];
    g instanceof I && !g.v() && g.assign(a.m);
    f && 0 === c.indexOf('position:') && b instanceof U
      ? (h.uu.location = Xh(b.location))
      : f && (h.uu[c] = Xh(d));
  }

  function Xh(a) {
    return a instanceof I ? a.copy() : a instanceof K ? a.copy() : a;
  }
  t.es = function(a) {
    if (!this.$b) return !1;
    a = this.rc.I(a);
    return null !== a && a.Wu;
  };
  t.Ju = function(a) {
    if (!this.$b) return !1;
    a = this.rc.I(a);
    return null !== a && (a.start.position || a.start.location);
  };

  function zh(a, b) {
    if (!a.Mk || b) {
      var c = a.Rd;
      if (!1 !== a.$b) {
        var d = +new Date(),
          e = d > a.Km ? a.yd : d - a.Gd;
        b &&
          ((e = a.Lv),
          e < a.yd
            ? ((a.Gd = +new Date() - e), (a.Km = a.Gd + a.yd))
            : (e = a.yd));
        th(c);
        uh(a, e);
        zf(a.H, !0);
        vh(c);
        d > a.Km &&
          (a.Kn && !a.Lk
            ? ((a.Gd = +new Date()), (a.Km = a.Gd + a.yd), (a.Lk = !0))
            : a.ul(!1));
      }
    }
  }

  function uh(a, b) {
    for (var c = a.yd, d = a.rc.iterator, e = a.Lk; d.next(); ) {
      var f = d.key;
      if (!(f instanceof Y && null === f.diagram)) {
        var g = d.value,
          h = e ? g.end : g.start;
        g = e ? g.start : g.end;
        var k = Ph,
          l;
        for (l in g)
          ('position' === l &&
            (g['position:placeholder'] || g['position:nodeCollapse'])) ||
            null === k.get(l) ||
            k.get(l)(f, h[l], g[l], a.op, b, c, a);
      }
    }
  }
  t.stop = function() {
    if (!this.$b) return this;
    this.ul(!0);
    return this;
  };
  t.ul = function(a) {
    null !== this.au && this.au.Mn.remove(this.rw);
    if (this.$b) {
      var b = this.H,
        c = this.Rd;
      this.Mk = this.$b = c.Dk = !1;
      th(c);
      for (var d = this.rc, e = this.nl.iterator; e.next(); ) b.remove(e.value);
      for (e = this.zt.iterator; e.next(); ) e.value.w();
      e = this.Kn;
      d = d.iterator;
      for (var f = Ph; d.next(); ) {
        var g = d.key,
          h = d.value,
          k = e ? h.end : h.start,
          l = e ? h.start : h.end,
          m = h.uu,
          n;
        for (n in l)
          if (null !== f.get(n)) {
            var p = n;
            !h.ou ||
              ('position:nodeCollapse' !== p && 'position:placeholder' !== p) ||
              (p = 'position');
            f.get(p)(
              g,
              k[n],
              void 0 !== m[n] ? m[n] : h.ou ? k[n] : l[n],
              this.op,
              this.yd,
              this.yd,
              this,
            );
          }
        h.ou &&
          void 0 !== m.location &&
          g instanceof U &&
          (g.location = m.location);
        h.Wu && g instanceof U && g.Ub(!1);
      }
      b.Zr.clear();
      Ye(b, !1);
      b.Va();
      b.N();
      zf(b, !0);
      if (c.defaultAnimation === this) {
        for (n = c.dl.iterator; n.next(); )
          (e = n.value), null !== e.ef && ((e.points = e.ef), (e.ef = null));
        c.dl.clear();
      }
      zf(b, !0);
      this.isViewportUnconstrained && (b.scrollMode = this.Iv);
      vh(c);
      this.Gt++;
      !a && this.It > this.Gt
        ? ((this.Lk = !1), this.start())
        : (this.Lm && this.Lm(this), qh(this, null), c.ul(this), b.Mb());
    }
  };
  t.xj = function(a, b) {
    var c = b.actualBounds,
      d = null;
    b instanceof qf && (d = b.placeholder);
    null !== d
      ? ((c = d.ia(tc)),
        (d = d.padding),
        (c.x += d.left),
        (c.y += d.top),
        this.add(a, 'position', c, a.position, !1))
      : this.add(
          a,
          'position',
          new I(c.x + c.width / 2, c.y + c.height / 2),
          a.position,
          !1,
        );
    this.add(a, 'scale', 0.01, a.scale, !1);
    if (a instanceof qf)
      for (a = a.memberParts; a.next(); )
        (d = a.value), d instanceof V && this.xj(d, b);
  };
  t.vj = function(a, b) {
    if (a.isVisible()) {
      var c = null;
      b instanceof qf && (c = b.placeholder);
      null !== c
        ? this.add(a, 'position:placeholder', a.position, c, !0)
        : this.add(a, 'position:nodeCollapse', a.position, b, !0);
      this.add(a, 'scale', a.scale, 0.01, !0);
      c = this.rc;
      c.contains(a) && (c.I(a).Wu = !0);
      if (a instanceof qf)
        for (a = a.memberParts; a.next(); )
          (c = a.value), c instanceof V && this.vj(c, b);
    }
  };
  t.lz = function(a) {
    var b = this.yt.get(a);
    null === b && ((b = {}), this.yt.add(a, b));
    return b;
  };
  ma.Object.defineProperties(kh.prototype, {
    duration: {
      get: function() {
        return this.ug;
      },
      set: function(a) {
        1 > a && wa(a, '>= 1', kh, 'duration');
        this.ug = a;
      },
    },
    reversible: {
      get: function() {
        return this.Kn;
      },
      set: function(a) {
        this.Kn = a;
      },
    },
    runCount: {
      get: function() {
        return this.It;
      },
      set: function(a) {
        0 < a
          ? (this.It = a)
          : C('Animation.runCount value must be a positive integer.');
      },
    },
    finished: {
      get: function() {
        return this.Lm;
      },
      set: function(a) {
        this.Lm !== a && (this.Lm = a);
      },
    },
    easing: {
      get: function() {
        return this.Rs;
      },
      set: function(a) {
        this.Rs = a;
      },
    },
    isViewportUnconstrained: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j = a;
      },
    },
    isAnimating: {
      get: function() {
        return this.$b;
      },
    },
  });
  kh.prototype.getTemporaryState = kh.prototype.lz;
  kh.prototype.stop = kh.prototype.stop;
  kh.prototype.add = kh.prototype.add;
  kh.prototype.addTemporaryPart = kh.prototype.oy;

  function Qh(a, b, c, d) {
    a /= d / 2;
    return 1 > a ? (c / 2) * a * a + b : (-c / 2) * (--a * (a - 2) - 1) + b;
  }

  function Sh(a, b, c, d) {
    return a === d ? b + c : c * (-Math.pow(2, (-10 * a) / d) + 1) + b;
  }
  kh.className = 'Animation';
  kh.EaseLinear = function(a, b, c, d) {
    return (c * a) / d + b;
  };
  kh.EaseInOutQuad = Qh;
  kh.EaseInQuad = function(a, b, c, d) {
    return c * (a /= d) * a + b;
  };
  kh.EaseOutQuad = function(a, b, c, d) {
    return -c * (a /= d) * (a - 2) + b;
  };
  kh.EaseInExpo = function(a, b, c, d) {
    return 0 === a ? b : c * Math.pow(2, 10 * (a / d - 1)) + b;
  };
  kh.EaseOutExpo = Sh;

  function Yh(a, b, c) {
    this.start = a;
    this.end = b;
    this.uu = {};
    this.ou = c;
    this.Wu = !1;
  }
  Yh.className = 'AnimationState';

  function Zh(a, b, c) {
    this.sd = null;
    this.df = a;
    this.Vn = c || $h;
    this.hk = null;
    void 0 !== b && ((this.hk = b), void 0 === c && (this.Vn = ai));
  }
  Zh.prototype.copy = function() {
    var a = new Zh(this.df);
    a.Vn = this.Vn;
    var b = this.hk;
    if (null !== b) {
      var c = {};
      void 0 !== b.duration && (c.duration = b.duration);
      void 0 !== b.finished && (c.finished = b.finished);
      void 0 !== b.easing && (c.easing = b.easing);
      a.hk = c;
    }
    return a;
  };

  function bi(a, b) {
    a = a.hk;
    null !== a &&
      (a.duration && (b.duration = a.duration),
      a.finished && (b.finished = a.finished),
      a.easing && (b.easing = a.easing));
  }
  ma.Object.defineProperties(Zh.prototype, {
    propertyName: {
      get: function() {
        return this.df;
      },
      set: function(a) {
        this.df = a;
      },
    },
    animationSettings: {
      get: function() {
        return this.hk;
      },
      set: function(a) {
        this.hk = a;
      },
    },
    startCondition: {
      get: function() {
        return this.Vn;
      },
      set: function(a) {
        this.Vn = a;
      },
    },
  });
  var $h = new D(Zh, 'Default', 1),
    ai = new D(Zh, 'Immediate', 2),
    ci = new D(Zh, 'Bundled', 3);
  Zh.className = 'AnimationTrigger';
  Zh.Default = $h;
  Zh.Immediate = ai;
  Zh.Bundled = ci;

  function di(a) {
    Ra(this);
    this.H = null;
    this.Ma = new E();
    this.va = '';
    this.tb = 1;
    this.m = !1;
    this.j = this.Nh = this.u = this.Ii = this.Hi = this.Gi = this.Fi = this.Di = this.Ei = this.Ci = this.Ki = this.Bi = this.Ji = this.Ai = this.zi = !0;
    this.Bn = [];
    a && Object.assign(this, a);
  }
  t = di.prototype;
  t.clear = function() {
    this.Ma.clear();
    this.Bn.length = 0;
  };
  t.Le = function(a) {
    this.H = a;
  };
  t.toString = function(a) {
    void 0 === a && (a = 0);
    var b = 'Layer "' + this.name + '"';
    if (0 >= a) return b;
    for (
      var c = 0, d = 0, e = 0, f = 0, g = 0, h = this.Ma.iterator;
      h.next();

    ) {
      var k = h.value;
      k instanceof qf
        ? e++
        : k instanceof V
        ? d++
        : k instanceof T
        ? f++
        : k instanceof ue
        ? g++
        : c++;
    }
    h = '';
    0 < c && (h += c + ' Parts ');
    0 < d && (h += d + ' Nodes ');
    0 < e && (h += e + ' Groups ');
    0 < f && (h += f + ' Links ');
    0 < g && (h += g + ' Adornments ');
    if (1 < a)
      for (a = this.Ma.iterator; a.next(); )
        (c = a.value),
          (h += '\n    ' + c.toString()),
          (d = c.data),
          null !== d && cb(d) && (h += ' #' + cb(d)),
          c instanceof V
            ? (h += ' ' + Ia(d))
            : c instanceof T &&
              (h += ' ' + Ia(c.fromNode) + ' ' + Ia(c.toNode));
    return b + ' ' + this.Ma.count + ': ' + h;
  };
  t.ec = function(a, b, c) {
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    if (!1 === this.Nh) return null;
    var d = !1;
    null !== this.diagram && this.diagram.viewportBounds.ba(a) && (d = !0);
    for (var e = I.alloc(), f = this.Ma.s, g = f.length; g--; ) {
      var h = f[g];
      if (
        (!0 !== d || !1 !== ig(h)) &&
        h.isVisible() &&
        (e.assign(a),
        yb(e, h.ge),
        (h = h.ec(e, b, c)),
        null !== h &&
          (null !== b && (h = b(h)), null !== h && (null === c || c(h))))
      )
        return I.free(e), h;
    }
    I.free(e);
    return null;
  };
  t.di = function(a, b, c, d) {
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    d instanceof E || d instanceof G || (d = new G());
    if (!1 === this.Nh) return d;
    var e = !1;
    null !== this.diagram && this.diagram.viewportBounds.ba(a) && (e = !0);
    for (var f = I.alloc(), g = this.Ma.s, h = g.length; h--; ) {
      var k = g[h];
      if ((!0 !== e || !1 !== ig(k)) && k.isVisible()) {
        f.assign(a);
        yb(f, k.ge);
        var l = k;
        k.di(f, b, c, d) &&
          (null !== b && (l = b(l)),
          null === l || (null !== c && !c(l)) || d.add(l));
      }
    }
    I.free(f);
    return d;
  };
  t.tf = function(a, b, c, d, e) {
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    void 0 === d && (d = !1);
    e instanceof E || e instanceof G || (e = new G());
    if (!1 === this.Nh) return e;
    var f = !1;
    null !== this.diagram && this.diagram.viewportBounds.Ee(a) && (f = !0);
    for (var g = this.Ma.s, h = g.length; h--; ) {
      var k = g[h];
      if ((!0 !== f || !1 !== ig(k)) && k.isVisible()) {
        var l = k;
        k.tf(a, b, c, d, e) &&
          (null !== b && (l = b(l)),
          null === l || (null !== c && !c(l)) || e.add(l));
      }
    }
    return e;
  };
  t.zu = function(a, b, c, d, e, f, g) {
    if (!1 === this.Nh) return e;
    for (var h = this.Ma.s, k = h.length; k--; ) {
      var l = h[k];
      if ((!0 !== g || !1 !== ig(l)) && f(l) && l.isVisible()) {
        var m = l;
        l.tf(a, b, c, d, e) &&
          (null !== b && (m = b(m)),
          null === m || (null !== c && !c(m)) || e.add(m));
      }
    }
    return e;
  };
  t.hg = function(a, b, c, d, e, f) {
    void 0 === c && (c = null);
    void 0 === d && (d = null);
    void 0 === e && (e = !0);
    if (!1 !== e && !0 !== e) {
      if (e instanceof E || e instanceof G) f = e;
      e = !0;
    }
    f instanceof E || f instanceof G || (f = new G());
    if (!1 === this.Nh) return f;
    var g = !1;
    null !== this.diagram && this.diagram.viewportBounds.ba(a) && (g = !0);
    for (var h = I.alloc(), k = I.alloc(), l = this.Ma.s, m = l.length; m--; ) {
      var n = l[m];
      if ((!0 !== g || !1 !== ig(n)) && n.isVisible()) {
        h.assign(a);
        yb(h, n.ge);
        k.h(a.x + b, a.y);
        yb(k, n.ge);
        var p = n;
        n.hg(h, k, c, d, e, f) &&
          (null !== c && (p = c(p)),
          null === p || (null !== d && !d(p)) || f.add(p));
      }
    }
    I.free(h);
    I.free(k);
    return f;
  };
  t.Pd = function(a, b) {
    if (this.visible) {
      var c = this.Ma.s,
        d = c.length;
      if (0 !== d) {
        a = Ea();
        for (var e = Ea(), f = 0; f < d; f++) {
          var g = c[f];
          g.aw = f;
          if (g instanceof T) {
            if (!1 === g.xd) continue;
          } else if (g instanceof ue && null !== g.adornedPart) continue;
          var h = g.actualBounds;
          g.isVisible() && Yb(h, b)
            ? (g.Pd(!0), a.push(g))
            : (g.Pd(!1),
              null !== g.adornments && 0 < g.adornments.count && e.push(g));
        }
        for (b = 0; b < a.length; b++)
          for (c = a[b], ei(c), c = c.adornments; c.next(); )
            (d = c.value), d.measure(Infinity, Infinity), d.arrange(), d.Pd(!0);
        for (b = 0; b < e.length; b++) ei(e[b]);
        Ga(a);
        Ga(e);
      }
    }
  };

  function fi(a, b) {
    var c = 1;
    1 !== a.tb && ((c = b.globalAlpha), (b.globalAlpha = c * a.tb));
    return c;
  }
  t.tc = function(a, b, c) {
    if (
      this.visible &&
      0 !== this.tb &&
      (void 0 === c && (c = !0), c || !this.isTemporary)
    ) {
      c = this.Ma.s;
      var d = c.length;
      if (0 !== d) {
        var e = fi(this, a),
          f = this.Bn;
        f.length = 0;
        for (var g = b.scale, h = M.alloc(), k = 0; k < d; k++)
          this.$h(a, c[k], b, f, g, h, !0);
        M.free(h);
        a.globalAlpha = e;
      }
    }
  };
  t.$h = function(a, b, c, d, e, f, g) {
    if (!g || ig(b)) {
      if (
        null !== d &&
        b instanceof T &&
        (b.isOrthogonal && d.push(b), !1 === b.xd)
      )
        return;
      g = !1;
      for (d = b.containingGroup; null !== d; )
        g
          ? null !== d.ib && f.ix(d.ib)
          : null !== d.ib && ((g = !0), f.assign(d.ib)),
          (d = d.containingGroup);
      var h = b.actualBounds;
      d = !1;
      if (g && b.isVisible()) {
        if (!f.Sc(h)) return;
        d = !f.Ee(h);
      }
      d &&
        (a.save(),
        a.beginPath(),
        a.rect(f.x, f.y, f.width, f.height),
        a.clip());
      h.width * e > c.nq || h.height * e > c.nq
        ? b.tc(a, c)
        : ((e = b.actualBounds),
          (f = b.naturalBounds),
          0 === e.width ||
            0 === e.height ||
            isNaN(e.x) ||
            isNaN(e.y) ||
            !b.isVisible() ||
            ((c = b.transform),
            null !== b.areaBackground &&
              (gi(b, a, b.areaBackground, !0, !0, f, e),
              a.fillRect(e.x, e.y, e.width, e.height)),
            null === b.areaBackground &&
              null === b.background &&
              (gi(b, a, 'rgba(0,0,0,0.3)', !0, !1, f, e),
              a.fillRect(e.x, e.y, e.width, e.height)),
            null !== b.background &&
              (a.transform(c.m11, c.m12, c.m21, c.m22, c.dx, c.dy),
              gi(b, a, b.background, !0, !1, f, e),
              a.fillRect(0, 0, f.width / 2, f.height / 2),
              c.Ur() ||
                ((b = 1 / (c.m11 * c.m22 - c.m12 * c.m21)),
                a.transform(
                  c.m22 * b,
                  -c.m12 * b,
                  -c.m21 * b,
                  c.m11 * b,
                  b * (c.m21 * c.dy - c.m22 * c.dx),
                  b * (c.m12 * c.dx - c.m11 * c.dy),
                )))));
      d && (a.restore(), a.Oc(!0));
    }
  };
  t.g = function(a, b, c, d, e) {
    var f = this.diagram;
    null !== f && f.bb(de, a, this, b, c, d, e);
  };
  t.ii = function(a, b, c) {
    var d = this.Ma;
    b.Ah = this;
    if (a >= d.count) a = d.count;
    else if (d.K(a) === b) return -1;
    d.Cb(a, b);
    b.yo(c);
    d = this.diagram;
    null !== d && (c ? d.N() : d.ii(b));
    hi(this, a, b);
    return a;
  };
  t.lc = function(a, b, c) {
    if (!c && b.layer !== this && null !== b.layer) return b.layer.lc(a, b, c);
    var d = this.Ma;
    if (0 > a || a >= d.length) {
      if (((a = d.indexOf(b)), 0 > a)) return -1;
    } else if (d.K(a) !== b && ((a = d.indexOf(b)), 0 > a)) return -1;
    b.zo(c);
    d.mb(a);
    d = this.diagram;
    null !== d && (c ? d.N() : d.lc(b));
    b.Ah = null;
    return a;
  };

  function hi(a, b, c) {
    b = ii(a, b, c);
    if (c instanceof qf && null !== c && isNaN(c.zOrder)) {
      if (0 !== c.memberParts.count) {
        for (var d = -1, e = a.Ma.s, f = e.length, g = 0; g < f; g++) {
          var h = e[g];
          if (h === c && ((b = g), 0 <= d)) break;
          if (0 > d && h.containingGroup === c && ((d = g), 0 <= b)) break;
        }
        !(0 > d) && d < b && ((e = a.Ma), e.mb(b), e.Cb(d, c));
      }
      c = c.containingGroup;
      null !== c && hi(a, -1, c);
    }
  }

  function ii(a, b, c) {
    var d = c.zOrder;
    if (isNaN(d)) return b;
    a = a.Ma;
    var e = a.count;
    if (1 >= e) return b;
    0 > b && (b = a.indexOf(c));
    if (0 > b) return -1;
    for (var f = b - 1, g = NaN; 0 <= f; ) {
      g = a.K(f).zOrder;
      if (!isNaN(g)) break;
      f--;
    }
    for (var h = b + 1, k = NaN; h < e; ) {
      k = a.K(h).zOrder;
      if (!isNaN(k)) break;
      h++;
    }
    if (!isNaN(g) && g > d)
      for (;;) {
        if (-1 === f || g <= d) {
          f++;
          if (f === b) break;
          a.mb(b);
          a.Cb(f, c);
          return f;
        }
        for (g = NaN; 0 <= --f && ((g = a.K(f).zOrder), isNaN(g)); );
      }
    else if (!isNaN(k) && k < d)
      for (;;) {
        if (h === e || k >= d) {
          h--;
          if (h === b) break;
          a.mb(b);
          a.Cb(h, c);
          return h;
        }
        for (k = NaN; ++h < e && ((k = a.K(h).zOrder), isNaN(k)); );
      }
    return b;
  }
  ma.Object.defineProperties(di.prototype, {
    parts: {
      get: function() {
        return this.Ma.iterator;
      },
    },
    partsBackwards: {
      get: function() {
        return this.Ma.iteratorBackwards;
      },
    },
    diagram: {
      get: function() {
        return this.H;
      },
    },
    name: {
      get: function() {
        return this.va;
      },
      set: function(a) {
        var b = this.va;
        if (b !== a) {
          var c = this.diagram;
          if (null !== c)
            for (
              '' === b && C('Cannot rename default Layer to: ' + a),
                c = c.layers;
              c.next();

            )
              c.value.name === a &&
                C('Layer.name is already present in this diagram: ' + a);
          this.va = a;
          this.g('name', b, a);
          for (a = this.Ma.iterator; a.next(); ) a.value.layerName = this.va;
        }
      },
    },
    opacity: {
      get: function() {
        return this.tb;
      },
      set: function(a) {
        var b = this.tb;
        b !== a &&
          ((0 > a || 1 < a) && wa(a, '0 <= value <= 1', di, 'opacity'),
          (this.tb = a),
          this.g('opacity', b, a),
          (a = this.diagram),
          null !== a && a.N());
      },
    },
    isTemporary: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        var b = this.m;
        if (b !== a) {
          if ((this.m = a)) this.isInDocumentBounds = !1;
          this.g('isTemporary', b, a);
        }
      },
    },
    visible: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        var b = this.u;
        if (b !== a) {
          this.u = a;
          this.g('visible', b, a);
          for (b = this.Ma.iterator; b.next(); ) b.value.Ub(a);
          a = this.diagram;
          null !== a && a.N();
        }
      },
    },
    pickable: {
      get: function() {
        return this.Nh;
      },
      set: function(a) {
        var b = this.Nh;
        b !== a && ((this.Nh = a), this.g('pickable', b, a));
      },
    },
    isInDocumentBounds: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j !== a &&
          ((this.j = a), null !== this.diagram && this.diagram.Va());
      },
    },
    allowCopy: {
      get: function() {
        return this.zi;
      },
      set: function(a) {
        var b = this.zi;
        b !== a && ((this.zi = a), this.g('allowCopy', b, a));
      },
    },
    allowDelete: {
      get: function() {
        return this.Ai;
      },
      set: function(a) {
        var b = this.Ai;
        b !== a && ((this.Ai = a), this.g('allowDelete', b, a));
      },
    },
    allowTextEdit: {
      get: function() {
        return this.Ji;
      },
      set: function(a) {
        var b = this.Ji;
        b !== a && ((this.Ji = a), this.g('allowTextEdit', b, a));
      },
    },
    allowGroup: {
      get: function() {
        return this.Bi;
      },
      set: function(a) {
        var b = this.Bi;
        b !== a && ((this.Bi = a), this.g('allowGroup', b, a));
      },
    },
    allowUngroup: {
      get: function() {
        return this.Ki;
      },
      set: function(a) {
        var b = this.Ki;
        b !== a && ((this.Ki = a), this.g('allowUngroup', b, a));
      },
    },
    allowLink: {
      get: function() {
        return this.Ci;
      },
      set: function(a) {
        var b = this.Ci;
        b !== a && ((this.Ci = a), this.g('allowLink', b, a));
      },
    },
    allowRelink: {
      get: function() {
        return this.Ei;
      },
      set: function(a) {
        var b = this.Ei;
        b !== a && ((this.Ei = a), this.g('allowRelink', b, a));
      },
    },
    allowMove: {
      get: function() {
        return this.Di;
      },
      set: function(a) {
        var b = this.Di;
        b !== a && ((this.Di = a), this.g('allowMove', b, a));
      },
    },
    allowReshape: {
      get: function() {
        return this.Fi;
      },
      set: function(a) {
        var b = this.Fi;
        b !== a && ((this.Fi = a), this.g('allowReshape', b, a));
      },
    },
    allowResize: {
      get: function() {
        return this.Gi;
      },
      set: function(a) {
        var b = this.Gi;
        b !== a && ((this.Gi = a), this.g('allowResize', b, a));
      },
    },
    allowRotate: {
      get: function() {
        return this.Hi;
      },
      set: function(a) {
        var b = this.Hi;
        b !== a && ((this.Hi = a), this.g('allowRotate', b, a));
      },
    },
    allowSelect: {
      get: function() {
        return this.Ii;
      },
      set: function(a) {
        var b = this.Ii;
        b !== a && ((this.Ii = a), this.g('allowSelect', b, a));
      },
    },
  });
  di.prototype.findObjectsNear = di.prototype.hg;
  di.prototype.findObjectsIn = di.prototype.tf;
  di.prototype.findObjectsAt = di.prototype.di;
  di.prototype.findObjectAt = di.prototype.ec;
  di.className = 'Layer';

  function Q(a, b) {
    ji || (ki(), (ji = !0));
    Ra(this);
    le = this;
    this.wb = !0;
    this.La = null;
    this.Aa = this.Ba = 0;
    this.Ha = null;
    if (Og) {
      var c = this,
        d = function() {
          c.removeEventListener(x.document, 'DOMContentLoaded', d, !1);
          c.setRTL();
        };
      null !== x.document.body
        ? this.setRTL()
        : c.addEventListener(x.document, 'DOMContentLoaded', d, !1);
    }
    this.cl = null;
    li.add('Model', mi);
    var e = this;
    this.Db = function(a) {
      var b = e.partManager;
      if (a.model === b.diagram.model && b.diagram.$) {
        b.diagram.$ = !1;
        try {
          var c = a.change;
          '' === a.modelChange &&
            c === de &&
            b.updateDataBindings(a.object, a.propertyName);
        } finally {
          b.diagram.$ = !0;
        }
      }
    };
    this.Hc = function(a) {
      e.partManager.doModelChanged(a);
    };
    this.Nt = this.Qt = null;
    ni(this);
    this.model = oi();
    this.Mg = !0;
    pi(this);
    this.layout = new qi();
    this.Mg = !1;
    this.Yj = this.Zj = this.Xj = this.Wj = this.Iz = this.Sj = this.sv = null;
    this.Jo = function() {};
    this.preventDefault = null;
    this.Ym = !1;
    this.vh = new ri();
    void 0 !== a &&
      ('string' === typeof a || (x.Element && a instanceof Element)
        ? si(this, a)
        : (b = a));
    this.wb = !1;
    b && this.Vl(b);
    return this;
  }
  var ti, le;

  function ni(a) {
    a.Rd = new gh();
    a.Rd.Le(a);
    a.Ab = 17;
    a.kw = !1;
    a.$m = !1;
    a.Ht = 'default';
    a.Ua = new E();
    a.Yx = new pb();
    a.Ax();
    a.zx();
    a.tb = 1;
    a.pa = new I(NaN, NaN).freeze();
    a.Jt = new I(NaN, NaN);
    a.xa = 1;
    a.sp = 1;
    a.bt = new I(NaN, NaN).freeze();
    a.ct = NaN;
    a.tt = 1e-4;
    a.pt = 100;
    a.Bb = new md();
    a.eu = new I(NaN, NaN).freeze();
    a.Xs = new M(NaN, NaN, NaN, NaN).freeze();
    a.mj = new ec(0, 0, 0, 0).freeze();
    a.nj = Rh;
    a.Tt = !1;
    a.Et = null;
    a.Lt = null;
    a.nh = rh;
    a.mk = Wc;
    a.wg = rh;
    a.Rp = Wc;
    a.at = tc;
    a.dt = tc;
    a.bd = !0;
    a.Wm = !1;
    a.te = new G();
    a.th = new pb();
    a.Fm = !0;
    a.Yo = 250;
    a.ik = -1;
    a.$o = new ec(16, 16, 16, 16).freeze();
    a.cg = !1;
    a.xk = !1;
    a.Nm = !0;
    a.Fp = new $d();
    a.Fp.diagram = a;
    a.Hg = new $d();
    a.Hg.diagram = a;
    a.Yi = new $d();
    a.Yi.diagram = a;
    a.qg = null;
    a.bf = null;
    a.Wt = !1;
    ui(a);
    a.Uh = new G();
    a.kt = !0;
    a.$t = vi;
    a.Vv = !1;
    a.bu = Ef;
    a.Ks = 'auto';
    a.rp = 'auto';
    a.oh = null;
    a.uh = null;
    a.qh = null;
    a.Jh = null;
    a.Hh = null;
    a.Gh = null;
    a.vt = null;
    a.Eh = null;
    a.$s = !1;
    a.Fh = null;
    a.Ih = null;
    a.Th = null;
    a.rh = null;
    a.wt = !1;
    a.Dt = {};
    a.$k = [null, null];
    a.Mg = !1;
    a.mw = !1;
    a.Ut = !1;
    a.Ns = !1;
    a.Xv = !0;
    a.cd = !1;
    a.Vi = !1;
    a.xw = !0;
    a.se = -2;
    a.Fg = new pb();
    a.Fn = new E();
    a.xg = !1;
    a.Ad = !0;
    a.ws = !0;
    a.zi = !0;
    a.Ai = !0;
    a.xs = !1;
    a.ys = !0;
    a.Ji = !0;
    a.Bi = !0;
    a.Ki = !0;
    a.As = !0;
    a.Ci = !0;
    a.Ei = !0;
    a.Di = !0;
    a.Fi = !0;
    a.Gi = !0;
    a.Hi = !0;
    a.Ii = !0;
    a.Bs = !0;
    a.Ds = !0;
    a.Wv = !1;
    a.Kk = !1;
    a.Tm = !0;
    a.Um = !0;
    a.zs = !0;
    a.Cs = !0;
    a.Ot = 16;
    a.St = 16;
    a.Nq = !1;
    a.Mt = !1;
    a.Rt = 0;
    a.Pt = 0;
    a.ub = new ec(5).freeze();
    a.lw = new G().freeze();
    a.qt = 999999999;
    a.Tv = new G().freeze();
    a.Si = !0;
    a.Ti = !0;
    a.Ui = !0;
    a.We = !1;
    a.Of = !1;
    a.mh = !0;
    a.Qf = !1;
    a.Xx = new G();
    a.Uv = new G();
    a.Qh = null;
    a.Fv = new K(8, 8);
    a.Gv = 999;
    a.fw = 1;
    a.nw = 0;
    a.kd = {
      scale: 1,
      position: new I(),
      bounds: new M(),
      Hw: new K(),
      sx: new K(),
      lx: !1,
    };
    a.vw = new M(NaN, NaN, NaN, NaN).freeze();
    a.Zn = new K(NaN, NaN).freeze();
    a.wp = new M(NaN, NaN, NaN, NaN).freeze();
    a.lt = !1;
    a.Dg = new pb();
    var b = new V(),
      c = new Qg();
    c.bind(new wi('text', '', Ia));
    b.add(c);
    a.Tx = b;
    a.Dg.add('', b);
    b = new V();
    c = new Qg();
    c.stroke = 'brown';
    c.bind(new wi('text', '', Ia));
    b.add(c);
    a.Dg.add('Comment', b);
    b = new V();
    b.selectable = !1;
    b.avoidable = !1;
    c = new Cf();
    c.figure = 'Ellipse';
    c.fill = 'black';
    c.stroke = null;
    c.desiredSize = new K(3, 3).ha();
    b.add(c);
    a.Dg.add('LinkLabel', b);
    a.Ri = new pb();
    b = new qf();
    b.selectionObjectName = 'GROUPPANEL';
    b.type = W.Vertical;
    c = new Qg();
    c.font = 'bold 12pt sans-serif';
    c.bind(new wi('text', '', Ia));
    b.add(c);
    c = new W(W.Auto);
    c.name = 'GROUPPANEL';
    var d = new Cf();
    d.figure = 'Rectangle';
    d.fill = 'rgba(128,128,128,0.2)';
    d.stroke = 'black';
    c.add(d);
    d = new jg();
    d.padding = new ec(5, 5, 5, 5).ha();
    c.add(d);
    b.add(c);
    a.Rx = b;
    a.Ri.add('', b);
    a.Ch = new pb();
    b = new T();
    c = new Cf();
    c.isPanelMain = !0;
    b.add(c);
    c = new Cf();
    c.toArrow = 'Standard';
    c.fill = 'black';
    c.stroke = null;
    c.strokeWidth = 0;
    b.add(c);
    a.Sx = b;
    a.Ch.add('', b);
    b = new T();
    c = new Cf();
    c.isPanelMain = !0;
    c.stroke = 'brown';
    b.add(c);
    a.Ch.add('Comment', b);
    b = new ue();
    b.type = W.Auto;
    c = new Cf();
    c.fill = null;
    c.stroke = 'dodgerblue';
    c.strokeWidth = 3;
    b.add(c);
    c = new jg();
    c.margin = new ec(1.5, 1.5, 1.5, 1.5).ha();
    b.add(c);
    a.xt = b;
    a.Zs = b;
    b = new ue();
    b.type = W.Link;
    c = new Cf();
    c.isPanelMain = !0;
    c.fill = null;
    c.stroke = 'dodgerblue';
    c.strokeWidth = 3;
    b.add(c);
    a.nt = b;
    a.Zd = null;
    a.Op = !1;
    a.qk = null;
    a.partManager = new mi();
    a.toolManager = new La();
    a.toolManager.initializeStandardTools();
    a.defaultTool = a.toolManager;
    a.currentTool = a.defaultTool;
    a.Ps = null;
    a.Em = new Ce();
    a.At = null;
    a.Bt = null;
    a.jr = !1;
    a.commandHandler = xi();
    a.kr = !1;
    a.Hp = null;
    a.Ip = ub;
    a.tw = !1;
    a.kc = 1;
    a.Rh = null;
    a.nq = 1;
    a.rq = 0;
    a.dw = [0, 0, 0, 0, 0];
    a.sq = 0;
    a.Yp = 1;
    a.Zv = 0;
    a.$v = new I();
    a.hy = 500;
    a.Zo = new I();
    a.jt = !1;
  }
  Q.prototype.clear = function() {
    this.animationManager.wc();
    this.model.clear();
    yi = null;
    zi = '';
    Ai(this, !1);
    this.Fn.clear();
    Bi();
    this.Fg.clear();
    this.Qh = null;
    this.Va();
    this.Za();
    this.N();
  };

  function Ai(a, b) {
    a.animationManager.wc(!0);
    a.lw = new G().freeze();
    a.Tv = new G().freeze();
    var c = a.skipsUndoManager,
      d = null !== a.ac && void 0 !== a.ac;
    d && (a.skipsUndoManager = !0);
    var e = null;
    null !== a.Zd && ((e = a.Zd.part), null !== e && a.remove(e));
    var f = [],
      g = a.Ua.length;
    if (b) {
      for (b = 0; b < g; b++)
        for (var h = a.Ua.s[b].parts; h.next(); ) {
          var k = h.value;
          k !== e && null === k.data && f.push(k);
        }
      for (b = 0; b < f.length; b++) a.remove(f[b]);
    }
    for (b = 0; b < g; b++) a.Ua.s[b].clear();
    a.partManager.clear();
    a.te.clear();
    a.th.clear();
    a.Uh.clear();
    a.qk = null;
    a.Fn.clear();
    Bi();
    a.Fg.clear();
    Fa = [];
    null !== e && (a.add(e), a.partManager.parts.remove(e));
    d && (a.skipsUndoManager = c);
    return f;
  }

  function xi() {
    return null;
  }
  Q.prototype.reset = function() {
    this.clear();
    this.wb = !0;
    ni(this);
    Ci(this);
    this.Mg = !0;
    pi(this);
    this.layout = new qi();
    this.Mg = !1;
    this.model = oi();
    this.model.undoManager = new ie();
    this.wb = this.Ym = !1;
    this.N();
  };
  Q.prototype.setRTL = function(a) {
    a = void 0 === a ? this.div : a;
    null === a && (a = x.document.body);
    var b = ua('div');
    b.dir = 'rtl';
    b.style.cssText =
      'font-size: 14px; width: 1px; height: 1px; position: absolute; top: -1000px; overflow: scroll;';
    b.textContent = 'A';
    a.appendChild(b);
    var c = 'reverse';
    0 < b.scrollLeft
      ? (c = 'default')
      : ((b.scrollLeft = 1), 0 === b.scrollLeft && (c = 'negative'));
    a.removeChild(b);
    this.Ht = c;
  };
  Q.prototype.setScrollWidth = function(a) {
    a = void 0 === a ? this.div : a;
    null === a && (a = x.document.body);
    var b = 0;
    if (Og) {
      var c = Di;
      b = ti;
      null === c &&
        ((c = Di = ua('p')),
        (c.style.width = '100%'),
        (c.style.height = '200px'),
        (c.style.boxSizing = 'content-box'),
        (b = ti = ua('div')),
        (b.style.position = 'absolute'),
        (b.style.visibility = 'hidden'),
        (b.style.width = '200px'),
        (b.style.height = '150px'),
        (b.style.boxSizing = 'content-box'),
        b.appendChild(c));
      b.style.overflow = 'hidden';
      a.appendChild(b);
      var d = c.offsetWidth;
      b.style.overflow = 'scroll';
      c = c.offsetWidth;
      d === c && (c = b.clientWidth);
      a.removeChild(b);
      b = d - c;
      0 !== b || Qa || (b = 11);
    }
    this.Ab = b;
    this.kw = !0;
  };
  Q.prototype.ob = function(a) {
    a.classType === Q && (this.autoScale = a);
  };
  Q.prototype.toString = function(a) {
    void 0 === a && (a = 0);
    var b = '';
    this.div && this.div.id && (b = this.div.id);
    b = 'Diagram "' + b + '"';
    if (0 >= a) return b;
    for (var c = this.Ua.iterator; c.next(); )
      b += '\n  ' + c.value.toString(a - 1);
    return b;
  };
  Q.prototype.addEventListener = function(a, b, c, d) {
    a.addEventListener(b, c, {
      capture: d,
      passive: !1,
    });
  };
  Q.prototype.removeEventListener = function(a, b, c, d) {
    a.removeEventListener(b, c, {
      capture: d,
    });
  };

  function Ei(a) {
    var b = a.Ha.Sa;
    b instanceof HTMLCanvasElement &&
      (a.addEventListener(b, 'pointerdown', a.Wj, !1),
      a.addEventListener(b, 'pointermove', a.Xj, !1),
      a.addEventListener(b, 'pointerup', a.Zj, !1),
      a.addEventListener(b, 'pointerout', a.Yj, !1),
      a.addEventListener(b, 'pointerenter', a.Jy, !1),
      a.addEventListener(b, 'pointerleave', a.Ky, !1),
      a.addEventListener(b, 'wheel', a.Sj, !1),
      a.addEventListener(b, 'keydown', a.yz, !1),
      a.addEventListener(b, 'keyup', a.zz, !1),
      a.addEventListener(b, 'blur', a.vy, !1),
      a.addEventListener(b, 'focus', a.wy, !1),
      a.addEventListener(
        b,
        'selectstart',
        function(a) {
          a.preventDefault();
          return !1;
        },
        !1,
      ),
      a.addEventListener(
        b,
        'contextmenu',
        function(a) {
          a.preventDefault();
          return !1;
        },
        !1,
      ),
      a.addEventListener(x, 'resize', a.sv, !1),
      Qa &&
        a.addEventListener(
          b,
          'touchstart',
          function(a) {
            a.preventDefault();
          },
          !1,
        ));
  }

  function Ge(a) {
    30 < a.rq && (a.Rh = 1);
  }

  function Ye(a, b) {
    null !== a.Rh &&
      ((a.Rh = null),
      b && a.Jo(),
      (Xa && Xa.Rw) || ((a.rq = 0), (a.dw = [0, 0, 0, 0, 0]), (a.sq = 0)));
  }
  Q.prototype.computePixelRatio = function() {
    return null !== this.Rh ? this.Rh : x.devicePixelRatio || 1;
  };
  Q.prototype.doMouseMove = function() {
    this.currentTool.doMouseMove();
  };
  Q.prototype.doMouseDown = function() {
    this.currentTool.doMouseDown();
  };
  Q.prototype.doMouseUp = function() {
    this.currentTool.doMouseUp();
  };
  Q.prototype.doMouseWheel = function() {
    this.currentTool.doMouseWheel();
  };
  Q.prototype.doKeyDown = function() {
    this.currentTool.doKeyDown();
  };
  Q.prototype.doKeyUp = function() {
    this.currentTool.doKeyUp();
  };
  Q.prototype.doFocus = function() {
    this.focus();
  };
  Q.prototype.focus = function() {
    if (this.Ha)
      if (this.scrollsPageOnFocus) this.Ha.focus();
      else {
        var a = x.scrollX || x.pageXOffset,
          b = x.scrollY || x.pageYOffset;
        this.Ha.focus();
        x.scrollTo(a, b);
      }
  };
  Q.prototype.wy = function() {
    this.H.P('GainedFocus');
  };
  Q.prototype.vy = function() {
    this.H.P('LostFocus');
  };

  function sh(a) {
    if (null !== a.Ha) {
      var b = a.La;
      if (null !== b && 0 !== b.clientWidth && 0 !== b.clientHeight) {
        a.kw || a.setScrollWidth();
        var c = a.Of ? a.Ab : 0,
          d = a.We ? a.Ab : 0,
          e = a.kc;
        a.kc = a.computePixelRatio();
        a.kc !== e && ((a.Wm = !0), a.Mb());
        if (b.clientWidth !== a.Ba + c || b.clientHeight !== a.Aa + d)
          (a.Ti = !0),
            (a.bd = !0),
            (b = a.layout),
            null !== b &&
              b.isViewportSized &&
              a.autoScale === rh &&
              ((a.xk = !0), b.D()),
            a.cd || a.Mb();
      }
    }
  }

  function pi(a) {
    var b = new di();
    b.name = 'Background';
    a.pl(b);
    b = new di();
    b.name = '';
    a.pl(b);
    b = new di();
    b.name = 'Foreground';
    a.pl(b);
    b = new di();
    b.name = 'Adornment';
    b.isTemporary = !0;
    b.isInDocumentBounds = !1;
    a.pl(b);
    b = new di();
    b.name = 'Tool';
    b.isTemporary = !0;
    b.isInDocumentBounds = !0;
    a.pl(b);
    b = new di();
    b.name = 'Grid';
    b.allowSelect = !1;
    b.pickable = !1;
    b.isTemporary = !0;
    b.isInDocumentBounds = !1;
    a.Aw(b, a.Ij('Background'));
  }

  function Fi(a) {
    var b = new W(W.Grid);
    b.name = 'GRID';
    var c = new Cf();
    c.figure = 'LineH';
    c.stroke = 'lightgray';
    c.strokeWidth = 0.5;
    c.interval = 1;
    b.add(c);
    c = new Cf();
    c.figure = 'LineH';
    c.stroke = 'gray';
    c.strokeWidth = 0.5;
    c.interval = 5;
    b.add(c);
    c = new Cf();
    c.figure = 'LineH';
    c.stroke = 'gray';
    c.strokeWidth = 1;
    c.interval = 10;
    b.add(c);
    c = new Cf();
    c.figure = 'LineV';
    c.stroke = 'lightgray';
    c.strokeWidth = 0.5;
    c.interval = 1;
    b.add(c);
    c = new Cf();
    c.figure = 'LineV';
    c.stroke = 'gray';
    c.strokeWidth = 0.5;
    c.interval = 5;
    b.add(c);
    c = new Cf();
    c.figure = 'LineV';
    c.stroke = 'gray';
    c.strokeWidth = 1;
    c.interval = 10;
    b.add(c);
    c = new U();
    c.add(b);
    c.layerName = 'Grid';
    c.zOrder = 0;
    c.isInDocumentBounds = !1;
    c.isAnimated = !1;
    c.pickable = !1;
    c.locationObjectName = 'GRID';
    a.add(c);
    a.partManager.parts.remove(c);
    b.visible = !1;
    return b;
  }

  function Gi() {
    this.H.Mt
      ? (this.H.Mt = !1)
      : this.H.isEnabled
      ? this.H.Nw(this)
      : Oi(this.H);
  }

  function Qi(a) {
    this.H.isEnabled
      ? ((this.H.Rt = a.target.scrollTop), (this.H.Pt = a.target.scrollLeft))
      : Oi(this.H);
  }
  Q.prototype.Nw = function(a) {
    if (null !== this.Ha) {
      var b = this.Qt,
        c = this.Nt;
      this.Nq = !0;
      var d = this.documentBounds,
        e = this.viewportBounds,
        f = this.mj,
        g = d.x - f.left,
        h = d.y - f.top,
        k = d.width + f.left + f.right,
        l = d.height + f.top + f.bottom,
        m = d.right + f.right;
      f = d.bottom + f.bottom;
      var n = e.x;
      d = e.y;
      var p = e.width,
        r = e.height,
        q = e.right,
        u = e.bottom;
      e = this.scale;
      var w = a.scrollLeft;
      if (this.$m)
        switch (this.Ht) {
          case 'negative':
            w = w + a.scrollWidth - a.clientWidth;
            break;
          case 'reverse':
            w = a.scrollWidth - w - a.clientWidth;
        }
      var v = w;
      p < k || r < l
        ? ((w = I.allocAt(this.position.x, this.position.y)),
          this.allowHorizontalScroll &&
            this.Pt !== v &&
            ((w.x = v / e + g), (this.Pt = v)),
          this.allowVerticalScroll &&
            this.Rt !== a.scrollTop &&
            ((w.y = a.scrollTop / e + h), (this.Rt = a.scrollTop)),
          (this.position = w),
          I.free(w),
          (this.Ti = this.Nq = !1))
        : ((w = I.alloc()),
          a.$x &&
            this.allowHorizontalScroll &&
            (g < n && (this.position = w.h(v + g, this.position.y)),
            m > q &&
              (this.position = w.h(
                -(b.scrollWidth - this.Ba) + v - this.Ba / e + m,
                this.position.y,
              ))),
          a.ay &&
            this.allowVerticalScroll &&
            (h < d && (this.position = w.h(this.position.x, a.scrollTop + h)),
            f > u &&
              (this.position = w.h(
                this.position.x,
                -(b.scrollHeight - this.Aa) + a.scrollTop - this.Aa / e + f,
              ))),
          I.free(w),
          Ri(this),
          (this.Ti = this.Nq = !1),
          (d = this.documentBounds),
          (e = this.viewportBounds),
          (m = d.right),
          (q = e.right),
          (f = d.bottom),
          (u = e.bottom),
          (g = d.x),
          (n = e.x),
          (h = d.y),
          (d = e.y),
          p >= k && g >= n && m <= q && (c.style.width = '1px'),
          r >= l && h >= d && f <= u && (c.style.height = '1px'));
    }
  };
  Q.prototype.computeBounds = function(a) {
    void 0 === a && (a = new M());
    mh(this);
    return Si(this, a);
  };

  function Si(a, b) {
    if (a.fixedBounds.v()) return b.assign(a.fixedBounds), b.fo(a.ub), b;
    for (var c = !0, d = a.Ua.s, e = d.length, f = 0; f < e; f++) {
      var g = d[f];
      if (g.visible && g.isInDocumentBounds) {
        g = g.Ma.s;
        for (var h = g.length, k = 0; k < h; k++) {
          var l = g[k];
          l.isInDocumentBounds &&
            l.isVisible() &&
            ((l = l.actualBounds),
            l.v() && (c ? ((c = !1), b.assign(l)) : b.Xc(l)));
        }
      }
    }
    c && b.h(0, 0, 0, 0);
    b.fo(a.ub);
    return b;
  }
  Q.prototype.computePartsBounds = function(a, b) {
    void 0 === b && (b = !1);
    var c = null;
    if (za(a))
      for (var d = 0; d < a.length; d++) {
        var e = a[d];
        (!b && e instanceof T) ||
          (e.Za(),
          null === c ? (c = e.actualBounds.copy()) : c.Xc(e.actualBounds));
      }
    else
      for (a = a.iterator; a.next(); )
        (d = a.value),
          (!b && d instanceof T) ||
            (d.Za(),
            null === c ? (c = d.actualBounds.copy()) : c.Xc(d.actualBounds));
    return null === c ? new M(NaN, NaN, 0, 0) : c;
  };

  function Ti(a, b) {
    if ((b || a.Qf) && !a.wb && null !== a.Ha && a.documentBounds.v()) {
      if (b) {
        var c = a.initialPosition;
        if (c.v()) {
          a.position = c;
          return;
        }
        c = I.alloc();
        c.oi(a.documentBounds, a.initialDocumentSpot);
        var d = a.viewportBounds;
        d = M.allocAt(0, 0, d.width, d.height);
        var e = I.alloc();
        e.oi(d, a.initialViewportSpot);
        e.h(c.x - e.x, c.y - e.y);
        a.position = e;
        M.free(d);
        I.free(e);
        I.free(c);
      }
      a.wb = !0;
      c = a.nh;
      b && a.wg !== rh && (c = a.wg);
      var f = c !== rh ? Ui(a, c) : a.scale;
      c = a.pa.x;
      d = a.pa.y;
      e = a.Ba / f;
      var g = a.Aa / f,
        h = a.mk,
        k = a.Rp;
      b && !h.pb() && (k.pb() || k.Sb()) && (h = k.Sb() ? yc : k);
      Vi(a, a.documentBounds, e, g, h, b);
      b = a.scale;
      a.scale = f;
      a.wb = !1;
      Wi(a);
      Xi(a, !0, !1);
      f = a.viewportBounds;
      if (!(J.B(f.x, c) && J.B(f.y, d) && J.B(f.width, e) && J.B(f.height, g)))
        a.onViewportBoundsChanged(new M(c, d, e, g), f, b, !1);
    }
  }

  function Ui(a, b) {
    var c = a.sp;
    if (null === a.Ha) return c;
    a.Za();
    var d = a.documentBounds;
    if (!d.v()) return c;
    var e = d.width;
    d = d.height;
    var f = a.Ba + (a.Of ? a.Ab : 0),
      g = a.Aa + (a.We ? a.Ab : 0),
      h = f / e,
      k = g / d;
    return b === Yi
      ? ((b = Math.min(k, h)),
        b > c && (b = c),
        b < a.minScale && (b = a.minScale),
        b > a.maxScale && (b = a.maxScale),
        b)
      : b === Zi
      ? ((b = k > h ? (g - a.Ab) / d : (f - a.Ab) / e),
        b > c && (b = c),
        b < a.minScale && (b = a.minScale),
        b > a.maxScale && (b = a.maxScale),
        b)
      : a.scale;
  }
  Q.prototype.zoomToFit = function() {
    var a = this.nj;
    this.nj = Rh;
    this.scale = Ui(this, Yi);
    a !== Rh &&
      (Ti(this, !1),
      Vi(
        this,
        this.documentBounds,
        this.Ba / this.xa,
        this.Aa / this.xa,
        this.mk,
        !1,
      ));
    this.nj = a;
  };
  t = Q.prototype;
  t.kA = function(a, b) {
    void 0 === b && (b = Yi);
    var c = a.width,
      d = a.height;
    if (!(0 === c || 0 === d || (isNaN(c) && isNaN(d)))) {
      var e = 1;
      if (b === Yi || b === Zi)
        if (isNaN(c)) e = (this.viewportBounds.height * this.scale) / d;
        else if (isNaN(d)) e = (this.viewportBounds.width * this.scale) / c;
        else {
          e = this.Ba;
          var f = this.Aa;
          e =
            b === Zi
              ? f / d > e / c
                ? (f - (this.We ? this.Ab : 0)) / d
                : (e - (this.Of ? this.Ab : 0)) / c
              : Math.min(f / d, e / c);
        }
      this.scale = e;
      this.position = new I(a.x, a.y);
    }
  };
  t.py = function(a, b) {
    this.Za();
    var c = this.documentBounds,
      d = this.viewportBounds;
    this.position = new I(
      c.x + (a.x * c.width + a.offsetX) - (b.x * d.width - b.offsetX),
      c.y + (a.y * c.height + a.offsetY) - (b.y * d.height - b.offsetY),
    );
  };
  t.gz = function(a) {
    if (a instanceof Y) {
      this.Hp = a;
      var b = I.alloc();
      this.Ip = this.Ro(a.ia(tc, b));
      I.free(b);
    } else (this.Hp = null), (this.Ip = ub);
  };

  function Vi(a, b, c, d, e, f) {
    var g = I.allocAt(a.pa.x, a.pa.y),
      h = g.x,
      k = g.y;
    if (null !== a.Hp) {
      var l = I.alloc();
      l = a.Hp.ia(tc, l);
      h = l.x - a.Ip.x / a.scale;
      k = l.y - a.Ip.y / a.scale;
      e = sc;
      I.free(l);
    }
    if (f || a.scrollMode === Rh)
      e.pb() &&
        (c > b.width &&
          (h = b.x + (e.x * b.width + e.offsetX) - (e.x * c - e.offsetX)),
        d > b.height &&
          (k = b.y + (e.y * b.height + e.offsetY) - (e.y * d - e.offsetY))),
        (e = a.mj),
        (f = c - b.width),
        c < b.width + e.left + e.right
          ? ((h = Math.min(h + c / 2, b.right + Math.max(f, e.right) - c / 2)),
            (h = Math.max(h, b.left - Math.max(f, e.left) + c / 2)),
            (h -= c / 2))
          : h > b.left
          ? (h = b.left)
          : h < b.right - c && (h = b.right - c),
        (c = d - b.height),
        d < b.height + e.top + e.bottom
          ? ((k = Math.min(
              k + d / 2,
              b.bottom + Math.max(c, e.bottom) - d / 2,
            )),
            (k = Math.max(k, b.top - Math.max(c, e.top) + d / 2)),
            (k -= d / 2))
          : k > b.top
          ? (k = b.top)
          : k < b.bottom - d && (k = b.bottom - d);
    g.x = isFinite(h) ? h : -a.ub.left;
    g.y = isFinite(k) ? k : -a.ub.top;
    null !== a.positionComputation &&
      ((b = a.positionComputation(a, g)), (g.x = b.x), (g.y = b.y));
    Nh(a.Rd, a.pa, g);
    a.pa.h(g.x, g.y);
    Ci(a);
    I.free(g);
  }
  t.wl = function(a, b) {
    void 0 === b && (b = !0);
    if (b) {
      if (
        ((a = rf(
          this,
          a,
          function(a) {
            return a.part;
          },
          function(a) {
            return a.canSelect();
          },
        )),
        a instanceof U)
      )
        return a;
    } else if (
      ((a = rf(this, a, function(a) {
        return a.part;
      })),
      a instanceof U)
    )
      return a;
    return null;
  };
  t.ec = function(a, b, c) {
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    mh(this);
    for (var d = this.Ua.iteratorBackwards; d.next(); ) {
      var e = d.value;
      if (e.visible && ((e = e.ec(a, b, c)), null !== e)) return e;
    }
    return null;
  };

  function rf(a, b, c, d) {
    void 0 === c && (c = null);
    void 0 === d && (d = null);
    mh(a);
    for (a = a.Ua.iteratorBackwards; a.next(); ) {
      var e = a.value;
      if (e.visible && !e.isTemporary && ((e = e.ec(b, c, d)), null !== e))
        return e;
    }
    return null;
  }
  t.Uy = function(a, b, c) {
    void 0 === b && (b = !0);
    return $i(
      this,
      a,
      function(a) {
        return a.part;
      },
      b
        ? function(a) {
            return a instanceof U && a.canSelect();
          }
        : null,
      c,
    );
  };

  function $i(a, b, c, d, e) {
    void 0 === c && (c = null);
    void 0 === d && (d = null);
    e instanceof E || e instanceof G || (e = new G());
    mh(a);
    for (a = a.Ua.iteratorBackwards; a.next(); ) {
      var f = a.value;
      f.visible && !f.isTemporary && f.di(b, c, d, e);
    }
    return e;
  }
  t.di = function(a, b, c, d) {
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    d instanceof E || d instanceof G || (d = new G());
    mh(this);
    for (var e = this.Ua.iteratorBackwards; e.next(); ) {
      var f = e.value;
      f.visible && f.di(a, b, c, d);
    }
    return d;
  };
  t.Ww = function(a, b, c, d) {
    void 0 === b && (b = !1);
    void 0 === c && (c = !0);
    return aj(
      this,
      a,
      function(a) {
        return a instanceof U && (!c || a.canSelect());
      },
      b,
      d,
    );
  };
  t.tf = function(a, b, c, d, e) {
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    void 0 === d && (d = !1);
    e instanceof E || e instanceof G || (e = new G());
    mh(this);
    for (var f = this.Ua.iteratorBackwards; f.next(); ) {
      var g = f.value;
      g.visible && g.tf(a, b, c, d, e);
    }
    return e;
  };
  t.zu = function(a, b, c, d, e, f) {
    var g = new G();
    mh(this);
    for (var h = this.Ua.iteratorBackwards; h.next(); ) {
      var k = h.value;
      k.visible && k.zu(a, b, c, d, g, e, f);
    }
    return g;
  };

  function aj(a, b, c, d, e) {
    var f = null;
    void 0 === f && (f = null);
    void 0 === c && (c = null);
    void 0 === d && (d = !1);
    e instanceof E || e instanceof G || (e = new G());
    mh(a);
    for (a = a.Ua.iteratorBackwards; a.next(); ) {
      var g = a.value;
      g.visible && !g.isTemporary && g.tf(b, f, c, d, e);
    }
    return e;
  }
  t.Vy = function(a, b, c, d, e) {
    void 0 === c && (c = !0);
    void 0 === d && (d = !0);
    return bj(
      this,
      a,
      b,
      function(a) {
        return a instanceof U && (!d || a.canSelect());
      },
      c,
      e,
    );
  };
  t.hg = function(a, b, c, d, e, f) {
    void 0 === c && (c = null);
    void 0 === d && (d = null);
    void 0 === e && (e = !0);
    if (!1 !== e && !0 !== e) {
      if (e instanceof E || e instanceof G) f = e;
      e = !0;
    }
    f instanceof E || f instanceof G || (f = new G());
    mh(this);
    for (var g = this.Ua.iteratorBackwards; g.next(); ) {
      var h = g.value;
      h.visible && h.hg(a, b, c, d, e, f);
    }
    return f;
  };

  function bj(a, b, c, d, e, f) {
    var g = null;
    void 0 === g && (g = null);
    void 0 === d && (d = null);
    void 0 === e && (e = !0);
    if (!1 !== e && !0 !== e) {
      if (e instanceof E || e instanceof G) f = e;
      e = !0;
    }
    f instanceof E || f instanceof G || (f = new G());
    mh(a);
    for (a = a.Ua.iteratorBackwards; a.next(); ) {
      var h = a.value;
      h.visible && !h.isTemporary && h.hg(b, c, g, d, e, f);
    }
    return f;
  }
  Q.prototype.acceptEvent = function(a) {
    return cj(this, a, a instanceof MouseEvent);
  };

  function cj(a, b, c) {
    var d = a.Hg;
    a.Hg = a.Yi;
    a.Yi = d;
    d.diagram = a;
    d.event = b;
    c
      ? dj(a, b, d)
      : ((d.viewPoint = a.Hg.viewPoint),
        (d.documentPoint = a.Hg.documentPoint));
    a = 0;
    b.ctrlKey && (a += 1);
    b.altKey && (a += 2);
    b.shiftKey && (a += 4);
    b.metaKey && (a += 8);
    d.modifiers = a;
    d.button = b.button;
    void 0 !== b.buttons && (d.buttons = b.buttons);
    Qa && 0 === b.button && b.ctrlKey && (d.button = 2);
    d.down = !1;
    d.up = !1;
    d.clickCount = 1;
    d.delta = 0;
    d.handled = !1;
    d.bubbles = !1;
    d.timestamp = b.timeStamp;
    d.isMultiTouch = !1;
    d.targetDiagram = ej(b, b.target);
    d.targetObject = null;
    return d;
  }

  function ej(a, b) {
    if (null === b) return null;
    if ((b = b.H)) return b;
    (b = a.path) ||
      'function' !== typeof a.composedPath ||
      (b = a.composedPath());
    return b && b[0] && b[0].H ? b[0].H : null;
  }

  function fj(a, b, c, d, e, f) {
    var g = a.Hg;
    a.Hg = a.Yi;
    a.Yi = g;
    g.diagram = a;
    g.clickCount = 1;
    a = g.delta = 0;
    b.ctrlKey && (a += 1);
    b.altKey && (a += 2);
    b.shiftKey && (a += 4);
    b.metaKey && (a += 8);
    g.modifiers = a;
    g.event = b;
    g.timestamp = b.timeStamp;
    g.button = b.button;
    g.buttons = b.buttons;
    Qa && 0 === b.button && b.ctrlKey && (g.button = 2);
    g.down = c;
    g.up = d;
    g.handled = !1;
    g.bubbles = e;
    g.isMultiTouch = f;
    return g;
  }

  function gj(a, b) {
    if (a.bubbles) return !0;
    void 0 !== b.stopPropagation && b.stopPropagation();
    !1 !== b.cancelable && b.preventDefault();
    b.cancelBubble = !0;
    return !1;
  }
  Q.prototype.yz = function(a) {
    var b = this.H;
    if (!this.H.isEnabled) return !1;
    var c = cj(b, a, !1);
    c.key = String.fromCharCode(a.which);
    c.down = !0;
    switch (a.which) {
      case 8:
        c.key = 'Backspace';
        break;
      case 33:
        c.key = 'PageUp';
        break;
      case 34:
        c.key = 'PageDown';
        break;
      case 35:
        c.key = 'End';
        break;
      case 36:
        c.key = 'Home';
        break;
      case 37:
        c.key = 'Left';
        break;
      case 38:
        c.key = 'Up';
        break;
      case 39:
        c.key = 'Right';
        break;
      case 40:
        c.key = 'Down';
        break;
      case 45:
        c.key = 'Insert';
        break;
      case 46:
        c.key = 'Del';
        break;
      case 48:
        c.key = '0';
        break;
      case 187:
      case 61:
      case 107:
        c.key = 'Add';
        break;
      case 189:
      case 173:
      case 109:
        c.key = 'Subtract';
        break;
      case 27:
        c.key = 'Esc';
    }
    b.doKeyDown();
    return gj(c, a);
  };
  Q.prototype.zz = function(a) {
    var b = this.H;
    if (!b.isEnabled) return !1;
    var c = cj(b, a, !1);
    c.key = String.fromCharCode(a.which);
    c.up = !0;
    switch (a.which) {
      case 8:
        c.key = 'Backspace';
        break;
      case 33:
        c.key = 'PageUp';
        break;
      case 34:
        c.key = 'PageDown';
        break;
      case 35:
        c.key = 'End';
        break;
      case 36:
        c.key = 'Home';
        break;
      case 37:
        c.key = 'Left';
        break;
      case 38:
        c.key = 'Up';
        break;
      case 39:
        c.key = 'Right';
        break;
      case 40:
        c.key = 'Down';
        break;
      case 45:
        c.key = 'Insert';
        break;
      case 46:
        c.key = 'Del';
    }
    b.doKeyUp();
    return gj(c, a);
  };
  Q.prototype.Jy = function(a) {
    var b = this.H;
    if (!b.isEnabled) return !1;
    var c = cj(b, a, !0);
    null !== b.mouseEnter && b.mouseEnter(c);
    return gj(c, a);
  };
  Q.prototype.Ky = function(a) {
    var b = this.H;
    if (!b.isEnabled) return !1;
    var c = cj(b, a, !0);
    null !== b.mouseLeave && b.mouseLeave(c);
    return gj(c, a);
  };
  Q.prototype.getMouse = function(a) {
    var b = this.Ha;
    if (null === b) return new I(0, 0);
    var c = b.getBoundingClientRect();
    b = a.clientX - (this.Ba / c.width) * c.left;
    a = a.clientY - (this.Aa / c.height) * c.top;
    return null !== this.Bb ? yb(new I(b, a), this.Bb) : new I(b, a);
  };

  function dj(a, b, c) {
    var d = a.Ha,
      e = a.Ba,
      f = a.Aa,
      g = 0,
      h = 0;
    null !== d &&
      ((d = d.getBoundingClientRect()),
      (g = b.clientX - (e / d.width) * d.left),
      (h = b.clientY - (f / d.height) * d.top));
    c.viewPoint.h(g, h);
    null !== a.Bb
      ? ((b = I.allocAt(g, h)),
        a.Bb.Ld(b),
        c.documentPoint.assign(b),
        I.free(b))
      : c.documentPoint.h(g, h);
  }

  function ae(a, b, c, d) {
    if (void 0 !== b.targetTouches) {
      if (2 > b.targetTouches.length) return;
      b = b.targetTouches[c];
    } else if (null !== a.$k[0]) b = a.$k[c];
    else return;
    c = a.Ha;
    null !== c &&
      ((c = c.getBoundingClientRect()),
      d.h(
        b.clientX - (a.Ba / c.width) * c.left,
        b.clientY - (a.Aa / c.height) * c.top,
      ));
  }
  Q.prototype.Va = function() {
    this.Si || ((this.Si = !0), this.Mb(!0));
  };

  function hj(a) {
    a.cd || mh(a);
    a.Za();
  }
  Q.prototype.redraw = function() {
    this.wb || this.cd || (this.N(), Wi(this), this.nd());
  };
  t = Q.prototype;
  t.xz = function() {
    return this.cg;
  };
  t.Ey = function(a) {
    void 0 === a && (a = null);
    var b = this.animationManager,
      c = b.isEnabled;
    b.wc();
    b.isEnabled = !1;
    zf(this);
    this.Qf = !1;
    this.Jt = new I(NaN, NaN);
    b.isEnabled = c;
    this.cd = !0;
    var d = this;
    null !== a &&
      ta(function() {
        d.cd = !1;
        lh(b, 'Model');
        a(d);
      }, 1);
  };
  t.Mb = function(a) {
    void 0 === a && (a = !1);
    if (!0 !== this.cg && !(this.wb || (!1 === a && this.cd))) {
      this.cg = !0;
      var b = this;
      x.requestAnimationFrame(function() {
        b.cg && b.nd();
      });
    }
  };
  t.nd = function() {
    if (!this.Nm || this.cg) this.Nm && (this.Nm = !1), zf(this);
  };

  function Xi(a, b, c) {
    a.animationManager.defaultAnimation.isAnimating ||
      a.wb ||
      !a.Ti ||
      Oi(a) ||
      (b && mh(a), c && Ti(a, !1));
  }

  function zf(a, b) {
    if (!a.cd && ((a.cg = !1), null !== a.La || a.Zn.v())) {
      a.cd = !0;
      var c = a.animationManager,
        d = a.Fn;
      if (!c.isAnimating && 0 !== d.length) {
        for (var e = d.s, f = e.length, g = 0; g < f; g++) {
          var h = e[g];
          ij(h, !1);
          h.w();
        }
        d.clear();
      }
      d = a.Uv;
      0 < d.count &&
        (d.each(function(a) {
          a.rv();
        }),
        d.clear());
      e = d = !1;
      c.defaultAnimation.isAnimating &&
        ((e = !0), (d = a.skipsUndoManager), (a.skipsUndoManager = !0));
      c.zb || sh(a);
      Xi(a, !1, !0);
      null !== a.Zd &&
        (a.Zd.visible && !a.Op && (jj(a), (a.Op = !0)),
        !a.Zd.visible && a.Op && (a.Op = !1));
      mh(a);
      f = !1;
      if (!a.Qf || a.mh)
        a.Qf
          ? kj(a, !a.xk)
          : (a.Da('Initial Layout'), !1 === c.isEnabled && c.wc(), kj(a, !1)),
          (f = !0);
      a.xk = !1;
      mh(a);
      a.Ut || hj(a);
      Xi(a, !0, !1);
      g = !1;
      f
        ? ((c = M.alloc()),
          c.assign(a.viewportBounds),
          a.Qf ||
            ((g = a.Qf = !0),
            a.skipsUndoManager || (a.undoManager.isPendingClear = !0),
            (a.undoManager.isPendingUnmodified = !0),
            lj(a)),
          a.P('LayoutCompleted'),
          c.C(a.viewportBounds) || Xi(a, !0, !1),
          M.free(c))
        : c.Dk &&
          c.uw &&
          (a.wg !== rh
            ? (a.scale = Ui(a, a.wg))
            : a.nh !== rh
            ? (a.scale = Ui(a, a.nh))
            : ((c = a.initialScale), isFinite(c) && 0 < c && (a.scale = c)),
          Ti(a, !0));
      mh(a);
      f && g && a.eb('Initial Layout');
      a.mu();
      b || a.tc(a.Zb);
      e && (a.skipsUndoManager = d);
      a.cd = !1;
    }
  }

  function lj(a) {
    var b = a.xa;
    if (a.wg !== rh) a.scale = Ui(a, a.wg);
    else if (a.nh !== rh) a.scale = Ui(a, a.nh);
    else {
      var c = a.initialScale;
      isFinite(c) && 0 < c && (a.scale = c);
    }
    a.xa !== b && (Wi(a), Xi(a, !0, !1));
    Ti(a, !0);
    b = a.Ua.s;
    a.Pd(b, b.length, a, a.viewportBounds);
    a.P('InitialLayoutCompleted');
    a.Jt.assign(a.pa);
    jj(a);
  }

  function mh(a) {
    if (0 !== a.te.count && (a.cd || !a.animationManager.isTicking)) {
      for (var b = 0; 23 > b; b++) {
        var c = a.te.iterator;
        if (null === c || 0 === a.te.count) break;
        a.te = new G();
        a.rv(c, a.te);
      }
      a.nodes.each(function(a) {
        a instanceof qf && (0 !== (a.U & 65536)) !== !1 && (a.U = a.U ^ 65536);
      });
    }
  }
  t.rv = function(a, b) {
    for (a.reset(); a.next(); ) {
      var c = a.value;
      !c.Tc() ||
        c instanceof qf ||
        (c.mi() ? (c.measure(Infinity, Infinity), c.arrange()) : b.add(c));
    }
    for (a.reset(); a.next(); )
      (c = a.value), c instanceof qf && c.isVisible() && mj(this, c);
    for (a.reset(); a.next(); )
      (c = a.value),
        c instanceof T &&
          c.isVisible() &&
          (c.mi() ? (c.measure(Infinity, Infinity), c.arrange()) : b.add(c));
    for (a.reset(); a.next(); )
      (c = a.value),
        c instanceof ue &&
          c.isVisible() &&
          (c.mi() ? (c.measure(Infinity, Infinity), c.arrange()) : b.add(c));
  };

  function mj(a, b) {
    for (var c = Ea(), d = Ea(), e = b.memberParts; e.next(); ) {
      var f = e.value;
      f.isVisible() &&
        (f instanceof qf
          ? (nj(f) || oj(f) || pj(f)) && mj(a, f)
          : f instanceof T
          ? f.fromNode === b || f.toNode === b
            ? d.push(f)
            : c.push(f)
          : (f.measure(Infinity, Infinity), f.arrange()));
    }
    a = c.length;
    for (e = 0; e < a; e++)
      (f = c[e]), f.measure(Infinity, Infinity), f.arrange();
    Ga(c);
    b.measure(Infinity, Infinity);
    b.arrange();
    a = d.length;
    for (b = 0; b < a; b++)
      (c = d[b]), c.measure(Infinity, Infinity), c.arrange();
    Ga(d);
  }
  t.Pd = function(a, b, c, d) {
    if (this.Ui || this.animationManager.isAnimating)
      for (var e = 0; e < b; e++) a[e].Pd(c, d);
  };
  t.tc = function(a, b) {
    if (null !== this.La) {
      null === this.Ha && C('No canvas specified');
      var c = this.animationManager;
      if (!c.zb && (!c.isAnimating || c.isTicking)) {
        var d = new Date();
        qj(this);
        if ('0' !== this.La.style.opacity) {
          var e = a !== this.Zb,
            f = this.Ua.s,
            g = f.length,
            h = this;
          this.Pd(f, g, h, h.viewportBounds);
          if (e) a.Oc(!0), Ri(this);
          else if (!this.bd && void 0 === b && !c.isAnimating) return;
          g = this.pa;
          var k = this.xa,
            l = Math.round(g.x * k) / k,
            m = Math.round(g.y * k) / k;
          c = this.Bb;
          c.reset();
          1 !== k && c.scale(k);
          (0 === g.x && 0 === g.y) || c.translate(-l, -m);
          k = this.kc;
          a.setTransform(k, 0, 0, k, 0, 0);
          a.clearRect(0, 0, this.Ba, this.Aa);
          1 !== this.tb && (a.globalAlpha = this.tb);
          rj(this, a);
          l =
            void 0 !== b
              ? function(c) {
                  if (c.visible && 0 !== c.tb) {
                    var d = c.Ma.s,
                      e = d.length;
                    if (0 !== e) {
                      var f = fi(c, a),
                        g = c.Bn;
                      g.length = 0;
                      for (var k = h.scale, l = M.alloc(), m = 0; m < e; m++) {
                        var n = d[m];
                        b.contains(n) || c.$h(a, n, h, g, k, l, !0);
                      }
                      M.free(l);
                      a.globalAlpha = f;
                    }
                  }
                }
              : function(b) {
                  b.tc(a, h);
                };
          g = f.length;
          for (m = 0; m < g; m++)
            a.setTransform(k, 0, 0, k, 0, 0),
              a.transform(c.m11, c.m12, c.m21, c.m22, c.dx, c.dy),
              a.Pc(),
              l(f[m]);
          f = !1;
          this.vh ? sj(this.vh, this) && (f = this.Qs()) : (f = !0);
          f && (md.prototype.Ld = md.prototype.Fw);
          e ? (this.Zb.Oc(!0), Ri(this)) : (this.bd = this.Ui = !1);
          f = +new Date() - +d;
          e = Xa && Xa.Rw;
          d = this.dw;
          if (e || null === this.Rh) {
            d[this.sq] = f;
            this.sq = (this.sq + 1) % d.length;
            for (c = f = 0; c < d.length; c++) f += d[c];
            this.rq = f / d.length;
          }
          1 !== this.tb && (a.globalAlpha = 1);
          if (e)
            for (a.setTransform(1, 0, 0, 1, 0, 0), e = 0; e < d.length; e++)
              a.fillText(d[e].toString(), 20, 150 + +(20 * e));
        }
      }
    }
  };

  function tj(a, b, c, d, e, f, g, h, k, l) {
    if (null !== a.La) {
      null === a.Ha && C('No canvas specified');
      void 0 === g && (g = null);
      void 0 === h && (h = null);
      void 0 === k && (k = !1);
      void 0 === l && (l = !1);
      qj(a);
      a.Zb.Oc(!0);
      Ri(a);
      a.Vi = !0;
      var m = a.xa;
      a.xa = e;
      var n = a.Ua.s,
        p = n.length;
      try {
        var r = new M(f.x, f.y, d.width / e, d.height / e),
          q = r.copy();
        q.fo(c);
        jj(a, q);
        mh(a);
        a.Pd(n, p, a, r);
        b.setTransform(1, 0, 0, 1, 0, 0);
        b.clearRect(0, 0, d.width, d.height);
        null !== h &&
          '' !== h &&
          ((b.fillStyle = h), b.fillRect(0, 0, d.width, d.height));
        var u = a.kc;
        b.scale(u, u);
        var w = md.alloc();
        w.reset();
        w.translate(c.left, c.top);
        w.scale(e);
        (0 === f.x && 0 === f.y) || w.translate(-f.x, -f.y);
        b.setTransform(w.m11, w.m12, w.m21, w.m22, w.dx, w.dy);
        b.Pc();
        md.free(w);
        rj(a, b);
        b.globalAlpha = a.tb;
        var v = a.Ij('Grid');
        if (g) {
          var z = new G(),
            y = g.iterator;
          for (y.reset(); y.next(); ) {
            var A = y.value;
            A instanceof U && (l || A.layer !== v) && z.add(A);
          }
          for (l = 0; l < p; l++) {
            var B = n[l];
            v = b;
            var F = a;
            if (B.visible && 0 !== B.tb && (k || !B.isTemporary)) {
              var L = B.Ma.s,
                S = L.length;
              if (0 !== S) {
                var R = fi(B, v),
                  P = B.Bn;
                P.length = 0;
                var H = F.scale,
                  da = M.alloc();
                for (c = 0; c < S; c++) {
                  var X = L[c];
                  z.contains(X) && B.$h(v, X, F, P, H, da, !1);
                }
                M.free(da);
                v.globalAlpha = R;
              }
            }
          }
        } else
          for (z = 0; z < p; z++)
            (F = n[z]), F === v ? l && F.tc(b, a, !0) : F.tc(b, a, k);
        a.Vi = !1;
        a.vh && sj(a.vh, a) && a.Qs();
      } finally {
        (a.xa = m), a.Zb.Oc(!0), Ri(a), a.Pd(n, p, a, a.viewportBounds), jj(a);
      }
    }
  }
  t.Ge = function(a) {
    return this.Ig[a];
  };
  t.Fx = function(a, b) {
    'minDrawingLength' === a && (this.nq = b);
    this.Ig[a] = b;
    this.redraw();
  };
  t.Ax = function() {
    this.Ig = new Wa();
    this.Ig.drawShadows = !0;
    this.Ig.textGreeking = !0;
    this.Ig.viewportOptimizations = Qa || Na ? !1 : !0;
    this.Ig.temporaryPixelRatio = !0;
    this.Ig.pictureRatioOptimization = !0;
    this.nq = this.Ig.minDrawingLength = 1;
  };

  function rj(a, b) {
    a = a.Ig;
    null !== a &&
      (void 0 !== a.imageSmoothingEnabled && b.Ex(!!a.imageSmoothingEnabled),
      (a = a.defaultFont),
      void 0 !== a && null !== a && (b.font = a));
  }
  t.yl = function(a) {
    return this.Vm[a];
  };
  t.Zz = function(a, b) {
    this.Vm[a] = b;
  };
  t.zx = function() {
    this.Vm = new Wa();
    this.Vm.extraTouchArea = 10;
    this.Vm.extraTouchThreshold = 10;
    this.Vm.hasGestureZoom = !0;
  };
  t.set = function(a) {
    Object.assign(this, a);
    return this;
  };
  t.ku = function(a) {
    return this.Vl(a);
  };
  t.Vl = function(a) {
    uj(this, a);
    return this;
  };

  function uj(a, b) {
    var c = a instanceof W,
      d = a instanceof Q,
      e;
    for (e in b) {
      '' === e && C('Setting properties requires non-empty property names');
      var f = a,
        g = e;
      if (c || d) {
        var h = e.indexOf('.');
        if (0 < h) {
          var k = e.substring(0, h);
          if (c) f = a.fb(k);
          else if (((f = a[k]), void 0 === f || null === f))
            f = a.toolManager[k];
          ya(f)
            ? (g = e.substr(h + 1))
            : C(
                'Unable to find object named: ' +
                  k +
                  ' in ' +
                  a.toString() +
                  ' when trying to set property: ' +
                  e,
              );
        }
      }
      if ('_' !== g[0] && !Ja(f, g))
        if (d && 'ModelChanged' === g) {
          a.Cw(b[g]);
          continue;
        } else if (d && 'Changed' === g) {
          a.Ug(b[g]);
          continue;
        } else if (d && Ja(a.toolManager, g)) f = a.toolManager;
        else if (d && vj(a, g)) {
          a.wj(g, b[g]);
          continue;
        } else if (a instanceof Z && 'Changed' === g) {
          a.Ug(b[g]);
          continue;
        } else
          C(
            'Trying to set undefined property "' +
              g +
              '" on object: ' +
              f.toString(),
          );
      f[g] = b[e];
      '_' === g[0] && f instanceof Y && f.zw(g);
    }
  }
  t.mu = function() {
    if (0 === this.undoManager.transactionLevel && 0 !== this.th.count) {
      for (; 0 < this.th.count; ) {
        var a = this.th;
        this.th = new pb();
        for (a = a.iterator; a.next(); ) {
          var b = a.key;
          b.Ao(a.value);
          b.mc(!1);
        }
      }
      this.N();
    }
  };
  t.N = function(a) {
    if (void 0 === a) (this.bd = !0), this.Mb();
    else {
      var b = this.viewportBounds;
      a.v() && b.Sc(a) && ((this.bd = !0), this.Mb());
    }
    this.P('InvalidateDraw');
  };
  Q.prototype.invalidateViewport = function(a, b) {
    if (!0 !== this.bd) {
      this.bd = !0;
      var c = !0 === this.Ge('temporaryPixelRatio');
      if (
        !0 === this.Ge('viewportOptimizations') &&
        this.scrollMode !== Th &&
        this.mj.bi(0, 0, 0, 0) &&
        b.width === a.width &&
        b.height === a.height
      ) {
        var d = this.scale,
          e = Math.max(a.x, b.x),
          f = Math.max(a.y, b.y);
        d = M.allocAt(
          e,
          f,
          Math.max(0, Math.min(a.x + a.width, b.x + b.width) - e) * d,
          Math.max(0, Math.min(a.y + a.height, b.y + b.height) - f) * d,
        );
        if (!this.kr && 0 < d.width && 0 < d.height) {
          if (
            !(
              this.cd ||
              ((this.cg = !1),
              null === this.La ||
                ((this.cd = !0),
                this.mu(),
                this.documentBounds.v() ||
                  ((e = M.alloc()), wj(this, this.computeBounds(e)), M.free(e)),
                (e = this.Ha),
                null === e || e instanceof xj))
            )
          ) {
            var g = this.kc;
            f = this.Ba * g;
            var h = this.Aa * g,
              k = this.scale * g,
              l = Math.round(Math.round(b.x * k) - Math.round(a.x * k));
            b = Math.round(Math.round(b.y * k) - Math.round(a.y * k));
            k = this.Ov;
            a = this.Ux;
            k.width !== f && (k.width = f);
            k.height !== h && (k.height = h);
            a.clearRect(0, 0, f, h);
            k = 190 * g;
            var m = 70 * g,
              n = Math.max(l, 0),
              p = Math.max(b, 0),
              r = Math.floor(f - n),
              q = Math.floor(h - p);
            a.drawImage(e.Sa, n, p, r, q, 0, 0, r, q);
            sj(this.vh, this) && a.clearRect(0, 0, k, m);
            e = Ea();
            a = Ea();
            q = Math.abs(l);
            r = Math.abs(b);
            var u = 0 === n ? 0 : f - q;
            n = I.allocAt(u, 0);
            q = I.allocAt(q + u, h);
            a.push(
              new M(
                Math.min(n.x, q.x),
                Math.min(n.y, q.y),
                Math.abs(n.x - q.x),
                Math.abs(n.y - q.y),
              ),
            );
            var w = this.Bb;
            w.reset();
            w.scale(g, g);
            1 !== this.xa && w.scale(this.xa);
            g = this.pa;
            (0 !== g.x || 0 !== g.y) &&
              isFinite(g.x) &&
              isFinite(g.y) &&
              w.translate(-g.x, -g.y);
            yb(n, w);
            yb(q, w);
            e.push(
              new M(
                Math.min(n.x, q.x),
                Math.min(n.y, q.y),
                Math.abs(n.x - q.x),
                Math.abs(n.y - q.y),
              ),
            );
            u = 0 === p ? 0 : h - r;
            n.h(0, u);
            q.h(f, r + u);
            a.push(
              new M(
                Math.min(n.x, q.x),
                Math.min(n.y, q.y),
                Math.abs(n.x - q.x),
                Math.abs(n.y - q.y),
              ),
            );
            yb(n, w);
            yb(q, w);
            e.push(
              new M(
                Math.min(n.x, q.x),
                Math.min(n.y, q.y),
                Math.abs(n.x - q.x),
                Math.abs(n.y - q.y),
              ),
            );
            sj(this.vh, this) &&
              ((f = 0 < l ? 0 : -l),
              (h = 0 < b ? 0 : -b),
              n.h(f, h),
              q.h(k + f, m + h),
              a.push(
                new M(
                  Math.min(n.x, q.x),
                  Math.min(n.y, q.y),
                  Math.abs(n.x - q.x),
                  Math.abs(n.y - q.y),
                ),
              ),
              yb(n, w),
              yb(q, w),
              e.push(
                new M(
                  Math.min(n.x, q.x),
                  Math.min(n.y, q.y),
                  Math.abs(n.x - q.x),
                  Math.abs(n.y - q.y),
                ),
              ));
            I.free(n);
            I.free(q);
            Xi(this, !1, !0);
            null === this.La && C('No div specified');
            null === this.Ha && C('No canvas specified');
            if (!this.animationManager.zb && ((f = this.Zb), this.bd)) {
              qj(this);
              h = this.kc;
              f.setTransform(1, 0, 0, 1, 0, 0);
              f.clearRect(0, 0, this.Ba * h, this.Aa * h);
              f.drawImage(
                this.Ov.Sa,
                0 < l ? 0 : Math.round(-l),
                0 < b ? 0 : Math.round(-b),
              );
              l = this.pa;
              g = this.xa;
              k = Math.round(l.x * g) / g;
              m = Math.round(l.y * g) / g;
              b = this.Bb;
              b.reset();
              1 !== g && b.scale(g);
              (0 === l.x && 0 === l.y) || b.translate(-k, -m);
              f.save();
              f.beginPath();
              l = a.length;
              for (g = 0; g < l; g++)
                (k = a[g]),
                  0 !== k.width &&
                    0 !== k.height &&
                    f.rect(
                      Math.floor(k.x),
                      Math.floor(k.y),
                      Math.ceil(k.width),
                      Math.ceil(k.height),
                    );
              f.clip();
              f.setTransform(h, 0, 0, h, 0, 0);
              f.transform(b.m11, b.m12, b.m21, b.m22, b.dx, b.dy);
              f.Pc();
              b = this.Ua.s;
              l = b.length;
              this.Pd(b, l, this, this.viewportBounds);
              rj(this, f);
              f.globalAlpha = this.tb;
              for (h = 0; h < l; h++)
                if (((g = b[h]), (k = e), g.visible && 0 !== g.tb)) {
                  m = fi(g, f);
                  p = g.Bn;
                  p.length = 0;
                  n = this.scale;
                  r = M.alloc();
                  q = g.Ma.s;
                  w = q.length;
                  u = k.length;
                  for (var v = 0; v < w; v++) {
                    var z = q[v],
                      y = yj(z, z.actualBounds);
                    a: {
                      for (var A = 2 / n, B = 4 / n, F = 0; F < u; F++) {
                        var L = k[F];
                        if (
                          0 !== L.width &&
                          0 !== L.height &&
                          y.Hu(L.x - A, L.y - A, L.width + B, L.height + B)
                        ) {
                          y = !0;
                          break a;
                        }
                      }
                      y = !1;
                    }
                    y && g.$h(f, z, this, p, n, r, !0);
                  }
                  M.free(r);
                  f.globalAlpha = m;
                }
              f.restore();
              f.Oc(!0);
              this.vh && sj(this.vh, this) && this.Qs();
              this.bd = this.Ui = !1;
              this.Jo();
            }
            Ga(e);
            Ga(a);
            this.cd = !1;
          }
        } else this.nd();
        M.free(d);
        c && (Ge(this), this.nd(), Ye(this, !0));
      } else c ? (Ge(this), this.nd(), Ye(this, !0)) : this.nd();
    }
  };

  function Wi(a) {
    !1 === a.Ti && (a.Ti = !0);
  }

  function Ri(a) {
    !1 === a.Ui && (a.Ui = !0);
  }

  function qj(a) {
    !1 !== a.Wm && ((a.Wm = !1), zj(a, a.Ba, a.Aa));
  }

  function zj(a, b, c) {
    Ci(a);
    var d = a.kc;
    a.Ha.resize(b * d, c * d, b, c) && ((a.bd = !0), a.Zb.Oc(!0));
  }

  function Oi(a) {
    var b = a.Ha;
    if (null === b || a.Zn.v()) return !0;
    var c = a.Ba,
      d = a.Aa,
      e = a.viewportBounds;
    if (!a.viewportBounds.v()) return !0;
    var f = e.x,
      g = e.y,
      h = e.width,
      k = e.height,
      l = a.Qt,
      m = a.Nt,
      n = a.La,
      p = !1,
      r = a.Of ? a.Ab : 0,
      q = a.We ? a.Ab : 0,
      u = n.clientWidth || c + r,
      w = n.clientHeight || d + q;
    if (u !== c + r || w !== d + q)
      (a.Of = !1),
        (a.We = !1),
        (q = r = 0),
        (a.Ba = u),
        (a.Aa = w),
        (p = a.Wm = !0),
        Ci(a);
    if (!(p || a.Of || a.We || a.Tm || a.Um)) return !0;
    a.Ti = !1;
    var v = a.documentBounds,
      z = 0,
      y = 0,
      A = 0,
      B = 0;
    n = e.width;
    var F = e.height,
      L = a.mj;
    a.contentAlignment.pb()
      ? (v.width > n && ((z = L.left), (y = L.right)),
        v.height > F && ((A = L.top), (B = L.bottom)))
      : ((z = L.left), (y = L.right), (A = L.top), (B = L.bottom));
    L = v.width + z + y;
    var S = v.height + A + B;
    z = v.x - z;
    var R = e.x;
    y = v.right + y;
    var P = e.right + r;
    A = v.y - A;
    var H = e.y;
    v = v.bottom + B;
    B = e.bottom + q;
    var da = '1px',
      X = '1px';
    e = a.scale;
    u = L > u / e;
    w = S > w / e;
    a.scrollMode === Rh &&
      (u || w) &&
      (u &&
        a.hasHorizontalScrollbar &&
        a.allowHorizontalScroll &&
        ((u = 1),
        z + 1 < R && (u = Math.max((R - z) * e + a.Ba, u)),
        y > P + 1 && (u = Math.max((y - P) * e + a.Ba, u)),
        n + r + 1 < L && (u = Math.max((L - n) * e + a.Ba, u)),
        (da = u.toString() + 'px')),
      w &&
        a.hasVerticalScrollbar &&
        a.allowVerticalScroll &&
        ((u = 1),
        A + 1 < H && (u = Math.max((H - A) * e + a.Aa, u)),
        v > B + 1 && (u = Math.max((v - B) * e + a.Aa, u)),
        F + q + 1 < S && (u = Math.max((S - F) * e + a.Aa, u)),
        (X = u.toString() + 'px')));
    u = '1px' !== da;
    w = '1px' !== X;
    (u && w) ||
      (!u && !w) ||
      (w && (P -= a.Ab),
      u && (B -= a.Ab),
      L < n + r ||
        !a.hasHorizontalScrollbar ||
        !a.allowHorizontalScroll ||
        ((r = 1),
        z + 1 < R && (r = Math.max((R - z) * e + a.Ba, r)),
        y > P + 1 && (r = Math.max((y - P) * e + a.Ba, r)),
        n + 1 < L && (r = Math.max((L - n) * e + a.Ba, r)),
        (da = r.toString() + 'px')),
      (u = '1px' !== da),
      (r = a.Aa),
      u !== a.We && (r = u ? a.Aa - a.Ab : a.Aa + a.Ab),
      S < F + q ||
        !a.hasVerticalScrollbar ||
        !a.allowVerticalScroll ||
        ((q = 1),
        A + 1 < H && (q = Math.max((H - A) * e + r, q)),
        v > B + 1 && (q = Math.max((v - B) * e + r, q)),
        F + 1 < S && (q = Math.max((S - F) * e + r, q)),
        (X = q.toString() + 'px')),
      (w = '1px' !== X));
    if (a.Nq && u === a.We && w === a.Of)
      return (c === a.Ba && d === a.Aa) || a.nd(), !1;
    u !== a.We &&
      ('1px' === da ? (a.Aa = a.Aa + a.Ab) : (a.Aa = Math.max(a.Aa - a.Ab, 1)),
      (p = !0));
    a.We = u;
    m.style.width = da;
    w !== a.Of &&
      ('1px' === X ? (a.Ba = a.Ba + a.Ab) : (a.Ba = Math.max(a.Ba - a.Ab, 1)),
      (p = !0),
      a.$m &&
        ((q = I.alloc()),
        w
          ? ((b.style.left = a.Ab + 'px'),
            (a.position = q.h(a.pa.x + a.Ab / a.scale, a.pa.y)))
          : ((b.style.left = '0px'),
            (a.position = q.h(a.pa.x - a.Ab / a.scale, a.pa.y))),
        I.free(q)));
    p && Ci(a);
    a.Of = w;
    m.style.height = X;
    a.Mt = !0;
    p && (a.Wm = !0);
    b = l.scrollLeft;
    a.hasHorizontalScrollbar &&
      a.allowHorizontalScroll &&
      (n + 1 < L
        ? (b = (a.position.x - z) * e)
        : z + 1 < R
        ? (b = l.scrollWidth - l.clientWidth)
        : y > P + 1 && (b = a.position.x * e));
    if (a.$m)
      switch (a.Ht) {
        case 'negative':
          b = -(l.scrollWidth - b - l.clientWidth);
          break;
        case 'reverse':
          b = l.scrollWidth - b - l.clientWidth;
      }
    l.scrollLeft = b;
    a.hasVerticalScrollbar &&
      a.allowVerticalScroll &&
      (F + 1 < S
        ? (l.scrollTop = (a.position.y - A) * e)
        : A + 1 < H
        ? (l.scrollTop = l.scrollHeight - l.clientHeight)
        : v > B + 1 && (l.scrollTop = a.position.y * e));
    u = a.Ba;
    w = a.Aa;
    l.style.width = u + (a.Of ? a.Ab : 0) + 'px';
    l.style.height = w + (a.We ? a.Ab : 0) + 'px';
    return c !== u || d !== w || a.animationManager.zb
      ? ((c = M.allocAt(f, g, h, k)),
        a.onViewportBoundsChanged(c, a.viewportBounds, e, p),
        M.free(c),
        !1)
      : !0;
  }
  t = Q.prototype;
  t.add = function(a) {
    var b = a.diagram;
    if (
      b !== this &&
      (null !== b &&
        C(
          'Cannot add part ' +
            a.toString() +
            ' to ' +
            this.toString() +
            '. It is already a part of ' +
            b.toString(),
        ),
      (b = this.Ij(a.layerName)),
      null === b && (b = this.Ij('')),
      null === b &&
        C(
          'Cannot add a Part when unable find a Layer named "' +
            a.layerName +
            '" and there is no default Layer',
        ),
      a.layer !== b)
    ) {
      var c = b.ii(99999999, a, a.diagram === this);
      0 <= c && this.bb(fe, 'parts', b, null, a, null, c);
      b.isTemporary || this.Va();
      a.D(1);
      c = a.layerChanged;
      null !== c && c(a, null, b);
    }
  };
  t.ii = function(a) {
    this.partManager.ii(a);
    var b = this;
    Aj(a, function(a) {
      Bj(b, a);
    });
    (a instanceof ue || (a instanceof qf && null !== a.placeholder)) && a.w();
    null !== a.data &&
      Aj(a, function(a) {
        Cj(b.partManager, a);
      });
    (!0 !== oj(a) && !0 !== pj(a)) || this.te.add(a);
    Dj(a, !0, this);
    Ej(a)
      ? (a.actualBounds.v() && this.N(yj(a, a.actualBounds)), this.Va())
      : a.isVisible() && a.actualBounds.v() && this.N(yj(a, a.actualBounds));
    this.Mb();
  };
  t.lc = function(a) {
    a.zj();
    this.partManager.lc(a);
    var b = this;
    null !== a.data &&
      Aj(a, function(a) {
        Fj(b.partManager, a, b);
      });
    this.te.remove(a);
    Ej(a)
      ? (a.actualBounds.v() && this.N(yj(a, a.actualBounds)), this.Va())
      : a.isVisible() && a.actualBounds.v() && this.N(yj(a, a.actualBounds));
    this.Mb();
  };
  t.remove = function(a) {
    Gj(this, a, !0);
  };

  function Gj(a, b, c) {
    var d = b.layer;
    null !== d &&
      d.diagram === a &&
      ((b.isSelected = !1),
      (b.isHighlighted = !1),
      b.D(2),
      c && b.Fj(),
      (c = d.lc(-1, b, !1)),
      0 <= c && a.bb(ge, 'parts', d, b, null, c, null),
      (a = b.layerChanged),
      null !== a && a(b, d, null));
  }
  t.hs = function(a, b) {
    void 0 === b && (b = !1);
    if (za(a))
      for (var c = a.length, d = 0; d < c; d++) {
        var e = a[d];
        (b && !e.canDelete()) || this.remove(e);
      }
    else
      for (c = new G(), c.addAll(a), a = c.iterator; a.next(); )
        (c = a.value), (b && !c.canDelete()) || this.remove(c);
  };
  t.Ej = function(a, b, c) {
    void 0 === c && (c = !1);
    return this.partManager.Ej(a, b, c);
  };
  Q.prototype.moveParts = function(a, b, c, d) {
    void 0 === c && (c = !1);
    void 0 === d && (d = Hj(this));
    if (null !== this.toolManager) {
      var e = new pb();
      if (null !== a)
        if (za(a)) for (var f = 0; f < a.length; f++) Ij(this, e, a[f], c, d);
        else for (a = a.iterator; a.next(); ) Ij(this, e, a.value, c, d);
      else {
        for (a = this.parts; a.next(); ) Ij(this, e, a.value, c, d);
        for (a = this.nodes; a.next(); ) Ij(this, e, a.value, c, d);
        for (a = this.links; a.next(); ) Ij(this, e, a.value, c, d);
      }
      ef(this, e, b, d, c);
    }
  };

  function Ij(a, b, c, d, e, f) {
    if (
      !b.contains(c) &&
      (void 0 === f && (f = !1), !d || f || c.canMove() || c.canCopy())
    )
      if ((void 0 === e && (e = Hj(a)), c instanceof V)) {
        b.add(c, a.Fd(e, c, c.location));
        if (c instanceof qf && (null !== c.placeholder || e.dragsMembers))
          for (f = c.memberParts; f.next(); )
            Ij(a, b, f.value, d, e, e.groupsAlwaysMove);
        for (f = c.linksConnected; f.next(); ) {
          var g = f.value;
          if (!b.contains(g)) {
            var h = g.fromNode,
              k = g.toNode;
            null !== h &&
              b.contains(h) &&
              null !== k &&
              b.contains(k) &&
              Ij(a, b, g, d, e);
          }
        }
        if (e.dragsTree) for (c = c.Au(); c.next(); ) Ij(a, b, c.value, d, e);
      } else if (c instanceof T)
        for (b.add(c, a.Fd(e, c)), c = c.labelNodes; c.next(); )
          Ij(a, b, c.value, d, e);
      else c instanceof ue || b.add(c, a.Fd(e, c, c.location));
  }

  function ef(a, b, c, d, e) {
    if (null !== b && 0 !== b.count) {
      var f = I.alloc(),
        g = I.alloc();
      g.assign(c);
      isNaN(g.x) && (g.x = 0);
      isNaN(g.y) && (g.y = 0);
      (c = a.jr) || He(a, b);
      for (var h = Ea(), k = Ea(), l = b.iterator, m = I.alloc(); l.next(); ) {
        var n = l.key,
          p = l.value;
        if (n.Tc()) {
          var r = Jj(a, n, b);
          if (null !== r) h.push(new Kj(n, p, r));
          else if (!e || n.canMove())
            (r = p.point),
              f.assign(r),
              a.computeMove(n, f.add(g), d, m),
              (n.location = m),
              void 0 === p.shifted && (p.shifted = new I()),
              p.shifted.assign(m.je(r));
        } else l.key instanceof T && k.push(l.ra);
      }
      I.free(m);
      e = h.length;
      for (l = 0; l < e; l++)
        (n = h[l]),
          f.assign(n.info.point),
          void 0 === n.Eu.shifted && (n.Eu.shifted = new I()),
          (n.node.location = f.add(n.Eu.shifted));
      e = I.alloc();
      l = I.alloc();
      n = k.length;
      for (p = 0; p < n; p++) {
        var q = k[p];
        r = q.key;
        if (r instanceof T)
          if (r.suspendsRouting) {
            r.ef = null;
            m = r.fromNode;
            var u = r.toNode;
            if (null !== a.draggedLink && d.dragsLink)
              if (((u = q.value.point), null === r.dragComputation))
                b.add(r, a.Fd(d, r, g)), cf(r, g.x - u.x, g.y - u.y);
              else {
                q = I.allocAt(0, 0);
                (m = r.i(0)) && m.v() && q.assign(m);
                var w = (m = I.alloc()
                  .assign(q)
                  .add(g));
                d.isGridSnapEnabled &&
                  (d.isGridSnapRealtime || a.lastInput.up) &&
                  ((w = I.alloc()), Ag(a, r, m, w, d));
                m.assign(r.dragComputation(r, m, w)).je(q);
                b.add(r, a.Fd(d, r, m));
                cf(r, m.x - u.x, m.y - u.y);
                I.free(q);
                I.free(m);
                w !== m && I.free(w);
              }
            else
              null !== m &&
                (e.assign(m.location),
                (w = b.I(m)),
                null !== w && e.je(w.point)),
                null !== u &&
                  (l.assign(u.location),
                  (w = b.I(u)),
                  null !== w && l.je(w.point)),
                null !== m && null !== u
                  ? e.$a(l)
                    ? ((m = q.value.point),
                      (u = f),
                      u.assign(e),
                      u.je(m),
                      b.add(r, a.Fd(d, r, e)),
                      cf(r, u.x, u.y))
                    : ((r.suspendsRouting = !1), r.ab())
                  : ((q = q.value.point),
                    (m = null !== m ? e : null !== u ? l : g),
                    b.add(r, a.Fd(d, r, m)),
                    cf(r, m.x - q.x, m.y - q.y));
          } else if (null === r.fromNode || null === r.toNode)
            (m = q.value.point),
              b.add(r, a.Fd(d, r, g)),
              cf(r, g.x - m.x, g.y - m.y);
      }
      I.free(f);
      I.free(g);
      I.free(e);
      I.free(l);
      Ga(h);
      Ga(k);
      c || (mh(a), Ve(a, b));
    }
  }
  Q.prototype.computeMove = function(a, b, c, d) {
    void 0 === d && (d = new I());
    d.assign(b);
    if (null === a) return d;
    var e = b,
      f = c.isGridSnapEnabled;
    f &&
      (c.isGridSnapRealtime || this.lastInput.up) &&
      ((e = I.alloc()), Ag(this, a, b, e, c));
    c = null !== a.dragComputation ? a.dragComputation(a, b, e) : e;
    var g = a.minLocation,
      h = g.x;
    isNaN(h) && (h = f ? Math.round(1e3 * a.location.x) / 1e3 : a.location.x);
    g = g.y;
    isNaN(g) && (g = f ? Math.round(1e3 * a.location.y) / 1e3 : a.location.y);
    var k = a.maxLocation,
      l = k.x;
    isNaN(l) && (l = f ? Math.round(1e3 * a.location.x) / 1e3 : a.location.x);
    k = k.y;
    isNaN(k) && (k = f ? Math.round(1e3 * a.location.y) / 1e3 : a.location.y);
    d.h(Math.max(h, Math.min(c.x, l)), Math.max(g, Math.min(c.y, k)));
    e !== b && I.free(e);
    return d;
  };

  function Hj(a) {
    var b = a.toolManager.findTool('Dragging');
    return null !== b ? b.dragOptions : a.Em;
  }

  function Ag(a, b, c, d, e) {
    void 0 === e && (e = Hj(a));
    d.assign(c);
    if (null !== b) {
      var f = a.grid;
      b = e.gridSnapCellSize;
      a = b.width;
      b = b.height;
      var g = e.gridSnapOrigin,
        h = g.x;
      g = g.y;
      e = e.gridSnapCellSpot;
      if (null !== f) {
        var k = f.gridCellSize;
        isNaN(a) && (a = k.width);
        isNaN(b) && (b = k.height);
        f = f.gridOrigin;
        isNaN(h) && (h = f.x);
        isNaN(g) && (g = f.y);
      }
      f = I.allocAt(0, 0);
      f.pi(0, 0, a, b, e);
      J.so(c.x, c.y, h + f.x, g + f.y, a, b, d);
      I.free(f);
    }
  }

  function He(a, b) {
    if (null !== b)
      for (a.jr = !0, a = b.iterator; a.next(); )
        (b = a.key), b instanceof T && (b.suspendsRouting = !0);
  }

  function Ve(a, b) {
    if (null !== b) {
      for (b = b.iterator; b.next(); ) {
        var c = b.key;
        c instanceof T && ((c.suspendsRouting = !1), Lj(c) && c.ab());
      }
      a.jr = !1;
    }
  }

  function Jj(a, b, c) {
    b = b.containingGroup;
    if (null !== b) {
      a = Jj(a, b, c);
      if (null !== a) return a;
      a = c.I(b);
      if (null !== a) return a;
    }
    return null;
  }
  t = Q.prototype;
  t.Fd = function(a, b, c) {
    if (void 0 === c) return new Te(qb);
    var d = a.isGridSnapEnabled;
    a.groupsSnapMembers || null === b.containingGroup || (d = !1);
    return d
      ? new Te(new I(Math.round(1e3 * c.x) / 1e3, Math.round(1e3 * c.y) / 1e3))
      : new Te(c.copy());
  };

  function Mj(a, b, c) {
    null !== b.diagram &&
      b.diagram !== a &&
      C('Cannot share a Layer with another Diagram: ' + b + ' of ' + b.diagram);
    null === c
      ? null !== b.diagram &&
        C('Cannot add an existing Layer to this Diagram again: ' + b)
      : (c.diagram !== a &&
          C(
            'Existing Layer must be in this Diagram: ' +
              c +
              ' not in ' +
              c.diagram,
          ),
        b === c && C('Cannot move a Layer before or after itself: ' + b));
    if (b.diagram !== a) {
      b = b.name;
      a = a.Ua;
      c = a.count;
      for (var d = 0; d < c; d++)
        a.K(d).name === b &&
          C(
            "Cannot add Layer with the name '" +
              b +
              "'; a Layer with the same name is already present in this Diagram.",
          );
    }
  }
  t.pl = function(a) {
    Mj(this, a, null);
    a.Le(this);
    var b = this.Ua,
      c = b.count - 1;
    if (!a.isTemporary) for (; 0 <= c && b.K(c).isTemporary; ) c--;
    b.Cb(c + 1, a);
    null !== this.ac && this.bb(fe, 'layers', this, null, a, null, c + 1);
    this.N();
    this.Va();
    return this;
  };
  t.Aw = function(a, b) {
    Mj(this, a, b);
    a.Le(this);
    var c = this.Ua,
      d = c.indexOf(a);
    0 <= d &&
      (c.remove(a),
      null !== this.ac && this.bb(ge, 'layers', this, a, null, d, null));
    var e = c.count,
      f;
    for (f = 0; f < e; f++)
      if (c.K(f) === b) {
        c.Cb(f, a);
        break;
      }
    null !== this.ac && this.bb(fe, 'layers', this, null, a, null, f);
    this.N();
    0 > d && this.Va();
    return this;
  };
  t.jy = function(a, b) {
    Mj(this, a, b);
    a.Le(this);
    var c = this.Ua,
      d = c.indexOf(a);
    0 <= d &&
      (c.remove(a),
      null !== this.ac && this.bb(ge, 'layers', this, a, null, d, null));
    var e = c.count,
      f;
    for (f = 0; f < e; f++)
      if (c.K(f) === b) {
        c.Cb(f + 1, a);
        break;
      }
    null !== this.ac && this.bb(fe, 'layers', this, null, a, null, f + 1);
    this.N();
    0 > d && this.Va();
    return this;
  };
  t.Rz = function(a) {
    a.diagram !== this &&
      C(
        'Cannot remove a Layer from another Diagram: ' + a + ' of ' + a.diagram,
      );
    if ('' !== a.name) {
      var b = this.Ua,
        c = b.indexOf(a);
      if (b.remove(a)) {
        for (b = a.Ma.copy().iterator; b.next(); ) {
          var d = b.value,
            e = d.layerName;
          e !== a.name ? (d.layerName = e) : (d.layerName = '');
        }
        null !== this.ac && this.bb(ge, 'layers', this, a, null, c, null);
        this.N();
        this.Va();
      }
    }
  };
  t.Ij = function(a) {
    for (var b = this.layers; b.next(); ) {
      var c = b.value;
      if (c.name === a) return c;
    }
    return null;
  };
  t.Cw = function(a) {
    null === this.bf && (this.bf = new E());
    this.bf.add(a);
    this.model.Ug(a);
    return this;
  };
  t.Tz = function(a) {
    null !== this.bf &&
      (this.bf.remove(a), 0 === this.bf.count && (this.bf = null));
    this.model.ak(a);
  };
  t.Ug = function(a) {
    null === this.qg && (this.qg = new E());
    this.qg.add(a);
    return this;
  };
  t.ak = function(a) {
    null !== this.qg &&
      (this.qg.remove(a), 0 === this.qg.count && (this.qg = null));
  };
  t.Cr = function(a) {
    this.skipsUndoManager ||
      this.model.skipsUndoManager ||
      this.model.undoManager.Fu(a);
    a.change !== ee && (this.isModified = !0);
    if (null !== this.qg)
      for (var b = this.qg, c = b.length, d = 0; d < c; d++) b.K(d)(a);
  };
  t.bb = function(a, b, c, d, e, f, g) {
    void 0 === f && (f = null);
    void 0 === g && (g = null);
    var h = new ce();
    h.diagram = this;
    h.change = a;
    h.propertyName = b;
    h.object = c;
    h.oldValue = d;
    h.oldParam = f;
    h.newValue = e;
    h.newParam = g;
    this.Cr(h);
  };
  t.g = function(a, b, c, d, e) {
    this.bb(de, a, this, b, c, d, e);
  };
  Q.prototype.changeState = function(a, b) {
    if (null !== a && a.diagram === this) {
      var c = this.skipsModelSourceBindings;
      try {
        this.skipsModelSourceBindings = !0;
        var d = a.change;
        if (d === de) {
          var e = a.object;
          Nj(e, a.propertyName, a.I(b));
          if (e instanceof Y) {
            var f = e.part;
            null !== f && f.Rb();
          }
          this.isModified = !0;
        } else if (d === fe) {
          var g = a.object,
            h = a.newParam,
            k = a.newValue;
          if (g instanceof W)
            if ('number' === typeof h && k instanceof Y) {
              b ? g.lc(h) : g.Cb(h, k);
              var l = g.part;
              null !== l && l.Rb();
            } else
              'number' === typeof h &&
                k instanceof Oj &&
                (k.isRow ? Pj(g, h, b ? void 0 : k) : Qj(g, h, b ? void 0 : k));
          else if (g instanceof di) {
            var m = !0 === a.oldParam;
            'number' === typeof h &&
              k instanceof U &&
              (b
                ? ((k.isSelected = !1),
                  (k.isHighlighted = !1),
                  k.Rb(),
                  g.lc(m ? h : -1, k, m))
                : g.ii(h, k, m));
          } else
            g instanceof Q
              ? 'number' === typeof h &&
                k instanceof di &&
                (b ? this.Ua.mb(h) : (k.Le(this), this.Ua.Cb(h, k)))
              : C('unknown ChangedEvent.Insert object: ' + a.toString());
          this.isModified = !0;
        } else if (d === ge) {
          var n = a.object,
            p = a.oldParam,
            r = a.oldValue;
          if (n instanceof W)
            'number' === typeof p && r instanceof Y
              ? b
                ? n.Cb(p, r)
                : n.lc(p)
              : 'number' === typeof p &&
                r instanceof Oj &&
                (r.isRow ? Pj(n, p, b ? r : void 0) : Qj(n, p, b ? r : void 0));
          else if (n instanceof di) {
            var q = !0 === a.newParam;
            'number' === typeof p &&
              r instanceof U &&
              (b
                ? 0 > n.Ma.indexOf(r) && n.ii(p, r, q)
                : ((r.isSelected = !1),
                  (r.isHighlighted = !1),
                  r.Rb(),
                  n.lc(q ? p : -1, r, q)));
          } else
            n instanceof Q
              ? 'number' === typeof p &&
                r instanceof di &&
                (b ? (r.Le(this), this.Ua.Cb(p, r)) : this.Ua.mb(p))
              : C('unknown ChangedEvent.Remove object: ' + a.toString());
          this.isModified = !0;
        } else d !== ee && C('unknown ChangedEvent: ' + a.toString());
      } finally {
        this.skipsModelSourceBindings = c;
      }
    }
  };
  Q.prototype.Da = function(a) {
    return this.undoManager.Da(a);
  };
  Q.prototype.eb = function(a) {
    return this.undoManager.eb(a);
  };
  Q.prototype.Bf = function() {
    return this.undoManager.Bf();
  };
  Q.prototype.commit = function(a, b) {
    void 0 === b && (b = '');
    var c = this.skipsUndoManager;
    null === b && ((this.skipsUndoManager = !0), (b = ''));
    this.undoManager.Da(b);
    var d = !1;
    try {
      a(this), (d = !0);
    } finally {
      d ? this.undoManager.eb(b) : this.undoManager.Bf(),
        (this.skipsUndoManager = c);
    }
  };
  Q.prototype.updateAllTargetBindings = function(a) {
    this.partManager.updateAllTargetBindings(a);
  };
  Q.prototype.Uo = function() {
    this.partManager.Uo();
  };

  function Rj(a, b, c) {
    var d = a.animationManager;
    if (a.wb || a.cd)
      (a.xa = c), Ci(a), d.zb && (wh(d) || d.Wd.add(d.H, 'scale', b, a.xa));
    else if (null === a.Ha) (a.xa = c), Ci(a);
    else {
      a.wb = !0;
      var e = a.viewportBounds.copy(),
        f = a.Ba,
        g = a.Aa;
      e.width = a.Ba / b;
      e.height = a.Aa / b;
      var h = a.zoomPoint.x,
        k = a.zoomPoint.y,
        l = a.contentAlignment;
      isNaN(h) &&
        (l.Uc()
          ? l.xf(Ec)
            ? (h = 0)
            : l.xf(Gc) && (h = f - 1)
          : (h = l.pb() ? l.x * (f - 1) : f / 2));
      isNaN(k) &&
        (l.Uc()
          ? l.xf(Dc)
            ? (k = 0)
            : l.xf(Hc) && (k = g - 1)
          : (k = l.pb() ? l.y * (g - 1) : g / 2));
      null === a.scaleComputation ||
        a.animationManager.defaultAnimation.isAnimating ||
        (c = a.scaleComputation(a, c));
      c < a.minScale && (c = a.minScale);
      c > a.maxScale && (c = a.maxScale);
      f = I.allocAt(a.pa.x + h / b - h / c, a.pa.y + k / b - k / c);
      a.position = f;
      I.free(f);
      a.xa = c;
      Ci(a);
      a.onViewportBoundsChanged(e, a.viewportBounds, b, !1);
      a.wb = !1;
      Ti(a, !1);
      d.zb && (wh(d) || d.Wd.add(d.H, 'scale', b, a.xa));
      a.N();
      Wi(a);
    }
  }
  Q.prototype.onViewportBoundsChanged = function(a, b, c, d) {
    if (!a.C(b)) {
      void 0 === d && (d = !1);
      d || Wi(this);
      Ri(this);
      var e = this.layout;
      null === e ||
        !e.isViewportSized ||
        this.autoScale !== rh ||
        d ||
        (a.width === b.width && a.height === b.height) ||
        e.D();
      e = this.currentTool;
      !0 === this.Kk &&
        e instanceof La &&
        ((this.lastInput.documentPoint = this.rs(this.lastInput.viewPoint)),
        ye(e, this));
      this.wb || this.invalidateViewport(a, b);
      jj(this);
      this.kd.scale = c;
      this.kd.position.x = a.x;
      this.kd.position.y = a.y;
      this.kd.bounds.assign(a);
      this.kd.Hw.width = Math.round(a.width * c);
      this.kd.Hw.height = Math.round(a.height * c);
      this.kd.sx.width = this.Ba;
      this.kd.sx.height = this.Aa;
      this.kd.lx = d;
      this.P('ViewportBoundsChanged', this.kd, a);
      this.isVirtualized &&
        this.links.each(function(a) {
          a.isAvoiding && a.actualBounds.Sc(b) && a.ab();
        });
    }
  };

  function jj(a, b) {
    var c = a.Zd;
    if (null !== c && c.visible) {
      for (
        var d = K.alloc(), e = 1, f = 1, g = c.R.s, h = g.length, k = 0;
        k < h;
        k++
      ) {
        var l = g[k],
          m = Math.abs(l.interval);
        2 > m ||
          (Sj(l.figure)
            ? (f = (f * m) / J.Xw(f, m))
            : (e = (e * m) / J.Xw(e, m)));
      }
      g = c.gridCellSize;
      d.h(f * g.width, e * g.height);
      if (void 0 !== b) (e = b.width), (f = b.height), (a = b.x), (g = b.y);
      else {
        b = M.alloc();
        a = a.viewportBounds;
        b.h(a.x, a.y, a.width, a.height);
        if (!b.v()) {
          M.free(b);
          return;
        }
        e = b.width;
        f = b.height;
        a = b.x;
        g = b.y;
        M.free(b);
      }
      c.width = e + 2 * d.width;
      c.height = f + 2 * d.height;
      b = I.alloc();
      J.so(a, g, 0, 0, d.width, d.height, b);
      b.offset(-d.width, -d.height);
      K.free(d);
      c.part.location = b;
      I.free(b);
    }
  }
  Q.prototype.clearSelection = function(a) {
    void 0 === a && (a = !1);
    var b = this.selection;
    if (0 !== b.count) {
      a || this.P('ChangingSelection', b);
      for (var c = b.Ea(), d = c.length, e = 0; e < d; e++)
        c[e].isSelected = !1;
      b.ja();
      b.clear();
      b.freeze();
      a || this.P('ChangedSelection', b);
    }
  };
  Q.prototype.select = function(a) {
    null !== a &&
      a.diagram === this &&
      (!a.isSelected || 1 < this.selection.count) &&
      (this.P('ChangingSelection', this.selection),
      this.clearSelection(!0),
      (a.isSelected = !0),
      this.P('ChangedSelection', this.selection));
  };
  Q.prototype.Yz = function(a) {
    this.P('ChangingSelection', this.selection);
    this.clearSelection(!0);
    if (za(a))
      for (var b = a.length, c = 0; c < b; c++) {
        var d = a[c];
        d instanceof U ||
          C(
            'Diagram.selectCollection given something that is not a Part: ' + d,
          );
        d.isSelected = !0;
      }
    else
      for (a = a.iterator; a.next(); )
        (b = a.value),
          b instanceof U ||
            C(
              'Diagram.selectCollection given something that is not a Part: ' +
                b,
            ),
          (b.isSelected = !0);
    this.P('ChangedSelection', this.selection);
  };
  Q.prototype.clearHighlighteds = function() {
    var a = this.highlighteds;
    if (0 < a.count) {
      for (var b = a.Ea(), c = b.length, d = 0; d < c; d++)
        b[d].isHighlighted = !1;
      a.ja();
      a.clear();
      a.freeze();
    }
  };
  t = Q.prototype;
  t.qz = function(a) {
    null !== a &&
      a.diagram === this &&
      (!a.isHighlighted || 1 < this.highlighteds.count) &&
      (this.clearHighlighteds(), (a.isHighlighted = !0));
  };
  t.rz = function(a) {
    a = new G().addAll(a);
    for (var b = this.highlighteds.copy().Ko(a).iterator; b.next(); )
      b.value.isHighlighted = !1;
    for (a = a.iterator; a.next(); )
      (b = a.value),
        b instanceof U ||
          C(
            'Diagram.highlightCollection given something that is not a Part: ' +
              b,
          ),
        (b.isHighlighted = !0);
  };
  t.scroll = function(a, b, c) {
    void 0 === c && (c = 1);
    var d = 'up' === b || 'down' === b,
      e = 0;
    if ('pixel' === a) e = c;
    else if ('line' === a)
      e =
        c *
        (d ? this.scrollVerticalLineChange : this.scrollHorizontalLineChange);
    else if ('page' === a)
      (a = d ? this.viewportBounds.height : this.viewportBounds.width),
        (a *= this.scale),
        0 !== a &&
          (e =
            c *
            Math.max(
              a -
                (d
                  ? this.scrollVerticalLineChange
                  : this.scrollHorizontalLineChange),
              0,
            ));
    else {
      if ('document' === a) {
        e = this.documentBounds;
        c = this.viewportBounds;
        d = I.alloc();
        'up' === b
          ? (this.position = d.h(c.x, e.y))
          : 'left' === b
          ? (this.position = d.h(e.x, c.y))
          : 'down' === b
          ? (this.position = d.h(c.x, e.bottom - c.height))
          : 'right' === b && (this.position = d.h(e.right - c.width, c.y));
        I.free(d);
        return;
      }
      C(
        "scrolling unit must be 'pixel', 'line', 'page', or 'document', not: " +
          a,
      );
    }
    e /= this.scale;
    c = this.position.copy();
    'up' === b
      ? (c.y = this.position.y - e)
      : 'down' === b
      ? (c.y = this.position.y + e)
      : 'left' === b
      ? (c.x = this.position.x - e)
      : 'right' === b
      ? (c.x = this.position.x + e)
      : C(
          "scrolling direction must be 'up', 'down', 'left', or 'right', not: " +
            b,
        );
    this.position = c;
  };
  t.bv = function(a) {
    var b = this.viewportBounds;
    b.Ee(a) ||
      ((a = a.center),
      (a.x -= b.width / 2),
      (a.y -= b.height / 2),
      (this.position = a));
  };
  t.Dr = function(a) {
    var b = this.viewportBounds;
    a = a.center;
    a.x -= b.width / 2;
    a.y -= b.height / 2;
    this.position = a;
  };
  t.Ro = function(a) {
    var b = this.Bb;
    b.reset();
    1 !== this.xa && b.scale(this.xa);
    var c = this.pa;
    (0 !== c.x || 0 !== c.y) &&
      isFinite(c.x) &&
      isFinite(c.y) &&
      b.translate(-c.x, -c.y);
    return a.copy().transform(this.Bb);
  };
  t.gA = function(a) {
    var b = this.Bb,
      c = a.x,
      d = a.y,
      e = c + a.width,
      f = d + a.height,
      g = b.m11,
      h = b.m12,
      k = b.m21,
      l = b.m22,
      m = b.dx,
      n = b.dy,
      p = c * g + d * k + m;
    b = c * h + d * l + n;
    var r = e * g + d * k + m;
    a = e * h + d * l + n;
    d = c * g + f * k + m;
    c = c * h + f * l + n;
    g = e * g + f * k + m;
    e = e * h + f * l + n;
    f = Math.min(p, r);
    p = Math.max(p, r);
    r = Math.min(b, a);
    b = Math.max(b, a);
    f = Math.min(f, d);
    p = Math.max(p, d);
    r = Math.min(r, c);
    b = Math.max(b, c);
    f = Math.min(f, g);
    p = Math.max(p, g);
    r = Math.min(r, e);
    b = Math.max(b, e);
    return new M(f, r, p - f, b - r);
  };
  t.rs = function(a) {
    var b = this.Bb;
    b.reset();
    1 !== this.xa && b.scale(this.xa);
    var c = this.pa;
    (0 !== c.x || 0 !== c.y) &&
      isFinite(c.x) &&
      isFinite(c.y) &&
      b.translate(-c.x, -c.y);
    return yb(a.copy(), this.Bb);
  };

  function Tj(a) {
    var b = a.isModified;
    a.xw !== b && ((a.xw = b), a.P('Modified'));
  }

  function Uj(a) {
    a = li.get(a);
    return null !== a ? new a() : new mi();
  }
  Q.prototype.doModelChanged = function(a) {
    var b = this;
    if (a.model === this.model) {
      var c = a.change,
        d = a.propertyName;
      if (c === ee && 'S' === d[0])
        if ('StartingFirstTransaction' === d) {
          var e = this;
          a = this.toolManager;
          a.mouseDownTools.each(function(a) {
            a.diagram = e;
          });
          a.mouseMoveTools.each(function(a) {
            a.diagram = e;
          });
          a.mouseUpTools.each(function(a) {
            a.diagram = e;
          });
          this.cd || this.Qf || ((this.xk = !0), this.Nm && (this.cg = !0));
        } else
          'StartingUndo' === d || 'StartingRedo' === d
            ? ((a = this.animationManager),
              a.defaultAnimation.isAnimating &&
                !this.skipsUndoManager &&
                a.wc(),
              this.P('ChangingSelection', this.selection))
            : 'StartedTransaction' === d &&
              ((a = this.animationManager),
              a.defaultAnimation.isAnimating &&
                !this.skipsUndoManager &&
                a.wc());
      else if (this.$) {
        this.$ = !1;
        try {
          if ('' === a.modelChange && c === ee) {
            if ('FinishedUndo' === d || 'FinishedRedo' === d)
              this.P('ChangedSelection', this.selection), mh(this);
            var f = this.animationManager;
            'RolledBackTransaction' === d && f.wc();
            this.xk = !0;
            this.nd();
            (0 !== this.undoManager.transactionLevel &&
              1 !== this.undoManager.transactionLevel) ||
              nh(f);
            'CommittedTransaction' === d &&
              this.undoManager.isJustDiscarded &&
              (this.se = Math.min(this.se, this.undoManager.historyIndex - 1));
            ('CommittedTransaction' !== d && 'RolledBackTransaction' !== d) ||
              !this.undoManager.isPendingUnmodified ||
              setTimeout(function() {
                b.isModified = !1;
              }, 1);
            var g = a.isTransactionFinished;
            g && (Tj(this), this.Zr.clear(), Ah(this.animationManager));
            if (!this.wt && g && this.lastInput.targetDiagram) {
              this.wt = !0;
              var h = this;
              ta(function() {
                h.currentTool.standardMouseOver();
                h.wt = !1;
              }, 10);
            }
          }
        } finally {
          this.$ = !0;
        }
      }
    }
  };

  function Bj(a, b) {
    b = b.R.s;
    for (var c = b.length, d = 0; d < c; d++) Vj(a, b[d]);
  }

  function Vj(a, b) {
    if (b instanceof Wj) {
      var c = b.element;
      if (null !== c && c instanceof HTMLImageElement) {
        c.sg instanceof G && c.sg.add(a);
        var d = b.vg;
        null !== d && !0 === d.Up && null !== b.diagram && b.diagram.Fn.add(b);
        if (c.Pm)
          if (((c = c.getAttribute('src') || ''), (d = a.Fg.I(c)), null === d))
            (d = []), d.push(b), a.Fg.add(c, d);
          else {
            for (a = 0; a < d.length; a++) if (d[a] === b) return;
            d.push(b);
          }
      }
    }
  }

  function Xj(a, b) {
    if (b instanceof Wj) {
      var c = b.element;
      if (
        null !== c &&
        c instanceof HTMLImageElement &&
        (c.sg instanceof G && c.sg.remove(a), Yj(c), c.Pm)
      ) {
        c = c.getAttribute('src') || '';
        var d = a.Fg.I(c);
        if (null !== d)
          for (var e = 0; e < d.length; e++)
            if (d[e] === b) {
              d.splice(e, 1);
              0 === d.length && (a.Fg.remove(c), Bi(c));
              break;
            }
      }
    }
  }
  Q.prototype.Od = function() {
    this.partManager.Od();
  };
  Q.prototype.vj = function(a, b) {
    this.Rd.vj(a, b);
  };
  Q.prototype.xj = function(a, b) {
    this.Rd.xj(a, b);
  };
  Q.prototype.findPartForKey = function(a) {
    return this.partManager.findPartForKey(a);
  };
  Q.prototype.Lb = function(a) {
    return this.partManager.Lb(a);
  };
  Q.prototype.findLinkForKey = function(a) {
    return this.partManager.findLinkForKey(a);
  };
  t = Q.prototype;
  t.Ec = function(a) {
    return this.partManager.Ec(a);
  };
  t.ci = function(a) {
    return this.partManager.ci(a);
  };
  t.Dc = function(a) {
    return this.partManager.Dc(a);
  };
  t.Jr = function(a) {
    for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
    return this.partManager.Jr.apply(
      this.partManager,
      b instanceof Array ? b : ca(ba(b)),
    );
  };
  t.Ir = function(a) {
    for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
    return this.partManager.Ir.apply(
      this.partManager,
      b instanceof Array ? b : ca(ba(b)),
    );
  };

  function Ci(a) {
    var b = a.pa,
      c = a.xa;
    a.vw.h(b.x, b.y, Math.max(a.Ba, 0) / c, Math.max(a.Aa, 0) / c);
  }

  function wj(a, b) {
    a.Si = !1;
    var c = a.wp;
    c.C(b) ||
      ((c = c.copy()),
      a.wp.assign(b),
      Ti(a, !1),
      a.P('DocumentBoundsChanged', void 0, c),
      Wi(a));
  }
  t.Za = function() {
    if (this.Si) {
      var a = M.alloc();
      wj(this, this.computeBounds(a));
      M.free(a);
    }
  };
  t.$y = function() {
    for (var a = new G(), b = this.nodes; b.next(); ) {
      var c = b.value;
      c.isTopLevel && a.add(c);
    }
    for (b = this.links; b.next(); ) (c = b.value), c.isTopLevel && a.add(c);
    return a.iterator;
  };
  t.Zy = function() {
    return this.Uh.iterator;
  };
  t.Bz = function(a) {
    mh(this);
    a && Zj(this, !0);
    this.cd ? kj(this, !1) : ((this.xk = !0), zf(this));
  };

  function Zj(a, b) {
    for (var c = a.Uh.iterator; c.next(); ) ak(a, c.value, b);
    a.layout && (b ? (a.layout.isValidLayout = !1) : a.layout.D());
  }

  function ak(a, b, c) {
    if (null !== b) {
      for (var d = b.Vk.iterator; d.next(); ) ak(a, d.value, c);
      null !== b.layout && (c ? (b.layout.isValidLayout = !1) : b.layout.D());
    }
  }

  function kj(a, b) {
    if (a.mh && !a.Ns) {
      var c = a.$;
      a.$ = !0;
      var d = a.undoManager.transactionLevel,
        e = a.layout,
        f = a.animationManager;
      try {
        0 === d && ((a.undoManager.isInternalTransaction = !0), a.Da('Layout'));
        1 >= d &&
          !f.defaultAnimation.isAnimating &&
          !f.zb &&
          (b || lh(f, 'Layout'));
        a.mh = !1;
        for (var g = a.Uh.iterator; g.next(); ) bk(a, g.value, b, d);
        e.isValidLayout ||
          (!b || e.isRealtime || null === e.isRealtime || 0 === d
            ? (e.doLayout(a), mh(a), (e.isValidLayout = !0))
            : (a.mh = !0));
      } finally {
        (b = a.undoManager.isInternalTransaction),
          0 === d &&
            (a.eb('Layout'), (a.undoManager.isInternalTransaction = !1)),
          !b || (0 !== d && 1 !== d) || nh(f),
          (a.$ = c);
      }
    }
  }

  function bk(a, b, c, d) {
    if (null !== b) {
      for (var e = b.Vk.iterator; e.next(); ) bk(a, e.value, c, d);
      e = b.layout;
      null === e ||
        e.isValidLayout ||
        (!c || e.isRealtime || 0 === d
          ? ((b.gh = !b.location.v()),
            e.doLayout(b),
            b.D(32),
            mj(a, b),
            (e.isValidLayout = !0))
          : (a.mh = !0));
    }
  }
  t.fz = function() {
    for (var a = new E(), b = this.nodes; b.next(); ) {
      var c = b.value;
      c.isTopLevel && null === c.$g() && a.add(c);
    }
    return a.iterator;
  };

  function ui(a) {
    function b(a) {
      var b = a.toLowerCase(),
        e = new E();
      c.add(a, e);
      c.add(b, e);
      d.add(a, a);
      d.add(b, a);
    }
    var c = new pb(),
      d = new pb();
    b('InitialAnimationStarting');
    b('AnimationStarting');
    b('AnimationFinished');
    b('BackgroundSingleClicked');
    b('BackgroundDoubleClicked');
    b('BackgroundContextClicked');
    b('ClipboardChanged');
    b('ClipboardPasted');
    b('DocumentBoundsChanged');
    b('ExternalObjectsDropped');
    b('GainedFocus');
    b('InitialLayoutCompleted');
    b('LayoutCompleted');
    b('LinkDrawn');
    b('LinkRelinked');
    b('LinkReshaped');
    b('LostFocus');
    b('Modified');
    b('ObjectSingleClicked');
    b('ObjectDoubleClicked');
    b('ObjectContextClicked');
    b('PartCreated');
    b('PartResized');
    b('PartRotated');
    b('SelectionMoved');
    b('SelectionCopied');
    b('SelectionDeleting');
    b('SelectionDeleted');
    b('SelectionGrouped');
    b('SelectionUngrouped');
    b('ChangingSelection');
    b('ChangedSelection');
    b('SubGraphCollapsed');
    b('SubGraphExpanded');
    b('TextEdited');
    b('TreeCollapsed');
    b('TreeExpanded');
    b('ViewportBoundsChanged');
    b('InvalidateDraw');
    a.Nv = c;
    a.Mv = d;
  }

  function vj(a, b) {
    var c = a.Mv.I(b);
    return null !== c ? c : a.Mv.I(b.toLowerCase());
  }

  function ck(a, b) {
    var c = a.Nv.I(b);
    if (null !== c) return c;
    c = a.Nv.I(b.toLowerCase());
    if (null !== c) return c;
    C('Unknown DiagramEvent name: ' + b);
  }
  t.wj = function(a, b) {
    a = ck(this, a);
    null !== a && a.add(b);
    return this;
  };
  t.Il = function(a, b) {
    a = ck(this, a);
    null !== a && a.remove(b);
  };
  t.P = function(a, b, c) {
    var d = ck(this, a),
      e = new be();
    e.diagram = this;
    a = vj(this, a);
    null !== a && (e.name = a);
    void 0 !== b && (e.subject = b);
    void 0 !== c && (e.parameter = c);
    b = d.length;
    if (1 === b) d.K(0)(e);
    else if (0 !== b) for (d = d.Ea(), c = 0; c < b; c++) (0, d[c])(e);
  };

  function dk(a) {
    if (a.animationManager.isTicking) return !1;
    var b = a.currentTool;
    return b === a.toolManager.findTool('Dragging')
      ? !a.jr || b.isComplexRoutingRealtime
      : !0;
  }
  t.Pj = function(a, b) {
    return ek(this, !1, null, b || null).Pj(a.x, a.y, a.width, a.height);
  };
  Q.prototype.computeOccupiedArea = function(a) {
    return this.isVirtualized
      ? this.viewportBounds.copy()
      : this.Si
      ? Si(this, a)
      : a.assign(this.documentBounds);
  };

  function ek(a, b, c, d) {
    var e = a.Qh;
    null === e && (a.Qh = e = new fk(a.avoidanceCellSize));
    if (e.Sr || e.group !== c || e.Hx !== d) {
      e.mx = Math.max(
        e.ps + 1,
        Math.floor(a.avoidanceLimit / a.avoidanceCellSize.width),
      );
      e.nx = Math.max(
        e.ps + 1,
        Math.floor(a.avoidanceLimit / a.avoidanceCellSize.height),
      );
      null !== c && (c = gk(a, c));
      if (null === c) {
        b = M.alloc();
        a.computeOccupiedArea(b);
        b.vc(100, 100);
        e.initialize(b);
        for (var f = a.nodes; f.next(); ) {
          var g = f.value,
            h = g.layer;
          null !== h && h.visible && !h.isTemporary && hk(a, g, d, b);
        }
        M.free(b);
      } else {
        0 < c.memberParts.count &&
          ((b = a.computePartsBounds(c.memberParts, !1)),
          b.vc(20, 20),
          e.initialize(b));
        b = M.alloc();
        for (f = c.memberParts; f.next(); )
          (g = f.value), g instanceof V && hk(a, g, d, b);
        M.free(b);
      }
      e.group = c;
      e.Hx = d;
      e.Sr = !1;
    } else b && ik(e);
    return e;
  }

  function gk(a, b) {
    return b.avoidable && !b.isLinkLabel
      ? b
      : null !== b.containingGroup
      ? gk(a, b.containingGroup)
      : null;
  }

  function hk(a, b, c, d) {
    if (b !== c && b.isVisible())
      if (b.avoidable && !b.isLinkLabel) {
        b = b.getAvoidableRect(d);
        a = a.Qh;
        var e = b.x,
          f = b.y;
        if (jk(a, e, f))
          for (
            c = ((f - a.Ed) / a.oc) | 0,
              d = Math.min(((e + b.width - a.Dd) / a.nc) | 0, a.Wh),
              b = Math.min(((f + b.height - a.Ed) / a.oc) | 0, a.Xh),
              e = ((e - a.Dd) / a.nc) | 0;
            e <= d;
            e++
          )
            if (((f = a.Xb[e]), f.fill)) f.fill(kk, c, b + 1);
            else for (var g = c; g <= b; g++) f[g] = kk;
      } else if (b instanceof qf)
        for (b = b.memberParts; b.next(); )
          (e = b.value), e instanceof V && hk(a, e, c, d);
  }

  function lk(a, b) {
    null === a.Qh ||
      a.Qh.Sr ||
      (void 0 !== b && (!b.avoidable || b.isLinkLabel)) ||
      (a.Qh.Sr = !0);
  }
  Q.prototype.Fr = function(a) {
    this.Zo.assign(a);
    this.computeAutoScrollPosition(this.Zo).$a(this.position)
      ? this.lg()
      : uk(this);
  };

  function uk(a) {
    -1 === a.ik &&
      (a.ik = ta(function() {
        if (-1 !== a.ik && (a.lg(), null !== a.lastInput.event)) {
          var b = a.computeAutoScrollPosition(a.Zo);
          b.$a(a.position) ||
            ((a.position = b),
            (a.lastInput.documentPoint = a.rs(a.Zo)),
            a.doMouseMove(),
            (a.Si = !0),
            (b = M.alloc()),
            a.computeBounds(b),
            b.Xc(a.documentBounds),
            wj(a, b),
            M.free(b),
            (a.bd = !0),
            a.nd(),
            uk(a));
        }
      }, a.Yo));
  }
  Q.prototype.lg = function() {
    -1 !== this.ik && (x.clearTimeout(this.ik), (this.ik = -1));
  };
  Q.prototype.computeAutoScrollPosition = function(a) {
    var b = this.position,
      c = this.$o;
    if (0 >= c.top && 0 >= c.left && 0 >= c.right && 0 >= c.bottom) return b;
    var d = this.viewportBounds,
      e = this.scale;
    d = M.allocAt(0, 0, d.width * e, d.height * e);
    var f = I.allocAt(0, 0);
    if (a.x >= d.x && a.x < d.x + c.left && this.allowHorizontalScroll) {
      var g = Math.max(this.scrollHorizontalLineChange, 1);
      g |= 0;
      f.x -= g;
      a.x < d.x + c.left / 2 && (f.x -= g);
      a.x < d.x + c.left / 4 && (f.x -= 4 * g);
    } else
      a.x <= d.x + d.width &&
        a.x > d.x + d.width - c.right &&
        this.allowHorizontalScroll &&
        ((g = Math.max(this.scrollHorizontalLineChange, 1)),
        (g |= 0),
        (f.x += g),
        a.x > d.x + d.width - c.right / 2 && (f.x += g),
        a.x > d.x + d.width - c.right / 4 && (f.x += 4 * g));
    a.y >= d.y && a.y < d.y + c.top && this.allowVerticalScroll
      ? ((g = Math.max(this.scrollVerticalLineChange, 1)),
        (g |= 0),
        (f.y -= g),
        a.y < d.y + c.top / 2 && (f.y -= g),
        a.y < d.y + c.top / 4 && (f.y -= 4 * g))
      : a.y <= d.y + d.height &&
        a.y > d.y + d.height - c.bottom &&
        this.allowVerticalScroll &&
        ((g = Math.max(this.scrollVerticalLineChange, 1)),
        (g |= 0),
        (f.y += g),
        a.y > d.y + d.height - c.bottom / 2 && (f.y += g),
        a.y > d.y + d.height - c.bottom / 4 && (f.y += 4 * g));
    f.$a(qb) || (b = new I(b.x + f.x / e, b.y + f.y / e));
    M.free(d);
    I.free(f);
    return b;
  };
  t = Q.prototype;
  t.bs = function() {
    return null;
  };
  t.Nu = function() {
    return null;
  };
  t.ny = function(a, b) {
    this.Yx.add(a, b);
  };
  t.lu = function(a) {
    (this.tw = a) ||
      this.nodes.each(function(a) {
        a instanceof qf && (a.Dp = null);
      });
  };

  function yk(a, b, c) {
    function d() {
      var a = +new Date();
      f = !0;
      for (g.reset(); g.next(); )
        if (!g.value[0].Qk) {
          f = !1;
          break;
        }
      f || a - l > k ? b(c, e, h) : x.requestAnimationFrame(d);
    }
    for (var e = c.callback, f = !0, g = a.Fg.iterator; g.next(); )
      if (!g.value[0].Qk) {
        f = !1;
        break;
      }
    if ('function' !== typeof e || f) return b(c, e, a);
    var h = a,
      k = c.callbackTimeout || 300,
      l = +new Date();
    x.requestAnimationFrame(function() {
      d();
    });
    return null;
  }
  t.Dz = function(a) {
    if (!Og) return null;
    void 0 === a && (a = {});
    a.returnType = 'Image';
    return this.ox(a);
  };
  t.ox = function(a) {
    void 0 === a && (a = {});
    return yk(this, this.Ez, a);
  };
  t.Ez = function(a, b, c) {
    var d = zk(c, a, 'canvas', null);
    if (null === d) return null;
    c = d.Z.canvas;
    var e = null;
    if (null !== c)
      switch (
        ((e = a.returnType),
        void 0 === e ? (e = 'string') : (e = e.toLowerCase()),
        e)
      ) {
        case Ak + 'data':
          e = d.getImageData(0, 0, c.width, c.height);
          break;
        case Ak:
          d = (a.document || document).createElement('img');
          d.src = c.toDataURL(a.type, a.details);
          e = d;
          break;
        case 'blob':
          'function' !== typeof b &&
            C(
              'Error: Diagram.makeImageData called with "returnType: toBlob", but no required "callback" function property defined.',
            );
          if ('function' === typeof c.toBlob)
            return c.toBlob(b, a.type, a.details), 'toBlob';
          if ('function' === typeof c.msToBlob)
            return b(c.msToBlob()), 'msToBlob';
          b(null);
          return null;
        default:
          e = c.toDataURL(a.type, a.details);
      }
    return 'function' === typeof b ? (b(e), null) : e;
  };

  function zk(a, b, c, d) {
    a.animationManager.wc();
    a.nd();
    if (null === a.Ha) return null;
    'object' !== typeof b && C('properties argument must be an Object.');
    var e = b.size || null,
      f = b.scale || null;
    void 0 !== b.scale && isNaN(b.scale) && (f = 'NaN');
    var g = b.maxSize;
    void 0 === b.maxSize &&
      (g = 'SVG' === c ? new K(Infinity, Infinity) : new K(2e3, 2e3));
    var h = b.position || null,
      k = b.parts || null,
      l = void 0 === b.padding ? 1 : b.padding,
      m = b.background || null,
      n = b.omitTemporary;
    void 0 === n && (n = !0);
    var p = b.document || document,
      r = b.elementFinished || null,
      q = b.showTemporary;
    void 0 === q && (q = !n);
    b = b.showGrid;
    void 0 === b && (b = q);
    null !== e && isNaN(e.width) && isNaN(e.height) && (e = null);
    'number' === typeof l
      ? (l = new ec(l))
      : l instanceof ec || C('MakeImage padding must be a Margin or a number.');
    l.left = Math.max(l.left, 0);
    l.right = Math.max(l.right, 0);
    l.top = Math.max(l.top, 0);
    l.bottom = Math.max(l.bottom, 0);
    a.Zb.Oc(!0);
    n = new Bk(null, p);
    var u = n.context;
    if (!(e || f || k || h)) {
      n.width = a.Ba + Math.ceil(l.left + l.right);
      n.height = a.Aa + Math.ceil(l.top + l.bottom);
      if ('SVG' === c) {
        if (null === d) return null;
        d.resize(n.width, n.height, n.width, n.height);
        d.ownerDocument = p;
        d.po = r;
        tj(a, d.context, l, new K(n.width, n.height), a.xa, a.pa, k, m, q, b);
        return d.context;
      }
      a.Fm = !1;
      tj(a, u, l, new K(n.width, n.height), a.xa, a.pa, k, m, q, b);
      a.Fm = !0;
      return n.context;
    }
    var w = a.sp,
      v = a.documentBounds.copy();
    v.jv(a.ub);
    if (q)
      for (var z = a.Ua.s, y = z.length, A = 0; A < y; A++) {
        var B = z[A];
        if (B.visible && B.isTemporary) {
          B = B.Ma.s;
          for (var F = B.length, L = 0; L < F; L++) {
            var S = B[L];
            S.isInDocumentBounds &&
              S.isVisible() &&
              ((S = S.actualBounds), S.v() && v.Xc(S));
          }
        }
      }
    z = new I(v.x, v.y);
    if (null !== k) {
      y = new M(0, 0, 0, 0);
      A = !0;
      B = k.iterator;
      for (B.reset(); B.next(); )
        (F = B.value),
          F instanceof U &&
            ((L = F.layer),
            (null !== L && !L.visible) ||
              (null !== L && !q && L.isTemporary) ||
              !F.isVisible() ||
              ((F = F.actualBounds),
              F.v() && (A ? ((A = !1), y.assign(F)) : y.Xc(F))));
      v.width = y.width;
      v.height = y.height;
      z.x = y.x;
      z.y = y.y;
    }
    null !== h && h.v() && ((z = h), f || (f = w));
    y = h = 0;
    null !== l && ((h = l.left + l.right), (y = l.top + l.bottom));
    A = B = 0;
    null !== e &&
      ((B = e.width),
      (A = e.height),
      isFinite(B) && (B = Math.max(0, B - h)),
      isFinite(A) && (A = Math.max(0, A - y)));
    null !== e && null !== f
      ? ('NaN' === f && (f = w),
        e.v()
          ? ((e = B), (v = A))
          : isNaN(A)
          ? ((e = B), (v = v.height * f))
          : ((e = v.width * f), (v = A)))
      : null !== e
      ? e.v()
        ? ((f = Math.min(B / v.width, A / v.height)), (e = B), (v = A))
        : isNaN(A)
        ? ((f = B / v.width), (e = B), (v = v.height * f))
        : ((f = A / v.height), (e = v.width * f), (v = A))
      : null !== f
      ? 'NaN' === f && g.v()
        ? ((f = Math.min((g.width - h) / v.width, (g.height - y) / v.height)),
          f > w
            ? ((f = w), (e = v.width), (v = v.height))
            : ((e = g.width), (v = g.height)))
        : ((e = v.width * f), (v = v.height * f))
      : ((f = w), (e = v.width), (v = v.height));
    null !== l ? ((e += h), (v += y)) : (l = new ec(0));
    null !== g &&
      ((w = g.width),
      (g = g.height),
      isNaN(w) && (w = 2e3),
      isNaN(g) && (g = 2e3),
      isFinite(w) && (e = Math.min(e, w)),
      isFinite(g) && (v = Math.min(v, g)));
    n.width = Math.ceil(e);
    n.height = Math.ceil(v);
    if ('SVG' === c) {
      if (null === d) return null;
      d.resize(n.width, n.height, n.width, n.height);
      d.ownerDocument = p;
      d.po = r;
      tj(a, d.context, l, new K(Math.ceil(e), Math.ceil(v)), f, z, k, m, q, b);
      return d.context;
    }
    a.Fm = !1;
    tj(a, u, l, new K(Math.ceil(e), Math.ceil(v)), f, z, k, m, q, b);
    a.Fm = !0;
    return n.context;
  }
  ma.Object.defineProperties(Q.prototype, {
    div: {
      get: function() {
        return this.La;
      },
      set: function(a) {
        if (this.La !== a) {
          var b = this.La;
          null !== b
            ? ((b.H = void 0),
              (b.goDiagram = void 0),
              (b.go = void 0),
              (b.innerHTML = ''),
              null !== this.Ha &&
                ((b = this.Ha.Sa),
                this.removeEventListener(b, 'pointermove', this.Xj, !1),
                this.removeEventListener(b, 'pointerdown', this.Wj, !1),
                this.removeEventListener(b, 'pointerup', this.Zj, !1),
                this.removeEventListener(b, 'pointerout', this.Yj, !1),
                this.Ha.Pw()),
              this.cl && (this.cl.disconnect(), (this.cl = null)),
              (b = this.toolManager),
              null !== b &&
                (b.mouseDownTools.each(function(a) {
                  a.cancelWaitAfter();
                }),
                b.mouseMoveTools.each(function(a) {
                  a.cancelWaitAfter();
                }),
                b.mouseUpTools.each(function(a) {
                  a.cancelWaitAfter();
                })),
              b.cancelWaitAfter(),
              this.currentTool.doCancel(),
              (this.Ha = null),
              this.removeEventListener(x, 'resize', this.sv, !1),
              this.removeEventListener(x, 'wheel', this.Sj, !0),
              le === this && (le = null))
            : (this.Qf = !1);
          this.La = null;
          if (null !== a) {
            if ((b = a.H)) b.div = null;
            si(this, a);
            this.redraw();
          }
        }
      },
    },
    Ew: {
      get: function() {
        return this.rq;
      },
    },
    ji: {
      get: function() {
        return this.Qf;
      },
    },
    draggedLink: {
      get: function() {
        return this.Ps;
      },
      set: function(a) {
        this.Ps !== a &&
          ((this.Ps = a),
          null !== a && ((this.At = a.fromPort), (this.Bt = a.toPort)));
      },
    },
    tx: {
      get: function() {
        return this.At;
      },
      set: function(a) {
        this.At = a;
      },
    },
    ux: {
      get: function() {
        return this.Bt;
      },
      set: function(a) {
        this.Bt = a;
      },
    },
    animationManager: {
      get: function() {
        return this.Rd;
      },
    },
    undoManager: {
      get: function() {
        return this.ac.undoManager;
      },
    },
    skipsUndoManager: {
      get: function() {
        return this.Mg;
      },
      set: function(a) {
        this.Mg = a;
        this.ac.skipsUndoManager = a;
      },
    },
    delaysLayout: {
      get: function() {
        return this.Ns;
      },
      set: function(a) {
        this.Ns = a;
      },
    },
    opacity: {
      get: function() {
        return this.tb;
      },
      set: function(a) {
        var b = this.tb;
        b !== a &&
          ((0 > a || 1 < a) && wa(a, '0 <= value <= 1', Q, 'opacity'),
          (this.tb = a),
          this.g('opacity', b, a),
          this.N());
      },
    },
    validCycle: {
      get: function() {
        return this.bu;
      },
      set: function(a) {
        var b = this.bu;
        b !== a && ((this.bu = a), this.g('validCycle', b, a));
      },
    },
    layers: {
      get: function() {
        return this.Ua.iterator;
      },
    },
    isModelReadOnly: {
      get: function() {
        var a = this.ac;
        return null === a ? !1 : a.isReadOnly;
      },
      set: function(a) {
        var b = this.ac;
        null !== b && (b.isReadOnly = a);
      },
    },
    isReadOnly: {
      get: function() {
        return this.xg;
      },
      set: function(a) {
        var b = this.xg;
        b !== a && ((this.xg = a), this.g('isReadOnly', b, a));
      },
    },
    isEnabled: {
      get: function() {
        return this.Ad;
      },
      set: function(a) {
        var b = this.Ad;
        b !== a && ((this.Ad = a), this.g('isEnabled', b, a));
      },
    },
    allowClipboard: {
      get: function() {
        return this.ws;
      },
      set: function(a) {
        var b = this.ws;
        b !== a && ((this.ws = a), this.g('allowClipboard', b, a));
      },
    },
    allowCopy: {
      get: function() {
        return this.zi;
      },
      set: function(a) {
        var b = this.zi;
        b !== a && ((this.zi = a), this.g('allowCopy', b, a));
      },
    },
    allowDelete: {
      get: function() {
        return this.Ai;
      },
      set: function(a) {
        var b = this.Ai;
        b !== a && ((this.Ai = a), this.g('allowDelete', b, a));
      },
    },
    allowDragOut: {
      get: function() {
        return this.xs;
      },
      set: function(a) {
        var b = this.xs;
        b !== a && ((this.xs = a), this.g('allowDragOut', b, a));
      },
    },
    allowDrop: {
      get: function() {
        return this.ys;
      },
      set: function(a) {
        var b = this.ys;
        b !== a && ((this.ys = a), this.g('allowDrop', b, a));
      },
    },
    allowTextEdit: {
      get: function() {
        return this.Ji;
      },
      set: function(a) {
        var b = this.Ji;
        b !== a && ((this.Ji = a), this.g('allowTextEdit', b, a));
      },
    },
    allowGroup: {
      get: function() {
        return this.Bi;
      },
      set: function(a) {
        var b = this.Bi;
        b !== a && ((this.Bi = a), this.g('allowGroup', b, a));
      },
    },
    allowUngroup: {
      get: function() {
        return this.Ki;
      },
      set: function(a) {
        var b = this.Ki;
        b !== a && ((this.Ki = a), this.g('allowUngroup', b, a));
      },
    },
    allowInsert: {
      get: function() {
        return this.As;
      },
      set: function(a) {
        var b = this.As;
        b !== a && ((this.As = a), this.g('allowInsert', b, a));
      },
    },
    allowLink: {
      get: function() {
        return this.Ci;
      },
      set: function(a) {
        var b = this.Ci;
        b !== a && ((this.Ci = a), this.g('allowLink', b, a));
      },
    },
    allowRelink: {
      get: function() {
        return this.Ei;
      },
      set: function(a) {
        var b = this.Ei;
        b !== a && ((this.Ei = a), this.g('allowRelink', b, a));
      },
    },
    allowMove: {
      get: function() {
        return this.Di;
      },
      set: function(a) {
        var b = this.Di;
        b !== a && ((this.Di = a), this.g('allowMove', b, a));
      },
    },
    allowReshape: {
      get: function() {
        return this.Fi;
      },
      set: function(a) {
        var b = this.Fi;
        b !== a && ((this.Fi = a), this.g('allowReshape', b, a));
      },
    },
    allowResize: {
      get: function() {
        return this.Gi;
      },
      set: function(a) {
        var b = this.Gi;
        b !== a && ((this.Gi = a), this.g('allowResize', b, a));
      },
    },
    allowRotate: {
      get: function() {
        return this.Hi;
      },
      set: function(a) {
        var b = this.Hi;
        b !== a && ((this.Hi = a), this.g('allowRotate', b, a));
      },
    },
    allowSelect: {
      get: function() {
        return this.Ii;
      },
      set: function(a) {
        var b = this.Ii;
        b !== a && ((this.Ii = a), this.g('allowSelect', b, a));
      },
    },
    allowUndo: {
      get: function() {
        return this.Bs;
      },
      set: function(a) {
        var b = this.Bs;
        b !== a && ((this.Bs = a), this.g('allowUndo', b, a));
      },
    },
    allowZoom: {
      get: function() {
        return this.Ds;
      },
      set: function(a) {
        var b = this.Ds;
        b !== a && ((this.Ds = a), this.g('allowZoom', b, a));
      },
    },
    hasVerticalScrollbar: {
      get: function() {
        return this.Um;
      },
      set: function(a) {
        var b = this.Um;
        b !== a &&
          ((this.Um = a),
          Wi(this),
          this.N(),
          this.g('hasVerticalScrollbar', b, a),
          Ti(this, !1));
      },
    },
    hasHorizontalScrollbar: {
      get: function() {
        return this.Tm;
      },
      set: function(a) {
        var b = this.Tm;
        b !== a &&
          ((this.Tm = a),
          Wi(this),
          this.N(),
          this.g('hasHorizontalScrollbar', b, a),
          Ti(this, !1));
      },
    },
    allowHorizontalScroll: {
      get: function() {
        return this.zs;
      },
      set: function(a) {
        var b = this.zs;
        b !== a &&
          ((this.zs = a), this.g('allowHorizontalScroll', b, a), Ti(this, !1));
      },
    },
    allowVerticalScroll: {
      get: function() {
        return this.Cs;
      },
      set: function(a) {
        var b = this.Cs;
        b !== a &&
          ((this.Cs = a), this.g('allowVerticalScroll', b, a), Ti(this, !1));
      },
    },
    scrollHorizontalLineChange: {
      get: function() {
        return this.Ot;
      },
      set: function(a) {
        var b = this.Ot;
        b !== a &&
          (0 > a && wa(a, '>= 0', Q, 'scrollHorizontalLineChange'),
          (this.Ot = a),
          this.g('scrollHorizontalLineChange', b, a));
      },
    },
    scrollVerticalLineChange: {
      get: function() {
        return this.St;
      },
      set: function(a) {
        var b = this.St;
        b !== a &&
          (0 > a && wa(a, '>= 0', Q, 'scrollVerticalLineChange'),
          (this.St = a),
          this.g('scrollVerticalLineChange', b, a));
      },
    },
    lastInput: {
      get: function() {
        return this.Yi;
      },
      set: function(a) {
        this.Yi = a;
      },
    },
    previousInput: {
      get: function() {
        return this.Hg;
      },
      set: function(a) {
        this.Hg = a;
      },
    },
    firstInput: {
      get: function() {
        return this.Fp;
      },
      set: function(a) {
        this.Fp = a;
      },
    },
    currentCursor: {
      get: function() {
        return this.Ks;
      },
      set: function(a) {
        '' === a && (a = this.rp);
        if (this.Ks !== a) {
          var b = this.Ha,
            c = this.La;
          if (null !== b && null !== c) {
            this.Ks = a;
            var d = b.style.cursor;
            b.style.cursor = a;
            c.style.cursor = a;
            b.style.cursor === d &&
              ((b.style.cursor = '-webkit-' + a),
              (c.style.cursor = '-webkit-' + a),
              b.style.cursor === d &&
                ((b.style.cursor = '-moz-' + a),
                (c.style.cursor = '-moz-' + a),
                b.style.cursor === d &&
                  ((b.style.cursor = a), (c.style.cursor = a))));
          }
        }
      },
    },
    defaultCursor: {
      get: function() {
        return this.rp;
      },
      set: function(a) {
        '' === a && (a = 'auto');
        var b = this.rp;
        b !== a && ((this.rp = a), this.g('defaultCursor', b, a));
      },
    },
    click: {
      get: function() {
        return this.oh;
      },
      set: function(a) {
        var b = this.oh;
        b !== a && ((this.oh = a), this.g('click', b, a));
      },
    },
    doubleClick: {
      get: function() {
        return this.uh;
      },
      set: function(a) {
        var b = this.uh;
        b !== a && ((this.uh = a), this.g('doubleClick', b, a));
      },
    },
    contextClick: {
      get: function() {
        return this.qh;
      },
      set: function(a) {
        var b = this.qh;
        b !== a && ((this.qh = a), this.g('contextClick', b, a));
      },
    },
    mouseOver: {
      get: function() {
        return this.Jh;
      },
      set: function(a) {
        var b = this.Jh;
        b !== a && ((this.Jh = a), this.g('mouseOver', b, a));
      },
    },
    mouseHover: {
      get: function() {
        return this.Hh;
      },
      set: function(a) {
        var b = this.Hh;
        b !== a && ((this.Hh = a), this.g('mouseHover', b, a));
      },
    },
    mouseHold: {
      get: function() {
        return this.Gh;
      },
      set: function(a) {
        var b = this.Gh;
        b !== a && ((this.Gh = a), this.g('mouseHold', b, a));
      },
    },
    mouseDragOver: {
      get: function() {
        return this.vt;
      },
      set: function(a) {
        var b = this.vt;
        b !== a && ((this.vt = a), this.g('mouseDragOver', b, a));
      },
    },
    mouseDrop: {
      get: function() {
        return this.Eh;
      },
      set: function(a) {
        var b = this.Eh;
        b !== a && ((this.Eh = a), this.g('mouseDrop', b, a));
      },
    },
    handlesDragDropForTopLevelParts: {
      get: function() {
        return this.$s;
      },
      set: function(a) {
        var b = this.$s;
        b !== a &&
          ((this.$s = a), this.g('handlesDragDropForTopLevelParts', b, a));
      },
    },
    mouseEnter: {
      get: function() {
        return this.Fh;
      },
      set: function(a) {
        var b = this.Fh;
        b !== a && ((this.Fh = a), this.g('mouseEnter', b, a));
      },
    },
    mouseLeave: {
      get: function() {
        return this.Ih;
      },
      set: function(a) {
        var b = this.Ih;
        b !== a && ((this.Ih = a), this.g('mouseLeave', b, a));
      },
    },
    toolTip: {
      get: function() {
        return this.Th;
      },
      set: function(a) {
        var b = this.Th;
        b !== a && ((this.Th = a), this.g('toolTip', b, a));
      },
    },
    contextMenu: {
      get: function() {
        return this.rh;
      },
      set: function(a) {
        var b = this.rh;
        b !== a && ((this.rh = a), this.g('contextMenu', b, a));
      },
    },
    commandHandler: {
      get: function() {
        return this.hb;
      },
      set: function(a) {
        this.hb !== a && ((this.hb = a), a.Le(this));
      },
    },
    toolManager: {
      get: function() {
        return this.le;
      },
      set: function(a) {
        this.le !== a && ((this.le = a), (a.diagram = this));
      },
    },
    defaultTool: {
      get: function() {
        return this.nb;
      },
      set: function(a) {
        var b = this.nb;
        b !== a &&
          ((this.nb = a),
          (a.diagram = this),
          this.currentTool === b && (this.currentTool = a));
      },
    },
    currentTool: {
      get: function() {
        return this.cb;
      },
      set: function(a) {
        var b = this.cb;
        b && (b.isActive && b.doDeactivate(), b.cancelWaitAfter(), b.doStop());
        null === a && (a = this.defaultTool);
        null !== a && ((this.cb = a), (a.diagram = this), a.doStart());
      },
    },
    selection: {
      get: function() {
        return this.lw;
      },
    },
    maxSelectionCount: {
      get: function() {
        return this.qt;
      },
      set: function(a) {
        var b = this.qt;
        if (b !== a)
          if (0 <= a && !isNaN(a)) {
            if (
              ((this.qt = a),
              this.g('maxSelectionCount', b, a),
              !this.undoManager.isUndoingRedoing &&
                ((a = this.selection.count - a), 0 < a))
            ) {
              this.P('ChangingSelection', this.selection);
              b = this.selection.Ea();
              for (var c = 0; c < a; c++) b[c].isSelected = !1;
              this.P('ChangedSelection', this.selection);
            }
          } else wa(a, '>= 0', Q, 'maxSelectionCount');
      },
    },
    nodeSelectionAdornmentTemplate: {
      get: function() {
        return this.xt;
      },
      set: function(a) {
        var b = this.xt;
        b !== a &&
          ((this.xt = a), this.g('nodeSelectionAdornmentTemplate', b, a));
      },
    },
    groupSelectionAdornmentTemplate: {
      get: function() {
        return this.Zs;
      },
      set: function(a) {
        var b = this.Zs;
        b !== a &&
          ((this.Zs = a), this.g('groupSelectionAdornmentTemplate', b, a));
      },
    },
    linkSelectionAdornmentTemplate: {
      get: function() {
        return this.nt;
      },
      set: function(a) {
        var b = this.nt;
        b !== a &&
          ((this.nt = a), this.g('linkSelectionAdornmentTemplate', b, a));
      },
    },
    highlighteds: {
      get: function() {
        return this.Tv;
      },
    },
    isModified: {
      get: function() {
        var a = this.undoManager;
        return a.isEnabled
          ? null !== a.currentTransaction
            ? !0
            : this.Ym && this.se !== a.historyIndex
          : this.Ym;
      },
      set: function(a) {
        if (this.Ym !== a) {
          this.Ym = a;
          var b = this.undoManager;
          !a && b.isEnabled && (this.se = b.historyIndex);
          a || Tj(this);
        }
      },
    },
    model: {
      get: function() {
        return this.ac;
      },
      set: function(a) {
        var b = this.ac;
        if (b !== a) {
          this.currentTool.doCancel();
          b &&
            b.undoManager !== a.undoManager &&
            b.undoManager.isInTransaction &&
            C(
              'Do not replace a Diagram.model while a transaction is in progress.',
            );
          this.animationManager.wc(!0);
          var c = Ai(this, !0);
          this.Qf = !1;
          this.Nm = !0;
          this.se = -2;
          this.cg = !1;
          var d = this.wb;
          this.wb = !0;
          lh(this.animationManager, 'Model');
          b &&
            (null !== this.bf &&
              this.bf.each(function(a) {
                b.ak(a);
              }),
            b.ak(this.Hc));
          this.ac = a;
          this.partManager = Uj(this.ac.type);
          for (var e = 0; e < c.length; e++) this.add(c[e]);
          a.Ug(this.Db);
          this.partManager.addAllModeledParts();
          a.ak(this.Db);
          a.Ug(this.Hc);
          null !== this.bf &&
            this.bf.each(function(b) {
              a.Ug(b);
            });
          this.wb = d;
          this.Va();
          this.wb || this.N();
          b && a.undoManager.copyProperties(b.undoManager);
        }
      },
    },
    $: {
      get: function() {
        return this.Xv;
      },
      set: function(a) {
        this.Xv = a;
      },
    },
    Zr: {
      get: function() {
        return this.Xx;
      },
    },
    skipsModelSourceBindings: {
      get: function() {
        return this.mw;
      },
      set: function(a) {
        this.mw = a;
      },
    },
    os: {
      get: function() {
        return this.Ut;
      },
      set: function(a) {
        this.Ut = a;
      },
    },
    nodeTemplate: {
      get: function() {
        return this.Dg.I('');
      },
      set: function(a) {
        var b = this.Dg.I('');
        b !== a &&
          (this.Dg.add('', a),
          this.g('nodeTemplate', b, a),
          this.undoManager.isUndoingRedoing || this.Od());
      },
    },
    nodeTemplateMap: {
      get: function() {
        return this.Dg;
      },
      set: function(a) {
        var b = this.Dg;
        b !== a &&
          ((this.Dg = a),
          this.g('nodeTemplateMap', b, a),
          this.undoManager.isUndoingRedoing || this.Od());
      },
    },
    groupTemplate: {
      get: function() {
        return this.Ri.I('');
      },
      set: function(a) {
        var b = this.Ri.I('');
        b !== a &&
          (this.Ri.add('', a),
          this.g('groupTemplate', b, a),
          this.undoManager.isUndoingRedoing || this.Od());
      },
    },
    groupTemplateMap: {
      get: function() {
        return this.Ri;
      },
      set: function(a) {
        var b = this.Ri;
        b !== a &&
          ((this.Ri = a),
          this.g('groupTemplateMap', b, a),
          this.undoManager.isUndoingRedoing || this.Od());
      },
    },
    linkTemplate: {
      get: function() {
        return this.Ch.I('');
      },
      set: function(a) {
        var b = this.Ch.I('');
        b !== a &&
          (this.Ch.add('', a),
          this.g('linkTemplate', b, a),
          this.undoManager.isUndoingRedoing || this.Od());
      },
    },
    linkTemplateMap: {
      get: function() {
        return this.Ch;
      },
      set: function(a) {
        var b = this.Ch;
        b !== a &&
          ((this.Ch = a),
          this.g('linkTemplateMap', b, a),
          this.undoManager.isUndoingRedoing || this.Od());
      },
    },
    isMouseCaptured: {
      get: function() {
        return this.Wv;
      },
      set: function(a) {
        var b = this.Ha;
        null !== b &&
          ((b = b.Sa),
          b instanceof SVGElement ||
            (a
              ? ((this.lastInput.bubbles = !1),
                this.removeEventListener(b, 'pointermove', this.Xj, !1),
                this.removeEventListener(b, 'pointerdown', this.Wj, !1),
                this.removeEventListener(b, 'pointerup', this.Zj, !1),
                this.removeEventListener(b, 'pointerout', this.Yj, !1),
                this.addEventListener(x, 'pointermove', this.Xj, !0),
                this.addEventListener(x, 'pointerdown', this.Wj, !0),
                this.addEventListener(x, 'pointerup', this.Zj, !0),
                this.addEventListener(x, 'pointerout', this.Yj, !0),
                this.removeEventListener(b, 'wheel', this.Sj, !1),
                this.addEventListener(x, 'wheel', this.Sj, !0),
                this.addEventListener(
                  x,
                  'selectstart',
                  this.preventDefault,
                  !1,
                ))
              : (this.removeEventListener(x, 'pointermove', this.Xj, !0),
                this.removeEventListener(x, 'pointerdown', this.Wj, !0),
                this.removeEventListener(x, 'pointerup', this.Zj, !0),
                this.removeEventListener(x, 'pointerout', this.Yj, !0),
                this.addEventListener(b, 'pointermove', this.Xj, !1),
                this.addEventListener(b, 'pointerdown', this.Wj, !1),
                this.addEventListener(b, 'pointerup', this.Zj, !1),
                this.addEventListener(b, 'pointerout', this.Yj, !1),
                this.removeEventListener(x, 'wheel', this.Sj, !0),
                this.removeEventListener(
                  x,
                  'selectstart',
                  this.preventDefault,
                  !1,
                ),
                this.addEventListener(b, 'wheel', this.Sj, !1)),
            (this.Wv = a)));
      },
    },
    position: {
      get: function() {
        return this.pa;
      },
      set: function(a) {
        var b = I.alloc().assign(this.pa);
        if (!b.C(a)) {
          var c = this.viewportBounds.copy();
          this.pa.assign(a);
          Nh(this.animationManager, b, this.pa);
          this.wb || (null === this.Ha && !this.Zn.v())
            ? Ci(this)
            : ((this.wb = !0),
              (a = this.scale),
              Vi(this, this.wp, this.Ba / a, this.Aa / a, this.mk, !1),
              (this.wb = !1));
          if (!this.wb)
            this.onViewportBoundsChanged(c, this.viewportBounds, this.xa, !1);
        }
        I.free(b);
      },
    },
    initialPosition: {
      get: function() {
        return this.bt;
      },
      set: function(a) {
        this.bt.C(a) || (this.bt = a.J());
      },
    },
    initialScale: {
      get: function() {
        return this.ct;
      },
      set: function(a) {
        this.ct !== a && (this.ct = a);
      },
    },
    grid: {
      get: function() {
        null === this.Zd && (this.Zd = Fi(this));
        return this.Zd;
      },
      set: function(a) {
        var b = this.Zd;
        if (b !== a) {
          null === b && (b = this.Zd = Fi(this));
          a.type !== W.Grid &&
            C('Diagram.grid must be a Panel of type Panel.Grid');
          var c = b.panel;
          null !== c && c.remove(b);
          this.Zd = a;
          a.name = 'GRID';
          null !== c && c.add(a);
          jj(this);
          this.N();
          this.g('grid', b, a);
        }
      },
    },
    viewportBounds: {
      get: function() {
        return this.vw;
      },
    },
    viewSize: {
      get: function() {
        return this.Zn;
      },
      set: function(a) {
        var b = this.viewSize;
        b.C(a) ||
          ((this.Zn = a = a.J()),
          (this.Aa = this.Ba = 0),
          a.v()
            ? ((this.Ba = a.width), (this.Aa = a.height))
            : null !== this.La &&
              ((this.Ba = this.La.clientWidth || 1),
              (this.Aa = this.La.clientHeight || 1)),
          Ci(this),
          this.Va(),
          this.g('viewSize', b, a),
          this.redraw());
      },
    },
    fixedBounds: {
      get: function() {
        return this.Xs;
      },
      set: function(a) {
        var b = this.Xs;
        b.C(a) ||
          ((-Infinity !== a.width &&
            Infinity !== a.height &&
            -Infinity !== a.height) ||
            C('fixedBounds width/height must not be Infinity'),
          (this.Xs = a = a.J()),
          this.Va(),
          this.g('fixedBounds', b, a));
      },
    },
    scrollMargin: {
      get: function() {
        return this.mj;
      },
      set: function(a) {
        'number' === typeof a && (a = new ec(a));
        var b = this.mj;
        b.C(a) ||
          ((this.mj = a = a.J()), this.g('scrollMargin', b, a), this.Jo());
      },
    },
    scrollMode: {
      get: function() {
        return this.nj;
      },
      set: function(a) {
        var b = this.nj;
        b !== a &&
          ((this.nj = a),
          a === Rh && Ti(this, !1),
          this.g('scrollMode', b, a),
          this.N());
      },
    },
    scrollsPageOnFocus: {
      get: function() {
        return this.Tt;
      },
      set: function(a) {
        var b = this.Tt;
        b !== a && ((this.Tt = a), this.g('scrollsPageOnFocus', b, a));
      },
    },
    positionComputation: {
      get: function() {
        return this.Et;
      },
      set: function(a) {
        var b = this.Et;
        b !== a &&
          ((this.Et = a), Ti(this, !1), this.g('positionComputation', b, a));
      },
    },
    scaleComputation: {
      get: function() {
        return this.Lt;
      },
      set: function(a) {
        var b = this.Lt;
        b !== a &&
          ((this.Lt = a),
          Rj(this, this.scale, this.scale),
          this.g('scaleComputation', b, a));
      },
    },
    documentBounds: {
      get: function() {
        return this.wp;
      },
    },
    isVirtualized: {
      get: function() {
        return this.lt;
      },
      set: function(a) {
        var b = this.lt;
        b !== a && ((this.lt = a), this.g('isVirtualized', b, a));
      },
    },
    scale: {
      get: function() {
        return this.xa;
      },
      set: function(a) {
        var b = this.xa;
        b !== a && Rj(this, b, a);
      },
    },
    defaultScale: {
      get: function() {
        return this.sp;
      },
      set: function(a) {
        this.sp = a;
      },
    },
    autoScale: {
      get: function() {
        return this.nh;
      },
      set: function(a) {
        var b = this.nh;
        b !== a &&
          ((this.nh = a), this.g('autoScale', b, a), a !== rh && Ti(this, !1));
      },
    },
    initialAutoScale: {
      get: function() {
        return this.wg;
      },
      set: function(a) {
        var b = this.wg;
        b !== a && ((this.wg = a), this.g('initialAutoScale', b, a));
      },
    },
    initialViewportSpot: {
      get: function() {
        return this.dt;
      },
      set: function(a) {
        var b = this.dt;
        b !== a &&
          (a.pb() || C('initialViewportSpot must be a specific Spot: ' + a),
          (this.dt = a),
          this.g('initialViewportSpot', b, a));
      },
    },
    initialDocumentSpot: {
      get: function() {
        return this.at;
      },
      set: function(a) {
        var b = this.at;
        b !== a &&
          (a.pb() || C('initialViewportSpot must be a specific Spot: ' + a),
          (this.at = a),
          this.g('initialDocumentSpot', b, a));
      },
    },
    minScale: {
      get: function() {
        return this.tt;
      },
      set: function(a) {
        var b = this.tt;
        b !== a &&
          (0 < a
            ? ((this.tt = a),
              this.g('minScale', b, a),
              a > this.scale && (this.scale = a))
            : wa(a, '> 0', Q, 'minScale'));
      },
    },
    maxScale: {
      get: function() {
        return this.pt;
      },
      set: function(a) {
        var b = this.pt;
        b !== a &&
          (0 < a
            ? ((this.pt = a),
              this.g('maxScale', b, a),
              a < this.scale && (this.scale = a))
            : wa(a, '> 0', Q, 'maxScale'));
      },
    },
    zoomPoint: {
      get: function() {
        return this.eu;
      },
      set: function(a) {
        this.eu.C(a) || (this.eu = a = a.J());
      },
    },
    contentAlignment: {
      get: function() {
        return this.mk;
      },
      set: function(a) {
        var b = this.mk;
        b.C(a) ||
          ((this.mk = a = a.J()),
          this.g('contentAlignment', b, a),
          Ti(this, !1));
      },
    },
    initialContentAlignment: {
      get: function() {
        return this.Rp;
      },
      set: function(a) {
        var b = this.Rp;
        b.C(a) ||
          ((this.Rp = a = a.J()), this.g('initialContentAlignment', b, a));
      },
    },
    padding: {
      get: function() {
        return this.ub;
      },
      set: function(a) {
        'number' === typeof a && (a = new ec(a));
        var b = this.ub;
        b.C(a) || ((this.ub = a = a.J()), this.Va(), this.g('padding', b, a));
      },
    },
    partManager: {
      get: function() {
        return this.Ic;
      },
      set: function(a) {
        var b = this.Ic;
        b !== a &&
          (null !== a.diagram &&
            C('Cannot share PartManagers between Diagrams: ' + a.toString()),
          b && b.Le(null),
          (this.Ic = a),
          a.Le(this));
      },
    },
    nodes: {
      get: function() {
        return this.partManager.nodes.iterator;
      },
    },
    links: {
      get: function() {
        return this.partManager.links.iterator;
      },
    },
    parts: {
      get: function() {
        return this.partManager.parts.iterator;
      },
    },
    layout: {
      get: function() {
        return this.Kc;
      },
      set: function(a) {
        var b = this.Kc;
        b !== a &&
          ((this.Kc = a),
          (a.diagram = this),
          (a.group = null),
          (this.mh = !0),
          this.g('layout', b, a),
          this.Mb());
      },
    },
    isTreePathToChildren: {
      get: function() {
        return this.kt;
      },
      set: function(a) {
        var b = this.kt;
        if (
          b !== a &&
          ((this.kt = a),
          this.g('isTreePathToChildren', b, a),
          !this.undoManager.isUndoingRedoing)
        )
          for (a = this.nodes; a.next(); ) Ck(a.value);
      },
    },
    treeCollapsePolicy: {
      get: function() {
        return this.$t;
      },
      set: function(a) {
        var b = this.$t;
        b !== a &&
          (a !== vi &&
            a !== Dk &&
            a !== Ek &&
            C('Unknown Diagram.treeCollapsePolicy: ' + a),
          (this.$t = a),
          this.g('treeCollapsePolicy', b, a));
      },
    },
    Ie: {
      get: function() {
        return this.Vv;
      },
      set: function(a) {
        this.Vv = a;
      },
    },
    avoidanceCellSize: {
      get: function() {
        return this.Fv;
      },
      set: function(a) {
        this.Qh = null;
        this.Fv = new K(Math.max(1, a.width), Math.max(1, a.height));
      },
    },
    avoidanceLimit: {
      get: function() {
        return this.Gv;
      },
      set: function(a) {
        this.Gv = Math.max(1, a);
      },
    },
    autoScrollInterval: {
      get: function() {
        return this.Yo;
      },
      set: function(a) {
        var b = this.Yo;
        b !== a && ((this.Yo = a), this.g('autoScrollInterval', b, a));
      },
    },
    autoScrollRegion: {
      get: function() {
        return this.$o;
      },
      set: function(a) {
        'number' === typeof a && (a = new ec(a));
        var b = this.$o;
        b.C(a) ||
          ((this.$o = a = a.J()), this.Va(), this.g('autoScrollRegion', b, a));
      },
    },
  });
  ma.Object.defineProperties(Q, {
    licenseKey: {
      get: function() {
        return Fk.fc();
      },
      set: function(a) {
        Fk.add(a.replace(/\s/g, ''));
      },
    },
    version: {
      get: function() {
        return Gk;
      },
    },
  });
  Q.prototype.makeImageData = Q.prototype.ox;
  Q.prototype.makeImage = Q.prototype.Dz;
  Q.prototype.cacheGroupExternalLinks = Q.prototype.lu;
  Q.prototype.addRenderer = Q.prototype.ny;
  Q.prototype.makeSVG = Q.prototype.Nu;
  Q.prototype.makeSvg = Q.prototype.bs;
  Q.prototype.stopAutoScroll = Q.prototype.lg;
  Q.prototype.doAutoScroll = Q.prototype.Fr;
  Q.prototype.isUnoccupied = Q.prototype.Pj;
  Q.prototype.raiseDiagramEvent = Q.prototype.P;
  Q.prototype.removeDiagramListener = Q.prototype.Il;
  Q.prototype.addDiagramListener = Q.prototype.wj;
  Q.prototype.findTreeRoots = Q.prototype.fz;
  Q.prototype.layoutDiagram = Q.prototype.Bz;
  Q.prototype.findTopLevelGroups = Q.prototype.Zy;
  Q.prototype.findTopLevelNodesAndLinks = Q.prototype.$y;
  Q.prototype.ensureBounds = Q.prototype.Za;
  Q.prototype.findLinksByExample = Q.prototype.Ir;
  Q.prototype.findNodesByExample = Q.prototype.Jr;
  Q.prototype.findLinkForData = Q.prototype.Dc;
  Q.prototype.findNodeForData = Q.prototype.ci;
  Q.prototype.findPartForData = Q.prototype.Ec;
  Q.prototype.findLinkForKey = Q.prototype.findLinkForKey;
  Q.prototype.findNodeForKey = Q.prototype.Lb;
  Q.prototype.findPartForKey = Q.prototype.findPartForKey;
  Q.prototype.rebuildParts = Q.prototype.Od;
  Q.prototype.transformViewToDoc = Q.prototype.rs;
  Q.prototype.transformRectDocToView = Q.prototype.gA;
  Q.prototype.transformDocToView = Q.prototype.Ro;
  Q.prototype.centerRect = Q.prototype.Dr;
  Q.prototype.scrollToRect = Q.prototype.bv;
  Q.prototype.scroll = Q.prototype.scroll;
  Q.prototype.highlightCollection = Q.prototype.rz;
  Q.prototype.highlight = Q.prototype.qz;
  Q.prototype.selectCollection = Q.prototype.Yz;
  Q.prototype.select = Q.prototype.select;
  Q.prototype.updateAllRelationshipsFromData = Q.prototype.Uo;
  Q.prototype.updateAllTargetBindings = Q.prototype.updateAllTargetBindings;
  Q.prototype.commit = Q.prototype.commit;
  Q.prototype.rollbackTransaction = Q.prototype.Bf;
  Q.prototype.commitTransaction = Q.prototype.eb;
  Q.prototype.startTransaction = Q.prototype.Da;
  Q.prototype.raiseChanged = Q.prototype.g;
  Q.prototype.raiseChangedEvent = Q.prototype.bb;
  Q.prototype.removeChangedListener = Q.prototype.ak;
  Q.prototype.addChangedListener = Q.prototype.Ug;
  Q.prototype.removeModelChangedListener = Q.prototype.Tz;
  Q.prototype.addModelChangedListener = Q.prototype.Cw;
  Q.prototype.findLayer = Q.prototype.Ij;
  Q.prototype.removeLayer = Q.prototype.Rz;
  Q.prototype.addLayerAfter = Q.prototype.jy;
  Q.prototype.addLayerBefore = Q.prototype.Aw;
  Q.prototype.addLayer = Q.prototype.pl;
  Q.prototype.moveParts = Q.prototype.moveParts;
  Q.prototype.copyParts = Q.prototype.Ej;
  Q.prototype.removeParts = Q.prototype.hs;
  Q.prototype.remove = Q.prototype.remove;
  Q.prototype.add = Q.prototype.add;
  Q.prototype.clearDelayedGeometries = Q.prototype.mu;
  Q.prototype.setProperties = Q.prototype.Vl;
  Q.prototype.attach = Q.prototype.ku;
  Q.prototype.set = Q.prototype.set;
  Q.prototype.resetInputOptions = Q.prototype.zx;
  Q.prototype.setInputOption = Q.prototype.Zz;
  Q.prototype.getInputOption = Q.prototype.yl;
  Q.prototype.resetRenderingHints = Q.prototype.Ax;
  Q.prototype.setRenderingHint = Q.prototype.Fx;
  Q.prototype.getRenderingHint = Q.prototype.Ge;
  Q.prototype.maybeUpdate = Q.prototype.nd;
  Q.prototype.requestUpdate = Q.prototype.Mb;
  Q.prototype.delayInitialization = Q.prototype.Ey;
  Q.prototype.isUpdateRequested = Q.prototype.xz;
  Q.prototype.invalidateDocumentBounds = Q.prototype.Va;
  Q.prototype.findObjectsNear = Q.prototype.hg;
  Q.prototype.findPartsNear = Q.prototype.Vy;
  Q.prototype.findObjectsIn = Q.prototype.tf;
  Q.prototype.findPartsIn = Q.prototype.Ww;
  Q.prototype.findObjectsAt = Q.prototype.di;
  Q.prototype.findPartsAt = Q.prototype.Uy;
  Q.prototype.findObjectAt = Q.prototype.ec;
  Q.prototype.findPartAt = Q.prototype.wl;
  Q.prototype.focusObject = Q.prototype.gz;
  Q.prototype.alignDocument = Q.prototype.py;
  Q.prototype.zoomToRect = Q.prototype.kA;
  Q.prototype.zoomToFit = Q.prototype.zoomToFit;
  Q.prototype.diagramScroll = Q.prototype.Nw;
  Q.prototype.focus = Q.prototype.focus;
  var li = new pb(),
    Di = null,
    Og = void 0 !== x.document,
    yi = null,
    zi = '',
    rh = new D(Q, 'None', 0),
    Yi = new D(Q, 'Uniform', 1),
    Zi = new D(Q, 'UniformToFill', 2),
    Ef = new D(Q, 'CycleAll', 10),
    If = new D(Q, 'CycleNotDirected', 11),
    Kf = new D(Q, 'CycleNotDirectedFast', 12),
    Lf = new D(Q, 'CycleNotUndirected', 13),
    Ff = new D(Q, 'CycleDestinationTree', 14),
    Hf = new D(Q, 'CycleSourceTree', 15),
    Rh = new D(Q, 'DocumentScroll', 1),
    Th = new D(Q, 'InfiniteScroll', 2),
    vi = new D(Q, 'TreeParentCollapsed', 21),
    Dk = new D(Q, 'AllParentsCollapsed', 22),
    Ek = new D(Q, 'AnyParentsCollapsed', 23),
    Fk = new E(),
    Gk = '2.2.15',
    Ak = 'image',
    Hk = null,
    ji = !1;

  function ki() {
    if (Og) {
      var a = x.document.createElement('canvas'),
        b = a.getContext('2d'),
        c = Ma('7ca11abfd022028846');
      b[c] = Ma('398c3597c01238');
      // for (var d = ["5da73c80a36455d6038e4972187c3cae51fd22", ra.Dx + "4ae6247590da4bb21c324ba3a84e385776", md.xF + "fb236cdfda5de14c134ba1a95a2d4c7cc6f93c1387", J.za], e = 1; 5 > e; e++) b[Ma("7ca11abfd7330390")](Ma(d[e - 1]), 10, 15 * e);
      // b[c] = Ma("39f046ebb36e4b");
      // for (c = 1; 5 > c; c++) b[Ma("7ca11abfd7330390")](Ma(d[c - 1]), 10, 15 * c);
      // if (4 !== d.length || "5" !== d[0][0] || "7" !== d[3][0]) md.prototype.Ld = md.prototype.Fw;
      Hk = a;
    }
  }
  Q.className = 'Diagram';
  Q.fromDiv = function(a) {
    var b = a;
    'string' === typeof a && (b = x.document.getElementById(a));
    return b instanceof HTMLDivElement && b.H instanceof Q ? b.H : null;
  };
  Q.inherit = function(a, b) {
    function c() {}
    if (Object.getPrototypeOf(a).prototype)
      throw Error(
        'Used go.Diagram.inherit defining already defined class \n' + a,
      );
    c.prototype = b.prototype;
    a.prototype = new c();
    a.prototype.constructor = a;
  };
  Q.useDOM = function(a) {
    Og = a ? void 0 !== x.document : !1;
  };
  Q.isUsingDOM = function() {
    return Og;
  };
  Q.None = rh;
  Q.Uniform = Yi;
  Q.UniformToFill = Zi;
  Q.CycleAll = Ef;
  Q.CycleNotDirected = If;
  Q.CycleNotDirectedFast = Kf;
  Q.CycleNotUndirected = Lf;
  Q.CycleDestinationTree = Ff;
  Q.CycleSourceTree = Hf;
  Q.DocumentScroll = Rh;
  Q.InfiniteScroll = Th;
  Q.TreeParentCollapsed = vi;
  Q.AllParentsCollapsed = Dk;
  Q.AnyParentsCollapsed = Ek;

  function ri() {
    this.by = null;
    this.j = 'zz@orderNum';
    '63ad05bbe23a1786468a4c741b6d2' === this._tk
      ? (this.pd = this.j = !0)
      : (this.pd = null);
  }

  function sj(a, b) {
    b.Zb.setTransform(b.kc, 0, 0, b.kc, 0, 0);
    b.Zb.Pc();
    if (null === a.pd)
      a: {
        b = 'f';
        var c = x[Ma('76a715b2f73f148a')][Ma('72ba13b5')];
        a.pd = !0;
        if (Og) {
          var d = Q[Ma('76a115b6ed251eaf4692')];
          if (d)
            for (var e = Fk.iterator; e.next(); ) {
              d = e.value;
              d = Ma(d).split(Ma('39e9'));
              if (6 > d.length) break;
              var f = Ma(d[1]).split('.');
              if ('7da71ca0' !== d[4]) break;
              var g = Ma(ra[Ma('6cae19')]).split('.');
              if (f[0] > g[0] || (f[0] === g[0] && f[1] >= g[1])) {
                var h = x[Ma('74a900bae4370f8b51')][
                  Ma('6fbb13a1c2311e8a57')
                ].toLowerCase();
                g = h[Ma('73a612b6fb191d')](Ma('3aad1ab6e022098b4dc4'));
                f = Ma(d[2]);
                if (
                  -1 < g &&
                  ((h = h[Ma('73a612b6fb191d')](f.toLowerCase() + '/')),
                  (a.pd = !(-1 < h && h < g)),
                  !a.pd)
                )
                  break;
                g = c[Ma('76ad18b4f73e')];
                for (h = c[Ma('73a612b6fb191d')](Ma('35e7')) + 2; h < g; h++)
                  b += c[h];
                g = b[Ma('73a612b6fb191d')](f);
                0 > g &&
                  f !== Ma('7da71ca0ad381e90') &&
                  (g = b[Ma('73a612b6fb191d')](Ma('76a715b2ef3e149757')));
                0 > g &&
                  (g = b[Ma('73a612b6fb191d')](Ma('76a715b2ef3e149757')));
                0 > g &&
                  (g = c[Ma('73a612b6fb191d')](Ma('7baa19a6f76c1988428554')));
                a.pd = !(
                  (0 <= g && g < b[Ma('73a612b6fb191d')](Ma('35'))) ||
                  -1 === b[Ma('73a612b6fb191d')](Ma('35'))
                );
                if (!a.pd) break;
                if (
                  c[Ma('73a612b6fb191d')](Ma('7fb002b6ed25128b4da25b2e')) &&
                  c[Ma('73a612b6fb191d')](Ma('75ba1beee63a1e875799507d')) &&
                  ((a.pd = !(-1 < c[Ma('73a612b6fb191d')](f))), !a.pd)
                )
                  break;
                if ('#' === f[0]) {
                  g = x.document.createElement('div');
                  for (var k = d[0].replace(/[A-Za-z]/g, ''); 4 > k.length; )
                    k += '9';
                  h = k;
                  k = k.substr(k.length - 4);
                  d = '';
                  d += ['gsh', 'gsf'][parseInt(k.substr(0, 1), 10) % 2];
                  d += ['Header', 'Background', 'Display', 'Feedback'][
                    parseInt(k.substr(0, 1), 10) % 4
                  ];
                  g[Ma('79a417a0f0181a8946')] = d;
                  if (x.document[Ma('78a712aa')]) {
                    x.document[Ma('78a712aa')][Ma('7bb806b6ed32388c4a875b')](g);
                    k = x
                      .getComputedStyle(g)
                      .getPropertyValue(Ma('78a704b7e62456904c9b12701b6532a8'));
                    var l = x
                      .getComputedStyle(g)
                      .getPropertyValue(Ma('75b817b0ea2202'));
                    x.document[Ma('78a712aa')][Ma('68ad1bbcf533388c4a875b')](g);
                    if (k)
                      if (
                        ((g = x[Ma('77a902b0eb1b1e804a8a')]),
                        l === '0.' + (parseInt(h, 10) % 100) ||
                          (-1 !== k.indexOf(parseInt(f[1] + f[2], 16)) &&
                            -1 !== k.indexOf(parseInt(f[3] + f[4], 16))))
                      ) {
                        a.pd = !1;
                        break;
                      } else if (
                        g &&
                        g(Ma('32ae19a1e0331fc94084537c067a67fa59f1386b89d006'))
                          .matches
                      )
                        for (
                          d = '.' + d, f = 0;
                          f < document.styleSheets.length;
                          f++
                        ) {
                          g =
                            document.styleSheets[f].rules ||
                            document.styleSheets[f].cssRules;
                          for (var m in g)
                            if (d === g[m].selectorText) {
                              a.pd = !1;
                              break a;
                            }
                        }
                  } else (a.pd = null), (a.pd = !1);
                }
              }
            }
          else {
            m = c[Ma('76ad18b4f73e')];
            for (e = c[Ma('73a612b6fb191d')](Ma('35e7')) + 2; e < m; e++)
              b += c[e];
            c = b[Ma('73a612b6fb191d')](Ma('7da71ca0ad381e90'));
            a.pd = !(0 <= c && c < b[Ma('73a612b6fb191d')](Ma('35')));
          }
        }
      }
    return 0 < a.pd && a !== a.by ? !0 : !1;
  }

  function si(a, b) {
    if (Og) {
      (void 0 !== b && null !== b) ||
        C('Diagram setup requires an argument DIV.');
      null !== a.La && C('Diagram has already completed setup.');
      'string' === typeof b
        ? (a.La = x.document.getElementById(b))
        : b instanceof HTMLDivElement
        ? (a.La = b)
        : C('No DIV or DIV id supplied: ' + b);
      null === a.La && C('Invalid DIV id; could not get element with id: ' + b);
      void 0 !== a.La.H &&
        C('Invalid div id; div already has a Diagram associated with it.');
      if (!a.cl && x.ResizeObserver) {
        var c = sa(function() {
          a.Mb();
        }, 250);
        a.cl = new x.ResizeObserver(function() {
          c();
        });
        a.cl.observe(a.La);
      }
      'static' === x.getComputedStyle(a.La, null).position &&
        (a.La.style.position = 'relative');
      b = 5;
      var d = 'rgba(2' + b + '5, 255, 255, 0)';
      b--;
      a.La.style['-webkit-tap-highlight-color'] = d;
      a.La.innerHTML = '';
      a.La.H = a;
      a.La.goDiagram = a;
      a.La.go = x.go;
      var e = a.kr ? new xj(a) : new Bk(a);
      void 0 !== e.style &&
        ((e.style.position = 'absolute'),
        (e.style.top = '0px'),
        (e.style.left = '0px'),
        'rtl' ===
          x.getComputedStyle(a.La, null).getPropertyValue('direction') &&
          (a.$m = !0),
        (e.style.zIndex = '2'),
        (e.style.userSelect = 'none'),
        (e.style.MozUserSelect = 'none'),
        (e.style.touchAction = 'none'));
      a.Ha = e;
      a.Zb = e.context;
      d = a.Zb;
      a.kc = a.computePixelRatio();
      a.viewSize.v() ||
        ((a.Ba = a.La.clientWidth || 1), (a.Aa = a.La.clientHeight || 1));
      zj(a, a.Ba, a.Aa);
      a.La.insertBefore(e.Sa, a.La.firstChild);
      e = new Bk(null);
      e.width = 1;
      e.height = 1;
      a.Ov = e;
      a.Ux = e.context;
      if (Og) {
        e = ua('div');
        var f = ua('div');
        e.style.position = 'absolute';
        e.style.overflow = 'auto';
        e.style.width = a.Ba + 'px';
        e.style.height = a.Aa + 'px';
        e.style.zIndex = '1';
        f.style.position = 'absolute';
        f.style.width = '1px';
        f.style.height = '1px';
        a.La.appendChild(e);
        e.appendChild(f);
        e.onscroll = Gi;
        e.addEventListener('pointerdown', Qi);
        e.H = a;
        e.$x = !0;
        e.ay = !0;
        a.Qt = e;
        a.Nt = f;
      }
      a.Jo = sa(function() {
        a.Rh = null;
        a.N();
      }, 300);
      a.sv = sa(function() {
        sh(a);
      }, 250);
      a.preventDefault = function(a) {
        a.preventDefault();
        return !1;
      };
      a.Sj = function(b) {
        if (a.isEnabled) {
          var c = cj(a, b, !0);
          c.bubbles = !0;
          var d = 0,
            e = 0;
          c.delta = 0;
          void 0 !== b.deltaX
            ? (0 !== b.deltaX && (d = 0 < b.deltaX ? 1 : -1),
              0 !== b.deltaY && (e = 0 < b.deltaY ? 1 : -1),
              (c.delta = Math.abs(b.deltaX) > Math.abs(b.deltaY) ? -d : -e))
            : void 0 !== b.wheelDeltaX
            ? (0 !== b.wheelDeltaX && (d = 0 < b.wheelDeltaX ? -1 : 1),
              0 !== b.wheelDeltaY && (e = 0 < b.wheelDeltaY ? -1 : 1),
              (c.delta =
                Math.abs(b.wheelDeltaX) > Math.abs(b.wheelDeltaY) ? -d : -e))
            : void 0 !== b.wheelDelta &&
              0 !== b.wheelDelta &&
              (c.delta = 0 < b.wheelDelta ? 1 : -1);
          a.doMouseWheel();
          gj(c, b);
        }
      };
      a.Iz = function(b) {
        a.isEnabled &&
          ((a.Kk = !1),
          cj(a, b, !0),
          (b = a.currentTool),
          b.cancelWaitAfter(),
          b.standardMouseOver());
      };
      a.Wj = function(b) {
        if (a.isEnabled) {
          a.Kk = !0;
          var c = a.Dt;
          void 0 === c[b.pointerId] && (c[b.pointerId] = b);
          c = a.$k;
          var d = !1;
          if (null !== c[0] && c[0].pointerId === b.pointerId) c[0] = b;
          else if (null !== c[1] && c[1].pointerId === b.pointerId)
            (c[1] = b), (d = !0);
          else if (null === c[0]) c[0] = b;
          else if (null === c[1]) (c[1] = b), (d = !0);
          else {
            b.preventDefault();
            return;
          }
          if ((c = 'touch' === b.pointerType || 'pen' === b.pointerType))
            (a.Wt = !1), (a.jt = !0);
          var e = d;
          d = fj(a, b, !0, !1, !0, e);
          dj(a, b, d);
          d.targetDiagram = ej(b, b.target);
          d.targetObject = null;
          e || d.clone(a.Fp);
          e = a.$v;
          c = c ? 25 : 10;
          b.timeStamp - a.Zv < a.hy &&
          !(Math.abs(e.x - b.screenX) > c || Math.abs(e.y - b.screenY) > c)
            ? a.Yp++
            : (a.Yp = 1);
          d.clickCount = a.Yp;
          a.Zv = b.timeStamp;
          a.$v.kg(b.screenX, b.screenY);
          a.doMouseDown();
          1 === b.button ? b.preventDefault() : gj(d, b);
        }
      };
      a.Xj = function(b) {
        if (a.isEnabled) {
          a.Kk = !0;
          var c = a.$k;
          if (null !== c[0] && c[0].pointerId === b.pointerId) c[0] = b;
          else {
            if (null !== c[1] && c[1].pointerId === b.pointerId) {
              c[1] = b;
              return;
            }
            if (null === c[0]) c[0] = b;
            else return;
          }
          if (c[0].pointerId === b.pointerId) {
            c = fj(a, b, !1, !1, !1, null !== c[1]);
            var d = x.document.elementFromPoint(b.clientX, b.clientY);
            null !== d &&
              void 0 !== d.shadowRoot &&
              null !== d.shadowRoot &&
              (d = d.shadowRoot.elementFromPoint(b.clientX, b.clientY));
            var e = a,
              f = b;
            d && d.H && ((f = b), (e = d.H));
            c.targetDiagram = e;
            dj(a, f, c);
            c.targetObject = null;
            a.doMouseMove();
            gj(c, b);
          }
        }
      };
      a.Zj = function(b) {
        if (a.isEnabled) {
          a.Kk = !0;
          var c = 'touch' === b.pointerType || 'pen' === b.pointerType,
            d = a.Dt;
          if (c && a.Wt) delete d[b.pointerId], b.preventDefault();
          else if (
            ((d = a.$k), null !== d[0] && d[0].pointerId === b.pointerId)
          ) {
            d[0] = null;
            d = fj(a, b, !1, !0, !0, !1);
            var e = x.document.elementFromPoint(b.clientX, b.clientY);
            null !== e &&
              void 0 !== e.shadowRoot &&
              null !== e.shadowRoot &&
              (e = e.shadowRoot.elementFromPoint(b.clientX, b.clientY));
            null !== e && e.H instanceof Q && e.H !== a && dj(e.H, b, d);
            null === e && (e = b.target);
            dj(a, b, d);
            d.clickCount = a.Yp;
            d.targetDiagram = ej(b, e);
            d.targetObject = null;
            a.doMouseUp();
            gj(d, b);
            c && (a.jt = !1);
          } else
            null !== d[1] && d[1].pointerId === b.pointerId && (d[1] = null);
        }
      };
      a.Yj = function(b) {
        if (a.isEnabled) {
          a.Kk = !1;
          var c = a.Dt;
          c[b.pointerId] && delete c[b.pointerId];
          c = a.$k;
          null !== c[0] && c[0].pointerId === b.pointerId && (c[0] = null);
          null !== c[1] && c[1].pointerId === b.pointerId && (c[1] = null);
          'touch' !== b.pointerType &&
            'pen' !== b.pointerType &&
            ((b = a.currentTool), b.cancelWaitAfter(), b.standardMouseOver());
        }
      };
      a.Qs = d.Z['d' + Ik[1] + Ik[2] + 'wI' + Ak.slice(1, 5)][
        'b' + Jk.slice(1, b)
      ](d.Z, Hk, b, b);
      d.Oc(!0);
      Ei(a);
    }
  }
  ri.className = 'DiagramHelper';

  function Te(a) {
    this.j = void 0 === a ? new I() : a;
    this.m = new I();
  }
  ma.Object.defineProperties(Te.prototype, {
    point: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j = a;
      },
    },
    shifted: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a;
      },
    },
  });
  var Ik = 'DraggingInfo';
  Te.className = 'DraggingInfo';

  function Kj(a, b, c) {
    this.node = a;
    this.info = b;
    this.Eu = c;
  }
  Kj.className = 'DraggingNodeInfoPair';

  function Ce() {
    this.reset();
  }
  Ce.prototype.reset = function() {
    this.isGridSnapEnabled = !1;
    this.isGridSnapRealtime = !0;
    this.gridSnapCellSize = new K(NaN, NaN).freeze();
    this.gridSnapCellSpot = tc;
    this.gridSnapOrigin = new I(NaN, NaN).freeze();
    this.groupsSnapMembers = this.dragsTree = this.dragsLink = !1;
    this.dragsMembers = this.groupsAlwaysMove = !0;
  };
  Ce.className = 'DraggingOptions';

  function Kk(a, b) {
    if ('string' === typeof a || (x.Element && a instanceof Element))
      var c = Q.call(this, a) || this;
    else (c = Q.call(this) || this), (b = a);
    Lk(c);
    b && c.Vl(b);
    return c;
  }
  la(Kk, Q);

  function Lk(a) {
    a.allowDragOut = !0;
    a.allowMove = !1;
    a.isReadOnly = !0;
    a.contentAlignment = uc;
    a.layout = new Mk();
  }
  Kk.prototype.reset = function() {
    Q.prototype.reset.call(this);
    Lk(this);
  };
  Kk.className = 'Palette';

  function Nk(a, b) {
    if ('string' === typeof a || (x.Element && a instanceof Element))
      var c = Q.call(this, a) || this;
    else (c = Q.call(this) || this), (b = a);
    var d = c;
    c.animationManager.isEnabled = !1;
    c.wb = !0;
    c.W = null;
    c.Tm = !1;
    c.Um = !1;
    c.F = !0;
    c.u = !0;
    c.ga = 0;
    c.m = !1;
    c.fl = null;
    c.Fx('drawShadows', !1);
    a = new U();
    var e = new Cf();
    e.stroke = 'magenta';
    e.strokeWidth = 2;
    e.fill = 'transparent';
    e.name = 'BOXSHAPE';
    a.selectable = !0;
    a.selectionAdorned = !1;
    a.selectionObjectName = 'BOXSHAPE';
    a.locationObjectName = 'BOXSHAPE';
    a.resizeObjectName = 'BOXSHAPE';
    a.cursor = 'move';
    a.add(e);
    c.j = a;
    c.allowCopy = !1;
    c.allowDelete = !1;
    c.allowSelect = !0;
    c.autoScrollRegion = new ec(0, 0, 0, 0);
    c.pa.h(0, 0);
    c.toolManager.gb('Dragging', new Ok(), c.toolManager.mouseMoveTools);
    c.click = function() {
      var a = d.observed;
      if (null !== a) {
        var b = a.viewportBounds,
          c = d.lastInput.documentPoint;
        a.position = new I(c.x - b.width / 2, c.y - b.height / 2);
      }
    };
    c.Gf = function() {
      d.Va();
      Pk(d);
    };
    c.Qd = function() {
      null !== d.observed && (d.Va(), d.N());
    };
    c.Ga = function() {
      1 > d.updateDelay
        ? d.N()
        : d.m ||
          ((d.m = !0),
          setTimeout(function() {
            return d.redraw();
          }, d.updateDelay));
    };
    c.Ff = function() {
      null !== d.observed && Pk(d);
    };
    c.autoScale = Yi;
    c.wb = !1;
    b && Object.assign(c, b);
    return c;
  }
  la(Nk, Q);
  Nk.prototype.computePixelRatio = function() {
    return 1;
  };
  Nk.prototype.redraw = function() {
    if (this.m && 1 <= this.updateDelay) {
      this.m = !1;
      var a = this.Ha,
        b = this.Zb;
      if (null !== a && null !== b) {
        qj(this);
        if (null === this.fl) {
          var c = new Bk(null);
          c.width = a.width;
          c.height = a.height;
          this.fl = c;
        }
        try {
          (this.Ha = this.fl),
            (this.Zb = this.Ha.context),
            this.Zb.Oc(!0),
            this.Zb.setTransform(1, 0, 0, 1, 0, 0),
            this.Zb.clearRect(0, 0, this.Ha.width, this.Ha.height),
            Qk(this);
        } finally {
          (this.Ha = a), (this.Zb = b);
        }
      }
    }
    Q.prototype.redraw.call(this);
  };
  Nk.prototype.tc = function() {
    null === this.La && C('No div specified');
    null === this.Ha && C('No canvas specified');
    if (!(this.Ha instanceof xj) && (ei(this.box), this.bd)) {
      var a = this.observed;
      if (
        null !== a &&
        !a.animationManager.defaultAnimation.isAnimating &&
        a.ji
      ) {
        qj(this);
        var b = this.Ha;
        a = this.Zb;
        a.Oc(!0);
        a.setTransform(1, 0, 0, 1, 0, 0);
        a.clearRect(0, 0, b.width, b.height);
        1 > this.updateDelay
          ? Qk(this)
          : null !== this.fl &&
            (a.drawImage(this.fl.Sa, 0, 0),
            (b = this.Bb),
            b.reset(),
            1 !== this.scale && b.scale(this.scale),
            (0 === this.position.x && 0 === this.position.y) ||
              b.translate(-this.position.x, -this.position.y),
            a.scale(this.kc, this.kc),
            a.transform(b.m11, b.m12, b.m21, b.m22, b.dx, b.dy));
        b = this.Ua.s;
        for (var c = b.length, d = 0; d < c; d++) b[d].tc(a, this);
        this.bd = this.Ui = !1;
      }
    }
  };

  function Qk(a) {
    var b = a.observed;
    if (null !== b) {
      var c = a.drawsTemporaryLayers,
        d = a.drawsGrid && c,
        e = b.grid;
      d &&
        null !== e &&
        e.visible &&
        !isNaN(e.width) &&
        !isNaN(e.height) &&
        ((e = M.alloc()
          .assign(a.viewportBounds)
          .Xc(b.viewportBounds)),
        jj(b, e),
        M.free(e),
        mh(b));
      var f = a.Bb;
      f.reset();
      1 !== a.scale && f.scale(a.scale);
      (0 === a.position.x && 0 === a.position.y) ||
        f.translate(-a.position.x, -a.position.y);
      e = a.Zb;
      e.scale(a.kc, a.kc);
      e.transform(f.m11, f.m12, f.m21, f.m22, f.dx, f.dy);
      b = b.Ua.s;
      f = b.length;
      for (var g = 0; g < f; g++) {
        var h = b[g],
          k = a;
        if (h.visible && 0 !== h.opacity) {
          var l = h.diagram.grid.part;
          if (!c && h.isTemporary)
            d &&
              l.layer === h &&
              ((h = fi(h, e)), l.tc(e, k), (e.globalAlpha = h));
          else {
            for (
              var m = fi(h, e),
                n = k.scale,
                p = M.alloc(),
                r = h.Ma.s,
                q = r.length,
                u = 0;
              u < q;
              u++
            ) {
              var w = r[u];
              (d || w !== l) && h.$h(e, w, k, null, n, p, !1);
            }
            M.free(p);
            e.globalAlpha = m;
          }
        }
      }
    }
  }

  function Pk(a) {
    var b = a.box;
    if (null !== b) {
      var c = a.observed;
      if (null !== c) {
        a.bd = !0;
        c = c.viewportBounds;
        var d = b.selectionObject,
          e = K.alloc();
        e.h(c.width, c.height);
        d.desiredSize = e;
        K.free(e);
        a = 2 / a.scale;
        d instanceof Cf && (d.strokeWidth = a);
        b.location = new I(c.x - a / 2, c.y - a / 2);
        b.isSelected = !0;
      }
    }
  }
  Nk.prototype.computeBounds = function() {
    var a = this.observed;
    if (null === a) return cc;
    var b = a.documentBounds.copy();
    b.Xc(a.viewportBounds);
    return b;
  };
  Nk.prototype.invalidateViewport = function() {
    !0 !== this.bd && ((this.bd = !0), this.Mb());
  };
  Nk.prototype.onViewportBoundsChanged = function(a, b, c, d) {
    this.wb ||
      (Ri(this),
      this.N(),
      Wi(this),
      this.Va(),
      Pk(this),
      (this.kd.scale = c),
      (this.kd.position.x = a.x),
      (this.kd.position.y = a.y),
      this.kd.bounds.assign(a),
      (this.kd.lx = d),
      this.P('ViewportBoundsChanged', this.kd, a));
  };
  ma.Object.defineProperties(Nk.prototype, {
    observed: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        var b = this.W;
        a instanceof Nk &&
          C('Overview.observed Diagram may not be an Overview itself: ' + a);
        if (b !== a) {
          null !== b &&
            (this.remove(this.box),
            b.Il('ViewportBoundsChanged', this.Gf),
            b.Il('DocumentBoundsChanged', this.Qd),
            b.Il('InvalidateDraw', this.Ga),
            b.Il('AnimationFinished', this.Ff));
          this.W = a;
          null !== a &&
            (a.wj('ViewportBoundsChanged', this.Gf),
            a.wj('DocumentBoundsChanged', this.Qd),
            a.wj('InvalidateDraw', this.Ga),
            a.wj('AnimationFinished', this.Ff),
            this.add(this.box));
          this.Va();
          if (null === a) {
            this.fl = null;
            var c = this.Ha,
              d = this.Zb;
            c &&
              d &&
              (d.setTransform(1, 0, 0, 1, 0, 0),
              d.clearRect(0, 0, c.width, c.height));
          } else this.Ga(null), Pk(this), this.N();
          this.g('observed', b, a);
        }
      },
    },
    box: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        var b = this.j;
        b !== a &&
          ((this.j = a),
          this.remove(b),
          this.add(this.j),
          Pk(this),
          this.g('box', b, a));
      },
    },
    drawsTemporaryLayers: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F !== a && ((this.F = a), this.redraw());
      },
    },
    drawsGrid: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u !== a && ((this.u = a), this.redraw());
      },
    },
    updateDelay: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        0 > a && (a = 0);
        this.ga !== a && (this.ga = a);
      },
    },
  });
  Nk.className = 'Overview';

  function Ok() {
    Be.call(this);
    this.j = null;
  }
  la(Ok, Be);
  Ok.prototype.canStart = function() {
    if (!this.isEnabled) return !1;
    var a = this.diagram;
    if (null === a || !a.allowMove || !a.allowSelect) return !1;
    var b = a.observed;
    if (null === b) return !1;
    var c = a.lastInput;
    if (
      !c.left ||
      (a.currentTool !== this &&
        (!this.isBeyondDragSize() ||
          (c.isTouchEvent &&
            c.timestamp - a.firstInput.timestamp < this.delay)))
    )
      return !1;
    null === this.findDraggablePart() &&
      ((c = b.viewportBounds),
      (this.j = new I(c.width / 2, c.height / 2)),
      (a = a.firstInput.documentPoint),
      (b.position = new I(a.x - this.j.x, a.y - this.j.y)));
    return !0;
  };
  Ok.prototype.doActivate = function() {
    this.j = null;
    Be.prototype.doActivate.call(this);
  };
  Ok.prototype.doUpdateCursor = function() {
    var a = this.diagram,
      b = a.box;
    null !== b && b.cursor && (a.currentCursor = b.cursor);
  };
  Ok.prototype.moveParts = function() {
    var a = this.diagram,
      b = a.observed;
    if (null !== b) {
      var c = a.box;
      if (null !== c) {
        if (null === this.j) {
          var d = a.firstInput.documentPoint;
          c = c.location;
          this.j = new I(d.x - c.x, d.y - c.y);
        }
        a = a.lastInput.documentPoint;
        b.position = new I(a.x - this.j.x, a.y - this.j.y);
      }
    }
  };
  Ok.className = 'OverviewDraggingTool';

  function Rk() {
    Ra(this);
    this.H = le;
    this.Ga = this.u = this.m = !0;
    this.F = this.W = this.hb = this.ga = !1;
    this.dj = this.j = null;
    this.Db = 1.05;
    this.mt = NaN;
    this.Yv = null;
    this.fu = NaN;
    this.du = cc;
    this.cb = !0;
    this.Vf = null;
    this.nb = 200;
  }
  Rk.prototype.toString = function() {
    return 'CommandHandler';
  };
  Rk.prototype.Le = function(a) {
    this.H = a;
  };
  Rk.prototype.doKeyDown = function() {
    var a = this.diagram,
      b = a.lastInput,
      c = Qa ? b.meta : b.control,
      d = b.shift,
      e = b.alt,
      f = b.key;
    !c || ('C' !== f && 'Insert' !== f)
      ? (c && 'X' === f) || (d && 'Del' === f)
        ? this.canCutSelection() && this.cutSelection()
        : (c && 'V' === f) || (d && 'Insert' === f)
        ? this.canPasteSelection() && this.pasteSelection()
        : (c && 'Y' === f) || (e && d && 'Backspace' === f)
        ? this.canRedo() && this.redo()
        : (c && 'Z' === f) || (e && 'Backspace' === f)
        ? this.canUndo() && this.undo()
        : 'Del' === f || 'Backspace' === f
        ? this.canDeleteSelection() && this.deleteSelection()
        : c && 'A' === f
        ? this.canSelectAll() && this.selectAll()
        : 'Esc' === f
        ? this.canStopCommand() && this.stopCommand()
        : 'Up' === f
        ? a.allowVerticalScroll &&
          (c ? a.scroll('pixel', 'up') : a.scroll('line', 'up'))
        : 'Down' === f
        ? a.allowVerticalScroll &&
          (c ? a.scroll('pixel', 'down') : a.scroll('line', 'down'))
        : 'Left' === f
        ? a.allowHorizontalScroll &&
          (c ? a.scroll('pixel', 'left') : a.scroll('line', 'left'))
        : 'Right' === f
        ? a.allowHorizontalScroll &&
          (c ? a.scroll('pixel', 'right') : a.scroll('line', 'right'))
        : 'PageUp' === f
        ? d && a.allowHorizontalScroll
          ? a.scroll('page', 'left')
          : a.allowVerticalScroll && a.scroll('page', 'up')
        : 'PageDown' === f
        ? d && a.allowHorizontalScroll
          ? a.scroll('page', 'right')
          : a.allowVerticalScroll && a.scroll('page', 'down')
        : 'Home' === f
        ? c && a.allowVerticalScroll
          ? a.scroll('document', 'up')
          : !c && a.allowHorizontalScroll && a.scroll('document', 'left')
        : 'End' === f
        ? c && a.allowVerticalScroll
          ? a.scroll('document', 'down')
          : !c && a.allowHorizontalScroll && a.scroll('document', 'right')
        : ' ' === f
        ? this.canScrollToPart() && this.scrollToPart()
        : 'Subtract' === f
        ? this.canDecreaseZoom() && this.decreaseZoom()
        : 'Add' === f
        ? this.canIncreaseZoom() && this.increaseZoom()
        : c && '0' === f
        ? this.canResetZoom() && this.resetZoom()
        : d && 'Z' === f
        ? this.canZoomToFit() && this.zoomToFit()
        : c && !d && 'G' === f
        ? this.canGroupSelection() && this.groupSelection()
        : c && d && 'G' === f
        ? this.canUngroupSelection() && this.ungroupSelection()
        : 'F2' === f || (b.event && 'F2' === b.event.key)
        ? this.canEditTextBlock() && this.editTextBlock()
        : 'ContextMenu' === f || (b.event && 'ContextMenu' === b.event.key)
        ? this.canShowContextMenu() && this.showContextMenu()
        : (b.bubbles = !0)
      : this.canCopySelection() && this.copySelection();
  };
  Rk.prototype.doKeyUp = function() {
    this.diagram.lastInput.bubbles = !0;
  };
  Rk.prototype.stopCommand = function() {
    var a = this.diagram,
      b = a.currentTool;
    b instanceof La && a.allowSelect && a.clearSelection();
    null !== b && b.doCancel();
  };
  Rk.prototype.canStopCommand = function() {
    return !0;
  };
  Rk.prototype.selectAll = function() {
    var a = this.diagram;
    a.N();
    try {
      a.currentCursor = 'wait';
      a.P('ChangingSelection', a.selection);
      for (var b = a.parts; b.next(); ) b.value.isSelected = !0;
      for (var c = a.nodes; c.next(); ) c.value.isSelected = !0;
      for (var d = a.links; d.next(); ) d.value.isSelected = !0;
    } finally {
      a.P('ChangedSelection', a.selection), (a.currentCursor = '');
    }
  };
  Rk.prototype.canSelectAll = function() {
    return this.diagram.allowSelect;
  };
  Rk.prototype.deleteSelection = function() {
    var a = this.diagram;
    try {
      a.currentCursor = 'wait';
      a.P('ChangingSelection', a.selection);
      a.Da('Delete');
      a.P('SelectionDeleting', a.selection);
      for (var b = new G(), c = a.selection.iterator; c.next(); )
        Sk(
          b,
          c.value,
          !0,
          this.deletesTree ? Infinity : 0,
          this.deletesConnectedLinks ? null : !1,
          function(a) {
            return a.canDelete();
          },
        );
      a.hs(b, !0);
      a.P('SelectionDeleted', b);
    } finally {
      a.eb('Delete'),
        a.P('ChangedSelection', a.selection),
        (a.currentCursor = '');
    }
  };
  Rk.prototype.canDeleteSelection = function() {
    var a = this.diagram;
    return a.isReadOnly ||
      a.isModelReadOnly ||
      !a.allowDelete ||
      0 === a.selection.count
      ? !1
      : !0;
  };
  Rk.prototype.copySelection = function() {
    var a = this.diagram,
      b = new G();
    for (a = a.selection.iterator; a.next(); )
      Sk(
        b,
        a.value,
        !0,
        this.copiesTree ? Infinity : 0,
        this.copiesConnectedLinks,
        function(a) {
          return a.canCopy();
        },
      );
    this.copyToClipboard(b);
  };
  Rk.prototype.canCopySelection = function() {
    var a = this.diagram;
    return a.allowCopy && a.allowClipboard && 0 !== a.selection.count ? !0 : !1;
  };
  Rk.prototype.cutSelection = function() {
    this.copySelection();
    this.deleteSelection();
  };
  Rk.prototype.canCutSelection = function() {
    var a = this.diagram;
    return !a.isReadOnly &&
      !a.isModelReadOnly &&
      a.allowCopy &&
      a.allowDelete &&
      a.allowClipboard &&
      0 !== a.selection.count
      ? !0
      : !1;
  };
  Rk.prototype.copyToClipboard = function(a) {
    var b = this.diagram,
      c = null;
    if (null === a) (yi = null), (zi = '');
    else {
      c = b.model;
      var d = !1,
        e = !1,
        f = null;
      try {
        c.Bl() && ((d = c.Dj), (c.Dj = this.copiesParentKey)),
          c.Nj() && ((e = c.Cj), (c.Cj = this.copiesGroupKey)),
          (f = b.Ej(a, null, !0));
      } finally {
        c.Bl() && (c.Dj = d),
          c.Nj() && (c.Cj = e),
          (c = new E()),
          c.addAll(f),
          (yi = c),
          (zi = b.model.dataFormat);
      }
    }
    b.P('ClipboardChanged', c);
  };
  Rk.prototype.pasteFromClipboard = function() {
    var a = new G(),
      b = yi;
    if (null === b) return a;
    var c = this.diagram;
    if (zi !== c.model.dataFormat) return a;
    var d = c.model,
      e = !1,
      f = !1,
      g = null;
    try {
      d.Bl() && ((e = d.Dj), (d.Dj = this.copiesParentKey)),
        d.Nj() && ((f = d.Cj), (d.Cj = this.copiesGroupKey)),
        (g = c.Ej(b, c, !1));
    } finally {
      for (
        d.Bl() && (d.Dj = e), d.Nj() && (d.Cj = f), b = g.iterator;
        b.next();

      )
        (c = b.value),
          (d = b.key),
          c.location.v() ||
            (d.location.v()
              ? (c.location = d.location)
              : !c.position.v() && d.position.v() && (c.position = d.position)),
          a.add(c);
    }
    return a;
  };
  Rk.prototype.pasteSelection = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    try {
      b.currentCursor = 'wait';
      b.P('ChangingSelection', b.selection);
      b.Da('Paste');
      var c = this.pasteFromClipboard();
      0 < c.count && b.clearSelection(!0);
      for (var d = c.iterator; d.next(); ) d.value.isSelected = !0;
      if (null !== a) {
        var e = b.computePartsBounds(b.selection);
        if (e.v()) {
          var f = this.computeEffectiveCollection(b.selection, b.Em);
          ef(b, f, new I(a.x - e.centerX, a.y - e.centerY), b.Em, !1);
        }
      }
      b.P('ClipboardPasted', c);
    } finally {
      b.eb('Paste'),
        b.P('ChangedSelection', b.selection),
        (b.currentCursor = '');
    }
  };
  Rk.prototype.canPasteSelection = function() {
    var a = this.diagram;
    return a.isReadOnly ||
      a.isModelReadOnly ||
      !a.allowInsert ||
      !a.allowClipboard ||
      null === yi ||
      0 === yi.count ||
      zi !== a.model.dataFormat
      ? !1
      : !0;
  };
  Rk.prototype.undo = function() {
    this.diagram.undoManager.undo();
  };
  Rk.prototype.canUndo = function() {
    var a = this.diagram;
    return a.isReadOnly || a.isModelReadOnly
      ? !1
      : a.allowUndo && a.undoManager.canUndo();
  };
  Rk.prototype.redo = function() {
    this.diagram.undoManager.redo();
  };
  Rk.prototype.canRedo = function() {
    var a = this.diagram;
    return a.isReadOnly || a.isModelReadOnly
      ? !1
      : a.allowUndo && a.undoManager.canRedo();
  };
  Rk.prototype.decreaseZoom = function(a) {
    void 0 === a && (a = 1 / this.zoomFactor);
    var b = this.diagram;
    b.autoScale === rh &&
      ((a = b.scale * a), a < b.minScale || a > b.maxScale || (b.scale = a));
  };
  Rk.prototype.canDecreaseZoom = function(a) {
    void 0 === a && (a = 1 / this.zoomFactor);
    var b = this.diagram;
    if (b.autoScale !== rh) return !1;
    a = b.scale * a;
    return a < b.minScale || a > b.maxScale ? !1 : b.allowZoom;
  };
  Rk.prototype.increaseZoom = function(a) {
    void 0 === a && (a = this.zoomFactor);
    var b = this.diagram;
    b.autoScale === rh &&
      ((a = b.scale * a), a < b.minScale || a > b.maxScale || (b.scale = a));
  };
  Rk.prototype.canIncreaseZoom = function(a) {
    void 0 === a && (a = this.zoomFactor);
    var b = this.diagram;
    if (b.autoScale !== rh) return !1;
    a = b.scale * a;
    return a < b.minScale || a > b.maxScale ? !1 : b.allowZoom;
  };
  Rk.prototype.resetZoom = function(a) {
    void 0 === a && (a = this.defaultScale);
    var b = this.diagram;
    a < b.minScale || a > b.maxScale || (b.scale = a);
  };
  Rk.prototype.canResetZoom = function(a) {
    void 0 === a && (a = this.defaultScale);
    var b = this.diagram;
    return a < b.minScale || a > b.maxScale ? !1 : b.allowZoom;
  };
  Rk.prototype.zoomToFit = function() {
    var a = this.diagram,
      b = a.animationManager;
    b.wc();
    a.redraw();
    var c = a.position,
      d = a.scale;
    lh(b, 'Zoom To Fit');
    this.isZoomToFitRestoreEnabled &&
    d === this.fu &&
    !isNaN(this.mt) &&
    a.documentBounds.C(this.du)
      ? ((a.scale = this.mt),
        (a.position = this.Yv),
        (this.fu = NaN),
        (this.du = cc))
      : ((this.mt = d),
        (this.Yv = c.copy()),
        a.zoomToFit(),
        (this.fu = a.scale),
        (this.du = a.documentBounds.copy()));
    nh(b);
  };
  Rk.prototype.canZoomToFit = function() {
    return this.diagram.allowZoom;
  };
  Rk.prototype.scrollToPart = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    b.Za();
    if (null === a) {
      try {
        null !== this.Vf &&
          (this.Vf.next() ? (a = this.Vf.value) : (this.Vf = null));
      } catch (k) {
        this.Vf = null;
      }
      null === a &&
        (0 < b.highlighteds.count
          ? (this.Vf = b.highlighteds.iterator)
          : 0 < b.selection.count && (this.Vf = b.selection.iterator),
        null !== this.Vf && this.Vf.next() && (a = this.Vf.value));
    }
    if (null !== a) {
      var c = b.animationManager;
      lh(c, 'Scroll To Part');
      var d = this.scrollToPartPause;
      if (0 < d) {
        var e = Tk(this, a, [a]);
        if (1 === e.length)
          b.Da(), b.Dr(a.actualBounds), b.eb('Scroll To Part');
        else {
          var f = function() {
              b.Da();
              for (
                var a = e.pop();
                0 < e.length &&
                a instanceof V &&
                a.isTreeExpanded &&
                (!(a instanceof qf) || a.isSubGraphExpanded);

              )
                a = e.pop();
              0 < e.length
                ? (a instanceof U && b.bv(a.actualBounds),
                  a instanceof V &&
                    !a.isTreeExpanded &&
                    (a.isTreeExpanded = !0),
                  a instanceof qf &&
                    !a.isSubGraphExpanded &&
                    (a.isSubGraphExpanded = !0))
                : (a instanceof U && b.Dr(a.actualBounds),
                  b.Il('LayoutCompleted', g));
              b.eb('Scroll To Part');
            },
            g = function() {
              ta(f, (c.isEnabled ? c.duration : 0) + d);
            };
          b.wj('LayoutCompleted', g);
          f();
        }
      } else {
        var h = b.position.copy();
        b.Dr(a.actualBounds);
        h.$a(b.position) && c.wc();
      }
    }
  };

  function Tk(a, b, c) {
    if (b.isVisible()) return c;
    if (b instanceof ue) Tk(a, b.adornedPart, c);
    else if (b instanceof T) {
      var d = b.fromNode;
      null !== d && Tk(a, d, c);
      b = b.toNode;
      null !== b && Tk(a, b, c);
    } else
      b instanceof V &&
        ((d = b.labeledLink),
        null !== d && Tk(a, d, c),
        (d = b.ig()),
        null !== d &&
          (d.isTreeExpanded || d.wasTreeExpanded || c.push(d), Tk(a, d, c))),
        (b = b.containingGroup),
        null !== b &&
          (b.isSubGraphExpanded || b.wasSubGraphExpanded || c.push(b),
          Tk(a, b, c));
    return c;
  }
  Rk.prototype.canScrollToPart = function(a) {
    void 0 === a && (a = null);
    if (null !== a && !(a instanceof U)) return !1;
    a = this.diagram;
    return 0 === a.selection.count && 0 === a.highlighteds.count
      ? !1
      : a.allowHorizontalScroll && a.allowVerticalScroll;
  };
  Rk.prototype.collapseTree = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    try {
      b.Da('Collapse Tree');
      lh(b.animationManager, 'Collapse Tree');
      var c = new E();
      if (null !== a && a.isTreeExpanded) a.collapseTree(), c.add(a);
      else if (null === a)
        for (var d = b.selection.iterator; d.next(); ) {
          var e = d.value;
          e instanceof V && e.isTreeExpanded && (e.collapseTree(), c.add(e));
        }
      b.P('TreeCollapsed', c);
    } finally {
      b.eb('Collapse Tree');
    }
  };
  Rk.prototype.canCollapseTree = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    if (b.isReadOnly) return !1;
    if (null !== a) {
      if (!(a instanceof V && a.isTreeExpanded)) return !1;
      if (0 < a.to().count) return !0;
    } else
      for (a = b.selection.iterator; a.next(); )
        if (
          ((b = a.value),
          b instanceof V && b.isTreeExpanded && 0 < b.to().count)
        )
          return !0;
    return !1;
  };
  Rk.prototype.expandTree = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    try {
      b.Da('Expand Tree');
      lh(b.animationManager, 'Expand Tree');
      var c = new E();
      if (null !== a && !a.isTreeExpanded) a.expandTree(), c.add(a);
      else if (null === a)
        for (var d = b.selection.iterator; d.next(); ) {
          var e = d.value;
          e instanceof V && !e.isTreeExpanded && (e.expandTree(), c.add(e));
        }
      b.P('TreeExpanded', c);
    } finally {
      b.eb('Expand Tree');
    }
  };
  Rk.prototype.canExpandTree = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    if (b.isReadOnly) return !1;
    if (null !== a) {
      if (!(a instanceof V) || a.isTreeExpanded) return !1;
      if (0 < a.to().count) return !0;
    } else
      for (a = b.selection.iterator; a.next(); )
        if (
          ((b = a.value),
          b instanceof V && !b.isTreeExpanded && 0 < b.to().count)
        )
          return !0;
    return !1;
  };
  Rk.prototype.groupSelection = function() {
    var a = this.diagram,
      b = a.model;
    if (b.Oj()) {
      var c = this.archetypeGroupData;
      if (null !== c) {
        var d = null;
        try {
          a.currentCursor = 'wait';
          a.P('ChangingSelection', a.selection);
          a.Da('Group');
          for (var e = new E(), f = a.selection.iterator; f.next(); ) {
            var g = f.value;
            g.Tc() && g.canGroup() && e.add(g);
          }
          for (var h = new E(), k = e.iterator; k.next(); ) {
            var l = k.value;
            f = !1;
            for (var m = e.iterator; m.next(); )
              if (l.Md(m.value)) {
                f = !0;
                break;
              }
            f || h.add(l);
          }
          if (0 < h.count) {
            var n = h.first().containingGroup;
            if (null !== n)
              for (; null !== n; ) {
                e = !1;
                for (var p = h.iterator; p.next(); )
                  if (!p.value.Md(n)) {
                    e = !0;
                    break;
                  }
                if (e) n = n.containingGroup;
                else break;
              }
            if (c instanceof qf) kg(c), (d = c.copy()), null !== d && a.add(d);
            else if (b.Ku(c)) {
              var r = b.copyNodeData(c);
              ya(r) && (b.lf(r), (d = a.ci(r)));
            }
            if (null !== d) {
              null !== n && this.isValidMember(n, d) && (d.containingGroup = n);
              for (var q = h.iterator; q.next(); ) {
                var u = q.value;
                this.isValidMember(d, u) && (u.containingGroup = d);
              }
              a.clearSelection(!0);
              d.isSelected = !0;
            }
          }
          a.P('SelectionGrouped', d);
        } finally {
          a.eb('Group'),
            a.P('ChangedSelection', a.selection),
            (a.currentCursor = '');
        }
      }
    }
  };
  Rk.prototype.canGroupSelection = function() {
    var a = this.diagram;
    if (
      a.isReadOnly ||
      a.isModelReadOnly ||
      !a.allowInsert ||
      !a.allowGroup ||
      !a.model.Oj() ||
      null === this.archetypeGroupData
    )
      return !1;
    for (a = a.selection.iterator; a.next(); ) {
      var b = a.value;
      if (b.Tc() && b.canGroup()) return !0;
    }
    return !1;
  };

  function Uk(a) {
    var b = Ea();
    for (a = a.iterator; a.next(); ) {
      var c = a.value;
      c instanceof T || b.push(c);
    }
    a = new G();
    c = b.length;
    for (var d = 0; d < c; d++) {
      for (var e = b[d], f = !0, g = 0; g < c; g++)
        if (e.Md(b[g])) {
          f = !1;
          break;
        }
      f && a.add(e);
    }
    Ga(b);
    return a;
  }
  Rk.prototype.isValidMember = function(a, b) {
    if (null === b || a === b || b instanceof T) return !1;
    if (null !== a) {
      if (a === b || a.Md(b)) return !1;
      var c = a.memberValidation;
      if (
        (null !== c && !c(a, b)) ||
        (null === a.data && null !== b.data) ||
        (null !== a.data && null === b.data)
      )
        return !1;
    }
    c = this.memberValidation;
    return null !== c ? c(a, b) : !0;
  };
  Rk.prototype.ungroupSelection = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram,
      c = b.model;
    if (c.Oj())
      try {
        b.currentCursor = 'wait';
        b.P('ChangingSelection', b.selection);
        b.Da('Ungroup');
        var d = new E();
        if (null !== a) d.add(a);
        else
          for (var e = b.selection.iterator; e.next(); ) {
            var f = e.value;
            f instanceof qf && f.canUngroup() && d.add(f);
          }
        var g = new E();
        if (0 < d.count) {
          b.clearSelection(!0);
          for (var h = d.iterator; h.next(); ) {
            var k = h.value;
            k.expandSubGraph();
            var l = k.containingGroup,
              m = null !== l && null !== l.data ? c.ua(l.data) : void 0;
            g.addAll(k.memberParts);
            for (var n = g.iterator; n.next(); ) {
              var p = n.value;
              p.isSelected = !0;
              if (!(p instanceof T)) {
                var r = p.data;
                null !== r ? c.Po(r, m) : (p.containingGroup = l);
              }
            }
            b.remove(k);
          }
        }
        b.P('SelectionUngrouped', d, g);
      } finally {
        b.eb('Ungroup'),
          b.P('ChangedSelection', b.selection),
          (b.currentCursor = '');
      }
  };
  Rk.prototype.canUngroupSelection = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    if (
      b.isReadOnly ||
      b.isModelReadOnly ||
      !b.allowDelete ||
      !b.allowUngroup ||
      !b.model.Oj()
    )
      return !1;
    if (null !== a) {
      if (!(a instanceof qf)) return !1;
      if (a.canUngroup()) return !0;
    } else
      for (a = b.selection.iterator; a.next(); )
        if (((b = a.value), b instanceof qf && b.canUngroup())) return !0;
    return !1;
  };
  Rk.prototype.addTopLevelParts = function(a, b) {
    var c = !0;
    for (a = Uk(a).iterator; a.next(); ) {
      var d = a.value;
      null !== d.containingGroup &&
        (!b || this.isValidMember(null, d)
          ? (d.containingGroup = null)
          : (c = !1));
    }
    return c;
  };
  Rk.prototype.collapseSubGraph = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    try {
      b.Da('Collapse SubGraph');
      lh(b.animationManager, 'Collapse SubGraph');
      var c = new E();
      if (null !== a && a.isSubGraphExpanded) a.collapseSubGraph(), c.add(a);
      else if (null === a)
        for (var d = b.selection.iterator; d.next(); ) {
          var e = d.value;
          e instanceof qf &&
            e.isSubGraphExpanded &&
            (e.collapseSubGraph(), c.add(e));
        }
      b.P('SubGraphCollapsed', c);
    } finally {
      b.eb('Collapse SubGraph');
    }
  };
  Rk.prototype.canCollapseSubGraph = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    if (b.isReadOnly) return !1;
    if (null !== a) return a instanceof qf && a.isSubGraphExpanded ? !0 : !1;
    for (a = b.selection.iterator; a.next(); )
      if (((b = a.value), b instanceof qf && b.isSubGraphExpanded)) return !0;
    return !1;
  };
  Rk.prototype.expandSubGraph = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    try {
      b.Da('Expand SubGraph');
      lh(b.animationManager, 'Expand SubGraph');
      var c = new E();
      if (null !== a && !a.isSubGraphExpanded) a.expandSubGraph(), c.add(a);
      else if (null === a)
        for (var d = b.selection.iterator; d.next(); ) {
          var e = d.value;
          e instanceof qf &&
            !e.isSubGraphExpanded &&
            (e.expandSubGraph(), c.add(e));
        }
      b.P('SubGraphExpanded', c);
    } finally {
      b.eb('Expand SubGraph');
    }
  };
  Rk.prototype.canExpandSubGraph = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    if (b.isReadOnly) return !1;
    if (null !== a) return a instanceof qf && !a.isSubGraphExpanded ? !0 : !1;
    for (a = b.selection.iterator; a.next(); )
      if (((b = a.value), b instanceof qf && !b.isSubGraphExpanded)) return !0;
    return !1;
  };
  Rk.prototype.editTextBlock = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram,
      c = b.toolManager.findTool('TextEditing');
    if (null !== c) {
      if (null === a) {
        a = null;
        for (var d = b.selection.iterator; d.next(); ) {
          var e = d.value;
          if (e.canEdit()) {
            a = e;
            break;
          }
        }
        if (null === a) return;
        a = a.vl(function(a) {
          return a instanceof Qg && a.editable;
        });
      }
      null !== a &&
        ((b.currentTool = null), (c.textBlock = a), (b.currentTool = c));
    }
  };
  Rk.prototype.canEditTextBlock = function(a) {
    void 0 === a && (a = null);
    var b = this.diagram;
    if (
      b.isReadOnly ||
      b.isModelReadOnly ||
      !b.allowTextEdit ||
      null === b.toolManager.findTool('TextEditing')
    )
      return !1;
    if (null !== a) {
      if (!(a instanceof Qg)) return !1;
      a = a.part;
      if (null !== a && a.canEdit()) return !0;
    } else
      for (b = b.selection.iterator; b.next(); )
        if (
          ((a = b.value),
          a.canEdit() &&
            ((a = a.vl(function(a) {
              return a instanceof Qg && a.editable;
            })),
            null !== a))
        )
          return !0;
    return !1;
  };
  Rk.prototype.showContextMenu = function(a) {
    var b = this.diagram,
      c = b.toolManager.findTool('ContextMenu');
    if (
      null !== c &&
      (void 0 === a && (a = 0 < b.selection.count ? b.selection.first() : b),
      (a = c.findObjectWithContextMenu(a)),
      null !== a)
    ) {
      var d = b.lastInput,
        e = null;
      a instanceof Y
        ? (e = a.ia(yc))
        : b.viewportBounds.ba(d.documentPoint) ||
          ((e = b.viewportBounds),
          (e = new I(e.x + e.width / 2, e.y + e.height / 2)));
      null !== e &&
        ((d.viewPoint = b.Ro(e)),
        (d.documentPoint = e),
        (d.left = !1),
        (d.right = !0),
        (d.up = !0));
      b.currentTool = c;
      Mg(c, !1, a);
    }
  };
  Rk.prototype.canShowContextMenu = function(a) {
    var b = this.diagram,
      c = b.toolManager.findTool('ContextMenu');
    if (null === c) return !1;
    void 0 === a && (a = 0 < b.selection.count ? b.selection.first() : b);
    return null === c.findObjectWithContextMenu(a) ? !1 : !0;
  };
  Rk.prototype.computeEffectiveCollection = function(a, b) {
    var c = this.diagram,
      d = c.toolManager.findTool('Dragging'),
      e = c.currentTool === d;
    void 0 === b && (b = e ? d.dragOptions : c.Em);
    d = new pb();
    if (null === a) return d;
    for (var f = a.iterator; f.next(); ) Ij(c, d, f.value, e, b);
    if (null !== c.draggedLink && b.dragsLink) return d;
    for (f = a.iterator; f.next(); )
      (a = f.value),
        a instanceof T &&
          ((b = a.fromNode),
          null === b || d.contains(b)
            ? ((b = a.toNode), null === b || d.contains(b) || d.remove(a))
            : d.remove(a));
    return d;
  };
  ma.Object.defineProperties(Rk.prototype, {
    diagram: {
      get: function() {
        return this.H;
      },
    },
    copiesClipboardData: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a;
      },
    },
    copiesConnectedLinks: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u = a;
      },
    },
    deletesConnectedLinks: {
      get: function() {
        return this.Ga;
      },
      set: function(a) {
        this.Ga = a;
      },
    },
    copiesTree: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        this.ga = a;
      },
    },
    deletesTree: {
      get: function() {
        return this.hb;
      },
      set: function(a) {
        this.hb = a;
      },
    },
    copiesParentKey: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W = a;
      },
    },
    copiesGroupKey: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F = a;
      },
    },
    archetypeGroupData: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j = a;
      },
    },
    memberValidation: {
      get: function() {
        return this.dj;
      },
      set: function(a) {
        this.dj = a;
      },
    },
    defaultScale: {
      get: function() {
        return this.diagram.defaultScale;
      },
      set: function(a) {
        this.diagram.defaultScale = a;
      },
    },
    zoomFactor: {
      get: function() {
        return this.Db;
      },
      set: function(a) {
        1 < a || C('zoomFactor must be larger than 1.0, not: ' + a);
        this.Db = a;
      },
    },
    isZoomToFitRestoreEnabled: {
      get: function() {
        return this.cb;
      },
      set: function(a) {
        this.cb = a;
      },
    },
    scrollToPartPause: {
      get: function() {
        return this.nb;
      },
      set: function(a) {
        this.nb = a;
      },
    },
  });
  Rk.className = 'CommandHandler';
  xi = function() {
    return new Rk();
  };

  function Y() {
    Ra(this);
    this.o = 30723;
    this.tb = 1;
    this.Yb = this.Uf = null;
    this.pa = new I(NaN, NaN).freeze();
    this.$c = Mb;
    this.Bb = new md();
    this.lh = new md();
    this.Ib = null;
    this.xa = this.yk = 1;
    this.Gb = 0;
    this.Ag = qc;
    this.qc = new M(NaN, NaN, NaN, NaN).freeze();
    this.Eb = new M(NaN, NaN, NaN, NaN).freeze();
    this.bc = new M(0, 0, NaN, NaN).freeze();
    this.aa = this.Gn = this.Hn = null;
    this.fk = this.Fb = Wc;
    this.rg = this.Ln = 0;
    this.Mn = this.jj = this.ib = this.sh = this.A = this.Ra = null;
  }
  var td, lg, ng, Vk, Wk, Xk, Yk, Zk, $k, al;
  Y.prototype.cloneProtected = function(a) {
    a.o = this.o | 6144;
    a.tb = this.tb;
    a.Yb = this.Yb;
    a.pa.assign(this.pa);
    a.$c = this.$c.J();
    null !== this.Ib ? (a.Ib = this.Ib.copy()) : (a.Ib = null);
    a.xa = this.xa;
    a.Gb = this.Gb;
    a.Ag = this.Ag.J();
    a.qc.assign(this.qc);
    a.Eb.assign(this.Eb);
    a.bc.assign(this.bc);
    a.Gn = this.Gn;
    null !== this.aa && (a.aa = this.aa.copy());
    a.Fb = this.Fb.J();
    a.fk = this.fk.J();
    a.Ln = this.Ln;
    a.rg = this.rg;
    null !== this.Ra && (a.Ra = this.Ra.copy());
    null !== this.A && (a.A = this.A.ic ? this.A : this.A.copy());
    null !== this.sh && (a.sh = Aa(this.sh));
    null !== this.ib && (a.ib = this.ib.copy());
  };
  Y.prototype.zw = function(a) {
    var b = this.sh;
    if (za(b))
      for (var c = 0; c < b.length; c++) {
        if (b[c] === a) return;
      }
    else this.sh = b = [];
    b.push(a);
  };
  Y.prototype.qf = function(a) {
    a.Hn = null;
    a.jj = null;
    a.w();
  };
  Y.prototype.clone = function() {
    var a = new this.constructor();
    this.cloneProtected(a);
    if (null !== this.sh)
      for (var b = 0; b < this.sh.length; b++) {
        var c = this.sh[b];
        a[c] = this[c];
      }
    return a;
  };
  Y.prototype.copy = function() {
    return this.clone();
  };
  t = Y.prototype;
  t.ob = function(a) {
    a.classType === T
      ? 0 === a.name.indexOf('Orient')
        ? (this.segmentOrientation = a)
        : C(
            'Unknown Link enum value for GraphObject.segmentOrientation property: ' +
              a,
          )
      : a.classType === Y && (this.stretch = a);
  };
  t.toString = function() {
    return Ha(this.constructor) + '#' + cb(this);
  };
  t.ih = function() {
    null !== this.A && (this.A.ic = !0);
  };

  function bl(a) {
    null === a.A ? (a.A = new cl()) : a.A.ic && (a.A = a.A.copy());
  }
  t.Rc = function() {
    if (null === this.aa) {
      var a = new dl();
      a.Qi = sc;
      a.tj = sc;
      a.Oi = 10;
      a.rj = 10;
      a.Pi = 0;
      a.sj = 0;
      this.aa = a;
    }
  };
  t.bb = function(a, b, c, d, e, f, g) {
    var h = this.part;
    if (
      null !== h &&
      (h.$j(a, b, c, d, e, f, g),
      c === this && a === de && el(this) && fl(this, h, b),
      (f = this.diagram),
      null === this.animationTriggers ||
        null === f ||
        !f.ji ||
        f.undoManager.isUndoingRedoing ||
        f.animationManager.lm ||
        ((a = this.animationTriggers.get(b)),
        null !== a &&
          f.animationManager.isEnabled &&
          !f.animationManager.isTicking &&
          (null === this.Mn && (this.Mn = new pb()),
          (g = 0 === f.undoManager.transactionLevel),
          a.startCondition === ai
            ? (g = !0)
            : a.startCondition === ci && (g = !1),
          g
            ? ((f = new kh()),
              bi(a, f),
              (g = this.Mn.get(a)),
              null !== g && g.stop(),
              this.Mn.add(a, f),
              (f.au = this),
              (f.rw = a),
              f.add(this, b, d, e),
              f.start())
            : (lh(f.animationManager, 'Trigger'),
              f.animationManager.defaultAnimation.add(this, b, d, e)))),
      this instanceof W && c === h && 0 !== (h.o & 16777216) && null !== h.data)
    )
      for (c = this.R.s, d = c.length, e = 0; e < d; e++)
        (h = c[e]),
          h instanceof W &&
            Aj(h, function(a) {
              null !== a.data && 0 !== (a.o & 16777216) && a.Ka(b);
            });
  };

  function fl(a, b, c) {
    var d = a.Yg();
    if (null !== d)
      for (var e = a.localBindings.iterator; e.next(); ) {
        var f = e.value,
          g = null;
        if (null !== f.sourceName) {
          g = gl(f, d, a);
          if (null === g) continue;
          f.Vo(a, g, c, null);
        } else if (f.isToModel) {
          var h = b.diagram;
          null === h ||
            h.skipsModelSourceBindings ||
            f.Vo(a, h.model.modelData, c, d);
        } else {
          h = d.data;
          if (null === h) continue;
          var k = b.diagram;
          null === k || k.skipsModelSourceBindings || f.Vo(a, h, c, d);
        }
        g === a && ((h = d.Hr(f.ti)), null !== h && f.pv(h, g, c));
      }
  }
  t.Hr = function(a) {
    return this.bindingId === a ? this : null;
  };
  t.g = function(a, b, c) {
    this.bb(de, a, this, b, c);
  };
  t.ve = function(a, b, c, d) {
    var e = this.qc;
    e.h(a, b, c, d);
    if (1 !== this.xa || 0 !== this.Gb) {
      null === this.Ib && (this.Ib = new md());
      var f = this.Ib;
      f.reset();
      this.Qn(f, a, b, c, d);
      f.So(e);
    }
  };

  function hl(a, b, c, d) {
    if (!1 === a.pickable) return !1;
    d.multiply(a.transform);
    return c ? a.Sc(b, d) : a.Wg(b, d);
  }
  t.Vw = function(a, b, c) {
    if (!1 === this.pickable) return !1;
    var d = this.naturalBounds;
    b = a.rf(b);
    return c
      ? zb(a.x, a.y, 0, 0, 0, d.height) <= b ||
          zb(a.x, a.y, 0, d.height, d.width, d.height) <= b ||
          zb(a.x, a.y, d.width, d.height, d.width, 0) <= b ||
          zb(a.x, a.y, d.width, 0, 0, 0) <= b
      : a.td(0, 0) <= b &&
          a.td(0, d.height) <= b &&
          a.td(d.width, 0) <= b &&
          a.td(d.width, d.height) <= b;
  };
  t.ke = function() {
    return !0;
  };
  t.ba = function(a) {
    var b = I.alloc();
    b.assign(a);
    this.transform.Fa(b);
    var c = this.actualBounds;
    if (!c.v()) return I.free(b), !1;
    var d = this.diagram;
    if (null !== d && d.jt) {
      var e = d.yl('extraTouchThreshold'),
        f = d.yl('extraTouchArea'),
        g = f / 2,
        h = this.naturalBounds;
      d = this.uf() * d.scale;
      var k = 1 / d;
      if (h.width * d < e && h.height * d < e)
        return (
          (a = $b(
            c.x - g * k,
            c.y - g * k,
            c.width + f * k,
            c.height + f * k,
            b.x,
            b.y,
          )),
          I.free(b),
          a
        );
    }
    e = !1;
    if (
      this instanceof ue || this instanceof Cf
        ? $b(c.x - 5, c.y - 5, c.width + 10, c.height + 10, b.x, b.y)
        : c.ba(b)
    )
      this.ib && !this.ib.ba(b)
        ? (e = !1)
        : null !== this.areaBackground && c.ba(b)
        ? (e = !0)
        : null !== this.Yb && this.bc.ba(a)
        ? (e = !0)
        : (e = this.Xg(a));
    I.free(b);
    return e;
  };
  t.Xg = function(a) {
    var b = this.naturalBounds;
    return $b(0, 0, b.width, b.height, a.x, a.y);
  };
  t.Ee = function(a) {
    if (0 === this.angle) return this.actualBounds.Ee(a);
    var b = this.naturalBounds;
    b = M.allocAt(0, 0, b.width, b.height);
    var c = this.transform,
      d = !1,
      e = I.allocAt(a.x, a.y);
    b.ba(c.Ld(e)) &&
      (e.h(a.x, a.bottom),
      b.ba(c.Ld(e)) &&
        (e.h(a.right, a.bottom),
        b.ba(c.Ld(e)) && (e.h(a.right, a.y), b.ba(c.Ld(e)) && (d = !0))));
    I.free(e);
    M.free(b);
    return d;
  };
  t.Wg = function(a, b) {
    if (void 0 === b) return a.Ee(this.actualBounds);
    var c = this.naturalBounds,
      d = !1,
      e = I.allocAt(0, 0);
    a.ba(b.Fa(e)) &&
      (e.h(0, c.height),
      a.ba(b.Fa(e)) &&
        (e.h(c.width, c.height),
        a.ba(b.Fa(e)) && (e.h(c.width, 0), a.ba(b.Fa(e)) && (d = !0))));
    I.free(e);
    return d;
  };
  t.Sc = function(a, b) {
    if (void 0 === b && ((b = this.transform), 0 === this.angle))
      return a.Sc(this.actualBounds);
    var c = this.naturalBounds,
      d = I.allocAt(0, 0),
      e = I.allocAt(0, c.height),
      f = I.allocAt(c.width, c.height),
      g = I.allocAt(c.width, 0),
      h = !1;
    if (a.ba(b.Fa(d)) || a.ba(b.Fa(e)) || a.ba(b.Fa(f)) || a.ba(b.Fa(g)))
      h = !0;
    else {
      c = M.allocAt(0, 0, c.width, c.height);
      var k = I.allocAt(a.x, a.y);
      c.ba(b.Ld(k))
        ? (h = !0)
        : (k.h(a.x, a.bottom),
          c.ba(b.Ld(k))
            ? (h = !0)
            : (k.h(a.right, a.bottom),
              c.ba(b.Ld(k))
                ? (h = !0)
                : (k.h(a.right, a.y), c.ba(b.Ld(k)) && (h = !0))));
      I.free(k);
      M.free(c);
      !h &&
        (J.Rr(a, d, e) || J.Rr(a, e, f) || J.Rr(a, f, g) || J.Rr(a, g, d)) &&
        (h = !0);
    }
    I.free(d);
    I.free(e);
    I.free(f);
    I.free(g);
    return h;
  };
  t.ia = function(a, b) {
    void 0 === b && (b = new I());
    if (a instanceof N) {
      var c = this.naturalBounds;
      b.h(a.x * c.width + a.offsetX, a.y * c.height + a.offsetY);
    } else b.set(a);
    this.ge.Fa(b);
    return b;
  };
  t.gi = function(a) {
    void 0 === a && (a = new M());
    var b = this.naturalBounds,
      c = this.ge,
      d = I.allocAt(0, 0).transform(c);
    a.h(d.x, d.y, 0, 0);
    d.h(b.width, 0).transform(c);
    Zb(a, d.x, d.y, 0, 0);
    d.h(b.width, b.height).transform(c);
    Zb(a, d.x, d.y, 0, 0);
    d.h(0, b.height).transform(c);
    Zb(a, d.x, d.y, 0, 0);
    I.free(d);
    return a;
  };
  t.fi = function() {
    var a = this.ge;
    1 === a.m11 && 0 === a.m12
      ? (a = 0)
      : ((a = (180 * Math.atan2(a.m12, a.m11)) / Math.PI), 0 > a && (a += 360));
    return a;
  };
  t.uf = function() {
    if ((0 !== (this.o & 4096)) === !1) return this.yk;
    var a = this.xa;
    return null !== this.panel ? a * this.panel.uf() : a;
  };
  t.Nr = function(a, b) {
    void 0 === b && (b = new I());
    b.assign(a);
    this.ge.Ld(b);
    return b;
  };
  t.Or = function(a, b, c) {
    return this.Kj(a.x, a.y, b.x, b.y, c);
  };
  t.Kj = function(a, b, c, d, e) {
    var f = this.transform,
      g = 1 / (f.m11 * f.m22 - f.m12 * f.m21),
      h = f.m22 * g,
      k = -f.m12 * g,
      l = -f.m21 * g,
      m = f.m11 * g,
      n = g * (f.m21 * f.dy - f.m22 * f.dx),
      p = g * (f.m12 * f.dx - f.m11 * f.dy);
    if (null !== this.areaBackground)
      return (
        (f = this.actualBounds),
        J.wf(f.left, f.top, f.right, f.bottom, a, b, c, d, e)
      );
    g = a * h + b * l + n;
    a = a * k + b * m + p;
    b = c * h + d * l + n;
    c = c * k + d * m + p;
    e.h(0, 0);
    d = this.naturalBounds;
    c = J.wf(0, 0, d.width, d.height, g, a, b, c, e);
    e.transform(f);
    return c;
  };
  Y.prototype.measure = function(a, b, c, d) {
    if (!1 !== nj(this)) {
      var e = this.Ag,
        f = e.right + e.left;
      e = e.top + e.bottom;
      a = Math.max(a - f, 0);
      b = Math.max(b - e, 0);
      c = Math.max((c || 0) - f, 0);
      d = Math.max((d || 0) - e, 0);
      f = this.angle;
      e = this.desiredSize;
      var g = 0;
      this instanceof Cf && (g = this.strokeWidth);
      90 === f || 270 === f
        ? ((a = isFinite(e.height) ? e.height + g : a),
          (b = isFinite(e.width) ? e.width + g : b))
        : ((a = isFinite(e.width) ? e.width + g : a),
          (b = isFinite(e.height) ? e.height + g : b));
      e = c || 0;
      g = d || 0;
      var h = this instanceof W;
      switch (il(this, !0)) {
        case lg:
          g = e = 0;
          h && (b = a = Infinity);
          break;
        case td:
          isFinite(a) && a > c && (e = a);
          isFinite(b) && b > d && (g = b);
          break;
        case Vk:
          isFinite(a) && a > c && (e = a);
          g = 0;
          h && (b = Infinity);
          break;
        case Wk:
          isFinite(b) && b > d && (g = b), (e = 0), h && (a = Infinity);
      }
      h = this.maxSize;
      var k = this.minSize;
      e > h.width && k.width < h.width && (e = h.width);
      g > h.height && k.height < h.height && (g = h.height);
      c = Math.max(e / this.scale, k.width);
      d = Math.max(g / this.scale, k.height);
      h.width < c && (c = Math.min(k.width, c));
      h.height < d && (d = Math.min(k.height, d));
      a = Math.min(h.width, a);
      b = Math.min(h.height, b);
      a = Math.max(c, a);
      b = Math.max(d, b);
      if (90 === f || 270 === f)
        (f = a), (a = b), (b = f), (f = c), (c = d), (d = f);
      this.qc.ja();
      this.El(a, b, c, d);
      this.qc.freeze();
      this.qc.v() ||
        C(
          'Non-real measuredBounds has been set. Object ' +
            this +
            ', measuredBounds: ' +
            this.qc.toString(),
        );
      ij(this, !1);
    }
  };
  Y.prototype.El = function() {};
  Y.prototype.li = function() {
    return !1;
  };
  Y.prototype.arrange = function(a, b, c, d, e) {
    this.Jk();
    var f = M.alloc();
    f.assign(this.Eb);
    this.Eb.ja();
    !1 === oj(this) ? this.Eb.h(a, b, c, d) : this.Vg(a, b, c, d);
    this.Eb.freeze();
    void 0 === e ? (this.ib = null) : (this.ib = e);
    c = !1;
    if (void 0 !== e) c = !0;
    else if (
      ((e = this.panel),
      null === e ||
        (e.type !== W.TableRow && e.type !== W.TableColumn) ||
        (e = e.panel),
      null !== e &&
        ((e = e.bc),
        (d = this.measuredBounds),
        null !== this.areaBackground && (d = this.Eb),
        (c = b + d.height),
        (d = a + d.width),
        (c = !(
          0 <= a + 0.05 &&
          d <= e.width + 0.05 &&
          0 <= b + 0.05 &&
          c <= e.height + 0.05
        )),
        this instanceof Qg &&
          ((a = this.naturalBounds), this.kq > a.height || this.yb > a.width)))
    )
      c = !0;
    this.o = c ? this.o | 256 : this.o & -257;
    this.Eb.v() ||
      C(
        'Non-real actualBounds has been set. Object ' +
          this +
          ', actualBounds: ' +
          this.Eb.toString(),
      );
    this.Fl(f, this.Eb);
    jl(this, !1);
    M.free(f);
  };
  t = Y.prototype;
  t.Vg = function() {};

  function kl(a, b, c, d, e) {
    a.Eb.h(b, c, d, e);
    if (!a.desiredSize.v()) {
      var f = a.qc;
      c = a.Ag;
      b = c.right + c.left;
      var g = c.top + c.bottom;
      c = f.width + b;
      f = f.height + g;
      d += b;
      e += g;
      b = il(a, !0);
      c === d && f === e && (b = lg);
      switch (b) {
        case lg:
          if (c > d || f > e)
            ij(a, !0), a.measure(c > d ? d : c, f > e ? e : f, 0, 0);
          break;
        case td:
          ij(a, !0);
          a.measure(d, e, 0, 0);
          break;
        case Vk:
          ij(a, !0);
          a.measure(d, f, 0, 0);
          break;
        case Wk:
          ij(a, !0), a.measure(c, e, 0, 0);
      }
    }
  }
  t.Fl = function(a, b) {
    var c = this.part;
    null !== c &&
      null !== c.diagram &&
      ((c.selectionObject !== this &&
        c.resizeObject !== this &&
        c.rotateObject !== this) ||
        ll(c, !0),
      this.N(),
      Tb(a, b) || (c.dh(), this.wn(c)));
  };
  t.wn = function(a) {
    null !== this.portId && (ll(a, !0), a instanceof V && ml(a, this));
  };
  t.tc = function(a, b) {
    if (this.visible) {
      var c = this.opacity;
      if (0 !== c) {
        var d =
            this instanceof W &&
            (this.type === W.TableRow || this.type === W.TableColumn),
          e = this.Eb;
        if (
          d ||
          (0 !== e.width && 0 !== e.height && !isNaN(e.x) && !isNaN(e.y))
        ) {
          var f = 1;
          1 !== c && ((f = a.globalAlpha), (a.globalAlpha = f * c));
          if (d) {
            e = this.Eb;
            d = this.bc;
            var g = this.areaBackground,
              h = this.Yb;
            (null === g && null === h) || a.Pc();
            null !== g &&
              (gi(this, a, g, !0, !0, d, e),
              g instanceof nl && g.type === ol
                ? (a.beginPath(), a.rect(e.x, e.y, e.width, e.height), a.sf(g))
                : a.fillRect(e.x, e.y, e.width, e.height));
            null !== h &&
              (gi(this, a, h, !0, !1, d, e),
              h instanceof nl && h.type === ol
                ? (a.beginPath(), a.rect(e.x, e.y, e.width, e.height), a.sf(h))
                : a.fillRect(e.x, e.y, e.width, e.height));
            this.ai(a, b);
          } else if (!this.Qw(a, b)) {
            this instanceof T && this.Rj(!1);
            d = this.transform;
            g = this.panel;
            (0 !== (this.o & 4096)) === !0 && pl(this);
            var k = this.part;
            h = !1;
            var l = 0;
            if (k && b.Ge('drawShadows') && (h = k.isShadowed)) {
              var m = k.shadowOffset;
              l = Math.max(m.y, m.x) * b.scale * b.kc;
            }
            m = this.li();
            var n;
            if (!(n = b.Vi || !m)) {
              var p = this.naturalBounds;
              n = this.lh;
              var r = n.m11,
                q = n.m21,
                u = n.dx,
                w = n.m12,
                v = n.m22,
                z = n.dy,
                y,
                A = (y = 0);
              n = y * r + A * q + u;
              var B = y * w + A * v + z;
              y = p.width + l;
              A = 0;
              var F = y * r + A * q + u;
              y = y * w + A * v + z;
              A = Math.min(n, F);
              var L = Math.min(B, y);
              var S = Math.max(n + 0, F) - A;
              var R = Math.max(B + 0, y) - L;
              n = A;
              B = L;
              y = p.width + l;
              A = p.height + l;
              F = y * r + A * q + u;
              y = y * w + A * v + z;
              A = Math.min(n, F);
              L = Math.min(B, y);
              S = Math.max(n + S, F) - A;
              R = Math.max(B + R, y) - L;
              n = A;
              B = L;
              y = 0;
              A = p.height + l;
              F = y * r + A * q + u;
              y = y * w + A * v + z;
              A = Math.min(n, F);
              L = Math.min(B, y);
              S = Math.max(n + S, F) - A;
              R = Math.max(B + R, y) - L;
              n = A;
              B = L;
              l = b.viewportBounds;
              p = l.x;
              r = l.y;
              n = !(
                n > l.width + p ||
                p > S + n ||
                B > l.height + r ||
                r > R + B
              );
            }
            if (n) {
              n = 0 !== (this.o & 256);
              a.clipInsteadOfFill && (n = !1);
              this instanceof Qg && (a.font = this.font);
              if (n) {
                B = g.ke() ? g.naturalBounds : g.actualBounds;
                null !== this.ib
                  ? ((p = this.ib),
                    (S = p.x),
                    (R = p.y),
                    (l = p.width),
                    (p = p.height))
                  : ((S = Math.max(e.x, B.x)),
                    (R = Math.max(e.y, B.y)),
                    (l = Math.min(e.right, B.right) - S),
                    (p = Math.min(e.bottom, B.bottom) - R));
                if (S > e.width + e.x || e.x > B.width + B.x) {
                  1 !== c && (a.globalAlpha = f);
                  return;
                }
                a.save();
                a.beginPath();
                a.rect(S, R, l, p);
                a.clip();
              }
              if (m) {
                if (!k.isVisible()) {
                  1 !== c && (a.globalAlpha = f);
                  return;
                }
                h &&
                  ((B = k.shadowOffset),
                  a.iv(
                    B.x * b.scale * b.kc,
                    B.y * b.scale * b.kc,
                    k.shadowBlur,
                  ),
                  ql(a),
                  (a.shadowColor = k.shadowColor));
              }
              h && !0 === this.shadowVisible
                ? ql(a)
                : h && !1 === this.shadowVisible && rl(a);
              k = this.naturalBounds;
              null !== this.areaBackground &&
                (a.Pc(),
                gi(this, a, this.areaBackground, !0, !0, k, e),
                this.areaBackground instanceof nl &&
                this.areaBackground.type === ol
                  ? (a.beginPath(),
                    a.rect(e.x, e.y, e.width, e.height),
                    a.sf(this.areaBackground))
                  : a.fillRect(e.x, e.y, e.width, e.height));
              a.transform(d.m11, d.m12, d.m21, d.m22, d.dx, d.dy);
              h &&
                ((null !== g && 0 !== (g.o & 512)) ||
                  (null !== g &&
                    (g.type === W.Auto || g.type === W.Spot) &&
                    g.vb() !== this)) &&
                null === this.shadowVisible &&
                rl(a);
              null !== this.Yb && (a.Pc(), sl(this, a, k, e));
              h &&
              (null !== this.Yb ||
                null !== this.areaBackground ||
                (null !== g && 0 !== (g.o & 512)) ||
                (null !== g &&
                  (g.type === W.Auto || g.type === W.Spot) &&
                  g.vb() !== this))
                ? (tl(this, !0), null === this.shadowVisible && rl(a))
                : tl(this, !1);
              this.ai(a, b);
              h && (0 !== (this.o & 512)) === !0 && ql(a);
              m && h && rl(a);
              n && (a.restore(), a.Oc(this instanceof W));
              d.Ur() ||
                ((b = 1 / (d.m11 * d.m22 - d.m12 * d.m21)),
                a.transform(
                  d.m22 * b,
                  -d.m12 * b,
                  -d.m21 * b,
                  d.m11 * b,
                  b * (d.m21 * d.dy - d.m22 * d.dx),
                  b * (d.m12 * d.dx - d.m11 * d.dy),
                ));
            }
          }
          1 !== c && (a.globalAlpha = f);
        }
      }
    }
  };

  function sl(a, b, c, d) {
    var e = a.naturalBounds,
      f = 0,
      g = 0,
      h = e.width;
    e = e.height;
    var k = a.Sv();
    a instanceof Cf &&
      ((e = a.sa.bounds), (f = e.x), (g = e.y), (h = e.width), (e = e.height));
    gi(a, b, a.Yb, !0, !1, c, d);
    a.Yb instanceof nl && a.Yb.type === ol
      ? (b.beginPath(), b.rect(f - k / 2, g - k / 2, h + k, e + k), b.sf(a.Yb))
      : b.fillRect(f - k / 2, g - k / 2, h + k, e + k);
  }
  t.Qw = function() {
    return !1;
  };
  t.ai = function() {};

  function gi(a, b, c, d, e, f, g) {
    if (null !== c) {
      var h = 1,
        k = 1;
      if ('string' === typeof c) d ? (b.fillStyle = c) : (b.strokeStyle = c);
      else if (c.type === ul)
        d ? (b.fillStyle = c.color) : (b.strokeStyle = c.color);
      else {
        var l = 0;
        a instanceof Cf && (l = a.strokeWidth);
        h = f.width;
        k = f.height;
        e ? ((h = g.width), (k = g.height)) : d || ((h += l), (k += l));
        if (
          (f = b instanceof vl) &&
          c.oe &&
          (c.type === wl || (c.lk === h && c.Hs === k))
        )
          var m = c.oe;
        else {
          var n = 0,
            p = 0,
            r = 0,
            q = 0,
            u = 0,
            w = 0;
          w = u = 0;
          e ? ((u = g.x), (w = g.y)) : d || ((u -= l / 2), (w -= l / 2));
          n = c.start.x * h + c.start.offsetX;
          p = c.start.y * k + c.start.offsetY;
          r = c.end.x * h + c.end.offsetX;
          q = c.end.y * k + c.end.offsetY;
          n += u;
          r += u;
          p += w;
          q += w;
          if (c.type === xl) m = b.createLinearGradient(n, p, r, q);
          else if (c.type === ol)
            (w = isNaN(c.endRadius) ? Math.max(h, k) / 2 : c.endRadius),
              isNaN(c.startRadius)
                ? ((u = 0), (w = Math.max(h, k) / 2))
                : (u = c.startRadius),
              (m = b.createRadialGradient(n, p, u, r, q, w));
          else if (c.type === wl)
            try {
              m = b.createPattern(c.pattern, 'repeat');
            } catch (z) {
              m = null;
            }
          if (c.type !== wl && ((e = c.colorStops), null !== e))
            for (e = e.iterator; e.next(); ) m.addColorStop(e.key, e.value);
          if (
            f &&
            ((c.oe = m),
            null !== m && ((c.lk = h), (c.Hs = k)),
            null === m && c.type === wl && -1 !== c.lk)
          ) {
            c.lk = -1;
            var v = a.diagram;
            null !== v &&
              -1 === c.lk &&
              ta(function() {
                v.redraw();
              }, 600);
          }
        }
        d ? (b.fillStyle = m) : (b.strokeStyle = m);
      }
    }
  }
  t.jg = function(a) {
    if (a instanceof W)
      a: {
        if (this !== a && null !== a)
          for (var b = this.panel; null !== b; ) {
            if (b === a) {
              a = !0;
              break a;
            }
            b = b.panel;
          }
        a = !1;
      }
    else a = !1;
    return a;
  };
  t.zf = function() {
    if (!this.visible) return !1;
    var a = this.panel;
    return null !== a ? a.zf() : !0;
  };
  t.yf = function() {
    for (
      var a = this instanceof W ? this : this.panel;
      null !== a && a.isEnabled;

    )
      a = a.panel;
    return null === a;
  };

  function pl(a) {
    if ((0 !== (a.o & 2048)) === !0) {
      var b = a.Bb;
      b.reset();
      if (!a.Eb.v() || !a.qc.v()) {
        yl(a, !1);
        return;
      }
      b.translate(a.Eb.x - a.qc.x, a.Eb.y - a.qc.y);
      if (1 !== a.scale || 0 !== a.angle) {
        var c = a.naturalBounds;
        a.Qn(b, c.x, c.y, c.width, c.height);
      }
      yl(a, !1);
      zl(a, !0);
    }
    (0 !== (a.o & 4096)) === !0 &&
      ((b = a.panel),
      null === b
        ? (a.lh.set(a.Bb), (a.yk = a.scale), zl(a, !1))
        : null !== b.ge &&
          ((c = a.lh),
          c.reset(),
          b.ke()
            ? c.multiply(b.lh)
            : null !== b.panel && c.multiply(b.panel.lh),
          c.multiply(a.Bb),
          (a.yk = a.scale * b.yk),
          zl(a, !1)));
  }
  t.Qn = function(a, b, c, d, e) {
    1 !== this.xa && a.scale(this.xa);
    if (0 !== this.Gb) {
      var f = I.alloc();
      f.pi(b, c, d, e, yc);
      a.rotate(this.Gb, f.x, f.y);
      I.free(f);
    }
  };
  t.w = function(a) {
    if (!nj(this)) {
      void 0 === a && (a = !1);
      ij(this, !0);
      jl(this, !0);
      var b = this.panel;
      null === b || a || b.w();
    }
  };
  t.Mj = function() {
    nj(this) || (ij(this, !0), jl(this, !0));
  };

  function Al(a) {
    if (!oj(a)) {
      var b = a.panel;
      null !== b
        ? b.w()
        : a.li() &&
          ((b = a.diagram),
          null !== b && (b.te.add(a), a instanceof V && a.vd(), b.Mb()));
      jl(a, !0);
    }
  }
  t.Jk = function() {
    (0 !== (this.o & 2048)) === !1 && (yl(this, !0), zl(this, !0));
  };
  t.Iu = function() {
    zl(this, !0);
  };
  t.N = function() {
    var a = this.part;
    null !== a && a.N();
  };

  function il(a, b) {
    var c = a.stretch,
      d = a.panel;
    if (null !== d && d.type === W.Table)
      return Bl(
        a,
        d.getRowDefinition(a.row),
        d.getColumnDefinition(a.column),
        b,
      );
    if (null !== d && d.type === W.Auto && d.vb() === a) return Cl(a, td, b);
    if (c === Xk) {
      if (null !== d) {
        if (d.type === W.Spot && d.vb() === a) return Cl(a, td, b);
        c = d.defaultStretch;
        return c === Xk ? Cl(a, lg, b) : Cl(a, c, b);
      }
      return Cl(a, lg, b);
    }
    return Cl(a, c, b);
  }

  function Bl(a, b, c, d) {
    var e = a.stretch;
    if (e !== Xk) return Cl(a, e, d);
    var f = (e = null);
    switch (b.stretch) {
      case Wk:
        f = !0;
        break;
      case td:
        f = !0;
    }
    switch (c.stretch) {
      case Vk:
        e = !0;
        break;
      case td:
        e = !0;
    }
    b = a.panel.defaultStretch;
    null === e && (e = b === Vk || b === td);
    null === f && (f = b === Wk || b === td);
    return !0 === e && !0 === f
      ? Cl(a, td, d)
      : !0 === e
      ? Cl(a, Vk, d)
      : !0 === f
      ? Cl(a, Wk, d)
      : Cl(a, lg, d);
  }

  function Cl(a, b, c) {
    if (c) return b;
    if (b === lg) return lg;
    c = a.desiredSize;
    if (c.v()) return lg;
    a = a.angle;
    if (!isNaN(c.width))
      if (90 !== a && 270 !== a) {
        if (b === Vk) return lg;
        if (b === td) return Wk;
      } else {
        if (b === Wk) return lg;
        if (b === td) return Vk;
      }
    if (!isNaN(c.height))
      if (90 !== a && 270 !== a) {
        if (b === Wk) return lg;
        if (b === td) return Vk;
      } else {
        if (b === Vk) return lg;
        if (b === td) return Wk;
      }
    return b;
  }

  function tl(a, b) {
    a.o = b ? a.o | 512 : a.o & -513;
  }

  function el(a) {
    return 0 !== (a.o & 1024);
  }

  function Dl(a, b) {
    a.o = b ? a.o | 1024 : a.o & -1025;
  }

  function yl(a, b) {
    a.o = b ? a.o | 2048 : a.o & -2049;
  }

  function zl(a, b) {
    a.o = b ? a.o | 4096 : a.o & -4097;
  }

  function nj(a) {
    return 0 !== (a.o & 8192);
  }

  function ij(a, b) {
    a.o = b ? a.o | 8192 : a.o & -8193;
  }

  function oj(a) {
    return 0 !== (a.o & 16384);
  }

  function jl(a, b) {
    a.o = b ? a.o | 16384 : a.o & -16385;
  }
  t.ni = function(a) {
    this.Uf = a;
  };
  t.ns = function() {};
  t.fv = function(a) {
    this.pa = a;
    Al(this);
    return !0;
  };
  t.Ul = function(a, b) {
    if (this.pa.x !== a || this.pa.y !== b) this.pa.h(a, b), this.Jk();
  };
  t.Sv = function() {
    return 0;
  };

  function El(a) {
    var b = a.part;
    if (b instanceof V && (null !== a.portId || a === b.port)) {
      var c = b.diagram;
      null === c || c.undoManager.isUndoingRedoing || ml(b, a);
    }
  }

  function Fl(a) {
    var b = a.diagram;
    null === b ||
      b.undoManager.isUndoingRedoing ||
      (a instanceof W
        ? a instanceof V
          ? a.vd()
          : a.$l(a, function(a) {
              El(a);
            })
        : El(a));
  }
  t.bind = function(a, b, c, d) {
    var e = null;
    'string' === typeof a ? (e = new wi(a, b, c, d)) : (e = a);
    e.sd = this;
    a = this.Yg();
    null !== a &&
      Gl(a) &&
      C(
        'Cannot add a Binding to a template that has already been copied: ' + e,
      );
    null === this.localBindings && (this.localBindings = new E());
    this.localBindings.add(e);
    return this;
  };
  t.set = function(a) {
    Object.assign(this, a);
    return this;
  };
  t.ku = function(a) {
    Hl(this, a);
    return this;
  };
  t.apply = function(a) {
    a(this);
    return this;
  };
  t.Vl = function(a) {
    uj(this, a);
    return this;
  };
  t.Yy = function() {
    return this.Yg();
  };
  t.Yg = function() {
    for (var a = this instanceof W ? this : this.panel; null !== a; ) {
      if (null !== a.allBindings) return a;
      a = a.panel;
    }
    return null;
  };
  t.mv = function(a) {
    a.sd = this;
    null === this.animationTriggers && (this.animationTriggers = new pb());
    this.animationTriggers.add(a.propertyName, a);
    return this;
  };

  function Il(a, b) {
    for (var c = 1; c < arguments.length; ++c);
    c = arguments;
    var d = null,
      e = null;
    if ('function' === typeof a) e = a;
    else if ('string' === typeof a) {
      var f = Jl.I(a);
      'function' === typeof f
        ? ((c = Aa(arguments)),
          (d = f(c)),
          ya(d) ||
            C(
              'GraphObject.make invoked object builder "' +
                a +
                '", but it did not return an Object',
            ))
        : (e = x.go[a]);
    }
    null === d &&
      ((void 0 !== e && null !== e && e.constructor) ||
        C(
          'GraphObject.make requires a class function or GoJS class name or name of an object builder, not: ' +
            a,
        ),
      (d = new e()));
    e = 1;
    if (d instanceof Q && 1 < c.length) {
      f = d;
      var g = c[1];
      if ('string' === typeof g || g instanceof HTMLDivElement) si(f, g), e++;
    }
    for (; e < c.length; e++)
      (f = c[e]),
        void 0 === f
          ? C(
              'Undefined value at argument ' +
                e +
                ' for object being constructed by GraphObject.make: ' +
                d,
            )
          : Hl(d, f);
    return d;
  }

  function Hl(a, b) {
    if ('string' === typeof b)
      if (a instanceof Qg) a.text = b;
      else if (a instanceof Cf) a.figure = b;
      else if (a instanceof Wj) a.source = b;
      else if (a instanceof W) (b = Kl.I(b)), null !== b && (a.type = b);
      else if (a instanceof nl) {
        var c = Sa(nl, b);
        null !== c
          ? (a.type = c)
          : C('Unknown Brush type as an argument to GraphObject.make: ' + b);
      } else
        a instanceof O
          ? ((b = Sa(O, b)), null !== b && (a.type = b))
          : a instanceof Yd && ((b = Sa(Yd, b)), null !== b && (a.type = b));
    else if (b instanceof Y)
      a instanceof W ||
        C('A GraphObject can only be added to a Panel, not to: ' + a),
        a.add(b);
    else if (b instanceof Oj) {
      var d;
      b.isRow && 'function' === typeof a.getRowDefinition
        ? (d = a.getRowDefinition(b.index))
        : b.isRow ||
          'function' !== typeof a.getColumnDefinition ||
          (d = a.getColumnDefinition(b.index));
      d instanceof Oj
        ? ((a = d),
          b.isRow ? (a.height = b.height) : (a.width = b.width),
          (a.minimum = b.minimum),
          (a.maximum = b.maximum),
          (a.alignment = b.alignment),
          (a.stretch = b.stretch),
          (a.sizing = b.sizing),
          (a.Wf = null === b.separatorPadding ? null : b.separatorPadding.J()),
          (a.separatorStroke = b.separatorStroke),
          (a.separatorStrokeWidth = b.separatorStrokeWidth),
          (a.oj = null),
          b.separatorDashArray && (a.oj = Aa(b.separatorDashArray)),
          (a.background = b.background),
          (a.coversSeparators = b.coversSeparators),
          (a.Vd = b.Vd))
        : C(
            'A RowColumnDefinition can only be added to an object that implements getRowDefinition/getColumnDefinition, not to: ' +
              a,
          );
    } else if (b instanceof D) 'function' === typeof a.ob && a.ob(b);
    else if (b instanceof Ll) a.type = b;
    else if (b instanceof wi)
      a instanceof Y
        ? a.bind(b)
        : a instanceof Oj
        ? a.bind(b)
        : C(
            'A Binding can only be applied to a GraphObject or RowColumnDefinition, not to: ' +
              a,
          );
    else if (b instanceof Zh)
      a instanceof Y
        ? a.mv(b)
        : C(
            'An AnimationTrigger can only be applied to a GraphObject, not to: ' +
              a,
          );
    else if (b instanceof Xd)
      a instanceof O && a.type === O.m
        ? a.figures.add(b)
        : C('A PathFigure can only be added to a Path Geometry, not to: ' + a);
    else if (b instanceof Yd)
      a instanceof Xd
        ? a.segments.add(b)
        : C('A PathSegment can only be added to a PathFigure, not to: ' + a);
    else if (b instanceof qi)
      a instanceof Q
        ? (a.layout = b)
        : a instanceof qf
        ? (a.layout = b)
        : C(
            'A Layout can only be assigned to a Diagram or a Group, not to: ' +
              a,
          );
    else if (Array.isArray(b)) for (c = 0; c < b.length; c++) Hl(a, b[c]);
    else if ('object' === typeof b && null !== b)
      if (a instanceof nl) {
        c = new Wa();
        for (var e in b)
          (d = parseFloat(e)),
            isNaN(d) ? (c[e] = b[e]) : a.addColorStop(d, b[e]);
        uj(a, c);
      } else if (a instanceof Oj) {
        void 0 !== b.row
          ? ((e = b.row),
            (void 0 === e ||
              null === e ||
              Infinity === e ||
              isNaN(e) ||
              0 > e) &&
              C(
                'Must specify non-negative integer row for RowColumnDefinition ' +
                  b +
                  ', not: ' +
                  e,
              ),
            (a.isRow = !0),
            (a.index = e))
          : void 0 !== b.column &&
            ((e = b.column),
            (void 0 === e ||
              null === e ||
              Infinity === e ||
              isNaN(e) ||
              0 > e) &&
              C(
                'Must specify non-negative integer column for RowColumnDefinition ' +
                  b +
                  ', not: ' +
                  e,
              ),
            (a.isRow = !1),
            (a.index = e));
        e = new Wa();
        for (c in b) 'row' !== c && 'column' !== c && (e[c] = b[c]);
        uj(a, e);
      } else uj(a, b);
    else
      C(
        'Unknown initializer "' +
          b +
          '" for object being constructed by GraphObject.make: ' +
          a,
      );
  }

  function Ml(a, b) {
    Jl.add(a, b);
  }

  function Nl(a, b, c) {
    void 0 === c && (c = null);
    var d = a[1];
    if ('function' === typeof c ? c(d) : 'string' === typeof d)
      return a.splice(1, 1), d;
    if (void 0 === b)
      throw Error(
        'no ' +
          ('function' === typeof c ? 'satisfactory' : 'string') +
          ' argument for GraphObject builder ' +
          a[0],
      );
    return b;
  }
  ma.Object.defineProperties(Y.prototype, {
    bindingId: {
      get: function() {
        return null !== this.A ? this.A.bp : -1;
      },
      set: function(a) {
        this.bindingId !== a &&
          (null === this.A && (this.A = new cl()), (this.A.bp = a));
      },
    },
    localBindings: {
      get: function() {
        return null !== this.A ? this.A.Ff : null;
      },
      set: function(a) {
        this.localBindings !== a &&
          (null === this.A && (this.A = new cl()), (this.A.Ff = a));
      },
    },
    srcBindings: {
      get: function() {
        return null !== this.A ? this.A.Wo : null;
      },
      set: function(a) {
        this.srcBindings !== a &&
          (null === this.A && (this.A = new cl()), (this.A.Wo = a));
      },
    },
    shadowVisible: {
      get: function() {
        return null !== this.A ? this.A.wi : null;
      },
      set: function(a) {
        var b = this.shadowVisible;
        b !== a &&
          (bl(this), (this.A.wi = a), this.N(), this.g('shadowVisible', b, a));
      },
    },
    enabledChanged: {
      get: function() {
        return null !== this.A ? this.A.Hc : null;
      },
      set: function(a) {
        var b = this.enabledChanged;
        b !== a && (bl(this), (this.A.Hc = a), this.g('enabledChanged', b, a));
      },
    },
    segmentOrientation: {
      get: function() {
        return null !== this.Ra ? this.Ra.Oq : $f;
      },
      set: function(a) {
        var b = this.segmentOrientation;
        b !== a &&
          (null === this.Ra && (this.Ra = new Ol()),
          (this.Ra.Oq = a),
          this.w(),
          this.g('segmentOrientation', b, a),
          a === $f && (this.angle = 0));
      },
    },
    segmentIndex: {
      get: function() {
        return null !== this.Ra ? this.Ra.u : -Infinity;
      },
      set: function(a) {
        a = Math.round(a);
        var b = this.segmentIndex;
        b !== a &&
          (null === this.Ra && (this.Ra = new Ol()),
          (this.Ra.u = a),
          this.w(),
          this.g('segmentIndex', b, a));
      },
    },
    segmentFraction: {
      get: function() {
        return null !== this.Ra ? this.Ra.m : 0;
      },
      set: function(a) {
        isNaN(a) ? (a = 0) : 0 > a ? (a = 0) : 1 < a && (a = 1);
        var b = this.segmentFraction;
        b !== a &&
          (null === this.Ra && (this.Ra = new Ol()),
          (this.Ra.m = a),
          this.w(),
          this.g('segmentFraction', b, a));
      },
    },
    segmentOffset: {
      get: function() {
        return null !== this.Ra ? this.Ra.F : qb;
      },
      set: function(a) {
        var b = this.segmentOffset;
        b.C(a) ||
          ((a = a.J()),
          null === this.Ra && (this.Ra = new Ol()),
          (this.Ra.F = a),
          this.w(),
          this.g('segmentOffset', b, a));
      },
    },
    stretch: {
      get: function() {
        return null !== this.A ? this.A.$f : Xk;
      },
      set: function(a) {
        var b = this.stretch;
        b !== a &&
          (bl(this), (this.A.$f = a), this.w(), this.g('stretch', b, a));
      },
    },
    name: {
      get: function() {
        return null !== this.A ? this.A.va : '';
      },
      set: function(a) {
        var b = this.name;
        b !== a &&
          (bl(this),
          (this.A.va = a),
          null !== this.part && (this.part.Kh = null),
          this.g('name', b, a));
      },
    },
    opacity: {
      get: function() {
        return this.tb;
      },
      set: function(a) {
        var b = this.tb;
        b !== a &&
          ((0 > a || 1 < a) && wa(a, '0 <= value <= 1', Y, 'opacity'),
          (this.tb = a),
          this.g('opacity', b, a),
          (a = this.diagram),
          (b = this.part),
          null !== a && null !== b && a.N(yj(b, b.actualBounds)));
      },
    },
    visible: {
      get: function() {
        return 0 !== (this.o & 1);
      },
      set: function(a) {
        var b = 0 !== (this.o & 1);
        b !== a &&
          ((this.o ^= 1),
          this.g('visible', b, a),
          (b = this.panel),
          null !== b ? b.w() : this.li() && this.Ub(a),
          this.N(),
          Fl(this));
      },
    },
    pickable: {
      get: function() {
        return 0 !== (this.o & 2);
      },
      set: function(a) {
        var b = 0 !== (this.o & 2);
        b !== a && ((this.o ^= 2), this.g('pickable', b, a));
      },
    },
    fromLinkableDuplicates: {
      get: function() {
        return 0 !== (this.o & 4);
      },
      set: function(a) {
        var b = 0 !== (this.o & 4);
        b !== a && ((this.o ^= 4), this.g('fromLinkableDuplicates', b, a));
      },
    },
    fromLinkableSelfNode: {
      get: function() {
        return 0 !== (this.o & 8);
      },
      set: function(a) {
        var b = 0 !== (this.o & 8);
        b !== a && ((this.o ^= 8), this.g('fromLinkableSelfNode', b, a));
      },
    },
    toLinkableDuplicates: {
      get: function() {
        return 0 !== (this.o & 16);
      },
      set: function(a) {
        var b = 0 !== (this.o & 16);
        b !== a && ((this.o ^= 16), this.g('toLinkableDuplicates', b, a));
      },
    },
    toLinkableSelfNode: {
      get: function() {
        return 0 !== (this.o & 32);
      },
      set: function(a) {
        var b = 0 !== (this.o & 32);
        b !== a && ((this.o ^= 32), this.g('toLinkableSelfNode', b, a));
      },
    },
    isPanelMain: {
      get: function() {
        return 0 !== (this.o & 64);
      },
      set: function(a) {
        var b = 0 !== (this.o & 64);
        b !== a && ((this.o ^= 64), this.w(), this.g('isPanelMain', b, a));
      },
    },
    isActionable: {
      get: function() {
        return 0 !== (this.o & 128);
      },
      set: function(a) {
        var b = 0 !== (this.o & 128);
        b !== a && ((this.o ^= 128), this.g('isActionable', b, a));
      },
    },
    areaBackground: {
      get: function() {
        return null !== this.A ? this.A.nb : null;
      },
      set: function(a) {
        var b = this.areaBackground;
        b !== a &&
          (null !== a && Pl(a, 'GraphObject.areaBackground'),
          a instanceof nl && a.freeze(),
          bl(this),
          (this.A.nb = a),
          this.N(),
          this.g('areaBackground', b, a));
      },
    },
    background: {
      get: function() {
        return this.Yb;
      },
      set: function(a) {
        var b = this.Yb;
        b !== a &&
          (null !== a && Pl(a, 'GraphObject.background'),
          a instanceof nl && a.freeze(),
          (this.Yb = a),
          this.N(),
          this.g('background', b, a));
      },
    },
    part: {
      get: function() {
        if (this.li()) return this;
        if (null !== this.jj) return this.jj;
        var a;
        for (a = this.panel; a; ) {
          if (a instanceof U) return (this.jj = a);
          a = a.panel;
        }
        return null;
      },
    },
    svg: {
      get: function() {
        return this.kr;
      },
      set: function(a) {
        this.kr = a;
      },
    },
    panel: {
      get: function() {
        return this.Uf;
      },
    },
    layer: {
      get: function() {
        var a = this.part;
        return null !== a ? a.layer : null;
      },
    },
    diagram: {
      get: function() {
        var a = this.part;
        return null !== a ? a.diagram : null;
      },
    },
    position: {
      get: function() {
        return this.pa;
      },
      set: function(a) {
        var b = a.x,
          c = a.y,
          d = this.pa,
          e = d.x;
        d = d.y;
        (e === b || (isNaN(e) && isNaN(b))) &&
        (d === c || (isNaN(d) && isNaN(c)))
          ? this.ns()
          : ((a = a.copy()),
            this.fv(a, e, d) && this.g('position', new I(e, d), a));
      },
    },
    actualBounds: {
      get: function() {
        return this.Eb;
      },
    },
    scale: {
      get: function() {
        return this.xa;
      },
      set: function(a) {
        var b = this.xa;
        b !== a &&
          (0 >= a &&
            C(
              'GraphObject.scale for ' +
                this +
                ' must be greater than zero, not: ' +
                a,
            ),
          (this.xa = a),
          this.w(),
          this.g('scale', b, a));
      },
    },
    angle: {
      get: function() {
        return this.Gb;
      },
      set: function(a) {
        var b = this.Gb;
        b !== a &&
          ((a %= 360),
          0 > a && (a += 360),
          b !== a &&
            ((this.Gb = a), Fl(this), this.w(), this.g('angle', b, a)));
      },
    },
    desiredSize: {
      get: function() {
        return this.$c;
      },
      set: function(a) {
        var b = a.width,
          c = a.height,
          d = this.$c,
          e = d.width,
          f = d.height;
        ((e === b || (isNaN(e) && isNaN(b))) &&
          (f === c || (isNaN(f) && isNaN(c)))) ||
          ((this.$c = a = a.J()),
          this.w(),
          this instanceof Cf && this.mc(),
          this.g('desiredSize', d, a),
          el(this) &&
            ((a = this.part),
            null !== a && (fl(this, a, 'width'), fl(this, a, 'height'))));
      },
    },
    width: {
      get: function() {
        return this.$c.width;
      },
      set: function(a) {
        var b = this.$c.width;
        b === a ||
          (isNaN(b) && isNaN(a)) ||
          ((b = this.$c),
          (this.$c = a = new K(a, this.$c.height).freeze()),
          this.w(),
          this instanceof Cf && this.mc(),
          this.g('desiredSize', b, a),
          el(this) && ((a = this.part), null !== a && fl(this, a, 'width')));
      },
    },
    height: {
      get: function() {
        return this.$c.height;
      },
      set: function(a) {
        var b = this.$c.height;
        b === a ||
          (isNaN(b) && isNaN(a)) ||
          ((b = this.$c),
          (this.$c = a = new K(this.$c.width, a).freeze()),
          this.w(),
          this instanceof Cf && this.mc(),
          this.g('desiredSize', b, a),
          el(this) && ((a = this.part), null !== a && fl(this, a, 'height')));
      },
    },
    minSize: {
      get: function() {
        return null !== this.A ? this.A.u : Db;
      },
      set: function(a) {
        var b = this.minSize;
        b.C(a) ||
          ((a = a.copy()),
          isNaN(a.width) && (a.width = 0),
          isNaN(a.height) && (a.height = 0),
          a.freeze(),
          bl(this),
          (this.A.u = a),
          this.w(),
          this.g('minSize', b, a));
      },
    },
    maxSize: {
      get: function() {
        return null !== this.A ? this.A.m : Lb;
      },
      set: function(a) {
        var b = this.maxSize;
        b.C(a) ||
          ((a = a.copy()),
          isNaN(a.width) && (a.width = Infinity),
          isNaN(a.height) && (a.height = Infinity),
          a.freeze(),
          bl(this),
          (this.A.m = a),
          this.w(),
          this.g('maxSize', b, a));
      },
    },
    measuredBounds: {
      get: function() {
        return this.qc;
      },
    },
    naturalBounds: {
      get: function() {
        return this.bc;
      },
    },
    margin: {
      get: function() {
        return this.Ag;
      },
      set: function(a) {
        'number' === typeof a && (a = new ec(a));
        var b = this.Ag;
        b.C(a) || ((this.Ag = a = a.J()), this.w(), this.g('margin', b, a));
      },
    },
    transform: {
      get: function() {
        (0 !== (this.o & 2048)) === !0 && pl(this);
        return this.Bb;
      },
    },
    ge: {
      get: function() {
        (0 !== (this.o & 4096)) === !0 && pl(this);
        return this.lh;
      },
    },
    animationTriggers: {
      get: function() {
        return null !== this.A ? this.A.cb : null;
      },
      set: function(a) {
        this.animationTriggers !== a && (bl(this), (this.A.cb = a));
      },
    },
    reshapingBehavior: {
      get: function() {
        return null !== this.A ? this.A.ui : lg;
      },
      set: function(a) {
        this.reshapingBehavior !== a && (bl(this), (this.A.ui = a));
      },
    },
    alignment: {
      get: function() {
        return this.Fb;
      },
      set: function(a) {
        var b = this.Fb;
        b.C(a) ||
          (a.Fc() &&
            !a.Sb() &&
            C(
              'GraphObject.alignment for ' +
                this +
                ' must be a real Spot or Spot.Default, not: ' +
                a,
            ),
          (this.Fb = a = a.J()),
          Al(this),
          this.g('alignment', b, a));
      },
    },
    column: {
      get: function() {
        return this.rg;
      },
      set: function(a) {
        a = Math.round(a);
        var b = this.rg;
        b !== a &&
          (0 > a && wa(a, '>= 0', Y, 'column'),
          (this.rg = a),
          this.w(),
          this.g('column', b, a));
      },
    },
    columnSpan: {
      get: function() {
        return null !== this.A ? this.A.Db : 1;
      },
      set: function(a) {
        a = Math.round(a);
        var b = this.columnSpan;
        b !== a &&
          (1 > a && wa(a, '>= 1', Y, 'columnSpan'),
          bl(this),
          (this.A.Db = a),
          this.w(),
          this.g('columnSpan', b, a));
      },
    },
    row: {
      get: function() {
        return this.Ln;
      },
      set: function(a) {
        a = Math.round(a);
        var b = this.Ln;
        b !== a &&
          (0 > a && wa(a, '>= 0', Y, 'row'),
          (this.Ln = a),
          this.w(),
          this.g('row', b, a));
      },
    },
    rowSpan: {
      get: function() {
        return null !== this.A ? this.A.vi : 1;
      },
      set: function(a) {
        a = Math.round(a);
        var b = this.rowSpan;
        b !== a &&
          (1 > a && wa(a, '>= 1', Y, 'rowSpan'),
          bl(this),
          (this.A.vi = a),
          this.w(),
          this.g('rowSpan', b, a));
      },
    },
    spanAllocation: {
      get: function() {
        return null !== this.A ? this.A.xi : null;
      },
      set: function(a) {
        var b = this.spanAllocation;
        b !== a &&
          (bl(this), (this.A.xi = a), this.w(), this.g('spanAllocation', b, a));
      },
    },
    alignmentFocus: {
      get: function() {
        return this.fk;
      },
      set: function(a) {
        var b = this.fk;
        b.C(a) ||
          ((this.fk = a = a.J()), this.w(), this.g('alignmentFocus', b, a));
      },
    },
    portId: {
      get: function() {
        return this.Gn;
      },
      set: function(a) {
        var b = this.Gn;
        if (b !== a) {
          var c = this.part;
          null === c ||
            c instanceof V ||
            C('Cannot set portID on a Link: ' + a);
          null !== b && null !== c && Ql(c, this);
          this.Gn = a;
          null !== a && null !== c && ((c.He = !0), Rl(c, this));
          this.g('portId', b, a);
        }
      },
    },
    toSpot: {
      get: function() {
        return null !== this.aa ? this.aa.tj : sc;
      },
      set: function(a) {
        var b = this.toSpot;
        b.C(a) ||
          ((a = a.J()),
          this.Rc(),
          (this.aa.tj = a),
          this.g('toSpot', b, a),
          El(this));
      },
    },
    toEndSegmentLength: {
      get: function() {
        return null !== this.aa ? this.aa.rj : 10;
      },
      set: function(a) {
        var b = this.toEndSegmentLength;
        b !== a &&
          (0 > a && wa(a, '>= 0', Y, 'toEndSegmentLength'),
          this.Rc(),
          (this.aa.rj = a),
          this.g('toEndSegmentLength', b, a),
          El(this));
      },
    },
    toShortLength: {
      get: function() {
        return null !== this.aa ? this.aa.sj : 0;
      },
      set: function(a) {
        var b = this.toShortLength;
        b !== a &&
          (this.Rc(),
          (this.aa.sj = a),
          this.g('toShortLength', b, a),
          El(this));
      },
    },
    toLinkable: {
      get: function() {
        return null !== this.aa ? this.aa.sr : null;
      },
      set: function(a) {
        var b = this.toLinkable;
        b !== a && (this.Rc(), (this.aa.sr = a), this.g('toLinkable', b, a));
      },
    },
    toMaxLinks: {
      get: function() {
        return null !== this.aa ? this.aa.tr : Infinity;
      },
      set: function(a) {
        var b = this.toMaxLinks;
        b !== a &&
          (0 > a && wa(a, '>= 0', Y, 'toMaxLinks'),
          this.Rc(),
          (this.aa.tr = a),
          this.g('toMaxLinks', b, a));
      },
    },
    fromSpot: {
      get: function() {
        return null !== this.aa ? this.aa.Qi : sc;
      },
      set: function(a) {
        var b = this.fromSpot;
        b.C(a) ||
          ((a = a.J()),
          this.Rc(),
          (this.aa.Qi = a),
          this.g('fromSpot', b, a),
          El(this));
      },
    },
    fromEndSegmentLength: {
      get: function() {
        return null !== this.aa ? this.aa.Oi : 10;
      },
      set: function(a) {
        var b = this.fromEndSegmentLength;
        b !== a &&
          (0 > a && wa(a, '>= 0', Y, 'fromEndSegmentLength'),
          this.Rc(),
          (this.aa.Oi = a),
          this.g('fromEndSegmentLength', b, a),
          El(this));
      },
    },
    fromShortLength: {
      get: function() {
        return null !== this.aa ? this.aa.Pi : 0;
      },
      set: function(a) {
        var b = this.fromShortLength;
        b !== a &&
          (this.Rc(),
          (this.aa.Pi = a),
          this.g('fromShortLength', b, a),
          El(this));
      },
    },
    fromLinkable: {
      get: function() {
        return null !== this.aa ? this.aa.Kp : null;
      },
      set: function(a) {
        var b = this.fromLinkable;
        b !== a && (this.Rc(), (this.aa.Kp = a), this.g('fromLinkable', b, a));
      },
    },
    fromMaxLinks: {
      get: function() {
        return null !== this.aa ? this.aa.Lp : Infinity;
      },
      set: function(a) {
        var b = this.fromMaxLinks;
        b !== a &&
          (0 > a && wa(a, '>= 0', Y, 'fromMaxLinks'),
          this.Rc(),
          (this.aa.Lp = a),
          this.g('fromMaxLinks', b, a));
      },
    },
    cursor: {
      get: function() {
        return null !== this.A ? this.A.j : '';
      },
      set: function(a) {
        var b = this.cursor;
        b !== a && (bl(this), (this.A.j = a), this.g('cursor', b, a));
      },
    },
    click: {
      get: function() {
        return null !== this.A ? this.A.oh : null;
      },
      set: function(a) {
        var b = this.click;
        b !== a && (bl(this), (this.A.oh = a), this.g('click', b, a));
      },
    },
    doubleClick: {
      get: function() {
        return null !== this.A ? this.A.uh : null;
      },
      set: function(a) {
        var b = this.doubleClick;
        b !== a && (bl(this), (this.A.uh = a), this.g('doubleClick', b, a));
      },
    },
    contextClick: {
      get: function() {
        return null !== this.A ? this.A.qh : null;
      },
      set: function(a) {
        var b = this.contextClick;
        b !== a && (bl(this), (this.A.qh = a), this.g('contextClick', b, a));
      },
    },
    mouseEnter: {
      get: function() {
        return null !== this.A ? this.A.Fh : null;
      },
      set: function(a) {
        var b = this.mouseEnter;
        b !== a && (bl(this), (this.A.Fh = a), this.g('mouseEnter', b, a));
      },
    },
    mouseLeave: {
      get: function() {
        return null !== this.A ? this.A.Ih : null;
      },
      set: function(a) {
        var b = this.mouseLeave;
        b !== a && (bl(this), (this.A.Ih = a), this.g('mouseLeave', b, a));
      },
    },
    mouseOver: {
      get: function() {
        return null !== this.A ? this.A.Jh : null;
      },
      set: function(a) {
        var b = this.mouseOver;
        b !== a && (bl(this), (this.A.Jh = a), this.g('mouseOver', b, a));
      },
    },
    mouseHover: {
      get: function() {
        return null !== this.A ? this.A.Hh : null;
      },
      set: function(a) {
        var b = this.mouseHover;
        b !== a && (bl(this), (this.A.Hh = a), this.g('mouseHover', b, a));
      },
    },
    mouseHold: {
      get: function() {
        return null !== this.A ? this.A.Gh : null;
      },
      set: function(a) {
        var b = this.mouseHold;
        b !== a && (bl(this), (this.A.Gh = a), this.g('mouseHold', b, a));
      },
    },
    mouseDragEnter: {
      get: function() {
        return null !== this.A ? this.A.Qd : null;
      },
      set: function(a) {
        var b = this.mouseDragEnter;
        b !== a && (bl(this), (this.A.Qd = a), this.g('mouseDragEnter', b, a));
      },
    },
    mouseDragLeave: {
      get: function() {
        return null !== this.A ? this.A.Gf : null;
      },
      set: function(a) {
        var b = this.mouseDragLeave;
        b !== a && (bl(this), (this.A.Gf = a), this.g('mouseDragLeave', b, a));
      },
    },
    mouseDrop: {
      get: function() {
        return null !== this.A ? this.A.Eh : null;
      },
      set: function(a) {
        var b = this.mouseDrop;
        b !== a && (bl(this), (this.A.Eh = a), this.g('mouseDrop', b, a));
      },
    },
    actionDown: {
      get: function() {
        return null !== this.A ? this.A.W : null;
      },
      set: function(a) {
        var b = this.actionDown;
        b !== a && (bl(this), (this.A.W = a), this.g('actionDown', b, a));
      },
    },
    actionMove: {
      get: function() {
        return null !== this.A ? this.A.ga : null;
      },
      set: function(a) {
        var b = this.actionMove;
        b !== a && (bl(this), (this.A.ga = a), this.g('actionMove', b, a));
      },
    },
    actionUp: {
      get: function() {
        return null !== this.A ? this.A.Ga : null;
      },
      set: function(a) {
        var b = this.actionUp;
        b !== a && (bl(this), (this.A.Ga = a), this.g('actionUp', b, a));
      },
    },
    actionCancel: {
      get: function() {
        return null !== this.A ? this.A.F : null;
      },
      set: function(a) {
        var b = this.actionCancel;
        b !== a && (bl(this), (this.A.F = a), this.g('actionCancel', b, a));
      },
    },
    toolTip: {
      get: function() {
        return null !== this.A ? this.A.Th : null;
      },
      set: function(a) {
        var b = this.toolTip;
        b !== a && (bl(this), (this.A.Th = a), this.g('toolTip', b, a));
      },
    },
    contextMenu: {
      get: function() {
        return null !== this.A ? this.A.rh : null;
      },
      set: function(a) {
        var b = this.contextMenu;
        b !== a && (bl(this), (this.A.rh = a), this.g('contextMenu', b, a));
      },
    },
  });
  Y.prototype.trigger = Y.prototype.mv;
  Y.prototype.findBindingPanel = Y.prototype.Yg;
  Y.prototype.findTemplateBinder = Y.prototype.Yy;
  Y.prototype.setProperties = Y.prototype.Vl;
  Y.prototype.apply = Y.prototype.apply;
  Y.prototype.attach = Y.prototype.ku;
  Y.prototype.set = Y.prototype.set;
  Y.prototype.isEnabledObject = Y.prototype.yf;
  Y.prototype.isVisibleObject = Y.prototype.zf;
  Y.prototype.isContainedBy = Y.prototype.jg;
  Y.prototype.getNearestIntersectionPoint = Y.prototype.Or;
  Y.prototype.getLocalPoint = Y.prototype.Nr;
  Y.prototype.getDocumentScale = Y.prototype.uf;
  Y.prototype.getDocumentAngle = Y.prototype.fi;
  Y.prototype.getDocumentBounds = Y.prototype.gi;
  Y.prototype.getDocumentPoint = Y.prototype.ia;
  Y.prototype.intersectsRect = Y.prototype.Sc;
  Y.prototype.containedInRect = Y.prototype.Wg;
  Y.prototype.containsRect = Y.prototype.Ee;
  Y.prototype.containsPoint = Y.prototype.ba;
  Y.prototype.raiseChanged = Y.prototype.g;
  Y.prototype.raiseChangedEvent = Y.prototype.bb;
  Y.prototype.addCopyProperty = Y.prototype.zw;
  var Jl = null;
  Y.className = 'GraphObject';
  Jl = new pb();
  Ml('Button', function() {
    function a(a, b) {
      return (
        null !==
        a.diagram.ec(
          a.documentPoint,
          function(a) {
            for (; null !== a.panel && !a.isActionable; ) a = a.panel;
            return a;
          },
          function(a) {
            return a === b;
          },
        )
      );
    }
    var b = Il(
      W,
      W.Auto,
      {
        isActionable: !0,
        enabledChanged: function(a, b) {
          if (a instanceof W) {
            var c = a.fb('ButtonBorder');
            null !== c &&
              (c.fill = b ? a._buttonFillNormal : a._buttonFillDisabled);
          }
        },
        cursor: 'pointer',
        _buttonFillNormal: '#F5F5F5',
        _buttonStrokeNormal: '#BDBDBD',
        _buttonFillOver: '#E0E0E0',
        _buttonStrokeOver: '#9E9E9E',
        _buttonFillPressed: '#BDBDBD',
        _buttonStrokePressed: '#9E9E9E',
        _buttonFillDisabled: '#E5E5E5',
      },
      Il(Cf, {
        name: 'ButtonBorder',
        figure: 'RoundedRectangle',
        spot1: new N(0, 0, 2.76142374915397, 2.761423749153969),
        spot2: new N(1, 1, -2.76142374915397, -2.761423749153969),
        parameter1: 2,
        parameter2: 2,
        fill: '#F5F5F5',
        stroke: '#BDBDBD',
      }),
    );
    b.mouseEnter = function(a, b) {
      if (
        b.yf() &&
        b instanceof W &&
        ((a = b.fb('ButtonBorder')), a instanceof Cf)
      ) {
        var c = b._buttonFillOver;
        b._buttonFillNormal = a.fill;
        a.fill = c;
        c = b._buttonStrokeOver;
        b._buttonStrokeNormal = a.stroke;
        a.stroke = c;
      }
    };
    b.mouseLeave = function(a, b) {
      b.yf() &&
        b instanceof W &&
        ((a = b.fb('ButtonBorder')),
        a instanceof Cf &&
          ((a.fill = b._buttonFillNormal), (a.stroke = b._buttonStrokeNormal)));
    };
    b.actionDown = function(a, b) {
      if (
        b.yf() &&
        b instanceof W &&
        null !== b._buttonFillPressed &&
        0 === a.button
      ) {
        var c = b.fb('ButtonBorder');
        if (c instanceof Cf) {
          a = a.diagram;
          var d = a.skipsUndoManager;
          a.skipsUndoManager = !0;
          var g = b._buttonFillPressed;
          b._buttonFillOver = c.fill;
          c.fill = g;
          g = b._buttonStrokePressed;
          b._buttonStrokeOver = c.stroke;
          c.stroke = g;
          a.skipsUndoManager = d;
        }
      }
    };
    b.actionUp = function(b, d) {
      if (
        d.yf() &&
        d instanceof W &&
        null !== d._buttonFillPressed &&
        0 === b.button
      ) {
        var c = d.fb('ButtonBorder');
        if (c instanceof Cf) {
          var f = b.diagram,
            g = f.skipsUndoManager;
          f.skipsUndoManager = !0;
          a(b, d)
            ? ((c.fill = d._buttonFillOver), (c.stroke = d._buttonStrokeOver))
            : ((c.fill = d._buttonFillNormal),
              (c.stroke = d._buttonStrokeNormal));
          f.skipsUndoManager = g;
        }
      }
    };
    b.actionCancel = function(b, d) {
      if (d.yf() && d instanceof W && null !== d._buttonFillPressed) {
        var c = d.fb('ButtonBorder');
        if (c instanceof Cf) {
          var f = b.diagram,
            g = f.skipsUndoManager;
          f.skipsUndoManager = !0;
          a(b, d)
            ? ((c.fill = d._buttonFillOver), (c.stroke = d._buttonStrokeOver))
            : ((c.fill = d._buttonFillNormal),
              (c.stroke = d._buttonStrokeNormal));
          f.skipsUndoManager = g;
        }
      }
    };
    b.actionMove = function(b, d) {
      if (d.yf() && d instanceof W && null !== d._buttonFillPressed) {
        var c = b.diagram;
        if (
          0 === c.firstInput.button &&
          (c.currentTool.standardMouseOver(),
          a(b, d) && ((b = d.fb('ButtonBorder')), b instanceof Cf))
        ) {
          var f = c.skipsUndoManager;
          c.skipsUndoManager = !0;
          var g = d._buttonFillPressed;
          b.fill !== g && (b.fill = g);
          g = d._buttonStrokePressed;
          b.stroke !== g && (b.stroke = g);
          c.skipsUndoManager = f;
        }
      }
    };
    return b;
  });
  Ml('TreeExpanderButton', function() {
    var a = Il(
      'Button',
      {
        _treeExpandedFigure: 'MinusLine',
        _treeCollapsedFigure: 'PlusLine',
      },
      Il(
        Cf,
        {
          name: 'ButtonIcon',
          figure: 'MinusLine',
          stroke: '#424242',
          strokeWidth: 2,
          desiredSize: Jb,
        },
        new wi('figure', 'isTreeExpanded', function(a, c) {
          c = c.panel;
          return a ? c._treeExpandedFigure : c._treeCollapsedFigure;
        }).Fo(),
      ),
      {
        visible: !1,
      },
      new wi('visible', 'isTreeLeaf', function(a) {
        return !a;
      }).Fo(),
    );
    a.click = function(a, c) {
      c = c.part;
      c instanceof ue && (c = c.adornedPart);
      if (c instanceof V) {
        var b = c.diagram;
        if (null !== b) {
          b = b.commandHandler;
          if (c.isTreeExpanded) {
            if (!b.canCollapseTree(c)) return;
          } else if (!b.canExpandTree(c)) return;
          a.handled = !0;
          c.isTreeExpanded ? b.collapseTree(c) : b.expandTree(c);
        }
      }
    };
    return a;
  });
  Ml('SubGraphExpanderButton', function() {
    var a = Il(
      'Button',
      {
        _subGraphExpandedFigure: 'MinusLine',
        _subGraphCollapsedFigure: 'PlusLine',
      },
      Il(
        Cf,
        {
          name: 'ButtonIcon',
          figure: 'MinusLine',
          stroke: '#424242',
          strokeWidth: 2,
          desiredSize: Jb,
        },
        new wi('figure', 'isSubGraphExpanded', function(a, c) {
          c = c.panel;
          return a ? c._subGraphExpandedFigure : c._subGraphCollapsedFigure;
        }).Fo(),
      ),
    );
    a.click = function(a, c) {
      c = c.part;
      c instanceof ue && (c = c.adornedPart);
      if (c instanceof qf) {
        var b = c.diagram;
        if (null !== b) {
          b = b.commandHandler;
          if (c.isSubGraphExpanded) {
            if (!b.canCollapseSubGraph(c)) return;
          } else if (!b.canExpandSubGraph(c)) return;
          a.handled = !0;
          c.isSubGraphExpanded ? b.collapseSubGraph(c) : b.expandSubGraph(c);
        }
      }
    };
    return a;
  });
  Ml('ToolTip', function() {
    return Il(
      ue,
      W.Auto,
      {
        isShadowed: !0,
        shadowColor: 'rgba(0, 0, 0, .4)',
        shadowOffset: new I(0, 3),
        shadowBlur: 5,
      },
      Il(Cf, {
        name: 'Border',
        figure: 'RoundedRectangle',
        parameter1: 1,
        parameter2: 1,
        fill: '#F5F5F5',
        stroke: '#F0F0F0',
        spot1: new N(0, 0, 4, 6),
        spot2: new N(1, 1, -4, -4),
      }),
    );
  });
  Ml('ContextMenu', function() {
    return Il(
      ue,
      W.Vertical,
      {
        background: '#F5F5F5',
        isShadowed: !0,
        shadowColor: 'rgba(0, 0, 0, .4)',
        shadowOffset: new I(0, 3),
        shadowBlur: 5,
      },
      new wi('background', '', function(a) {
        return null !== a.adornedPart && null !== a.placeholder
          ? null
          : '#F5F5F5';
      }),
    );
  });
  Ml('ContextMenuButton', function() {
    var a = Il('Button');
    a.stretch = Vk;
    var b = a.fb('ButtonBorder');
    b instanceof Cf &&
      ((b.figure = 'Rectangle'),
      (b.strokeWidth = 0),
      (b.spot1 = new N(0, 0, 2, 3)),
      (b.spot2 = new N(1, 1, -2, -2)));
    return a;
  });
  Ml('PanelExpanderButton', function(a) {
    var b = Nl(a, 'COLLAPSIBLE'),
      c = Il(
        'Button',
        {
          _buttonExpandedFigure: 'M0 0 M0 6 L4 2 8 6 M8 8',
          _buttonCollapsedFigure: 'M0 0 M0 2 L4 6 8 2 M8 8',
          _buttonFillNormal: 'rgba(0, 0, 0, 0)',
          _buttonStrokeNormal: null,
          _buttonFillOver: 'rgba(0, 0, 0, .2)',
          _buttonStrokeOver: null,
          _buttonFillPressed: 'rgba(0, 0, 0, .4)',
          _buttonStrokePressed: null,
        },
        Il(
          Cf,
          {
            name: 'ButtonIcon',
            strokeWidth: 2,
          },
          new wi('geometryString', 'visible', function(a) {
            return a ? c._buttonExpandedFigure : c._buttonCollapsedFigure;
          }).Fo(b),
        ),
      );
    a = c.fb('ButtonBorder');
    a instanceof Cf && ((a.stroke = null), (a.fill = 'rgba(0, 0, 0, 0)'));
    c.click = function(a, c) {
      var d = c.diagram;
      if (null !== d && !d.isReadOnly) {
        var e = c.Yg();
        null === e && (e = c.part);
        null !== e &&
          ((c = e.fb(b)),
          null !== c &&
            ((a.handled = !0),
            d.Da('Collapse/Expand Panel'),
            (c.visible = !c.visible),
            d.eb('Collapse/Expand Panel')));
      }
    };
    return c;
  });
  Ml('CheckBoxButton', function(a) {
    var b = Nl(a);
    a = Il(
      'Button',
      {
        desiredSize: new K(14, 14),
      },
      Il(
        Cf,
        {
          name: 'ButtonIcon',
          geometryString: 'M0 0 M0 8.85 L4.9 13.75 16.2 2.45 M16.2 16.2',
          strokeWidth: 2,
          stretch: td,
          geometryStretch: ng,
          visible: !1,
        },
        '' !== b ? new wi('visible', b).px() : [],
      ),
    );
    a.click = function(a, d) {
      if (d instanceof W) {
        var c = a.diagram;
        if (!(null === c || c.isReadOnly || ('' !== b && c.model.isReadOnly))) {
          a.handled = !0;
          var f = d.fb('ButtonIcon');
          c.Da('checkbox');
          f.visible = !f.visible;
          'function' === typeof d._doClick && d._doClick(a, d);
          c.eb('checkbox');
        }
      }
    };
    return a;
  });
  Ml('CheckBox', function(a) {
    a = Nl(a);
    a = Il('CheckBoxButton', a, {
      name: 'Button',
      isActionable: !1,
      margin: new ec(0, 1, 0, 0),
    });
    var b = Il(W, 'Horizontal', a, {
      isActionable: !0,
      cursor: a.cursor,
      margin: 1,
      _buttonFillNormal: a._buttonFillNormal,
      _buttonStrokeNormal: a._buttonStrokeNormal,
      _buttonFillOver: a._buttonFillOver,
      _buttonStrokeOver: a._buttonStrokeOver,
      _buttonFillPressed: a._buttonFillPressed,
      _buttonStrokePressed: a._buttonStrokePressed,
      _buttonFillDisabled: a._buttonFillDisabled,
      mouseEnter: a.mouseEnter,
      mouseLeave: a.mouseLeave,
      actionDown: a.actionDown,
      actionUp: a.actionUp,
      actionCancel: a.actionCancel,
      actionMove: a.actionMove,
      click: a.click,
      _buttonClick: a.click,
    });
    a.mouseEnter = null;
    a.mouseLeave = null;
    a.actionDown = null;
    a.actionUp = null;
    a.actionCancel = null;
    a.actionMove = null;
    a.click = null;
    return b;
  });
  Y.None = lg = new D(Y, 'None', 0);
  Y.Default = Xk = new D(Y, 'Default', 0);
  Y.Vertical = Wk = new D(Y, 'Vertical', 4);
  Y.Horizontal = Vk = new D(Y, 'Horizontal', 5);
  Y.Fill = td = new D(Y, 'Fill', 3);
  Y.Uniform = ng = new D(Y, 'Uniform', 1);
  Y.UniformToFill = Yk = new D(Y, 'UniformToFill', 2);
  Y.FlipVertical = Zk = new D(Y, 'FlipVertical', 1);
  Y.FlipHorizontal = $k = new D(Y, 'FlipHorizontal', 2);
  Y.FlipBoth = al = new D(Y, 'FlipBoth', 3);
  Y.make = Il;
  Y.getBuilders = function() {
    var a = new pb(),
      b;
    for (b in Jl)
      if (b !== b.toLowerCase()) {
        var c = Jl.I(b);
        'function' === typeof c && a.add(b, c);
      }
    a.freeze();
    return a;
  };
  Y.defineBuilder = Ml;
  Y.build = function(a, b) {
    var c = Jl.I(a);
    if ('function' === typeof c && ((c = c(null)), c instanceof Y))
      return b && c.set(b), c;
    C(
      'GraphObject.build invoked object builder "' +
        a +
        '", but it did not return an Object',
    );
  };
  Y.takeBuilderArgument = Nl;

  function cl() {
    this.ic = !1;
    this.va = '';
    this.bp = -1;
    this.hb = this.Wo = this.Ff = null;
    this.j = '';
    this.cb = this.xi = this.Hc = this.rh = this.Th = this.F = this.Ga = this.ga = this.W = this.Eh = this.Gf = this.Qd = this.Gh = this.Hh = this.Jh = this.Ih = this.Fh = this.qh = this.uh = this.oh = null;
    this.u = Db;
    this.m = Lb;
    this.$f = Xk;
    this.Db = this.vi = 1;
    this.ui = lg;
    this.le = this.wi = this.nb = null;
    this.Ic = 'category';
  }
  cl.prototype.copy = function() {
    var a = new cl();
    a.va = this.va;
    a.bp = this.bp;
    a.Ff = this.Ff;
    a.hb = this.hb;
    a.j = this.j;
    a.oh = this.oh;
    a.uh = this.uh;
    a.qh = this.qh;
    a.Fh = this.Fh;
    a.Ih = this.Ih;
    a.Jh = this.Jh;
    a.Hh = this.Hh;
    a.Gh = this.Gh;
    a.Qd = this.Qd;
    a.Gf = this.Gf;
    a.Eh = this.Eh;
    a.W = this.W;
    a.ga = this.ga;
    a.Ga = this.Ga;
    a.F = this.F;
    a.Th = this.Th;
    a.rh = this.rh;
    a.Hc = this.Hc;
    a.xi = this.xi;
    a.cb = this.cb;
    a.u = this.u.J();
    a.m = this.m.J();
    a.$f = this.$f;
    a.vi = this.vi;
    a.Db = this.Db;
    a.ui = this.ui;
    a.nb = this.nb;
    a.wi = this.wi;
    a.le = this.le;
    a.Ic = this.Ic;
    return a;
  };

  function Ol() {
    this.u = -Infinity;
    this.m = 0;
    this.F = qb;
    this.Oq = $f;
    this.j = this.W = 'None';
  }
  Ol.prototype.copy = function() {
    var a = new Ol();
    a.u = this.u;
    a.m = this.m;
    a.F = this.F.J();
    a.Oq = this.Oq;
    a.W = this.W;
    a.j = this.j;
    return a;
  };
  Ol.className = 'LinkElementSettings';

  function dl() {
    this.tj = this.Qi = Wc;
    this.sj = this.Pi = this.rj = this.Oi = NaN;
    this.sr = this.Kp = null;
    this.tr = this.Lp = Infinity;
  }
  dl.prototype.copy = function() {
    var a = new dl();
    a.Qi = this.Qi.J();
    a.tj = this.tj.J();
    a.Oi = this.Oi;
    a.rj = this.rj;
    a.Pi = this.Pi;
    a.sj = this.sj;
    a.Kp = this.Kp;
    a.sr = this.sr;
    a.Lp = this.Lp;
    a.tr = this.tr;
    return a;
  };
  dl.className = 'LinkSettings';

  function Sl() {
    this.Ta = [1, 0, 0, 1, 0, 0];
  }
  Sl.prototype.copy = function() {
    var a = new Sl();
    a.Ta[0] = this.Ta[0];
    a.Ta[1] = this.Ta[1];
    a.Ta[2] = this.Ta[2];
    a.Ta[3] = this.Ta[3];
    a.Ta[4] = this.Ta[4];
    a.Ta[5] = this.Ta[5];
    return a;
  };
  Sl.prototype.translate = function(a, b) {
    this.Ta[4] += this.Ta[0] * a + this.Ta[2] * b;
    this.Ta[5] += this.Ta[1] * a + this.Ta[3] * b;
  };
  Sl.prototype.scale = function(a, b) {
    this.Ta[0] *= a;
    this.Ta[1] *= a;
    this.Ta[2] *= b;
    this.Ta[3] *= b;
  };
  Sl.className = 'STransform';

  function Tl(a) {
    this.type = a;
    this.r2 = this.y2 = this.x2 = this.r1 = this.y1 = this.x1 = 0;
    this.Jw = [];
    this.pattern = null;
  }
  Tl.prototype.addColorStop = function(a, b) {
    this.Jw.push({
      offset: a,
      color: b,
    });
  };
  Tl.className = 'SGradient';

  function xj(a, b) {
    this.ownerDocument = a = void 0 === b ? x.document : b;
    this.Jz = 'http://www.w3.org/2000/svg';
    void 0 !== a &&
      ((this.Sa = this.Vb('svg', {
        width: '1px',
        height: '1px',
        viewBox: '0 0 1 1',
      })),
      this.Sa.setAttributeNS(
        'http://www.w3.org/2000/xmlns/',
        'xmlns',
        'http://www.w3.org/2000/svg',
      ),
      this.Sa.setAttributeNS(
        'http://www.w3.org/2000/xmlns/',
        'xmlns:xlink',
        'http://www.w3.org/1999/xlink',
      ));
    this.po = null;
    this.context = new Ul(this);
  }
  xj.prototype.resize = function(a, b, c, d) {
    return this.width !== a || this.height !== b
      ? ((this.style.width = c + 'px'),
        (this.style.height = d + 'px'),
        this.Sa.setAttributeNS(null, 'width', c + 'px'),
        this.Sa.setAttributeNS(null, 'height', d + 'px'),
        this.Sa.setAttributeNS(null, 'viewBox', '0 0 ' + c + ' ' + d),
        this.context.bw.firstElementChild.setAttributeNS(
          null,
          'width',
          c + 'px',
        ),
        this.context.bw.firstElementChild.setAttributeNS(
          null,
          'height',
          d + 'px',
        ),
        !0)
      : !1;
  };
  xj.prototype.Vb = function(a, b, c) {
    a = this.ownerDocument.createElementNS(this.Jz, a);
    if (ya(b))
      for (var d in b)
        a.setAttributeNS(
          'href' === d ? 'http://www.w3.org/1999/xlink' : '',
          d,
          b[d],
        );
    void 0 !== c && (a.textContent = c);
    return a;
  };
  xj.prototype.getBoundingClientRect = function() {
    return this.Sa.getBoundingClientRect();
  };
  xj.prototype.focus = function() {
    this.Sa.focus();
  };
  xj.prototype.Pw = function() {
    this.ownerDocument = null;
  };
  ma.Object.defineProperties(xj.prototype, {
    width: {
      get: function() {
        return this.Sa.width.baseVal.value;
      },
      set: function(a) {
        this.Sa.width = a;
      },
    },
    height: {
      get: function() {
        return this.Sa.height.baseVal.value;
      },
      set: function(a) {
        this.Sa.height = a;
      },
    },
    style: {
      get: function() {
        return this.Sa.style;
      },
    },
  });
  xj.className = 'SVGSurface';

  function Ul(a) {
    this.qs = a;
    this.svg = a.Sa;
    this.stack = [];
    this.md = [];
    this.fillStyle = '#000000';
    this.font = '10px sans-serif';
    this.globalAlpha = 1;
    this.lineCap = 'butt';
    this.lineDashOffset = 0;
    this.lineJoin = 'miter';
    this.lineWidth = 1;
    this.miterLimit = 10;
    this.shadowBlur = 0;
    this.shadowColor = 'rgba(0, 0, 0, 0)';
    this.shadowOffsetY = this.shadowOffsetX = 0;
    this.strokeStyle = '#000000';
    this.textAlign = 'start';
    this.clipInsteadOfFill = !1;
    this.Lg = this.Yq = this.Xq = 0;
    this.Xr = null;
    this.path = [];
    this.et = !1;
    this.Og = null;
    this.pj = 0;
    this.Fe = new Sl();
    Vl(this, 1, 0, 0, 1, 0, 0);
    var b = kb++,
      c = this.Vb('clipPath', {
        id: 'mainClip' + b,
      });
    c.appendChild(
      this.Vb('rect', {
        x: 0,
        y: 0,
        width: a.width,
        height: a.height,
      }),
    );
    this.bw = c;
    this.qs.Sa.appendChild(c);
    this.md[0].setAttributeNS(null, 'clip-path', 'url(#mainClip' + b + ')');
    this.Lz = {};
  }
  t = Ul.prototype;
  t.arc = function(a, b, c, d, e, f, g, h) {
    var k = 2 * Math.PI,
      l = k - 1e-6,
      m = c * Math.cos(d),
      n = c * Math.sin(d),
      p = a + m,
      r = b + n,
      q = f ? 0 : 1;
    d = f ? d - e : e - d;
    (1e-6 < Math.abs(g - p) || 1e-6 < Math.abs(h - r)) &&
      this.path.push(['L', p, +r]);
    0 > d && (d = (d % k) + k);
    d > l
      ? (this.path.push(['A', c, c, 0, 1, q, a - m, b - n]),
        this.path.push(['A', c, c, 0, 1, q, p, r]))
      : 1e-6 < d &&
        this.path.push([
          'A',
          c,
          c,
          0,
          +(d >= Math.PI),
          q,
          a + c * Math.cos(e),
          b + c * Math.sin(e),
        ]);
  };
  t.beginPath = function() {
    this.path = [];
  };
  t.bezierCurveTo = function(a, b, c, d, e, f) {
    this.path.push(['C', a, b, c, d, e, f]);
  };
  t.clearRect = function() {};
  t.clip = function() {
    this.addPath('clipPath', this.path, this.Fe);
  };
  t.closePath = function() {
    this.path.push(['z']);
  };
  t.createLinearGradient = function(a, b, c, d) {
    var e = new Tl('linear');
    e.x1 = a;
    e.y1 = b;
    e.x2 = c;
    e.y2 = d;
    return e;
  };
  t.createPattern = function(a) {
    var b = '';
    a instanceof HTMLCanvasElement && (b = a.toDataURL());
    a instanceof HTMLImageElement && (b = a.getAttribute('src'));
    var c = this.Lz;
    if (c[b]) return 'url(#' + c[b] + ')';
    var d = 'PATTERN' + kb++,
      e = {
        x: 0,
        y: 0,
        width: a.width,
        height: a.height,
        href: b,
      };
    a = this.Vb('pattern', {
      width: a.width,
      height: a.height,
      id: d,
      patternUnits: 'userSpaceOnUse',
    });
    a.appendChild(this.Vb(Ak, e));
    this.svg.appendChild(a);
    c[b] = d;
    return 'url(#' + d + ')';
  };
  t.createRadialGradient = function(a, b, c, d, e, f) {
    var g = new Tl('radial');
    g.x1 = a;
    g.y1 = b;
    g.r1 = c;
    g.x2 = d;
    g.y2 = e;
    g.r2 = f;
    return g;
  };
  t.drawImage = function(a, b, c, d, e, f, g, h, k) {
    var l = '';
    a instanceof HTMLCanvasElement && (l = a.toDataURL());
    a instanceof HTMLImageElement && (l = a.getAttribute('src'));
    var m = a instanceof HTMLImageElement ? a.naturalWidth : a.width,
      n = a instanceof HTMLImageElement ? a.naturalHeight : a.height;
    void 0 === d && ((f = b), (g = c), (h = d = m), (k = e = n));
    d = d || 0;
    e = e || 0;
    f = f || 0;
    g = g || 0;
    h = h || 0;
    k = k || 0;
    a = {
      x: 0,
      y: 0,
      width: m || d,
      height: n || e,
      href: l,
    };
    J.ca(d, h) && J.ca(e, k)
      ? -1 === l.toLowerCase().indexOf('.svg') &&
        -1 === l.toLowerCase().indexOf('data:image/svg') &&
        (a.preserveAspectRatio = 'xMidYMid slice')
      : (a.preserveAspectRatio = 'none');
    l = '';
    h /= d;
    k /= e;
    if (0 !== f || 0 !== g) l += ' translate(' + f + ', ' + g + ')';
    if (1 !== h || 1 !== k) l += ' scale(' + h + ', ' + k + ')';
    if (0 !== b || 0 !== c) l += ' translate(' + -b + ', ' + -c + ')';
    if (0 !== b || 0 !== c || d !== m || e !== n)
      (f = 'CLIP' + kb++),
        (g = this.Vb('clipPath', {
          id: f,
        })),
        g.appendChild(
          this.Vb('rect', {
            x: b,
            y: c,
            width: d,
            height: e,
          }),
        ),
        this.svg.appendChild(g),
        (a['clip-path'] = 'url(#' + f + ')');
    Wl(this, Ak, a, this.Fe, l);
    this.addElement(Ak, a);
  };
  t.fill = function() {
    this.addPath('fill', this.path, this.Fe);
  };
  t.sf = function() {
    this.clipInsteadOfFill ? this.clip() : this.fill();
  };
  t.fillRect = function(a, b, c, d) {
    a = [a, b, c, d];
    a = {
      x: a[0],
      y: a[1],
      width: a[2],
      height: a[3],
    };
    Wl(this, 'fill', a, this.Fe);
    this.addElement('rect', a);
  };
  t.fillText = function(a, b, c) {
    a = [a, b, c];
    b = this.textAlign;
    'left' === b
      ? (b = 'start')
      : 'right' === b
      ? (b = 'end')
      : 'center' === b && (b = 'middle');
    b = {
      x: a[1],
      y: a[2],
      style: 'font: ' + this.font,
      'text-anchor': b,
    };
    Wl(this, 'fill', b, this.Fe);
    this.addElement('text', b, a[0]);
  };
  t.lineTo = function(a, b) {
    this.path.push(['L', a, b]);
  };
  t.moveTo = function(a, b) {
    this.path.push(['M', a, b]);
  };
  t.quadraticCurveTo = function(a, b, c, d) {
    this.path.push(['Q', a, b, c, d]);
  };
  t.rect = function(a, b, c, d) {
    this.path.push(
      ['M', a, b],
      ['L', a + c, b],
      ['L', a + c, b + d],
      ['L', a, b + d],
      ['z'],
    );
  };
  t.restore = function() {
    this.Fe = this.stack.pop();
    this.path = this.stack.pop();
    var a = this.stack.pop();
    this.fillStyle = a.fillStyle;
    this.font = a.font;
    this.globalAlpha = a.globalAlpha;
    this.lineCap = a.lineCap;
    this.lineDashOffset = a.lineDashOffset;
    this.lineJoin = a.lineJoin;
    this.lineWidth = a.lineWidth;
    this.miterLimit = a.miterLimit;
    this.shadowBlur = a.shadowBlur;
    this.shadowColor = a.shadowColor;
    this.shadowOffsetX = a.shadowOffsetX;
    this.shadowOffsetY = a.shadowOffsetY;
    this.strokeStyle = a.strokeStyle;
    this.textAlign = a.textAlign;
  };
  t.save = function() {
    this.stack.push({
      fillStyle: this.fillStyle,
      font: this.font,
      globalAlpha: this.globalAlpha,
      lineCap: this.lineCap,
      lineDashOffset: this.lineDashOffset,
      lineJoin: this.lineJoin,
      lineWidth: this.lineWidth,
      miterLimit: this.miterLimit,
      shadowBlur: this.shadowBlur,
      shadowColor: this.shadowColor,
      shadowOffsetX: this.shadowOffsetX,
      shadowOffsetY: this.shadowOffsetY,
      strokeStyle: this.strokeStyle,
      textAlign: this.textAlign,
    });
    for (var a = [], b = 0; b < this.path.length; b++) a.push(this.path[b]);
    this.stack.push(a);
    this.stack.push(this.Fe.copy());
  };
  t.setTransform = function(a, b, c, d, e, f) {
    (1 === a && 0 === b && 0 === c && 1 === d && 0 === e && 0 === f) ||
      Vl(this, a, b, c, d, e, f);
  };
  t.scale = function(a, b) {
    this.Fe.scale(a, b);
  };
  t.translate = function(a, b) {
    this.Fe.translate(a, b);
  };
  t.transform = function() {};
  t.Pc = function() {};
  t.stroke = function() {
    this.addPath('stroke', this.path, this.Fe);
  };
  t.si = function() {
    this.clipInsteadOfFill || this.stroke();
  };
  t.Vb = function(a, b, c) {
    return this.qs.Vb(a, b, c);
  };
  t.addElement = function(a, b, c) {
    a = this.Vb(a, b, c);
    0 < this.md.length
      ? this.md[this.md.length - 1].appendChild(a)
      : this.svg.appendChild(a);
    return (this.Xr = a);
  };

  function Wl(a, b, c, d, e) {
    1 !== a.globalAlpha && (c.opacity = a.globalAlpha);
    'fill' === b
      ? (a.fillStyle instanceof Tl
          ? (c.fill = Xl(a, a.fillStyle))
          : /^rgba\(/.test(a.fillStyle)
          ? ((a = /^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec(
              a.fillStyle,
            )),
            (c.fill = 'rgb(' + a[1] + ',' + a[2] + ',' + a[3] + ')'),
            (c['fill-opacity'] = a[4]))
          : (c.fill = a.fillStyle),
        (c.stroke = 'none'))
      : 'stroke' === b &&
        ((c.fill = 'none'),
        a.strokeStyle instanceof Tl
          ? (c.stroke = Xl(a, a.strokeStyle))
          : /^rgba\(/.test(a.strokeStyle)
          ? ((b = /^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec(
              a.strokeStyle,
            )),
            (c.stroke = 'rgb(' + b[1] + ',' + b[2] + ',' + b[3] + ')'),
            (c['stroke-opacity'] = b[4]))
          : (c.stroke = a.strokeStyle),
        (c['stroke-width'] = a.lineWidth),
        (c['stroke-linecap'] = a.lineCap),
        (c['stroke-linejoin'] = a.lineJoin),
        (c['stroke-miterlimit'] = a.miterLimit));
    d = d.Ta;
    d =
      'matrix(' +
      d[0] +
      ', ' +
      d[1] +
      ', ' +
      d[2] +
      ', ' +
      d[3] +
      ', ' +
      d[4] +
      ', ' +
      d[5] +
      ')';
    void 0 !== e && (d += e);
    c.transform = d;
  }

  function Xl(a, b) {
    var c = 'GRAD' + kb++;
    if ('linear' === b.type)
      var d = a.Vb('linearGradient', {
        x1: b.x1,
        x2: b.x2,
        y1: b.y1,
        y2: b.y2,
        id: c,
        gradientUnits: 'userSpaceOnUse',
      });
    else if ('radial' === b.type)
      d = a.Vb('radialGradient', {
        x1: b.x1,
        x2: b.x2,
        y1: b.y1,
        y2: b.y2,
        r1: b.r1,
        r2: b.r2,
        id: c,
      });
    else throw Error('invalid gradient');
    var e = b.Jw;
    b = e.length;
    for (var f = [], g = 0; g < b; g++) {
      var h = e[g],
        k = h.color;
      h = {
        offset: h.offset,
        'stop-color': k,
      };
      /^rgba\(/.test(k) &&
        ((k = /^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec(
          k,
        )),
        (h['stop-color'] = 'rgb(' + k[1] + ',' + k[2] + ',' + k[3] + ')'),
        (h['stop-opacity'] = k[4]));
      f.push(h);
    }
    f.sort(function(a, b) {
      return a.offset > b.offset ? 1 : -1;
    });
    for (e = 0; e < b; e++) d.appendChild(a.Vb('stop', f[e]));
    a.svg.appendChild(d);
    return 'url(#' + c + ')';
  }
  t.addPath = function(a, b, c) {
    for (var d = [], e = 0; e < b.length; e++) {
      var f = Aa(b[e]),
        g = [f.shift()];
      if ('A' === g[0])
        g.push(
          f.shift() + ',' + f.shift(),
          f.shift(),
          f.shift() + ',' + f.shift(),
          f.shift() + ',' + f.shift(),
        );
      else for (; f.length; ) g.push(f.shift() + ',' + f.shift());
      d.push(g.join(' '));
    }
    b = {
      d: d.join(' '),
    };
    'stroke' === a &&
      this.et &&
      ((b['stroke-dasharray'] = this.Og.toString()),
      (b['stroke-dashoffset'] = this.pj));
    Wl(this, a, b, c);
    'clipPath' === a
      ? ((a = 'CLIP' + kb++),
        (c = this.Vb('clipPath', {
          id: a,
        })),
        c.appendChild(this.Vb('path', b)),
        this.svg.appendChild(c),
        0 < this.md.length &&
          this.md[this.md.length - 1].setAttributeNS(
            null,
            'clip-path',
            'url(#' + a + ')',
          ))
      : this.addElement('path', b);
  };

  function Vl(a, b, c, d, e, f, g) {
    var h = new Sl();
    h.Ta = [b, c, d, e, f, g];
    b = {};
    Wl(a, 'g', b, h);
    h = a.addElement('g', b);
    a.md.push(h);
  }
  t.Xl = function(a) {
    if (
      0 !== this.shadowOffsetX ||
      0 !== this.shadowOffsetY ||
      0 !== this.shadowBlur
    ) {
      var b = 'SHADOW' + kb++,
        c = this.addElement(
          'filter',
          {
            id: b,
            x: '-100%',
            y: '-100%',
            width: '300%',
            height: '300%',
          },
          null,
        ),
        d = a.computePixelRatio();
      a = this.Vb('feGaussianBlur', {
        in: 'SourceAlpha',
        result: 'blur',
        stdDeviation: this.shadowBlur / 2 / d,
      });
      var e = this.Vb('feFlood', {
          in: 'blur',
          result: 'flood',
          'flood-color': this.shadowColor,
        }),
        f = this.Vb('feComposite', {
          in: 'flood',
          in2: 'blur',
          operator: 'in',
          result: 'comp',
        });
      d = this.Vb('feOffset', {
        in: 'comp',
        result: 'offsetBlur',
        dx: this.shadowOffsetX / d,
        dy: this.shadowOffsetY / d,
      });
      var g = this.Vb('feMerge', {});
      g.appendChild(
        this.Vb('feMergeNode', {
          in: 'offsetBlur',
        }),
      );
      g.appendChild(
        this.Vb('feMergeNode', {
          in: 'SourceGraphic',
        }),
      );
      c.appendChild(a);
      c.appendChild(e);
      c.appendChild(f);
      c.appendChild(d);
      c.appendChild(g);
      0 < this.md.length &&
        this.md[this.md.length - 1].setAttributeNS(
          null,
          'filter',
          'url(#' + b + ')',
        );
    }
  };
  t.iv = function(a, b, c) {
    this.Xq = a;
    this.Yq = b;
    this.Lg = c;
  };

  function rl(a) {
    a.shadowOffsetX = 0;
    a.shadowOffsetY = 0;
    a.shadowBlur = 0;
  }

  function ql(a) {
    a.shadowOffsetX = a.Xq;
    a.shadowOffsetY = a.Yq;
    a.shadowBlur = a.Lg;
  }
  t.Gr = function(a, b) {
    this.et = !0;
    this.Og = a;
    this.pj = b;
  };
  t.Er = function() {
    this.et = !1;
  };
  t.Oc = function() {};
  t.Ex = function() {};
  Ul.prototype.rotate = function() {};
  Ul.prototype.getImageData = function() {
    return null;
  };
  Ul.prototype.measureText = function() {
    return null;
  };
  Ul.className = 'SVGContext';
  Q.prototype.bs = function(a) {
    var b = new xj(this, x.document);
    void 0 === a && (a = new Wa());
    var c = this;
    return yk(
      this,
      function(a, e) {
        a = zk(c, a, 'SVG', b);
        a = null !== a ? a.svg : null;
        return 'function' === typeof e ? (e(a), null) : a;
      },
      a,
    );
  };
  Q.prototype.makeSvg = Q.prototype.bs;
  Q.prototype.Nu = function(a) {
    return this.bs(a);
  };
  Q.prototype.makeSVG = Q.prototype.Nu;
  Y.prototype.Qw = function(a, b) {
    if (!(a instanceof Ul)) return !1;
    var c = null,
      d = a.Xr,
      e = this.transform,
      f = this.panel;
    (0 !== (this.o & 4096)) === !0 && pl(this);
    var g = this.Eb,
      h = 0 !== (this.o & 256);
    a.clipInsteadOfFill && (h = !1);
    var k = !1;
    this instanceof Qg && (a.font = this.font);
    if (h) {
      k = f.ke() ? f.naturalBounds : f.actualBounds;
      if (null !== this.ib) {
        var l = this.ib;
        var m = l.x;
        var n = l.y;
        var p = l.width;
        l = l.height;
      } else
        (m = Math.max(g.x, k.x)),
          (n = Math.max(g.y, k.y)),
          (p = Math.min(g.right, k.right) - m),
          (l = Math.min(g.bottom, k.bottom) - n);
      if (
        m > g.width + g.x ||
        g.x > k.width + k.x ||
        n > g.height + g.y ||
        g.y > k.height + k.y
      )
        return !0;
      k = !0;
      Vl(a, 1, 0, 0, 1, 0, 0);
      a.save();
      a.beginPath();
      a.rect(m, n, p, l);
      a.clip();
    }
    if (this.li() && !this.isVisible()) return !0;
    a.Fe.Ta = [1, 0, 0, 1, 0, 0];
    ((this instanceof Qg && 1 < this.lineCount) ||
      (this instanceof Cf && 1 < this.geometry.figures.length)) &&
      Vl(a, 1, 0, 0, 1, 0, 0);
    m = !1;
    this.li() &&
      this.isShadowed &&
      b.Ge('drawShadows') &&
      ((n = this.shadowOffset),
      a.iv(n.x * b.scale * b.kc, n.y * b.scale * b.kc, this.shadowBlur),
      ql(a),
      (a.shadowColor = this.shadowColor));
    n = !1;
    this.part && b.Ge('drawShadows') && (n = this.part.isShadowed);
    a.clipInsteadOfFill && (n = !1);
    !0 === this.shadowVisible
      ? (ql(a), !1 === m && n && (Vl(a, 1, 0, 0, 1, 0, 0), a.Xl(b), (m = !0)))
      : !1 === this.shadowVisible && rl(a);
    p = this.naturalBounds;
    null !== this.areaBackground &&
      (gi(this, a, this.areaBackground, !0, !0, p, g),
      !1 === m && n && (Vl(a, 1, 0, 0, 1, 0, 0), a.Xl(b), (m = !0)),
      this.areaBackground instanceof nl && this.areaBackground.type === ol
        ? (a.beginPath(),
          a.rect(g.x, g.y, g.width, g.height),
          a.sf(this.areaBackground))
        : a.fillRect(g.x, g.y, g.width, g.height));
    l = !1;
    this instanceof W
      ? Vl(a, e.m11, e.m12, e.m21, e.m22, e.dx, e.dy)
      : ((a.Fe.Ta = [e.m11, e.m12, e.m21, e.m22, e.dx, e.dy]),
        !1 === m && n && (l = !0));
    null !== this.background &&
      (!1 === m && n && (Vl(a, 1, 0, 0, 1, 0, 0), a.Xl(b), (m = !0)),
      sl(this, a, p, g));
    n &&
    (null !== this.background ||
      null !== this.areaBackground ||
      (null !== f && 0 !== (f.o & 512)) ||
      (null !== f &&
        (f.type === W.Auto || f.type === W.Spot) &&
        f.vb() !== this))
      ? (tl(this, !0), null === this.shadowVisible && rl(a), (l = !1))
      : tl(this, !1);
    l && !1 === m && (Vl(a, 1, 0, 0, 1, 0, 0), a.Xl(b), (m = !0));
    this.ai(a, b);
    n && (0 !== (this.o & 512)) === !0 && ql(a);
    this.li() && n && rl(a);
    h && (a.restore(), k && a.md.pop());
    this instanceof W && (c = a.md.pop());
    !0 === m && a.md.pop();
    if (
      (this instanceof Qg && 1 < this.lineCount) ||
      (this instanceof Cf && 1 < this.geometry.figures.length)
    )
      c = a.md.pop();
    null !== a.qs.po &&
      (null === c &&
        (d === a.Xr ? (Vl(a, 1, 0, 0, 1, 0, 0), (c = a.md.pop())) : (c = a.Xr)),
      a.qs.po(this, c));
    this.svg = c;
    return !0;
  };

  function Bk(a, b) {
    this.ownerDocument = b = void 0 === b ? x.document : b;
    this.po = null;
    b = b.createElement('canvas');
    b.tabIndex = 0;
    this.Sa = b;
    this.Sa.innerHTML =
      'This text is displayed if your browser does not support the Canvas HTML element.';
    this.context = new vl(b);
    b.H = a;
  }
  Bk.prototype.resize = function(a, b, c, d) {
    return this.width !== a || this.height !== b
      ? ((this.width = a),
        (this.height = b),
        (this.style.width = c + 'px'),
        (this.style.height = d + 'px'),
        !0)
      : !1;
  };
  Bk.prototype.toDataURL = function(a, b) {
    return this.Sa.toDataURL(a, b);
  };
  Bk.prototype.getBoundingClientRect = function() {
    return this.Sa.getBoundingClientRect();
  };
  Bk.prototype.focus = function() {
    this.Sa.focus();
  };
  Bk.prototype.Pw = function() {
    this.ownerDocument = this.Sa.H = null;
  };
  ma.Object.defineProperties(Bk.prototype, {
    width: {
      get: function() {
        return this.Sa.width;
      },
      set: function(a) {
        this.Sa.width = a;
      },
    },
    height: {
      get: function() {
        return this.Sa.height;
      },
      set: function(a) {
        this.Sa.height = a;
      },
    },
    style: {
      get: function() {
        return this.Sa.style;
      },
    },
  });
  Bk.className = 'CanvasSurface';

  function vl(a) {
    (a.getContext && a.getContext('2d')) ||
      C('Browser does not support HTML Canvas Element');
    this.Z = a.getContext('2d');
    this.Es = this.Gs = this.Fs = '';
    this.pm = !1;
    this.Lg = this.Yq = this.Xq = 0;
    this.rl = new md();
  }
  t = vl.prototype;
  t.Ex = function(a) {
    this.Z.imageSmoothingEnabled = a;
  };
  t.arc = function(a, b, c, d, e, f) {
    this.Z.arc(a, b, c, d, e, f);
  };
  t.beginPath = function() {
    this.Z.beginPath();
  };
  t.bezierCurveTo = function(a, b, c, d, e, f) {
    this.Z.bezierCurveTo(a, b, c, d, e, f);
  };
  t.clearRect = function(a, b, c, d) {
    this.Pc();
    this.Z.clearRect(a, b, c, d);
  };
  t.clip = function() {
    this.Z.clip();
  };
  t.closePath = function() {
    this.Z.closePath();
  };
  t.createLinearGradient = function(a, b, c, d) {
    return this.Z.createLinearGradient(a, b, c, d);
  };
  t.createPattern = function(a, b) {
    return this.Z.createPattern(a, b);
  };
  t.createRadialGradient = function(a, b, c, d, e, f) {
    return this.Z.createRadialGradient(a, b, c, d, e, f);
  };
  t.drawImage = function(a, b, c, d, e, f, g, h, k) {
    void 0 === d
      ? this.Z.drawImage(a, b, c)
      : this.Z.drawImage(a, b, c, d, e, f, g, h, k);
  };
  t.fill = function() {
    this.Z.fill();
  };
  t.fillRect = function(a, b, c, d) {
    this.Z.fillRect(a, b, c, d);
  };
  t.fillText = function(a, b, c) {
    this.Z.fillText(a, b, c);
  };
  t.getImageData = function(a, b, c, d) {
    return this.Z.getImageData(a, b, c, d);
  };
  t.lineTo = function(a, b) {
    this.Z.lineTo(a, b);
  };
  t.measureText = function(a) {
    return this.Z.measureText(a);
  };
  t.moveTo = function(a, b) {
    this.Z.moveTo(a, b);
  };
  t.quadraticCurveTo = function(a, b, c, d) {
    this.Z.quadraticCurveTo(a, b, c, d);
  };
  t.rect = function(a, b, c, d) {
    this.Z.rect(a, b, c, d);
  };
  t.restore = function() {
    this.Z.restore();
  };
  t.save = function() {
    this.Pc();
    this.Z.save();
  };
  vl.prototype.rotate = function(a) {
    this.rl.rotate(57.2958 * a, 0, 0);
  };
  t = vl.prototype;
  t.setTransform = function(a, b, c, d, e, f) {
    this.rl.setTransform(a, b, c, d, e, f);
  };
  t.scale = function(a, b) {
    this.rl.scale(a, b);
  };
  t.translate = function(a, b) {
    this.rl.translate(a, b);
  };
  t.stroke = function() {
    this.Z.stroke();
  };
  t.transform = function(a, b, c, d, e, f) {
    if (1 !== a || 0 !== b || 0 !== c || 1 !== d || 0 !== e || 0 !== f) {
      var g = this.rl,
        h = g.m11 * a + g.m21 * b;
      a = g.m12 * a + g.m22 * b;
      b = g.m11 * c + g.m21 * d;
      c = g.m12 * c + g.m22 * d;
      g.dx = g.m11 * e + g.m21 * f + g.dx;
      g.dy = g.m12 * e + g.m22 * f + g.dy;
      g.m11 = h;
      g.m12 = a;
      g.m21 = b;
      g.m22 = c;
    }
  };
  t.Pc = function() {
    var a = this.rl;
    this.Z.setTransform(a.m11, a.m12, a.m21, a.m22, a.dx, a.dy);
  };
  t.sf = function(a) {
    if (a instanceof nl && a.type === ol) {
      var b = a.lk;
      a = a.Hs;
      a > b
        ? (this.scale(b / a, 1), this.translate((a - b) / 2, 0))
        : b > a && (this.scale(1, a / b), this.translate(0, (b - a) / 2));
      this.pm ? this.clip() : this.fill();
      a > b
        ? (this.translate(-(a - b) / 2, 0), this.scale(1 / (b / a), 1))
        : b > a &&
          (this.translate(0, -(b - a) / 2), this.scale(1, 1 / (a / b)));
    } else this.pm ? this.clip() : this.fill();
  };
  t.si = function() {
    this.pm || this.stroke();
  };
  t.iv = function(a, b, c) {
    this.Xq = a;
    this.Yq = b;
    this.Lg = c;
  };
  t.Gr = function(a, b) {
    var c = this.Z;
    void 0 !== c.setLineDash && (c.setLineDash(a), (c.lineDashOffset = b));
  };
  t.Er = function() {
    var a = this.Z;
    void 0 !== a.setLineDash && (a.setLineDash(Yl), (a.lineDashOffset = 0));
  };
  t.Oc = function(a) {
    a && (this.Fs = '');
    this.Es = this.Gs = '';
  };
  ma.Object.defineProperties(vl.prototype, {
    fillStyle: {
      get: function() {
        return this.Z.fillStyle;
      },
      set: function(a) {
        this.Es !== a && (this.Es = this.Z.fillStyle = a);
      },
    },
    font: {
      get: function() {
        return this.Z.font;
      },
      set: function(a) {
        this.Fs !== a && (this.Fs = this.Z.font = a);
      },
    },
    globalAlpha: {
      get: function() {
        return this.Z.globalAlpha;
      },
      set: function(a) {
        this.Z.globalAlpha = a;
      },
    },
    lineCap: {
      get: function() {
        return this.Z.lineCap;
      },
      set: function(a) {
        this.Z.lineCap = a;
      },
    },
    lineDashOffset: {
      get: function() {
        return this.Z.lineDashOffset;
      },
      set: function(a) {
        this.Z.lineDashOffset = a;
      },
    },
    lineJoin: {
      get: function() {
        return this.Z.lineJoin;
      },
      set: function(a) {
        this.Z.lineJoin = a;
      },
    },
    lineWidth: {
      get: function() {
        return this.Z.lineWidth;
      },
      set: function(a) {
        this.Z.lineWidth = a;
      },
    },
    miterLimit: {
      get: function() {
        return this.Z.miterLimit;
      },
      set: function(a) {
        this.Z.miterLimit = a;
      },
    },
    shadowBlur: {
      get: function() {
        return this.Z.shadowBlur;
      },
      set: function(a) {
        this.Z.shadowBlur = a;
      },
    },
    shadowColor: {
      get: function() {
        return this.Z.shadowColor;
      },
      set: function(a) {
        this.Z.shadowColor = a;
      },
    },
    shadowOffsetX: {
      get: function() {
        return this.Z.shadowOffsetX;
      },
      set: function(a) {
        this.Z.shadowOffsetX = a;
      },
    },
    shadowOffsetY: {
      get: function() {
        return this.Z.shadowOffsetY;
      },
      set: function(a) {
        this.Z.shadowOffsetY = a;
      },
    },
    strokeStyle: {
      get: function() {
        return this.Z.strokeStyle;
      },
      set: function(a) {
        this.Gs !== a && (this.Gs = this.Z.strokeStyle = a);
      },
    },
    textAlign: {
      get: function() {
        return this.Z.textAlign;
      },
      set: function(a) {
        this.Z.textAlign = a;
      },
    },
    imageSmoothingEnabled: {
      get: function() {
        return this.Z.imageSmoothingEnabled;
      },
      set: function(a) {
        this.Z.imageSmoothingEnabled = a;
      },
    },
    clipInsteadOfFill: {
      get: function() {
        return this.pm;
      },
      set: function(a) {
        this.pm = a;
      },
    },
  });
  var Yl = Object.freeze([]);
  vl.className = 'CanvasSurfaceContext';

  function Zl() {
    this.F = this.m = this.u = this.j = 0;
  }
  Zl.className = 'ColorNumbers';

  function nl(a, b) {
    $l || (am(), ($l = !0));
    Ra(this);
    this._isFrozen = !1;
    void 0 === a
      ? ((this.qa = ul), (this.kk = 'black'))
      : 'string' === typeof a
      ? ((this.qa = ul), (this.kk = a))
      : ((this.qa = a), (this.kk = 'black'));
    a = this.qa;
    a === xl
      ? ((this.Gd = uc), (this.zk = Bc))
      : (this.zk = a === ol ? (this.Gd = yc) : (this.Gd = sc));
    this.cr = 0;
    this.Ap = NaN;
    this.oe = this.Bq = this.ne = null;
    this.Hs = this.lk = 0;
    b && Object.assign(this, b);
  }
  nl.prototype.copy = function() {
    var a = new nl();
    a.qa = this.qa;
    a.kk = this.kk;
    a.Gd = this.Gd.J();
    a.zk = this.zk.J();
    a.cr = this.cr;
    a.Ap = this.Ap;
    null !== this.ne && (a.ne = this.ne.copy());
    a.Bq = this.Bq;
    return a;
  };
  t = nl.prototype;
  t.freeze = function() {
    this._isFrozen = !0;
    null !== this.ne && this.ne.freeze();
    return this;
  };
  t.ja = function() {
    Object.isFrozen(this) && C('cannot thaw constant: ' + this);
    this._isFrozen = !1;
    null !== this.ne && this.ne.ja();
    return this;
  };
  t.ob = function(a) {
    a.classType === nl && (this.type = a);
  };
  t.toString = function() {
    var a = 'Brush(';
    if (this.type === ul) a += this.color;
    else if (
      ((a =
        this.type === xl
          ? a + 'Linear '
          : this.type === ol
          ? a + 'Radial '
          : this.type === wl
          ? a + 'Pattern '
          : a + '(unknown) '),
      (a += this.start + ' ' + this.end),
      null !== this.colorStops)
    )
      for (var b = this.colorStops.iterator; b.next(); )
        a += ' ' + b.key + ':' + b.value;
    return a + ')';
  };
  t.addColorStop = function(a, b) {
    this._isFrozen && va(this);
    ('number' !== typeof a || !isFinite(a) || 1 < a || 0 > a) &&
      wa(a, '0 <= loc <= 1', nl, 'addColorStop:loc');
    null === this.ne && (this.ne = new pb());
    this.ne.add(a, b);
    this.qa === ul && (this.type = xl);
    this.oe = null;
    return this;
  };
  t.Cz = function(a, b) {
    this._isFrozen && va(this);
    a = void 0 === a || 'number' !== typeof a ? 0.2 : a;
    b = void 0 === b ? bm : b;
    if (this.type === ul) Uh(this.color), (this.color = cm(a, b));
    else if ((this.type === xl || this.type === ol) && null !== this.colorStops)
      for (var c = this.colorStops.iterator; c.next(); )
        Uh(c.value), this.addColorStop(c.key, cm(a, b));
    return this;
  };

  function dm(a, b, c) {
    b = void 0 === b || 'number' !== typeof b ? 0.2 : b;
    c = void 0 === c ? bm : c;
    Uh(a);
    return cm(b, c);
  }
  t.Dy = function(a, b) {
    this._isFrozen && va(this);
    a = void 0 === a || 'number' !== typeof a ? 0.2 : a;
    b = void 0 === b ? bm : b;
    if (this.type === ul) Uh(this.color), (this.color = cm(-a, b));
    else if ((this.type === xl || this.type === ol) && null !== this.colorStops)
      for (var c = this.colorStops.iterator; c.next(); )
        Uh(c.value), this.addColorStop(c.key, cm(-a, b));
    return this;
  };

  function em(a, b, c) {
    b = void 0 === b || 'number' !== typeof b ? 0.2 : b;
    c = void 0 === c ? bm : c;
    Uh(a);
    return cm(-b, c);
  }

  function fm(a, b, c) {
    Uh(a);
    a = gm.j;
    var d = gm.u,
      e = gm.m,
      f = gm.F;
    Uh(b);
    void 0 === c && (c = 0.5);
    return (
      'rgba(' +
      Math.round((gm.j - a) * c + a) +
      ', ' +
      Math.round((gm.u - d) * c + d) +
      ', ' +
      Math.round((gm.m - e) * c + e) +
      ', ' +
      Math.round((gm.F - f) * c + f) +
      ')'
    );
  }
  t.kx = function() {
    if (this.type === ul) return hm(this.color);
    if ((this.type === xl || this.type === ol) && null !== this.colorStops) {
      var a = this.colorStops;
      if (this.type === ol) return hm(a.first().value);
      if (null !== a.get(0.5)) return hm(a.get(0.5));
      if (2 === a.count) return (a = a.Ea()), hm(fm(a[0].value, a[1].value));
      for (var b = a.iterator, c = -1, d = -1, e = 1, f = 1; b.next(); ) {
        var g = b.key,
          h = Math.abs(0.5 - b.key);
        e > f && h < e
          ? ((c = g), (e = h))
          : f >= e && h < f && ((d = g), (f = h));
      }
      c > d && ((f = c), (c = d), (d = f), (f = e));
      e = d - c;
      return hm(fm(a.get(c), a.get(d), 1 - f / e));
    }
    return !1;
  };

  function hm(a) {
    if (!a) return !1;
    if (a instanceof nl) return a.kx();
    Uh(a);
    return 128 > (299 * gm.j + 587 * gm.u + 114 * gm.m) / 1e3;
  }

  function cm(a, b) {
    switch (b) {
      case bm:
        b = 100 * im(gm.j);
        var c = 100 * im(gm.u),
          d = 100 * im(gm.m);
        jm.j = 0.4124564 * b + 0.3575761 * c + 0.1804375 * d;
        jm.u = 0.2126729 * b + 0.7151522 * c + 0.072175 * d;
        jm.m = 0.0193339 * b + 0.119192 * c + 0.9503041 * d;
        jm.F = gm.F;
        b = km(jm.j / lm[0]);
        c = km(jm.u / lm[1]);
        d = km(jm.m / lm[2]);
        mm.j = 116 * c - 16;
        mm.u = 500 * (b - c);
        mm.m = 200 * (c - d);
        mm.F = jm.F;
        mm.j = Math.min(100, Math.max(0, mm.j + 100 * a));
        a = (mm.j + 16) / 116;
        b = a - mm.m / 200;
        jm.j = lm[0] * nm(mm.u / 500 + a);
        jm.u = lm[1] * (mm.j > om * pm ? Math.pow(a, 3) : mm.j / om);
        jm.m = lm[2] * nm(b);
        jm.F = mm.F;
        a = -0.969266 * jm.j + 1.8760108 * jm.u + 0.041556 * jm.m;
        b = 0.0556434 * jm.j + -0.2040259 * jm.u + 1.0572252 * jm.m;
        gm.j =
          255 *
          qm((3.2404542 * jm.j + -1.5371385 * jm.u + -0.4985314 * jm.m) / 100);
        gm.u = 255 * qm(a / 100);
        gm.m = 255 * qm(b / 100);
        gm.F = jm.F;
        gm.j = Math.round(gm.j);
        255 < gm.j ? (gm.j = 255) : 0 > gm.j && (gm.j = 0);
        gm.u = Math.round(gm.u);
        255 < gm.u ? (gm.u = 255) : 0 > gm.u && (gm.u = 0);
        gm.m = Math.round(gm.m);
        255 < gm.m ? (gm.m = 255) : 0 > gm.m && (gm.m = 0);
        return 'rgba(' + gm.j + ', ' + gm.u + ', ' + gm.m + ', ' + gm.F + ')';
      case rm:
        return (
          Vh(),
          (Wh.m = Math.min(100, Math.max(0, Wh.m + 100 * a))),
          'hsla(' + Wh.j + ', ' + Wh.u + '%, ' + Wh.m + '%, ' + Wh.F + ')'
        );
      default:
        C('Unknown color space: ' + b);
    }
  }

  function Uh(a) {
    $l || (am(), ($l = !0));
    var b = sm;
    if (null !== b) {
      b.clearRect(0, 0, 1, 1);
      b.fillStyle = '#000000';
      var c = b.fillStyle;
      b.fillStyle = a;
      b.fillStyle !== c
        ? (b.fillRect(0, 0, 1, 1),
          (a = b.getImageData(0, 0, 1, 1).data),
          (gm.j = a[0]),
          (gm.u = a[1]),
          (gm.m = a[2]),
          (gm.F = a[3] / 255))
        : ((b.fillStyle = '#FFFFFF'),
          (b.fillStyle = a),
          (gm.j = 0),
          (gm.u = 0),
          (gm.m = 0),
          (gm.F = 1));
    }
  }

  function Vh() {
    var a = gm.j / 255,
      b = gm.u / 255,
      c = gm.m / 255,
      d = Math.max(a, b, c),
      e = Math.min(a, b, c),
      f = d - e;
    e = (d + e) / 2;
    if (0 === f) var g = (a = 0);
    else {
      switch (d) {
        case a:
          g = ((b - c) / f) % 6;
          break;
        case b:
          g = (c - a) / f + 2;
          break;
        case c:
          g = (a - b) / f + 4;
      }
      g *= 60;
      0 > g && (g += 360);
      a = f / (1 - Math.abs(2 * e - 1));
    }
    Wh.j = Math.round(g);
    Wh.u = Math.round(100 * a);
    Wh.m = Math.round(100 * e);
    Wh.F = gm.F;
  }

  function im(a) {
    a /= 255;
    return 0.04045 >= a ? a / 12.92 : Math.pow((a + 0.055) / 1.055, 2.4);
  }

  function qm(a) {
    return 0.0031308 >= a ? 12.92 * a : 1.055 * Math.pow(a, 1 / 2.4) - 0.055;
  }

  function km(a) {
    return a > pm ? Math.pow(a, 1 / 3) : (om * a + 16) / 116;
  }

  function nm(a) {
    var b = a * a * a;
    return b > pm ? b : (116 * a - 16) / om;
  }

  function Pl(a, b) {
    'string' !== typeof a &&
      (a instanceof nl ||
        C('Value for ' + b + ' must be a color string or a Brush, not ' + a));
  }

  function am() {
    sm = Og ? new Bk(null).context : null;
  }
  ma.Object.defineProperties(nl.prototype, {
    type: {
      get: function() {
        return this.qa;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.qa = a;
        this.start.Fc() &&
          (a === xl ? (this.start = uc) : a === ol && (this.start = yc));
        this.end.Fc() &&
          (a === xl ? (this.end = Bc) : a === ol && (this.end = yc));
        this.oe = null;
      },
    },
    color: {
      get: function() {
        return this.kk;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.kk = a;
        this.oe = null;
      },
    },
    start: {
      get: function() {
        return this.Gd;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Gd = a.J();
        this.oe = null;
      },
    },
    end: {
      get: function() {
        return this.zk;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.zk = a.J();
        this.oe = null;
      },
    },
    startRadius: {
      get: function() {
        return this.cr;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        0 > a && wa(a, '>= zero', nl, 'startRadius');
        this.cr = a;
        this.oe = null;
      },
    },
    endRadius: {
      get: function() {
        return this.Ap;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        0 > a && wa(a, '>= zero', nl, 'endRadius');
        this.Ap = a;
        this.oe = null;
      },
    },
    colorStops: {
      get: function() {
        return this.ne;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.ne = a;
        this.oe = null;
      },
    },
    pattern: {
      get: function() {
        return this.Bq;
      },
      set: function(a) {
        this._isFrozen && va(this, a);
        this.Bq = a;
        this.oe = null;
      },
    },
  });
  nl.prototype.isDark = nl.prototype.kx;
  nl.prototype.darkenBy = nl.prototype.Dy;
  nl.prototype.lightenBy = nl.prototype.Cz;
  nl.prototype.addColorStop = nl.prototype.addColorStop;
  var pm = 216 / 24389,
    om = 24389 / 27,
    lm = [95.047, 100, 108.883],
    sm = null,
    gm = new Zl(),
    Wh = new Zl(),
    jm = new Zl(),
    mm = new Zl(),
    $l = !1;
  nl.className = 'Brush';
  var ul;
  nl.Solid = ul = new D(nl, 'Solid', 0);
  var xl;
  nl.Linear = xl = new D(nl, 'Linear', 1);
  var ol;
  nl.Radial = ol = new D(nl, 'Radial', 2);
  var wl;
  nl.Pattern = wl = new D(nl, 'Pattern', 4);
  var bm;
  nl.Lab = bm = new D(nl, 'Lab', 5);
  var rm;
  nl.HSL = rm = new D(nl, 'HSL', 6);
  nl.randomColor = function(a, b) {
    void 0 === a && (a = 128);
    void 0 === b && (b = Math.max(a, 255));
    var c = Math.abs(b - a);
    b = Math.floor(a + Math.random() * c).toString(16);
    var d = Math.floor(a + Math.random() * c).toString(16);
    a = Math.floor(a + Math.random() * c).toString(16);
    2 > b.length && (b = '0' + b);
    2 > d.length && (d = '0' + d);
    2 > a.length && (a = '0' + a);
    return '#' + b + d + a;
  };
  nl.isValidColor = function(a) {
    if ('black' === a) return !0;
    if ('' === a) return !1;
    $l || (am(), ($l = !0));
    var b = sm;
    if (null === b) return !0;
    b.fillStyle = '#000000';
    var c = b.fillStyle;
    b.fillStyle = a;
    if (b.fillStyle !== c) return !0;
    b.fillStyle = '#FFFFFF';
    c = b.fillStyle;
    b.fillStyle = a;
    return b.fillStyle !== c;
  };
  nl.lighten = function(a) {
    return dm(a);
  };
  nl.lightenBy = dm;
  nl.darken = function(a) {
    return em(a);
  };
  nl.darkenBy = em;
  nl.mix = fm;
  nl.isDark = hm;

  function Ll() {
    this.va = 'Base';
  }
  Ll.prototype.measure = function() {};
  Ll.prototype.Fz = function(a, b, c, d, e) {
    a.measure(b, c, d, e);
  };
  Ll.prototype.arrange = function() {};
  Ll.prototype.sy = function(a, b, c, d, e, f) {
    a.arrange(b, c, d, e, f);
  };
  Ll.prototype.Pz = function(a) {
    a.Mj();
  };
  Ll.prototype.tc = function() {};
  ma.Object.defineProperties(Ll.prototype, {
    name: {
      get: function() {
        return this.va;
      },
      set: function(a) {
        this.va = a;
      },
    },
    classType: {
      get: function() {
        return W;
      },
    },
  });
  Ll.prototype.remeasureObject = Ll.prototype.Pz;
  Ll.prototype.arrangeElement = Ll.prototype.sy;
  Ll.prototype.measureElement = Ll.prototype.Fz;
  Ll.className = 'PanelLayout';

  function tm() {
    this.va = 'Base';
  }
  la(tm, Ll);
  tm.prototype.measure = function(a, b, c, d, e, f, g) {
    var h = d.length;
    a = um(a);
    for (var k = 0; k < h; k++) {
      var l = d[k];
      if (l.visible || l === a) {
        var m = l.margin,
          n = m.right + m.left;
        m = m.top + m.bottom;
        l.measure(b, c, f, g);
        var p = l.measuredBounds;
        n = Math.max(p.width + n, 0);
        m = Math.max(p.height + m, 0);
        p = l.position.x;
        var r = l.position.y;
        isFinite(p) || (p = 0);
        isFinite(r) || (r = 0);
        l instanceof Cf &&
          l.isGeometryPositioned &&
          ((l = l.strokeWidth / 2), (p -= l), (r -= l));
        Zb(e, p, r, n, m);
      }
    }
  };
  tm.prototype.arrange = function(a, b, c) {
    var d = b.length,
      e = a.padding;
    a = c.x - e.left;
    c = c.y - e.top;
    for (e = 0; e < d; e++) {
      var f = b[e],
        g = f.measuredBounds,
        h = f.margin,
        k = f.position.x,
        l = f.position.y;
      k = isNaN(k) ? -a : k - a;
      l = isNaN(l) ? -c : l - c;
      if (f instanceof Cf && f.isGeometryPositioned) {
        var m = f.strokeWidth / 2;
        k -= m;
        l -= m;
      }
      f.visible && f.arrange(k + h.left, l + h.top, g.width, g.height);
    }
  };

  function vm() {
    this.va = 'Base';
  }
  la(vm, Ll);
  vm.prototype.measure = function(a, b, c, d, e, f, g) {
    var h = d.length;
    b = Ea();
    f = um(a);
    for (var k = 0; k < h; k++) {
      var l = d[k];
      if (l.visible || l === f) {
        var m = il(l, !1);
        if (m !== lg && m !== Vk) b.push(l);
        else {
          l.measure(Infinity, c, 0, g);
          m = l.margin;
          l = l.measuredBounds;
          var n = Math.max(l.height + m.top + m.bottom, 0);
          e.width += Math.max(l.width + m.right + m.left, 0);
          e.height = Math.max(e.height, n);
        }
      }
    }
    d = b.length;
    a.desiredSize.height
      ? (c = Math.min(a.desiredSize.height, a.maxSize.height))
      : 0 !== e.height && (c = Math.min(e.height, a.maxSize.height));
    for (a = 0; a < d; a++)
      if (((k = b[a]), k.visible || k === f))
        (m = k.margin),
          (h = m.right + m.left),
          (m = m.top + m.bottom),
          k.measure(Infinity, c, 0, g),
          (k = k.measuredBounds),
          (m = Math.max(k.height + m, 0)),
          (e.width += Math.max(k.width + h, 0)),
          (e.height = Math.max(e.height, m));
    Ga(b);
  };
  vm.prototype.arrange = function(a, b, c) {
    for (
      var d = b.length,
        e = a.padding,
        f = e.top,
        g = a.isOpposite,
        h = g ? c.width : e.left,
        k = 0;
      k < d;
      k++
    ) {
      var l = f,
        m = b[k];
      if (m.visible) {
        var n = m.measuredBounds,
          p = m.margin,
          r = p.top + p.bottom,
          q = f + e.bottom,
          u = n.height,
          w = il(m, !1);
        if ((isNaN(m.desiredSize.height) && w === td) || w === Wk)
          u = Math.max(c.height - r - q, 0);
        r = u + r + q;
        q = m.alignment;
        q.Sb() && (q = a.defaultAlignment);
        q.pb() || (q = yc);
        g && (h -= n.width + p.left + p.right);
        m.arrange(
          h + q.offsetX + p.left,
          l + q.offsetY + p.top + (c.height * q.y - r * q.y),
          n.width,
          u,
        );
        g || (h += n.width + p.left + p.right);
      }
    }
  };

  function wm() {
    this.va = 'Base';
  }
  la(wm, Ll);
  wm.prototype.measure = function(a, b, c, d, e, f) {
    var g = d.length;
    c = Ea();
    for (var h = um(a), k = 0; k < g; k++) {
      var l = d[k];
      if (l.visible || l === h) {
        var m = il(l, !1);
        if (m !== lg && m !== Wk) c.push(l);
        else {
          var n = l.margin;
          m = n.right + n.left;
          n = n.top + n.bottom;
          l.measure(b, Infinity, f, 0);
          l = l.measuredBounds;
          Qb(
            e,
            Math.max(e.width, Math.max(l.width + m, 0)),
            e.height + Math.max(l.height + n, 0),
          );
        }
      }
    }
    d = c.length;
    if (0 !== d) {
      a.desiredSize.width
        ? (b = Math.min(a.desiredSize.width, a.maxSize.width))
        : 0 !== e.width && (b = Math.min(e.width, a.maxSize.width));
      for (a = 0; a < d; a++)
        if (((k = c[a]), k.visible || k === h))
          (l = k.margin),
            (g = l.right + l.left),
            (l = l.top + l.bottom),
            k.measure(b, Infinity, f, 0),
            (k = k.measuredBounds),
            (l = Math.max(k.height + l, 0)),
            (e.width = Math.max(e.width, Math.max(k.width + g, 0))),
            (e.height += l);
      Ga(c);
    }
  };
  wm.prototype.arrange = function(a, b, c) {
    for (
      var d = b.length,
        e = a.padding,
        f = e.left,
        g = a.isOpposite,
        h = g ? c.height : e.top,
        k = 0;
      k < d;
      k++
    ) {
      var l = f,
        m = b[k];
      if (m.visible) {
        var n = m.measuredBounds,
          p = m.margin,
          r = p.left + p.right,
          q = f + e.right,
          u = n.width,
          w = il(m, !1);
        if ((isNaN(m.desiredSize.width) && w === td) || w === Vk)
          u = Math.max(c.width - r - q, 0);
        r = u + r + q;
        q = m.alignment;
        q.Sb() && (q = a.defaultAlignment);
        q.pb() || (q = yc);
        g && (h -= n.height + p.bottom + p.top);
        m.arrange(
          l + q.offsetX + p.left + (c.width * q.x - r * q.x),
          h + q.offsetY + p.top,
          u,
          n.height,
        );
        g || (h += n.height + p.bottom + p.top);
      }
    }
  };

  function xm() {
    this.va = 'Base';
  }
  la(xm, Ll);
  xm.prototype.measure = function(a, b, c, d, e, f, g) {
    var h = d.length,
      k = a.vb(),
      l = k.margin,
      m = l.right + l.left,
      n = l.top + l.bottom;
    k.measure(b, c, f, g);
    var p = k.measuredBounds;
    f = p.width;
    g = p.height;
    var r = Math.max(f + m, 0);
    var q = Math.max(g + n, 0);
    var u = a.isClipping,
      w = M.allocAt(-l.left, -l.top, r, q),
      v = M.allocAt(0, 0, f, g);
    ym(k, v, !0);
    f = v.width;
    g = v.height;
    for (var z = !0, y = um(a), A = 0; A < h; A++) {
      var B = d[A],
        F = b,
        L = c;
      if (B !== k && (B.visible || B === y)) {
        l = B.margin;
        r = l.right + l.left;
        q = l.top + l.bottom;
        p = il(B, !1);
        switch (p) {
          case td:
            F = f;
            L = g;
            break;
          case Vk:
            F = f;
            break;
          case Wk:
            L = g;
        }
        B.measure(F, L, 0, 0);
        p = B.measuredBounds;
        r = Math.max(p.width + r, 0);
        q = Math.max(p.height + q, 0);
        F = B.alignment;
        F.Sb() && (F = a.defaultAlignment);
        F.pb() || (F = yc);
        var S = B.alignmentFocus;
        S.Sb() && (S = yc);
        L = null;
        B instanceof W &&
          '' !== B.Pe &&
          ((L = B.fb(B.Pe)), L === B && (L = null));
        var R = v.x,
          P = v.y;
        if (null !== L) {
          B.arrange(0, 0, p.width, p.height);
          l = L.actualBounds;
          l = I.allocAt(
            l.x + (S.x * l.width - S.offsetX),
            l.y + (S.y * l.height - S.offsetY),
          );
          for (L = L.panel; L !== B; ) L.transform.Fa(l), (L = L.panel);
          R += F.x * f + F.offsetX - l.x;
          P += F.y * g + F.offsetY - l.y;
          I.free(l);
        } else
          (R += F.x * f + F.offsetX - (S.x * p.width + S.offsetX) - l.left),
            (P += F.y * g + F.offsetY - (S.y * p.height + S.offsetY) - l.top);
        z ? ((z = !1), e.h(R, P, r, q)) : Zb(e, R, P, r, q);
      }
    }
    z
      ? e.assign(w)
      : u
      ? e.Gu(v.x, v.y, v.width, v.height)
      : Zb(e, w.x, w.y, w.width, w.height);
    M.free(w);
    M.free(v);
    p = k.stretch;
    p === Xk && (p = il(k, !1));
    switch (p) {
      case lg:
        return;
      case td:
        if (!isFinite(b) && !isFinite(c)) return;
        break;
      case Vk:
        if (!isFinite(b)) return;
        break;
      case Wk:
        if (!isFinite(c)) return;
    }
    p = k.measuredBounds;
    f = p.width;
    g = p.height;
    r = Math.max(f + m, 0);
    q = Math.max(g + n, 0);
    l = k.margin;
    v = M.allocAt(-l.left, -l.top, r, q);
    ym(k, v, !0);
    f = v.width;
    g = v.height;
    for (b = 0; b < h; b++)
      (c = d[b]),
        c === k ||
          (!c.visible && c !== y) ||
          ((l = c.margin),
          (r = l.right + l.left),
          (q = l.top + l.bottom),
          (p = c.measuredBounds),
          (r = Math.max(p.width + r, 0)),
          (q = Math.max(p.height + q, 0)),
          (m = c.alignment),
          m.Sb() && (m = a.defaultAlignment),
          m.pb() || (m = yc),
          (c = c.alignmentFocus),
          c.Sb() && (c = yc),
          z
            ? ((z = !1),
              e.h(
                m.x * f + m.offsetX - (c.x * p.width + c.offsetX) - l.left,
                m.y * g + m.offsetY - (c.y * p.height + c.offsetY) - l.top,
                r,
                q,
              ))
            : Zb(
                e,
                m.x * f + m.offsetX - (c.x * p.width + c.offsetX) - l.left,
                m.y * g + m.offsetY - (c.y * p.height + c.offsetY) - l.top,
                r,
                q,
              ));
    z
      ? e.assign(w)
      : u
      ? e.Gu(v.x, v.y, v.width, v.height)
      : Zb(e, w.x, w.y, w.width, w.height);
    M.free(v);
  };
  xm.prototype.arrange = function(a, b, c) {
    var d = b.length,
      e = a.vb(),
      f = e.measuredBounds,
      g = f.width,
      h = f.height,
      k = a.padding;
    f = k.left;
    k = k.top;
    var l = f - c.x,
      m = k - c.y;
    e.arrange(l, m, g, h);
    g = M.allocAt(0, 0, g, h);
    ym(e, g, !1);
    for (h = 0; h < d; h++) {
      var n = b[h];
      if (n !== e) {
        l = n.measuredBounds;
        var p = l.width,
          r = l.height;
        m = n.alignment;
        m.Sb() && (m = a.defaultAlignment);
        m.pb() || (m = yc);
        var q = n.alignmentFocus;
        q.Sb() && (q = yc);
        l = null;
        n instanceof W &&
          '' !== n.Pe &&
          ((l = n.fb(n.Pe)), l === n && (l = null));
        if (null !== l) {
          var u = l.actualBounds;
          q = I.allocAt(
            u.x + (q.x * u.width - q.offsetX),
            u.y + (q.y * u.height - q.offsetY),
          );
          for (l = l.panel; l !== n; ) l.transform.Fa(q), (l = l.panel);
          l = m.x * g.width + m.offsetX - q.x;
          m = m.y * g.height + m.offsetY - q.y;
          I.free(q);
        } else
          (l = m.x * g.width + m.offsetX - (q.x * p + q.offsetX)),
            (m = m.y * g.height + m.offsetY - (q.y * r + q.offsetY));
        l += g.x - c.x;
        m += g.y - c.y;
        n.visible && n.arrange(f + l, k + m, p, r);
      }
    }
    M.free(g);
  };

  function ym(a, b, c) {
    var d = null;
    a instanceof W && '' !== a.Pe && ((d = a.fb(a.Pe)), d === a && (d = null));
    if (null !== d)
      for (
        c && a.arrange(0, 0, b.width, b.height),
          b.assign(d.actualBounds),
          d = d.panel;
        d !== a;

      )
        d.transform.So(b), (d = d.panel);
  }

  function zm() {
    this.va = 'Base';
  }
  la(zm, Ll);
  zm.prototype.measure = function(a, b, c, d, e, f, g) {
    var h = d.length,
      k = a.vb(),
      l = k.margin,
      m = b,
      n = c,
      p = l.right + l.left,
      r = l.top + l.bottom;
    k.measure(b, c, f, g);
    l = k.measuredBounds;
    var q = 0,
      u = null;
    k instanceof Cf && ((u = k), (q = u.strokeWidth * u.scale));
    var w = Math.max(l.width + p, 0);
    l = Math.max(l.height + r, 0);
    var v = Am(k),
      z = v.x * w + v.offsetX;
    v = v.y * l + v.offsetY;
    var y = Bm(k),
      A = y.x * w + y.offsetX;
    y = y.y * l + y.offsetY;
    isFinite(b) && (m = Math.max(Math.abs(z - A) - q, 0));
    isFinite(c) && (n = Math.max(Math.abs(v - y) - q, 0));
    q = K.alloc();
    q.h(0, 0);
    a = um(a);
    for (y = 0; y < h; y++)
      (v = d[y]),
        v === k ||
          (!v.visible && v !== a) ||
          ((l = v.margin),
          (w = l.right + l.left),
          (z = l.top + l.bottom),
          v.measure(m, n, 0, 0),
          (l = v.measuredBounds),
          (w = Math.max(l.width + w, 0)),
          (l = Math.max(l.height + z, 0)),
          q.h(Math.max(w, q.width), Math.max(l, q.height)));
    if (1 === h) (e.width = w), (e.height = l), K.free(q);
    else {
      v = Am(k);
      y = Bm(k);
      h = d = 0;
      y.x !== v.x &&
        y.y !== v.y &&
        ((d = q.width / Math.abs(y.x - v.x)),
        (h = q.height / Math.abs(y.y - v.y)));
      K.free(q);
      q = 0;
      null !== u &&
        ((q = u.strokeWidth * u.scale),
        mg(u) === ng && (d = h = Math.max(d, h)));
      d += Math.abs(v.offsetX) + Math.abs(y.offsetX) + q;
      h += Math.abs(v.offsetY) + Math.abs(y.offsetY) + q;
      u = k.stretch;
      u === Xk && (u = il(k, !1));
      switch (u) {
        case lg:
          g = f = 0;
          break;
        case td:
          isFinite(b) && (d = b);
          isFinite(c) && (h = c);
          break;
        case Vk:
          isFinite(b) && (d = b);
          g = 0;
          break;
        case Wk:
          (f = 0), isFinite(c) && (h = c);
      }
      k.Mj();
      k.measure(d, h, f, g);
      e.width = k.measuredBounds.width + p;
      e.height = k.measuredBounds.height + r;
    }
  };
  zm.prototype.arrange = function(a, b) {
    var c = b.length,
      d = a.vb(),
      e = d.measuredBounds,
      f = M.alloc();
    f.h(0, 0, 1, 1);
    var g = d.margin,
      h = g.left;
    g = g.top;
    var k = a.padding,
      l = k.left;
    k = k.top;
    d.arrange(l + h, k + g, e.width, e.height);
    var m = Am(d),
      n = Bm(d),
      p = m.y * e.height + m.offsetY,
      r = n.x * e.width + n.offsetX;
    n = n.y * e.height + n.offsetY;
    f.x = m.x * e.width + m.offsetX;
    f.y = p;
    Zb(f, r, n, 0, 0);
    f.x += h + l;
    f.y += g + k;
    for (e = 0; e < c; e++)
      (h = b[e]),
        h !== d &&
          ((l = h.measuredBounds),
          (g = h.margin),
          (k = Math.max(l.width + g.right + g.left, 0)),
          (m = Math.max(l.height + g.top + g.bottom, 0)),
          (p = h.alignment),
          p.Sb() && (p = a.defaultAlignment),
          p.pb() || (p = yc),
          (k = f.width * p.x + p.offsetX - k * p.x + g.left + f.x),
          (g = f.height * p.y + p.offsetY - m * p.y + g.top + f.y),
          h.visible &&
            ($b(f.x, f.y, f.width, f.height, k, g, l.width, l.height)
              ? h.arrange(k, g, l.width, l.height)
              : h.arrange(
                  k,
                  g,
                  l.width,
                  l.height,
                  new M(f.x, f.y, f.width, f.height),
                )));
    M.free(f);
  };

  function Cm() {
    this.va = 'Base';
    this.name = 'Table';
  }
  la(Cm, Ll);
  Cm.prototype.measure = function(a, b, c, d, e) {
    for (var f = d.length, g = Ea(), h = Ea(), k = 0; k < f; k++) {
      var l = d[k],
        m = l instanceof W ? l : null;
      if (
        null === m ||
        (m.type !== W.TableRow && m.type !== W.TableColumn) ||
        !l.visible
      )
        g.push(l);
      else {
        h.push(m);
        for (var n = m.R.s, p = n.length, r = 0; r < p; r++) {
          var q = n[r];
          m.type === W.TableRow
            ? (q.row = l.row)
            : m.type === W.TableColumn && (q.column = l.column);
          g.push(q);
        }
      }
    }
    f = g.length;
    0 === f && (a.getRowDefinition(0), a.getColumnDefinition(0));
    for (var u = [], w = 0; w < f; w++) {
      var v = g[w];
      v.visible &&
        (ij(v, !0),
        jl(v, !0),
        u[v.row] || (u[v.row] = []),
        u[v.row][v.column] || (u[v.row][v.column] = []),
        u[v.row][v.column].push(v));
    }
    Ga(g);
    var z = Ea(),
      y = Ea(),
      A = Ea(),
      B = {
        count: 0,
      },
      F = {
        count: 0,
      },
      L = b,
      S = c,
      R = a.rowDefs,
      P = a.colDefs,
      H = null;
    f = R.length;
    for (var da = 0; da < f; da++) (H = R[da]), void 0 !== H && (H.actual = 0);
    f = P.length;
    for (var X = 0; X < f; X++) (H = P[X]), void 0 !== H && (H.actual = 0);
    for (var oa = u.length, Ba = 0, db = 0; db < oa; db++)
      u[db] && (Ba = Math.max(Ba, u[db].length));
    var hb = Math.min(a.topIndex, oa - 1),
      Fb = Math.min(a.leftIndex, Ba - 1),
      eb = 0;
    oa = u.length;
    for (var Je = um(a), Ua = 0; Ua < oa; Ua++)
      if (u[Ua]) {
        Ba = u[Ua].length;
        var od = a.getRowDefinition(Ua);
        od.actual = 0;
        for (var Gb = (od.jc = 0); Gb < Ba; Gb++)
          if (u[Ua][Gb]) {
            var Ke = a.getColumnDefinition(Gb);
            void 0 === z[Gb] && ((Ke.actual = 0), (Ke.jc = 0), (z[Gb] = !0));
            for (var wc = u[Ua][Gb], Rc = wc.length, lc = 0; lc < Rc; lc++) {
              var fc = wc[lc];
              if (fc.visible || fc === Je) {
                var gf = 1 < fc.rowSpan || 1 < fc.columnSpan;
                gf && (Ua < hb || Gb < Fb || y.push(fc));
                var pd = fc.margin,
                  Dh = pd.right + pd.left,
                  mc = pd.top + pd.bottom;
                var Hb = Bl(fc, od, Ke, !1);
                var Hi = fc.desiredSize,
                  sg = !isNaN(Hi.height),
                  Bd = !isNaN(Hi.width) && sg;
                gf ||
                  Hb === lg ||
                  Bd ||
                  Ua < hb ||
                  Gb < Fb ||
                  (void 0 !== B[Gb] ||
                    (Hb !== td && Hb !== Vk) ||
                    ((B[Gb] = -1), B.count++),
                  void 0 !== F[Ua] ||
                    (Hb !== td && Hb !== Wk) ||
                    ((F[Ua] = -1), F.count++),
                  A.push(fc));
                fc.measure(Infinity, Infinity, 0, 0);
                if (!(Ua < hb || Gb < Fb)) {
                  var gc = fc.measuredBounds,
                    Mf = Math.max(gc.width + Dh, 0),
                    nc = Math.max(gc.height + mc, 0);
                  if (1 === fc.rowSpan && (Hb === lg || Hb === Vk)) {
                    H = a.getRowDefinition(Ua);
                    var hf = H.Qc();
                    eb = Math.max(nc - H.actual, 0);
                    eb + hf > S && (eb = Math.max(S - hf, 0));
                    var mk = 0 === H.ma;
                    H.jc = H.jc + eb;
                    H.actual = H.ma + eb;
                    S = Math.max(S - (eb + (mk ? hf : 0)), 0);
                  }
                  if (1 === fc.columnSpan && (Hb === lg || Hb === Wk)) {
                    H = a.getColumnDefinition(Gb);
                    var Ii = H.Qc();
                    eb = Math.max(Mf - H.actual, 0);
                    eb + Ii > L && (eb = Math.max(L - Ii, 0));
                    var Kn = 0 === H.ma;
                    H.jc = H.jc + eb;
                    H.actual = H.ma + eb;
                    L = Math.max(L - (eb + (Kn ? Ii : 0)), 0);
                  }
                  gf && fc.Mj();
                }
              }
            }
          }
      }
    Ga(z);
    var Nd = 0,
      me = 0;
    f = a.columnCount;
    for (var tg = 0; tg < f; tg++) {
      var jf = P[tg];
      void 0 !== jf &&
        ((Nd += isNaN(jf.Ac) ? jf.jc : jf.Ac), 0 !== jf.jc && (Nd += jf.Qc()));
    }
    f = a.rowCount;
    for (var Eh = 0; Eh < f; Eh++) {
      var kf = R[Eh];
      void 0 !== kf &&
        ((me += isNaN(kf.Ac) ? kf.jc : kf.Ac), 0 !== kf.jc && (me += kf.Qc()));
    }
    L = Math.max(b - Nd, 0);
    var Od = (S = Math.max(c - me, 0)),
      Le = L;
    f = A.length;
    for (var hc = 0; hc < f; hc++) {
      var Cd = A[hc],
        nk = a.getRowDefinition(Cd.row),
        ne = a.getColumnDefinition(Cd.column),
        Fh = Cd.measuredBounds,
        qd = Cd.margin,
        Nf = qd.right + qd.left,
        Dd = qd.top + qd.bottom;
      B[Cd.column] =
        0 === ne.jc && void 0 !== B[Cd.column]
          ? Math.max(Fh.width + Nf, B[Cd.column])
          : null;
      F[Cd.row] =
        0 === nk.jc && void 0 !== F[Cd.row]
          ? Math.max(Fh.height + Dd, F[Cd.row])
          : null;
    }
    var ug = 0,
      Gh = 0,
      bd;
    for (bd in F) 'count' !== bd && (ug += F[bd]);
    for (bd in B) 'count' !== bd && (Gh += B[bd]);
    for (var ib = K.alloc(), Ji = 0; Ji < f; Ji++) {
      var Vb = A[Ji];
      if (Vb.visible || Vb === Je) {
        var Va = a.getRowDefinition(Vb.row),
          Wb = a.getColumnDefinition(Vb.column),
          oe = 0;
        isFinite(Wb.width)
          ? (oe = Wb.width)
          : (isFinite(L) && null !== B[Vb.column]
              ? 0 === Gh
                ? (oe = Wb.actual + L)
                : (oe = (B[Vb.column] / Gh) * Le)
              : null !== B[Vb.column]
              ? (oe = L)
              : (oe = Wb.actual || L),
            (oe = Math.max(0, oe - Wb.Qc())));
        var Me = 0;
        isFinite(Va.height)
          ? (Me = Va.height)
          : (isFinite(S) && null !== F[Vb.row]
              ? 0 === ug
                ? (Me = Va.actual + S)
                : (Me = (F[Vb.row] / ug) * Od)
              : null !== F[Vb.row]
              ? (Me = S)
              : (Me = Va.actual || S),
            (Me = Math.max(0, Me - Va.Qc())));
        ib.h(
          Math.max(Wb.minimum, Math.min(oe, Wb.maximum)),
          Math.max(Va.minimum, Math.min(Me, Va.maximum)),
        );
        Hb = Bl(Vb, Va, Wb, !1);
        switch (Hb) {
          case Vk:
            ib.height = Math.max(ib.height, Va.actual + S);
            break;
          case Wk:
            ib.width = Math.max(ib.width, Wb.actual + L);
        }
        var Of = Vb.margin,
          Ln = Of.right + Of.left,
          ok = Of.top + Of.bottom;
        Vb.Mj();
        Vb.measure(ib.width, ib.height, Wb.minimum, Va.minimum);
        var Hh = Vb.measuredBounds,
          Pf = Math.max(Hh.width + Ln, 0),
          vg = Math.max(Hh.height + ok, 0);
        isFinite(L) && (Pf = Math.min(Pf, ib.width));
        isFinite(S) && (vg = Math.min(vg, ib.height));
        var ic = 0;
        ic = Va.actual;
        Va.actual = Math.max(Va.actual, vg);
        Va.jc = Math.max(Va.jc, vg);
        eb = Va.actual - ic;
        S = Math.max(S - eb, 0);
        null === F[Vb.row] && (Od = Math.max(Od - eb, 0));
        ic = Wb.actual;
        Wb.actual = Math.max(Wb.actual, Pf);
        Wb.jc = Math.max(Wb.jc, Pf);
        eb = Wb.actual - ic;
        L = Math.max(L - eb, 0);
        null === B[Vb.column] && (Le = Math.max(Le - eb, 0));
      }
    }
    Ga(A);
    var Ed = K.alloc(),
      rd = Ea(),
      Fc = Ea();
    f = y.length;
    if (0 !== f)
      for (var lf = 0; lf < oa; lf++)
        if (u[lf]) {
          Ba = u[lf].length;
          var Ih = a.getRowDefinition(lf);
          rd[lf] = Ih.actual;
          for (var mf = 0; mf < Ba; mf++)
            if (u[lf][mf]) {
              var pk = a.getColumnDefinition(mf);
              Fc[mf] = pk.actual;
            }
        }
    for (var Jh = 0; Jh < f; Jh++) {
      var Oa = y[Jh];
      if (Oa.visible || Oa === Je) {
        var cd = a.getRowDefinition(Oa.row),
          Sc = a.getColumnDefinition(Oa.column);
        ib.h(
          Math.max(Sc.minimum, Math.min(b, Sc.maximum)),
          Math.max(cd.minimum, Math.min(c, cd.maximum)),
        );
        Hb = Bl(Oa, cd, Sc, !1);
        switch (Hb) {
          case td:
            0 !== Fc[Sc.index] && (ib.width = Math.min(ib.width, Fc[Sc.index]));
            0 !== rd[cd.index] &&
              (ib.height = Math.min(ib.height, rd[cd.index]));
            break;
          case Vk:
            0 !== Fc[Sc.index] && (ib.width = Math.min(ib.width, Fc[Sc.index]));
            break;
          case Wk:
            0 !== rd[cd.index] &&
              (ib.height = Math.min(ib.height, rd[cd.index]));
        }
        isFinite(Sc.width) && (ib.width = Sc.width);
        isFinite(cd.height) && (ib.height = cd.height);
        Ed.h(0, 0);
        for (
          var qk = Sc.minimum, oc = cd.minimum, Ne = 1;
          Ne < Oa.rowSpan && !(Oa.row + Ne >= a.rowCount);
          Ne++
        )
          (H = a.getRowDefinition(Oa.row + Ne)),
            (eb = 0),
            (eb =
              Hb === td || Hb === Wk
                ? Math.max(
                    H.minimum,
                    0 === rd[Oa.row + Ne]
                      ? H.maximum
                      : Math.min(rd[Oa.row + Ne], H.maximum),
                  )
                : Math.max(
                    H.minimum,
                    isNaN(H.Ac) ? H.maximum : Math.min(H.Ac, H.maximum),
                  )),
            (Ed.height += eb),
            (oc += H.minimum);
        for (
          var Tc = 1;
          Tc < Oa.columnSpan && !(Oa.column + Tc >= a.columnCount);
          Tc++
        )
          (H = a.getColumnDefinition(Oa.column + Tc)),
            (eb = 0),
            (eb =
              Hb === td || Hb === Vk
                ? Math.max(
                    H.minimum,
                    0 === Fc[Oa.column + Tc]
                      ? H.maximum
                      : Math.min(Fc[Oa.column + Tc], H.maximum),
                  )
                : Math.max(
                    H.minimum,
                    isNaN(H.Ac) ? H.maximum : Math.min(H.Ac, H.maximum),
                  )),
            (Ed.width += eb),
            (qk += H.minimum);
        ib.width += Ed.width;
        ib.height += Ed.height;
        var Kh = Oa.margin,
          nf = Kh.right + Kh.left,
          Ki = Kh.top + Kh.bottom;
        Oa.measure(ib.width, ib.height, qk, oc);
        for (
          var Lh = Oa.measuredBounds,
            Fd = Math.max(Lh.width + nf, 0),
            Qf = Math.max(Lh.height + Ki, 0),
            of = 0,
            Mh = 0;
          Mh < Oa.rowSpan && !(Oa.row + Mh >= a.rowCount);
          Mh++
        )
          (H = a.getRowDefinition(Oa.row + Mh)), (of += H.total || 0);
        if (of < Qf) {
          var Oe = Qf - of,
            Pd = Qf - of;
          if (null !== Oa.spanAllocation)
            for (
              var Pe = Oa.spanAllocation, pe = 0;
              pe < Oa.rowSpan && !(0 >= Oe) && !(Oa.row + pe >= a.rowCount);
              pe++
            ) {
              H = a.getRowDefinition(Oa.row + pe);
              var Qe = H.ma || 0,
                Rf = Pe(Oa, H, Pd);
              H.actual = Math.min(H.maximum, Qe + Rf);
              H.ma !== Qe && (Oe -= H.ma - Qe);
            }
          for (; 0 < Oe; ) {
            var sd = H.ma || 0;
            isNaN(H.height) &&
              H.maximum > sd &&
              ((H.actual = Math.min(H.maximum, sd + Oe)),
              H.ma !== sd && (Oe -= H.ma - sd));
            if (0 === H.index) break;
            H = a.getRowDefinition(H.index - 1);
          }
        }
        for (
          var wg = 0, Re = 0;
          Re < Oa.columnSpan && !(Oa.column + Re >= a.columnCount);
          Re++
        )
          (H = a.getColumnDefinition(Oa.column + Re)), (wg += H.total || 0);
        if (wg < Fd) {
          var xg = Fd - wg,
            Mn = Fd - wg;
          if (null !== Oa.spanAllocation)
            for (
              var qe = Oa.spanAllocation, Sf = 0;
              Sf < Oa.columnSpan &&
              !(0 >= xg) &&
              !(Oa.column + Sf >= a.columnCount);
              Sf++
            ) {
              H = a.getColumnDefinition(Oa.column + Sf);
              var Li = H.ma || 0,
                Nn = qe(Oa, H, Mn);
              H.actual = Math.min(H.maximum, Li + Nn);
              H.ma !== Li && (xg -= H.ma - Li);
            }
          for (; 0 < xg; ) {
            var rk = H.ma || 0;
            isNaN(H.width) &&
              H.maximum > rk &&
              ((H.actual = Math.min(H.maximum, rk + xg)),
              H.ma !== rk && (xg -= H.ma - rk));
            if (0 === H.index) break;
            H = a.getColumnDefinition(H.index - 1);
          }
        }
      }
    }
    Ga(y);
    K.free(Ed);
    K.free(ib);
    void 0 !== rd && Ga(rd);
    void 0 !== Fc && Ga(Fc);
    var yg = 0,
      zg = 0,
      sk = a.desiredSize,
      vr = a.maxSize;
    Hb = il(a, !0);
    var Mi = (me = Nd = 0),
      Ni = 0;
    f = a.columnCount;
    for (var tk = 0; tk < f; tk++)
      void 0 !== P[tk] &&
        ((H = a.getColumnDefinition(tk)),
        isFinite(H.width)
          ? ((Mi += H.width), (Mi += H.Qc()))
          : Dm(H) === Em
          ? ((Mi += H.ma), (Mi += H.Qc()))
          : 0 !== H.ma && ((Nd += H.ma), (Nd += H.Qc())));
    isFinite(sk.width)
      ? (yg = Math.min(sk.width, vr.width))
      : (yg = Hb !== lg && isFinite(b) ? b : Nd);
    yg = Math.max(yg, a.minSize.width);
    yg = Math.max(yg - Mi, 0);
    for (var iu = 0 === Nd ? 1 : Math.max(yg / Nd, 1), vk = 0; vk < f; vk++)
      void 0 !== P[vk] &&
        ((H = a.getColumnDefinition(vk)),
        isFinite(H.width) || Dm(H) === Em || (H.actual = H.ma * iu),
        (H.position = e.width),
        0 !== H.ma && ((e.width += H.ma), (e.width += H.Qc())));
    f = a.rowCount;
    for (var wk = 0; wk < f; wk++)
      void 0 !== R[wk] &&
        ((H = a.getRowDefinition(wk)),
        isFinite(H.height)
          ? ((Ni += H.height), (Ni += H.Qc()))
          : Dm(H) === Em
          ? ((Ni += H.ma), (Ni += H.Qc()))
          : 0 !== H.ma && ((me += H.ma), (me += H.Qc())));
    isFinite(sk.height)
      ? (zg = Math.min(sk.height, vr.height))
      : (zg = Hb !== lg && isFinite(c) ? c : me);
    zg = Math.max(zg, a.minSize.height);
    zg = Math.max(zg - Ni, 0);
    for (var ju = 0 === me ? 1 : Math.max(zg / me, 1), xk = 0; xk < f; xk++)
      void 0 !== R[xk] &&
        ((H = a.getRowDefinition(xk)),
        isFinite(H.height) || Dm(H) === Em || (H.actual = H.ma * ju),
        (H.position = e.height),
        0 !== H.ma && ((e.height += H.ma), (e.height += H.Qc())));
    f = h.length;
    for (var On = 0; On < f; On++) {
      var Pi = h[On],
        Pn = 0,
        Qn = 0;
      Pi.type === W.TableRow
        ? ((Pn = e.width), (H = a.getRowDefinition(Pi.row)), (Qn = H.actual))
        : ((H = a.getColumnDefinition(Pi.column)),
          (Pn = H.actual),
          (Qn = e.height));
      Pi.measuredBounds.h(0, 0, Pn, Qn);
      ij(Pi, !1);
    }
    Ga(h);
    a.inRowsCols = u;
  };
  Cm.prototype.arrange = function(a, b, c) {
    var d = b.length,
      e = a.padding,
      f = e.left;
    e = e.top;
    var g = a.inRowsCols;
    if (null !== g) {
      for (var h, k, l = g.length, m = 0, n = 0; n < l; n++)
        g[n] && (m = Math.max(m, g[n].length));
      k = a.rowDefs;
      h = a.colDefs;
      var p = (n = 0),
        r = Math.min(a.topIndex, l - 1);
      if (0 < k.length) {
        for (; r !== l && (void 0 === k[r] || 0 === k[r].ma); ) r++;
        r = Math.max(Math.min(r, l - 1), 0);
        n = -k[r].position;
      }
      var q = Math.min(a.leftIndex, m - 1);
      if (0 < h.length) {
        for (; q !== m && (void 0 === h[q] || 0 === h[q].ma); ) q++;
        q = Math.max(Math.min(q, m - 1), 0);
        p = -h[q].position;
      }
      for (var u = 0, w = 0; u !== l && void 0 === k[u]; ) u++;
      for (; w !== l && void 0 === h[w]; ) w++;
      m = a.part;
      a.getRowDefinition(u);
      a.getColumnDefinition(w);
      for (var v = 0; v < b.length; v++) {
        var z = b[v];
        if (
          z instanceof W &&
          z.visible &&
          (z.type === W.TableRow || z.type === W.TableColumn)
        ) {
          if (z.type === W.TableRow) {
            h = a.getRowDefinition(z.row);
            var y = a.getColumnDefinition(w);
          } else
            (h = a.getRowDefinition(u)), (y = a.getColumnDefinition(z.column));
          k = h.position + n + e;
          0 !== h.ma && (k += h.mo(Math.max(u, r)));
          h = y.position + p + f;
          0 !== y.ma && (h += y.mo(Math.max(w, q)));
          y = z.measuredBounds;
          z.Jk();
          z.actualBounds.ja();
          var A = z.actualBounds,
            B = M.allocAt(A.x, A.y, A.width, A.height);
          A.x = z.type === W.TableRow ? f : h;
          A.y = z.type === W.TableColumn ? e : k;
          A.width = y.width;
          A.height = y.height;
          z.actualBounds.freeze();
          jl(z, !1);
          Tb(B, A) || null === m || (m.dh(), z.wn(m));
          M.free(B);
        }
      }
      v = K.alloc();
      for (z = 0; z < l; z++)
        if (g[z])
          for (
            m = g[z].length,
              y = a.getRowDefinition(z),
              k = y.position + n + e,
              0 !== y.ma && (k += y.mo(Math.max(u, r))),
              A = 0;
            A < m;
            A++
          )
            if (g[z][A]) {
              B = a.getColumnDefinition(A);
              h = B.position + p + f;
              0 !== B.ma && (h += B.mo(Math.max(w, q)));
              for (var F = g[z][A], L = F.length, S = 0; S < L; S++) {
                var R = F[S],
                  P = R.measuredBounds;
                v.h(0, 0);
                for (var H = 1; H < R.rowSpan && !(z + H >= a.rowCount); H++) {
                  var da = a.getRowDefinition(z + H);
                  0 !== da.ma && (v.height += da.total);
                }
                for (H = 1; H < R.columnSpan && !(A + H >= a.columnCount); H++)
                  (da = a.getColumnDefinition(A + H)),
                    0 !== da.ma && (v.width += da.total);
                var X = B.ma + v.width,
                  oa = y.ma + v.height;
                H = h;
                da = k;
                var Ba = X,
                  db = oa,
                  hb = h,
                  Fb = k,
                  eb = X,
                  Je = oa;
                h + X > c.width && (eb = Math.max(c.width - h, 0));
                k + oa > c.height && (Je = Math.max(c.height - k, 0));
                var Ua = R.alignment;
                if (Ua.Sb()) {
                  Ua = a.defaultAlignment;
                  Ua.pb() || (Ua = yc);
                  var od = Ua.x;
                  var Gb = Ua.y;
                  var Ke = Ua.offsetX;
                  Ua = Ua.offsetY;
                  var wc = B.alignment,
                    Rc = y.alignment;
                  wc.pb() && ((od = wc.x), (Ke = wc.offsetX));
                  Rc.pb() && ((Gb = Rc.y), (Ua = Rc.offsetY));
                } else
                  (od = Ua.x),
                    (Gb = Ua.y),
                    (Ke = Ua.offsetX),
                    (Ua = Ua.offsetY);
                if (isNaN(od) || isNaN(Gb)) (Gb = od = 0.5), (Ua = Ke = 0);
                wc = P.width;
                Rc = P.height;
                var lc = R.margin,
                  fc = lc.left + lc.right,
                  gf = lc.top + lc.bottom,
                  pd = Bl(R, y, B, !1);
                !isNaN(R.desiredSize.width) ||
                  (pd !== td && pd !== Vk) ||
                  (wc = Math.max(X - fc, 0));
                !isNaN(R.desiredSize.height) ||
                  (pd !== td && pd !== Wk) ||
                  (Rc = Math.max(oa - gf, 0));
                X = R.maxSize;
                oa = R.minSize;
                wc = Math.min(X.width, wc);
                Rc = Math.min(X.height, Rc);
                wc = Math.max(oa.width, wc);
                Rc = Math.max(oa.height, Rc);
                X = Rc + gf;
                H += Ba * od - (wc + fc) * od + Ke + lc.left;
                da += db * Gb - X * Gb + Ua + lc.top;
                R.visible &&
                  ($b(hb, Fb, eb, Je, H, da, P.width, P.height)
                    ? R.arrange(H, da, wc, Rc)
                    : R.arrange(H, da, wc, Rc, new M(hb, Fb, eb, Je)));
              }
            }
      K.free(v);
      for (a = 0; a < d; a++)
        (c = b[a]),
          (f = c instanceof W ? c : null),
          null === f ||
            (f.type !== W.TableRow && f.type !== W.TableColumn) ||
            ((f = c.actualBounds),
            c.naturalBounds.ja(),
            c.naturalBounds.h(0, 0, f.width, f.height),
            c.naturalBounds.freeze());
    }
  };

  function Fm() {
    this.va = 'Base';
  }
  la(Fm, Ll);
  Fm.prototype.measure = function() {};
  Fm.prototype.arrange = function() {};

  function Gm() {
    this.va = 'Base';
  }
  la(Gm, Ll);
  Gm.prototype.measure = function() {};
  Gm.prototype.arrange = function() {};

  function Hm() {
    this.va = 'Base';
  }
  la(Hm, Ll);
  Hm.prototype.measure = function(a, b, c, d, e, f, g) {
    1 < d.length &&
      C('Viewbox Panel cannot contain more than one GraphObject.');
    d = d[0];
    d.xa = 1;
    d.Mj();
    d.measure(Infinity, Infinity, f, g);
    var h = d.measuredBounds,
      k = d.margin,
      l = k.right + k.left;
    k = k.top + k.bottom;
    if (isFinite(b) || isFinite(c)) {
      var m = d.scale,
        n = h.width;
      h = h.height;
      var p = Math.max(b - l, 0),
        r = Math.max(c - k, 0),
        q = 1;
      a.viewboxStretch === ng
        ? 0 !== n && 0 !== h && (q = Math.min(p / n, r / h))
        : 0 !== n && 0 !== h && (q = Math.max(p / n, r / h));
      0 === q && (q = 1e-4);
      d.xa *= q;
      m !== d.scale && (ij(d, !0), d.measure(Infinity, Infinity, f, g));
    }
    h = d.measuredBounds;
    e.width = isFinite(b) ? b : Math.max(h.width + l, 0);
    e.height = isFinite(c) ? c : Math.max(h.height + k, 0);
  };
  Hm.prototype.arrange = function(a, b, c) {
    b = b[0];
    var d = b.measuredBounds,
      e = b.margin,
      f = Math.max(d.width + (e.right + e.left), 0);
    e = Math.max(d.height + (e.top + e.bottom), 0);
    var g = b.alignment;
    g.Sb() && (g = a.defaultAlignment);
    g.pb() || (g = yc);
    b.arrange(
      c.width * g.x - f * g.x + g.offsetX,
      c.height * g.y - e * g.y + g.offsetY,
      d.width,
      d.height,
    );
  };

  function Im() {
    this.va = 'Base';
  }
  la(Im, Ll);
  Im.prototype.measure = function() {};
  Im.prototype.arrange = function() {};
  Im.prototype.tc = function(a, b, c) {
    c = a.uf() * c.scale;
    0 >= c && (c = 1);
    var d = a.gridCellSize,
      e = d.width;
    d = d.height;
    var f = a.naturalBounds,
      g = a.actualBounds,
      h = f.width,
      k = f.height,
      l = Math.ceil(h / e),
      m = Math.ceil(k / d),
      n = a.gridOrigin,
      p = n.x;
    n = n.y;
    b.save();
    b.beginPath();
    b.rect(0, 0, h, k);
    b.clip();
    for (var r = [], q = a.R.s, u = q.length, w = 0; w < u; w++) {
      var v = q[w],
        z = [];
      r.push(z);
      if (v.visible) {
        var y = v.interval;
        if (!(0 > y)) {
          v = Sj(v.figure);
          for (var A = 0; A < u; A++)
            if (A !== w) {
              var B = q[A];
              B.visible &&
                Sj(B.figure) === v &&
                ((B = B.interval), B > y && z.push(B));
            }
        }
      }
    }
    q = a.R.s;
    u = q.length;
    for (w = 0; w < u; w++) {
      var F = q[w];
      if (
        F.visible &&
        ((z = F.interval || 1), (v = Math.abs(z)), !(2 > e * v * c))
      ) {
        y = F.segmentIndex;
        if (!isFinite(y) || isNaN(y)) y = 0;
        0 > y && (y = v - Math.min(-y, v));
        y = Math.round(y % v);
        v = F.opacity;
        A = 1;
        if (1 !== v) {
          if (0 === v) continue;
          A = b.globalAlpha;
          b.globalAlpha = A * v;
        }
        B = r[w];
        var L = !1,
          S = F.strokeDashArray;
        null !== S && ((L = !0), b.Gr(S, F.strokeDashOffset));
        if ('LineV' === F.figure && null !== F.stroke && 0 < F.strokeWidth) {
          b.lineWidth = F.strokeWidth;
          gi(a, b, F.stroke, !1, !1, f, g);
          b.beginPath();
          for (S = F = Math.floor((p - e) / e); S <= F + l; S++) {
            var R = S * e + p;
            0 <= R &&
              R <= h &&
              Jm(S, z, y, B) &&
              (b.moveTo(R, 0), b.lineTo(R, k));
          }
          b.stroke();
        } else if (
          'LineH' === F.figure &&
          null !== F.stroke &&
          0 < F.strokeWidth
        ) {
          b.lineWidth = F.strokeWidth;
          gi(a, b, F.stroke, !1, !1, f, g);
          b.beginPath();
          for (S = F = Math.floor((n - d) / d); S <= F + m; S++)
            (R = S * d + n),
              0 <= R &&
                R <= k &&
                Jm(S, z, y, B) &&
                (b.moveTo(0, R), b.lineTo(h, R));
          b.stroke();
        } else if ('BarV' === F.figure && null !== F.fill)
          for (
            gi(a, b, F.fill, !0, !1, f, g),
              F = F.width,
              isNaN(F) && (F = e),
              R = S = Math.floor((p - e) / e);
            R <= S + l;
            R++
          ) {
            var P = R * e + p;
            0 <= P + F && P <= h && Jm(R, z, y, B) && b.fillRect(P, 0, F, k);
          }
        else if ('BarH' === F.figure && null !== F.fill)
          for (
            gi(a, b, F.fill, !0, !1, f, g),
              F = F.height,
              isNaN(F) && (F = d),
              R = S = Math.floor((n - d) / d);
            R <= S + m;
            R++
          )
            (P = R * d + n),
              0 <= P + F && P <= k && Jm(R, z, y, B) && b.fillRect(0, P, h, F);
        L && b.Er();
        1 !== v && (b.globalAlpha = A);
      }
    }
    b.restore();
    b.Oc(!1);
  };

  function Jm(a, b, c, d) {
    if (0 > b) return a % b === c;
    if (a % b !== c) return !1;
    b = d.length;
    for (var e = 0; e < b; e++) if (a % d[e] === c) return !1;
    return !0;
  }

  function Km() {
    this.va = 'Base';
  }
  la(Km, Ll);
  Km.prototype.measure = function(a, b, c, d, e) {
    var f = d.length;
    if (a instanceof ue || a instanceof T) {
      var g = null,
        h = null;
      a instanceof T && (g = a);
      a instanceof ue &&
        ((h = a), (g = h.adornedPart), null === a.j && (a.j = []));
      if (g instanceof T) {
        var k = g;
        if (0 === f) Qb(a.naturalBounds, 0, 0), a.measuredBounds.h(0, 0, 0, 0);
        else {
          var l = a instanceof ue ? null : g.path;
          b = g.routeBounds;
          c = a.bg;
          c.h(0, 0, b.width, b.height);
          var m = k.points,
            n = g.pointsCount;
          null !== h ? h.Rj(!1) : null !== g && g.Rj(!1);
          h = b.width;
          var p = b.height,
            r = a.j;
          r.length = 0;
          if (null !== l) {
            Lm(a, h, p, l);
            var q = l.measuredBounds;
            c.Xc(q);
            r.push(q);
          }
          q = md.alloc();
          for (var u = I.alloc(), w = I.alloc(), v = 0; v < f; v++) {
            var z = d[v];
            if (z !== l)
              if (z.isPanelMain && z instanceof Cf) {
                Lm(a, h, p, z);
                var y = z.measuredBounds;
                c.Xc(y);
                r.push(y);
              } else if (2 > n)
                z.measure(Infinity, Infinity, 0, 0),
                  (y = z.measuredBounds),
                  c.Xc(y),
                  r.push(y);
              else {
                var A = z.segmentIndex,
                  B = z.segmentFraction,
                  F = z.alignmentFocus;
                F.Fc() && (F = yc);
                var L = z.segmentOrientation,
                  S = z.segmentOffset;
                if (isNaN(A)) {
                  var R = k.sa;
                  y = Ea();
                  R.Cu(B, y);
                  var P = I.allocAt(y[0], y[1]);
                  P.add(k.i(0));
                  R.type === O.j
                    ? P.offset(-R.startX, -R.startY)
                    : ((R = R.figures.first()),
                      null !== R && P.offset(-R.startX, -R.startY));
                  R = y[2];
                  if (L !== $f) {
                    var H = k.computeAngle(z, L, R);
                    z.Gb = H;
                  }
                  H = P.x - b.x;
                  var da = P.y - b.y;
                  I.free(P);
                  Ga(y);
                } else if (A < -n || A >= n)
                  (y = I.alloc()),
                    k.mg(),
                    k.computeMidPoint(y),
                    (R = k.midAngle),
                    L !== $f && ((H = k.computeAngle(z, L, R)), (z.Gb = H)),
                    (H = y.x - b.x),
                    (da = y.y - b.y),
                    I.free(y);
                else {
                  H = 0;
                  0 <= A
                    ? ((da = m.K(A)), (y = A < n - 1 ? m.K(A + 1) : da))
                    : ((H = n + A),
                      (da = m.K(H)),
                      (y = 0 < H ? m.K(H - 1) : da));
                  if (da.$a(y)) {
                    0 <= A
                      ? ((R = 0 < A ? m.K(A - 1) : da),
                        (H = A < n - 2 ? m.K(A + 2) : y))
                      : ((R = H < n - 1 ? m.K(H + 1) : da),
                        (H = 1 < H ? m.K(H - 2) : y));
                    P = R.rf(da);
                    var X = y.rf(H);
                    R =
                      P > X + 10
                        ? 0 <= A
                          ? R.Ya(da)
                          : da.Ya(R)
                        : X > P + 10
                        ? 0 <= A
                          ? y.Ya(H)
                          : H.Ya(y)
                        : 0 <= A
                        ? R.Ya(H)
                        : H.Ya(R);
                  } else R = 0 <= A ? da.Ya(y) : y.Ya(da);
                  L !== $f && ((H = k.computeAngle(z, L, R)), (z.Gb = H));
                  H = da.x + (y.x - da.x) * B - b.x;
                  da = da.y + (y.y - da.y) * B - b.y;
                }
                z.measure(Infinity, Infinity, 0, 0);
                y = z.measuredBounds;
                P = z.naturalBounds;
                var oa = 0;
                z instanceof Cf && (oa = z.strokeWidth);
                X = P.width + oa;
                var Ba = P.height + oa;
                q.reset();
                q.translate(-y.x, -y.y);
                q.scale(z.scale, z.scale);
                q.rotate(L === $f ? z.angle : R, X / 2, Ba / 2);
                (L !== Mm && L !== Nm) || q.rotate(90, X / 2, Ba / 2);
                (L !== Om && L !== Pm) || q.rotate(-90, X / 2, Ba / 2);
                L === Qm &&
                  ((45 < R && 135 > R) || (225 < R && 315 > R)) &&
                  q.rotate(-R, X / 2, Ba / 2);
                P = new M(0, 0, X, Ba);
                u.oi(P, F);
                q.Fa(u);
                F = -u.x + (oa / 2) * z.scale;
                z = -u.y + (oa / 2) * z.scale;
                w.assign(S);
                oa = isNaN(S.x);
                var db = isNaN(S.y);
                if (oa || db) {
                  X = X / 2 + 3;
                  Ba = Ba / 2 + 3;
                  var hb = 45 <= R && 135 >= R,
                    Fb = 225 <= R && 315 >= R;
                  L === $f && (hb || Fb)
                    ? ((w.x = db ? X : S.y),
                      (w.y = oa ? Ba : S.x),
                      hb
                        ? 0 <= A || (isNaN(A) && 0.5 > B) || !oa || (w.y = -Ba)
                        : Fb &&
                          ((0 <= A || (isNaN(A) && 0.5 > B)) &&
                            oa &&
                            (w.y = -Ba),
                          db && (w.x = -X)))
                    : (oa && (w.x = 0 <= A || (isNaN(A) && 0.5 > B) ? X : -X),
                      db && (w.y = -Ba),
                      w.rotate(R));
                } else w.rotate(R);
                H += w.x;
                da += w.y;
                P.set(y);
                P.h(H + F, da + z, y.width, y.height);
                r.push(P);
                c.Xc(P);
              }
          }
          if (null !== g)
            for (d = g.labelNodes; d.next(); )
              d.value.measure(Infinity, Infinity);
          a.bg = c;
          a.position.h(b.x + c.x, b.y + c.y);
          a.location.h(NaN, NaN);
          Qb(e, c.width || 0, c.height || 0);
          md.free(q);
          I.free(u);
          I.free(w);
        }
      }
    }
  };
  Km.prototype.arrange = function(a, b) {
    var c = b.length;
    if (a instanceof ue || a instanceof T) {
      var d = a,
        e = null;
      a instanceof ue && ((e = a), (d = e.adornedPart));
      var f = a instanceof ue ? null : d.path,
        g = a.j;
      if (0 !== g.length) {
        var h = 0;
        if (null !== f && h < g.length) {
          var k = g[h];
          h++;
          f.arrange(k.x - a.bg.x, k.y - a.bg.y, k.width, k.height);
        }
        for (k = 0; k < c; k++) {
          var l = b[k];
          if (l !== f && h < g.length) {
            var m = g[h];
            h++;
            l.arrange(m.x - a.bg.x, m.y - a.bg.y, m.width, m.height);
          }
        }
      }
      b = d.points;
      c = b.count;
      if (2 <= c && a instanceof T)
        for (f = a.labelNodes; f.next(); ) {
          var n = a;
          g = f.value;
          h = g.segmentIndex;
          k = g.segmentFraction;
          var p = g.alignmentFocus;
          l = g.segmentOrientation;
          m = g.segmentOffset;
          if (isNaN(h)) {
            var r = n.sa;
            var q = Ea();
            r.Cu(k, q);
            var u = I.allocAt(q[0], q[1]);
            u.add(n.i(0));
            r.type === O.j
              ? u.offset(-r.startX, -r.startY)
              : ((r = r.figures.first()), u.offset(-r.startX, -r.startY));
            r = q[2];
            l !== $f && ((n = n.computeAngle(g, l, r)), (g.angle = n));
            n = u.x;
            var w = u.y;
            I.free(u);
            Ga(q);
          } else if (h < -c || h >= c)
            (q = I.alloc()),
              (r = n),
              (w = q),
              r.mg(),
              r.computeMidPoint(w),
              (r = n.midAngle),
              l !== $f && ((n = n.computeAngle(g, l, r)), (g.angle = n)),
              (n = q.x),
              (w = q.y),
              I.free(q);
          else {
            u = 0;
            0 <= h
              ? ((q = b.s[h]), (w = h < c - 1 ? b.s[h + 1] : q))
              : ((u = c + h), (q = b.s[u]), (w = 0 < u ? b.s[u - 1] : q));
            if (q.$a(w)) {
              0 <= h
                ? ((r = 0 < h ? b.s[h - 1] : q),
                  (u = h < c - 2 ? b.s[h + 2] : w))
                : ((r = u < c - 1 ? b.s[u + 1] : q),
                  (u = 1 < u ? b.s[u - 2] : w));
              var v = r.rf(q),
                z = w.rf(u);
              r =
                v > z + 10
                  ? 0 <= h
                    ? r.Ya(q)
                    : q.Ya(r)
                  : z > v + 10
                  ? 0 <= h
                    ? w.Ya(u)
                    : u.Ya(w)
                  : 0 <= h
                  ? r.Ya(u)
                  : u.Ya(r);
            } else r = 0 <= h ? q.Ya(w) : w.Ya(q);
            l !== $f && ((n = n.computeAngle(g, l, r)), (g.angle = n));
            n = q.x + (w.x - q.x) * k;
            w = q.y + (w.y - q.y) * k;
          }
          if (p.Wr()) g.location = new I(n, w);
          else {
            p.Fc() && (p = yc);
            q = md.alloc();
            q.reset();
            q.scale(g.scale, g.scale);
            q.rotate(g.angle, 0, 0);
            var y = g.naturalBounds;
            u = M.allocAt(0, 0, y.width, y.height);
            v = I.alloc();
            v.oi(u, p);
            q.Fa(v);
            p = -v.x;
            z = -v.y;
            var A = y.width,
              B = y.height;
            y = I.alloc();
            y.assign(m);
            var F = isNaN(m.x),
              L = isNaN(m.y);
            if (F || L) {
              A = A / 2 + 3;
              B = B / 2 + 3;
              var S = 45 <= r && 135 >= r,
                R = 225 <= r && 315 >= r;
              l === $f && (S || R)
                ? ((y.x = L ? A : m.y),
                  (y.y = F ? B : m.x),
                  S
                    ? 0 <= h || (isNaN(h) && 0.5 > k) || !F || (y.y = -B)
                    : R &&
                      ((0 <= h || (isNaN(h) && 0.5 > k)) && F && (y.y = -B),
                      L && (y.x = -A)))
                : (F && (y.x = 0 <= h || (isNaN(h) && 0.5 > k) ? A : -A),
                  L && (y.y = -B),
                  y.rotate(r));
            } else y.rotate(r);
            n += y.x;
            w += y.y;
            q.So(u);
            p += u.x;
            z += u.y;
            h = I.allocAt(n + p, w + z);
            g.move(h);
            I.free(h);
            I.free(y);
            I.free(v);
            M.free(u);
            md.free(q);
          }
        }
      null !== e ? e.Rj(!1) : d.Rj(!1);
    }
  };

  function Lm(a, b, c, d) {
    if (!1 !== nj(d)) {
      var e = d.strokeWidth;
      0 === e &&
        a instanceof ue &&
        a.type === W.Link &&
        a.adornedObject instanceof Cf &&
        (e = a.adornedObject.strokeWidth);
      e *= d.xa;
      a instanceof T && null !== a.sa
        ? ((a = a.sa.bounds),
          d.ve(a.x - e / 2, a.y - e / 2, a.width + e, a.height + e))
        : a instanceof ue && null !== a.adornedPart.sa
        ? ((a = a.adornedPart.sa.bounds),
          d.ve(a.x - e / 2, a.y - e / 2, a.width + e, a.height + e))
        : d.ve(-(e / 2), -(e / 2), b + e, c + e);
      e = d.desiredSize;
      e.v() || null === d.sa
        ? d.bc.h(0, 0, e.width, e.height)
        : d.bc.assign(d.sa.bounds);
      ij(d, !1);
    }
  }

  function Rm() {
    this.va = 'Base';
  }
  la(Rm, Ll);
  Rm.prototype.measure = function(a, b, c, d, e, f, g) {
    var h = a.vb();
    a.graduatedBounds = [];
    var k = h.margin,
      l = k.right + k.left,
      m = k.top + k.bottom;
    h.measure(b, c, f, g);
    var n = h.measuredBounds,
      p = new M(
        -k.left,
        -k.top,
        Math.max(n.width + l, 0),
        Math.max(n.height + m, 0),
      );
    a.graduatedBounds.push(p);
    e.assign(p);
    for (
      var r = h.geometry,
        q = h.strokeWidth,
        u = r.flattenedSegments,
        w = r.flattenedLengths,
        v = r.flattenedTotalLength,
        z = u.length,
        y = 0,
        A = 0,
        B = Ea(),
        F = 0;
      F < z;
      F++
    ) {
      var L = u[F],
        S = [];
      A = y = 0;
      for (var R = L.length, P = 0; P < R; P += 2) {
        var H = L[P],
          da = L[P + 1];
        if (0 !== P) {
          var X = (180 * Math.atan2(da - A, H - y)) / Math.PI;
          0 > X && (X += 360);
          S.push(X);
        }
        y = H;
        A = da;
      }
      B.push(S);
    }
    if (null === a.graduatedIntervals) {
      for (var oa = [], Ba = a.R.s, db = Ba.length, hb = 0; hb < db; hb++) {
        var Fb = Ba[hb],
          eb = [];
        oa.push(eb);
        if (Fb.visible) {
          var Je = Fb.interval;
          if (!(0 > Je))
            for (var Ua = 0; Ua < db; Ua++)
              if (Ua !== hb) {
                var od = Ba[Ua];
                if (od.visible && Fb.constructor === od.constructor) {
                  var Gb = od.interval;
                  Gb > Je && eb.push(Gb);
                }
              }
        }
      }
      a.graduatedIntervals = oa;
    }
    var Ke = a.graduatedIntervals;
    var wc = a.R.s,
      Rc = wc.length,
      lc = 0,
      fc = 0,
      gf = v;
    a.graduatedMarks = [];
    for (var pd, Dh = 0; Dh < Rc; Dh++) {
      var mc = wc[Dh];
      pd = [];
      if (mc.visible && mc !== h) {
        var Hb = Math.abs(mc.interval),
          Hi = a.graduatedTickUnit;
        if (
          !(2 > (Hi * Hb * v) / a.graduatedRange && null === mc.graduatedSkip)
        ) {
          var sg = w[0][0],
            Bd = 0,
            gc = 0;
          fc = v * mc.graduatedStart - 1e-4;
          gf = v * mc.graduatedEnd + 1e-4;
          var Mf = Hi * Hb,
            nc = a.graduatedTickBase;
          if (nc < a.graduatedMin) {
            var hf = (a.graduatedMin - nc) / Mf;
            hf = 0 === hf % 1 ? hf : Math.floor(hf + 1);
            nc += hf * Mf;
          } else
            nc > a.graduatedMin + Mf &&
              (nc -= Math.floor((nc - a.graduatedMin) / Mf) * Mf);
          for (
            var mk = Ke[Dh], Ii = nc, Kn = 1e-6 * a.graduatedMax, Nd = 1;
            nc <= a.graduatedMax + Kn;
            Nd++
          ) {
            a: {
              for (var me = mk.length, tg = 0; tg < me; tg++) {
                var jf =
                    (nc - a.graduatedTickBase) % (mk[tg] * a.graduatedTickUnit),
                  Eh = 1e-6 * a.graduatedTickUnit;
                if (jf < Eh && jf > -Eh) {
                  var kf = !1;
                  break a;
                }
              }
              kf = !0;
            }
            if (
              kf &&
              (nc > a.graduatedMax && (nc = a.graduatedMax),
              null === mc.graduatedSkip ||
                (mc instanceof Qg && !mc.graduatedSkip(nc, mc)) ||
                (mc instanceof Cf && !mc.graduatedSkip(nc, mc))) &&
              ((lc = ((nc - a.graduatedMin) * v) / a.graduatedRange),
              lc > v && (lc = v),
              fc <= lc && lc <= gf)
            ) {
              for (var Od = B[Bd][gc], Le = w[Bd][gc]; Bd < w.length; ) {
                for (; lc > sg && gc < w[Bd].length - 1; )
                  gc++, (Od = B[Bd][gc]), (Le = w[Bd][gc]), (sg += Le);
                if (lc <= sg) break;
                Bd++;
                gc = 0;
                Od = B[Bd][gc];
                Le = w[Bd][gc];
                sg += Le;
              }
              var hc = u[Bd],
                Cd = hc[2 * gc],
                nk = hc[2 * gc + 1],
                ne = (lc - (sg - Le)) / Le,
                Fh = new I(
                  Cd + (hc[2 * gc + 2] - Cd) * ne + q / 2 - r.bounds.x,
                  nk + (hc[2 * gc + 3] - nk) * ne + q / 2 - r.bounds.y,
                );
              Fh.scale(h.scale, h.scale);
              a: {
                var qd = Od,
                  Nf = B[Bd];
                if (!(0.5005 > ne && 0.4995 < ne)) {
                  var Dd = qd;
                  0.5 > ne
                    ? 0 < gc
                      ? (Dd = Nf[gc - 1])
                      : J.ca(hc[0], hc[hc.length - 2]) &&
                        J.ca(hc[1], hc[hc.length - 1]) &&
                        (Dd = Nf[Nf.length - 1])
                    : 0.5 < ne &&
                      (gc + 1 < Nf.length
                        ? (Dd = Nf[gc + 1])
                        : J.ca(hc[0], hc[hc.length - 2]) &&
                          J.ca(hc[1], hc[hc.length - 1]) &&
                          (Dd = Nf[0]));
                  if (qd !== Dd) {
                    var ug = Math.abs(qd - Dd);
                    180 < ug &&
                      (qd < Dd ? (qd += 360) : (Dd += 360),
                      (ug = Math.abs(qd - Dd)));
                    if (5e-4 > ne || 0.9995 < ne) {
                      Od = ((qd + Dd) / 2) % 360;
                      break a;
                    }
                    if (10 > ug) {
                      var Gh = 1 - Math.abs(0.5 - ne);
                      Od = (qd * Gh + Dd * (1 - Gh)) % 360;
                      break a;
                    }
                  }
                }
                Od = qd;
              }
              if (mc instanceof Qg) {
                var bd = '';
                null !== mc.graduatedFunction
                  ? ((bd = mc.graduatedFunction(nc, mc)),
                    (bd = null !== bd && void 0 !== bd ? bd.toString() : ''))
                  : (bd = (+nc.toFixed(2)).toString());
                '' !== bd &&
                  pd.push({
                    Hl: Fh,
                    angle: Od,
                    text: bd,
                  });
              } else
                pd.push({
                  Hl: Fh,
                  angle: Od,
                });
            }
            nc = Ii + Nd * Mf;
          }
        }
      }
      a.graduatedMarks.push(pd);
    }
    Ga(B);
    var ib = a.graduatedMarks;
    if (null !== ib)
      for (var Ji = d.length, Vb = 0; Vb < Ji; Vb++) {
        var Va = d[Vb],
          Wb = ib[Vb];
        if (Va.visible && Va !== h && 0 !== Wb.length) {
          if (Va instanceof Cf) {
            var oe = a,
              Me = e,
              Of = Va.alignmentFocus;
            Of.Fc() && (Of = uc);
            var Ln = Va.angle;
            Va.Gb = 0;
            Va.measure(Infinity, Infinity, 0, 0);
            Va.Gb = Ln;
            var ok = Va.measuredBounds,
              Hh = ok.width,
              Pf = ok.height,
              vg = M.allocAt(0, 0, Hh, Pf),
              ic = I.alloc();
            ic.oi(vg, Of);
            M.free(vg);
            for (
              var Ed = -ic.x, rd = -ic.y, Fc = new M(), lf = Wb.length, Ih = 0;
              Ih < lf;
              Ih++
            )
              for (
                var mf = Wb[Ih],
                  pk = mf.Hl.x,
                  Jh = mf.Hl.y,
                  Oa = mf.angle,
                  cd = 0;
                4 > cd;
                cd++
              ) {
                switch (cd) {
                  case 0:
                    ic.h(Ed, rd);
                    break;
                  case 1:
                    ic.h(Ed + Hh, rd);
                    break;
                  case 2:
                    ic.h(Ed, rd + Pf);
                    break;
                  case 3:
                    ic.h(Ed + Hh, rd + Pf);
                }
                ic.rotate(Oa + Va.angle);
                ic.offset(pk, Jh);
                0 === Ih && 0 === cd ? Fc.h(ic.x, ic.y, 0, 0) : Fc.Me(ic);
                ic.offset(-pk, -Jh);
                ic.rotate(-Oa - Va.angle);
              }
            I.free(ic);
            null !== oe.graduatedBounds && oe.graduatedBounds.push(Fc);
            Zb(Me, Fc.x, Fc.y, Fc.width, Fc.height);
          } else if (Va instanceof Qg) {
            var Sc = a,
              qk = e;
            null === Sc.temporaryTextBlock &&
              (Sc.temporaryTextBlock = new Qg());
            var oc = Sc.temporaryTextBlock;
            Sm(oc, Va);
            var Ne = Va.alignmentFocus;
            Ne.Fc() && (Ne = uc);
            for (
              var Tc = Va.segmentOrientation,
                Kh = Va.segmentOffset,
                nf = new M(),
                Ki = 0,
                Lh = 0,
                Fd = 0,
                Qf = 0,
                of = 0,
                Mh = Wb.length,
                Oe = 0;
              Oe < Mh;
              Oe++
            ) {
              var Pd = Wb[Oe];
              Ki = Pd.Hl.x;
              Lh = Pd.Hl.y;
              Fd = Pd.angle;
              of = Qf = Va.angle;
              Tc !== $f &&
                ((of = Tc === Tm || Tc === Um ? Fd + Va.angle : Fd),
                (Qf = T.computeAngle(Tc, of)));
              oc.Gb = Qf;
              oc.text = Pd.text || '';
              oc.measure(Infinity, Infinity, 0, 0);
              var Pe = oc.measuredBounds,
                pe = oc.naturalBounds,
                Qe = pe.width,
                Rf = pe.height,
                sd = md.alloc();
              sd.reset();
              sd.translate(-Pe.x, -Pe.y);
              sd.scale(oc.scale, oc.scale);
              sd.rotate(of, Qe / 2, Rf / 2);
              (Tc !== Mm && Tc !== Nm) || sd.rotate(90, Qe / 2, Rf / 2);
              (Tc !== Om && Tc !== Pm) || sd.rotate(-90, Qe / 2, Rf / 2);
              Tc === Qm &&
                ((45 < Fd && 135 > Fd) || (225 < Fd && 315 > Fd)) &&
                sd.rotate(-Fd, Qe / 2, Rf / 2);
              var wg = M.allocAt(0, 0, Qe, Rf),
                Re = I.alloc();
              Re.oi(wg, Ne);
              sd.Fa(Re);
              var xg = -Re.x,
                Mn = -Re.y,
                qe = I.alloc();
              qe.assign(Kh);
              isNaN(qe.x) && (qe.x = Qe / 2 + 3);
              isNaN(qe.y) && (qe.y = -(Rf / 2 + 3));
              qe.rotate(Fd);
              Ki += qe.x + xg;
              Lh += qe.y + Mn;
              var Sf = new M(Ki, Lh, Pe.width, Pe.height),
                Li = new M(Pe.x, Pe.y, Pe.width, Pe.height),
                Nn = new M(pe.x, pe.y, pe.width, pe.height);
              Pd.Az = Qf;
              Pd.lineCount = oc.lineCount;
              Pd.lines = [oc.yb, oc.zh, oc.Te, oc.Ae, oc.Jc, oc.Wb, oc.qe];
              Pd.actualBounds = Sf;
              Pd.measuredBounds = Li;
              Pd.naturalBounds = Nn;
              0 === Oe ? nf.assign(Sf) : nf.Xc(Sf);
              I.free(qe);
              I.free(Re);
              M.free(wg);
              md.free(sd);
            }
            null !== Sc.graduatedBounds && Sc.graduatedBounds.push(nf);
            Zb(qk, nf.x, nf.y, nf.width, nf.height);
          }
          ij(Va, !1);
        }
      }
  };
  Rm.prototype.arrange = function(a, b, c) {
    if (null !== a.graduatedBounds) {
      var d = a.vb(),
        e = a.graduatedMarks;
      if (null !== e) {
        var f = a.graduatedBounds,
          g = 0,
          h = f[g];
        g++;
        null !== d && d.arrange(h.x - c.x, h.y - c.y, h.width, h.height);
        for (var k = b.length, l = 0; l < k; l++) {
          var m = b[l];
          h = e[l];
          m.visible &&
            m !== d &&
            0 !== h.length &&
            ((h = f[g]),
            g++,
            m.arrange(h.x - c.x, h.y - c.y, h.width, h.height));
        }
        a.graduatedBounds = null;
      }
    }
  };
  Rm.prototype.tc = function(a, b, c) {
    var d = c.Vi;
    c.Vi = !0;
    var e = a.naturalBounds,
      f = e.width;
    e = e.height;
    b.save();
    b.beginPath();
    b.rect(-1, -1, f + 1, e + 1);
    b.clip();
    f = a.vb();
    f.tc(b, c);
    e = a.uf() * c.scale;
    0 >= e && (e = 1);
    for (
      var g = f.actualBounds,
        h = a.R.s,
        k = a.graduatedMarks,
        l = h.length,
        m = 0;
      m < l;
      m++
    ) {
      var n = h[m],
        p = k[m],
        r = p.length;
      if (n.visible && n !== f && 0 !== p.length)
        if (n instanceof Cf) {
          if (
            !(
              2 >
                ((a.graduatedTickUnit *
                  n.interval *
                  f.geometry.flattenedTotalLength) /
                  a.graduatedRange) *
                  e && null === n.graduatedSkip
            )
          ) {
            var q = n.measuredBounds,
              u = n.strokeWidth * n.scale,
              w = n.alignmentFocus;
            w.Fc() && (w = uc);
            for (var v = 0; v < r; v++) {
              var z = p[v].Hl,
                y = p[v].angle,
                A = w,
                B = n.Bb;
              B.reset();
              B.translate(z.x + g.x, z.y + g.y);
              B.rotate(y + n.angle, 0, 0);
              B.translate(
                -q.width * A.x + A.offsetX + u / 2,
                -q.height * A.y + A.offsetY + u / 2,
              );
              B.scale(n.scale, n.scale);
              yl(n, !1);
              n.lh.set(n.Bb);
              n.yk = n.scale;
              zl(n, !1);
              n.tc(b, c);
              n.Bb.reset();
            }
          }
        } else if (n instanceof Qg)
          for (
            null === a.temporaryTextBlock && (a.temporaryTextBlock = new Qg()),
              q = a.temporaryTextBlock,
              Sm(q, n),
              n = 0;
            n < r;
            n++
          )
            (u = p[n]),
              u.actualBounds &&
                u.measuredBounds &&
                u.naturalBounds &&
                ((q.cc = u.text || ''),
                (q.Gb = u.Az || 0),
                (q.dd = u.lineCount || 0),
                (w = u.lines),
                void 0 !== w &&
                  ((q.yb = w[0]),
                  (q.zh = w[1]),
                  (q.Te = w[2]),
                  (q.Ae = w[3]),
                  (q.Jc = w[4]),
                  (q.Wb = w[5]),
                  (q.qe = w[6])),
                u.naturalBounds && (q.bc = u.naturalBounds),
                u.actualBounds &&
                  ((w = u.actualBounds),
                  q.arrange(w.x, w.y, w.width, w.height)),
                (w = u.actualBounds),
                q.arrange(w.x, w.y, w.width, w.height),
                (v = u.measuredBounds),
                (u = u.naturalBounds),
                (z = q.Bb),
                z.reset(),
                z.translate(w.x + g.x, w.y + g.y),
                z.translate(-v.x, -v.y),
                q.Qn(z, u.x, u.y, u.width, u.height),
                yl(q, !1),
                q.lh.set(q.Bb),
                (q.yk = q.scale),
                zl(q, !1),
                q.tc(b, c));
    }
    c.Vi = d;
    b.restore();
    b.Oc(!0);
  };

  function W(a, b) {
    Y.call(this);
    this.qa = null;
    if (void 0 === a) this.qa = W.Position;
    else if ('string' === typeof a) {
      var c = Kl.I(a);
      null !== c && (this.qa = c);
    } else
      a instanceof Ll ? (this.qa = a) : a && ((this.qa = W.Position), (b = a));
    null === this.qa &&
      C('Panel type not specified or PanelLayout not loaded: ' + a);
    this.o = this.o | 4194304 | (this.qa === W.Grid ? 1048576 : 0);
    this.R = new E();
    this.ub = qc;
    this.Bm = Wc;
    this.Kf = Xk;
    this.Qg = null;
    this.Pe = '';
    this.bg = new M(NaN, NaN, NaN, NaN);
    this.T = this.F = null;
    this.$n = ng;
    this.Qm = Kb;
    this.Rm = qb;
    this.qb = this.oa = null;
    this.fn = NaN;
    this.$d = this.xh = null;
    b && Object.assign(this, b);
  }
  la(W, Y);
  W.prototype.cloneProtected = function(a) {
    Y.prototype.cloneProtected.call(this, a);
    a.qa = this.qa;
    a.ub = this.ub.J();
    a.Bm = this.Bm.J();
    a.Kf = this.Kf;
    a.Pe = this.Pe;
    a.bg.assign(this.bg);
    null !== this.T && (a.T = this.T.copy(a));
    a.$n = this.$n;
    a.Qm = this.Qm.J();
    a.Rm = this.Rm.J();
    null !== this.oa && (a.oa = this.oa.copy());
    a.qb = this.qb;
    a.fn = this.fn;
    a.xh = this.xh;
  };
  W.prototype.qf = function(a) {
    Y.prototype.qf.call(this, a);
    a.R = this.R;
    for (var b = a.R.s, c = b.length, d = 0; d < c; d++) b[d].Uf = a;
    a.Qg = null;
  };
  W.prototype.copy = function() {
    var a = Y.prototype.copy.call(this);
    if (null !== a) {
      for (var b = this.R.s, c = b.length, d = 0; d < c; d++) {
        var e = b[d].copy();
        e.ni(a);
        e.jj = null;
        var f = a.R,
          g = f.count;
        f.Cb(g, e);
        f = a.part;
        if (null !== f) {
          f.Kh = null;
          null !== e.portId && f instanceof V && (f.He = !0);
          var h = a.diagram;
          (null !== h && h.undoManager.isUndoingRedoing) ||
            f.bb(fe, 'elements', a, null, e, null, g);
        }
      }
      return a;
    }
    return null;
  };
  t = W.prototype;
  t.toString = function() {
    return 'Panel(' + this.type.name + ')#' + cb(this);
  };
  t.wn = function(a) {
    Y.prototype.wn.call(this, a);
    for (var b = this.R.s, c = b.length, d = 0; d < c; d++) b[d].wn(a);
  };
  t.ai = function(a, b) {
    if (this.qa === W.Grid) a.Pc(), this.qa.tc(this, a, b);
    else if (this.qa === W.Graduated) a.Pc(), this.qa.tc(this, a, b);
    else {
      if (this.qa === W.Table) {
        a.Pc();
        a.lineCap = 'butt';
        var c = 0 < this.rowCount ? this.rowDefs : null,
          d = 0 < this.columnCount ? this.colDefs : null;
        null !== c && Vm(this, a, !0, c, !0);
        null !== d && Vm(this, a, !1, d, !0);
        null !== c && Wm(this, a, !0, c);
        null !== d && Wm(this, a, !1, d);
        null !== c && Vm(this, a, !0, c, !1);
        null !== d && Vm(this, a, !1, d, !1);
      }
      (c = this.isClipping && this.qa === W.Spot) && a.save();
      d = this.vb();
      for (var e = this.R.s, f = e.length, g = 0; g < f; g++) {
        var h = e[g];
        c && h === d && (a.clipInsteadOfFill = !0);
        h.tc(a, b);
        c && h === d && (a.clipInsteadOfFill = !1);
      }
      c && (a.restore(), a.Oc(!0));
    }
  };

  function Wm(a, b, c, d) {
    for (
      var e = d.length, f = a.actualBounds, g = a.naturalBounds, h = !0, k = 0;
      k < e;
      k++
    ) {
      var l = d[k];
      if (void 0 !== l && 0 !== l.actual)
        if (h) h = !1;
        else {
          if (c) {
            if (l.position > f.height) continue;
          } else if (l.position > f.width) continue;
          var m = l.separatorStrokeWidth;
          isNaN(m) &&
            (m = c
              ? a.defaultRowSeparatorStrokeWidth
              : a.defaultColumnSeparatorStrokeWidth);
          var n = l.separatorStroke;
          null === n &&
            (n = c
              ? a.defaultRowSeparatorStroke
              : a.defaultColumnSeparatorStroke);
          if (0 !== m && null !== n) {
            gi(a, b, n, !1, !1, g, f);
            n = !1;
            var p = l.separatorDashArray;
            null === p &&
              (p = c
                ? a.defaultRowSeparatorDashArray
                : a.defaultColumnSeparatorDashArray);
            null !== p && ((n = !0), b.Gr(p, 0));
            b.beginPath();
            p = l.position + m;
            c
              ? p > f.height && (m -= p - f.height)
              : p > f.width && (m -= p - f.width);
            l = l.position + m / 2;
            b.lineWidth = m;
            m = a.ub;
            c
              ? ((l += m.top),
                (p = f.width - m.right),
                b.moveTo(m.left, l),
                b.lineTo(p, l))
              : ((l += m.left),
                (p = f.height - m.bottom),
                b.moveTo(l, m.top),
                b.lineTo(l, p));
            b.stroke();
            n && b.Er();
          }
        }
    }
  }

  function Vm(a, b, c, d, e) {
    for (
      var f = d.length,
        g = a.actualBounds,
        h = a.naturalBounds,
        k = Xm(a, !0),
        l = Xm(a, !1),
        m = 0;
      m < f;
      m++
    ) {
      var n = d[m];
      if (
        void 0 !== n &&
        null !== n.background &&
        n.coversSeparators !== e &&
        0 !== n.actual
      ) {
        var p = c ? g.height : g.width;
        if (!(n.position > p)) {
          var r = n.Qc(),
            q = n.separatorStrokeWidth;
          isNaN(q) &&
            (q = c
              ? a.defaultRowSeparatorStrokeWidth
              : a.defaultColumnSeparatorStrokeWidth);
          var u = n.separatorStroke;
          null === u &&
            (u = c
              ? a.defaultRowSeparatorStroke
              : a.defaultColumnSeparatorStroke);
          if (null === u || n.index === (c ? k : l)) q = 0;
          r -= q;
          q = n.position + q;
          r += n.actual;
          q + r > p && (r = p - q);
          0 >= r ||
            ((p = a.ub),
            gi(a, b, n.background, !0, !1, h, g),
            c
              ? b.fillRect(p.left, q + p.top, g.width - (p.left + p.right), r)
              : b.fillRect(
                  q + p.left,
                  p.top,
                  r,
                  g.height - (p.top + p.bottom),
                ));
        }
      }
    }
  }

  function Xm(a, b) {
    for (var c = b ? a.rowCount : a.columnCount, d = 0; d < c; d++) {
      var e = b ? a.rowDefs[d] : a.colDefs[d];
      if (void 0 !== e) return e.index;
    }
    return 0;
  }

  function Sj(a) {
    return 'LineV' === a || 'BarV' === a;
  }
  t.Kj = function(a, b, c, d, e) {
    var f = this.ke(),
      g = this.transform,
      h = 1 / (g.m11 * g.m22 - g.m12 * g.m21),
      k = g.m22 * h,
      l = -g.m12 * h,
      m = -g.m21 * h,
      n = g.m11 * h,
      p = h * (g.m21 * g.dy - g.m22 * g.dx),
      r = h * (g.m12 * g.dx - g.m11 * g.dy);
    if (null !== this.areaBackground)
      return (
        (g = this.actualBounds),
        J.wf(g.left, g.top, g.right, g.bottom, a, b, c, d, e)
      );
    if (null !== this.background)
      return (
        (f = a * k + b * m + p),
        (h = a * l + b * n + r),
        (a = c * k + d * m + p),
        (k = c * l + d * n + r),
        e.h(0, 0),
        (c = this.naturalBounds),
        (f = J.wf(0, 0, c.width, c.height, f, h, a, k, e)),
        e.transform(g),
        f
      );
    f || ((k = 1), (m = l = 0), (n = 1), (r = p = 0));
    h = a * k + b * m + p;
    a = a * l + b * n + r;
    k = c * k + d * m + p;
    c = c * l + d * n + r;
    e.h(k, c);
    d = (k - h) * (k - h) + (c - a) * (c - a);
    l = !1;
    n = this.R.s;
    r = n.length;
    m = I.alloc();
    p = null;
    b = Infinity;
    var q = null,
      u = this.isClipping && this.qa === W.Spot;
    u &&
      ((q = I.alloc()),
      (p = this.vb()),
      (l = p.Kj(h, a, k, c, q)) &&
        (b = (h - q.x) * (h - q.x) + (a - q.y) * (a - q.y)));
    for (var w = 0; w < r; w++) {
      var v = n[w];
      v.visible &&
        v !== p &&
        v.Kj(h, a, k, c, m) &&
        ((l = !0),
        (v = (h - m.x) * (h - m.x) + (a - m.y) * (a - m.y)),
        v < d && ((d = v), e.set(m)));
    }
    u && (b > d && e.set(q), I.free(q));
    I.free(m);
    f && e.transform(g);
    return l;
  };
  t.w = function(a) {
    if (!nj(this)) {
      Y.prototype.w.call(this, a);
      a = null;
      if (this.qa === W.Auto || this.qa === W.Link) a = this.vb();
      for (var b = this.R.s, c = b.length, d = 0; d < c; d++) {
        var e = b[d];
        (e === a || e.isPanelMain) && e.w(!0);
        if (!e.desiredSize.v()) {
          var f = il(e, !1);
          (e instanceof jg || e instanceof W || e instanceof Qg || f !== lg) &&
            e.w(!0);
        }
      }
    }
  };
  t.Mj = function() {
    if (!nj(this)) {
      ij(this, !0);
      jl(this, !0);
      for (var a = this.R.s, b = a.length, c = 0; c < b; c++) a[c].Mj();
    }
  };
  t.Jk = function() {
    if ((0 !== (this.o & 2048)) === !1) {
      yl(this, !0);
      zl(this, !0);
      for (var a = this.R.s, b = a.length, c = 0; c < b; c++) a[c].Iu();
    }
  };
  t.Iu = function() {
    zl(this, !0);
    for (var a = this.R.s, b = a.length, c = 0; c < b; c++) a[c].Iu();
  };
  t.El = function(a, b, c, d) {
    var e = this.bg;
    e.h(0, 0, 0, 0);
    var f = this.desiredSize,
      g = this.minSize;
    void 0 === c && ((c = g.width), (d = g.height));
    c = Math.max(c, g.width);
    d = Math.max(d, g.height);
    var h = this.maxSize;
    isNaN(f.width) || (a = Math.min(f.width, h.width));
    isNaN(f.height) || (b = Math.min(f.height, h.height));
    a = Math.max(c, a);
    b = Math.max(d, b);
    var k = this.ub;
    a = Math.max(a - k.left - k.right, 0);
    b = Math.max(b - k.top - k.bottom, 0);
    var l = this.R.s;
    0 !== l.length && this.qa.measure(this, a, b, l, e, c, d);
    a = e.width + k.left + k.right;
    k = e.height + k.top + k.bottom;
    isFinite(f.width) && (a = f.width);
    isFinite(f.height) && (k = f.height);
    a = Math.min(h.width, a);
    k = Math.min(h.height, k);
    a = Math.max(g.width, a);
    k = Math.max(g.height, k);
    a = Math.max(c, a);
    k = Math.max(d, k);
    Qb(e, a, k);
    Qb(this.naturalBounds, a, k);
    this.ve(0, 0, a, k);
  };
  t.vb = function() {
    if (null === this.Qg) {
      var a = this.R.s,
        b = a.length;
      if (0 === b) return null;
      for (var c = 0; c < b; c++) {
        var d = a[c];
        if (!0 === d.isPanelMain) return (this.Qg = d);
      }
      this.Qg = a[0];
    }
    return this.Qg;
  };

  function um(a) {
    return null !== a.part ? a.part.locationObject : null;
  }
  t.Vg = function(a, b, c, d) {
    var e = this.R.s;
    this.actualBounds.h(a, b, c, d);
    if (0 !== e.length) {
      if (!this.desiredSize.v()) {
        a = il(this, !0);
        var f = this.measuredBounds;
        b = f.width;
        f = f.height;
        var g = this.Ag,
          h = g.left + g.right;
        g = g.top + g.bottom;
        b === c && f === d && (a = lg);
        switch (a) {
          case lg:
            if (b > c || f > d)
              this.w(), this.measure(b > c ? c : b, f > d ? d : f, 0, 0);
            break;
          case td:
            this.w(!0);
            this.measure(c + h, d + g, 0, 0);
            break;
          case Vk:
            this.w(!0);
            this.measure(c + h, f + g, 0, 0);
            break;
          case Wk:
            this.w(!0), this.measure(b + h, d + g, 0, 0);
        }
      }
      this.qa.arrange(this, e, this.bg);
    }
  };
  t.Xg = function(a) {
    var b = this.naturalBounds,
      c = um(this);
    if ($b(0, 0, b.width, b.height, a.x, a.y)) {
      b = this.R.s;
      for (var d = b.length, e = I.allocAt(0, 0); d--; ) {
        var f = b[d];
        if (f.visible || f === c)
          if ((yb(e.set(a), f.transform), f.ba(e))) return I.free(e), !0;
      }
      I.free(e);
      return null === this.Yb && null === this.areaBackground ? !1 : !0;
    }
    return !1;
  };
  t.Hr = function(a) {
    if (this.bindingId === a) return this;
    for (var b = this.R.s, c = b.length, d = 0; d < c; d++) {
      var e = b[d].Hr(a);
      if (null !== e) return e;
    }
    return null;
  };
  t.$l = function(a, b) {
    b(this, a);
    if (a instanceof W) {
      a = a.R.s;
      for (var c = a.length, d = 0; d < c; d++) this.$l(a[d], b);
    }
  };

  function Aj(a, b) {
    Ym(a, a, b);
  }

  function Ym(a, b, c) {
    c(b);
    b = b.R.s;
    for (var d = b.length, e = 0; e < d; e++) {
      var f = b[e];
      f instanceof W && Ym(a, f, c);
    }
  }

  function Zm(a, b) {
    $m(a, a, b);
  }

  function $m(a, b, c) {
    c(b);
    if (b instanceof W) {
      b = b.R.s;
      for (var d = b.length, e = 0; e < d; e++) $m(a, b[e], c);
    }
  }
  t.vl = function(a) {
    return an(this, this, a);
  };

  function an(a, b, c) {
    if (c(b)) return b;
    if (b instanceof W) {
      b = b.R.s;
      for (var d = b.length, e = 0; e < d; e++) {
        var f = an(a, b[e], c);
        if (null !== f) return f;
      }
    }
    return null;
  }
  t.fb = function(a) {
    if (this.name === a) return this;
    var b = this.R.s,
      c = b.length;
    (null === this.xh && null === this.itemTemplateMap) || (c = bn(this));
    for (var d = 0; d < c; d++) {
      var e = b[d];
      if (e instanceof W) {
        var f = e.fb(a);
        if (null !== f) return f;
      }
      if (e.name === a) return e;
    }
    return null;
  };

  function cn(a) {
    a = a.R.s;
    for (var b = a.length, c = 0, d = 0; d < b; d++) {
      var e = a[d];
      e instanceof W
        ? (c = Math.max(c, cn(e)))
        : e instanceof Cf &&
          (c = Math.max(c, (e.ag / 2) * e.strokeMiterLimit * e.uf()));
    }
    return c;
  }
  t.ke = function() {
    return !(this.type === W.TableRow || this.type === W.TableColumn);
  };
  t.ec = function(a, b, c) {
    if (!1 === this.pickable) return null;
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    if (oj(this)) return null;
    var d = this.naturalBounds,
      e = 1 / this.uf(),
      f = this.ke(),
      g = f ? a : yb(I.allocAt(a.x, a.y), this.transform),
      h = this.diagram,
      k = 10,
      l = 5;
    null !== h && ((k = h.yl('extraTouchArea')), (l = k / 2));
    if ($b(-(l * e), -(l * e), d.width + k * e, d.height + k * e, g.x, g.y)) {
      if (!this.isAtomic) {
        e = this.R.s;
        var m = e.length;
        h = I.alloc();
        l = (k = this.isClipping && this.qa === W.Spot) ? this.vb() : null;
        if (k && (l.ke() ? yb(h.set(a), l.transform) : h.set(a), !l.ba(h)))
          return I.free(h), f || I.free(g), null;
        for (var n = um(this); m--; ) {
          var p = e[m];
          if (p.visible || p === n)
            if (
              (p.ke() ? yb(h.set(a), p.transform) : h.set(a), !k || p !== l)
            ) {
              var r = null;
              p instanceof W
                ? (r = p.ec(h, b, c))
                : !0 === p.pickable && p.ba(h) && (r = p);
              if (
                null !== r &&
                (null !== b && (r = b(r)), null !== r && (null === c || c(r)))
              )
                return I.free(h), f || I.free(g), r;
            }
        }
        I.free(h);
      }
      if (null === this.background && null === this.areaBackground)
        return f || I.free(g), null;
      a = $b(0, 0, d.width, d.height, g.x, g.y) ? this : null;
      f || I.free(g);
      return a;
    }
    f || I.free(g);
    return null;
  };
  t.di = function(a, b, c, d) {
    if (!1 === this.pickable) return !1;
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    var e = this.naturalBounds,
      f = this.ke(),
      g = f ? a : yb(I.allocAt(a.x, a.y), this.transform);
    e = $b(0, 0, e.width, e.height, g.x, g.y);
    if (this.type === W.TableRow || this.type === W.TableColumn || e) {
      if (!this.isAtomic) {
        for (
          var h = this.R.s, k = h.length, l = I.alloc(), m = um(this);
          k--;

        ) {
          var n = h[k];
          if (n.visible || n === m) {
            n.ke() ? yb(l.set(a), n.transform) : l.set(a);
            var p = n;
            n = n instanceof W ? n : null;
            (null !== n ? n.di(l, b, c, d) : p.ba(l)) &&
              !1 !== p.pickable &&
              (null !== b && (p = b(p)),
              null === p || (null !== c && !c(p)) || d.add(p));
          }
        }
        I.free(l);
      }
      f || I.free(g);
      return e && (null !== this.background || null !== this.areaBackground);
    }
    f || I.free(g);
    return !1;
  };
  t.tf = function(a, b, c, d, e, f) {
    if (!1 === this.pickable) return !1;
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    var g = f;
    void 0 === f && ((g = md.alloc()), g.reset());
    g.multiply(this.transform);
    if (this.Wg(a, g)) return dn(this, b, c, e), void 0 === f && md.free(g), !0;
    if (this.Sc(a, g)) {
      if (!this.isAtomic)
        for (var h = um(this), k = this.R.s, l = k.length; l--; ) {
          var m = k[l];
          if (m.visible || m === h) {
            var n = m.actualBounds,
              p = this.naturalBounds;
            if (
              !(
                n.x > p.width ||
                n.y > p.height ||
                0 > n.x + n.width ||
                0 > n.y + n.height
              )
            ) {
              n = m;
              m = m instanceof W ? m : null;
              p = md.alloc();
              p.set(g);
              if (null !== m ? m.tf(a, b, c, d, e, p) : hl(n, a, d, p))
                null !== b && (n = b(n)),
                  null === n || (null !== c && !c(n)) || e.add(n);
              md.free(p);
            }
          }
        }
      void 0 === f && md.free(g);
      return d;
    }
    void 0 === f && md.free(g);
    return !1;
  };

  function dn(a, b, c, d) {
    for (var e = a.R.s, f = e.length; f--; ) {
      var g = e[f];
      if (g.visible) {
        var h = g.actualBounds,
          k = a.naturalBounds;
        h.x > k.width ||
          h.y > k.height ||
          0 > h.x + h.width ||
          0 > h.y + h.height ||
          (g instanceof W && dn(g, b, c, d),
          null !== b && (g = b(g)),
          null === g || (null !== c && !c(g)) || d.add(g));
      }
    }
  }
  t.hg = function(a, b, c, d, e, f) {
    if (!1 === this.pickable) return !1;
    void 0 === c && (c = null);
    void 0 === d && (d = null);
    var g = this.naturalBounds,
      h = this.ke(),
      k = h ? a : yb(I.allocAt(a.x, a.y), this.transform),
      l = h ? b : yb(I.allocAt(b.x, b.y), this.transform),
      m = k.rf(l),
      n =
        (0 < k.x && k.x < g.width && 0 < k.y && k.y < g.height) ||
        zb(k.x, k.y, 0, 0, 0, g.height) <= m ||
        zb(k.x, k.y, 0, g.height, g.width, g.height) <= m ||
        zb(k.x, k.y, g.width, g.height, g.width, 0) <= m ||
        zb(k.x, k.y, g.width, 0, 0, 0) <= m;
    g =
      k.td(0, 0) <= m &&
      k.td(0, g.height) <= m &&
      k.td(g.width, 0) <= m &&
      k.td(g.width, g.height) <= m;
    h || (I.free(k), I.free(l));
    if (n) {
      if (!this.isAtomic) {
        k = I.alloc();
        l = I.alloc();
        m = um(this);
        for (var p = this.R.s, r = p.length; r--; ) {
          var q = p[r];
          if (q.visible || q === m) {
            var u = q.actualBounds,
              w = this.naturalBounds;
            if (
              !h ||
              !(
                u.x > w.width ||
                u.y > w.height ||
                0 > u.x + u.width ||
                0 > u.y + u.height
              )
            )
              if (
                (q.ke()
                  ? ((u = q.transform), yb(k.set(a), u), yb(l.set(b), u))
                  : (k.set(a), l.set(b)),
                (u = q),
                (q = q instanceof W ? q : null),
                null !== q ? q.hg(k, l, c, d, e, f) : u.Vw(k, l, e))
              )
                null !== c && (u = c(u)),
                  null === u || (null !== d && !d(u)) || f.add(u);
          }
        }
        I.free(k);
        I.free(l);
      }
      return e ? n : g;
    }
    return !1;
  };

  function Am(a) {
    var b = null;
    a instanceof Cf &&
      ((b = a.spot1),
      b === Wc && (b = null),
      (a = a.geometry),
      null !== a && null === b && (b = a.spot1));
    null === b && (b = tc);
    return b;
  }

  function Bm(a) {
    var b = null;
    a instanceof Cf &&
      ((b = a.spot2),
      b === Wc && (b = null),
      (a = a.geometry),
      null !== a && null === b && (b = a.spot2));
    null === b && (b = Cc);
    return b;
  }
  t.add = function(a) {
    for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
    for (c = 0; c < b.length; c++) this.Cb(this.R.count, b[c]);
    return this;
  };
  t.K = function(a) {
    return this.R.K(a);
  };
  t.Cb = function(a, b) {
    b instanceof U &&
      C('Cannot add a Part to a Panel: ' + b + '; use a Panel instead');
    if (this === b || this.jg(b))
      this === b && C('Cannot make a Panel contain itself: ' + this.toString()),
        C(
          'Cannot make a Panel indirectly contain itself: ' +
            this.toString() +
            ' already contains ' +
            b.toString(),
        );
    var c = b.panel;
    null !== c &&
      c !== this &&
      C(
        'Cannot add a GraphObject that already belongs to another Panel to this Panel: ' +
          b.toString() +
          ', already contained by ' +
          c.toString() +
          ', cannot be shared by this Panel: ' +
          this.toString(),
      );
    this.qa !== W.Grid ||
      b instanceof Cf ||
      C('Can only add Shapes to a Grid Panel, not: ' + b);
    this.qa !== W.Graduated ||
      b instanceof Cf ||
      b instanceof Qg ||
      C('Can only add Shapes or TextBlocks to a Graduated Panel, not: ' + b);
    b.ni(this);
    b.jj = null;
    if (null !== this.itemArray) {
      var d = b.data;
      null !== d &&
        'object' === typeof d &&
        (null === this.$d && (this.$d = new pb()), this.$d.add(d, b));
    }
    var e = this.R;
    d = -1;
    if (c === this) {
      for (var f = -1, g = this.R.s, h = g.length, k = 0; k < h; k++)
        if (g[k] === b) {
          f = k;
          break;
        }
      if (-1 !== f) {
        if (f === a || (f + 1 >= e.count && a >= e.count)) return;
        e.mb(f);
        d = f;
      } else
        C(
          'element ' +
            b.toString() +
            ' has panel ' +
            c.toString() +
            ' but is not contained by it.',
        );
    }
    if (0 > a || a > e.count) a = e.count;
    e.Cb(a, b);
    if (0 === a || b.isPanelMain) this.Qg = null;
    nj(this) || this.w();
    b.w(!1);
    null !== b.portId
      ? (this.He = !0)
      : b instanceof W && !0 === b.He && (this.He = !0);
    this.graduatedIntervals = null;
    this.yf() || en(this, b, !1);
    c = this.part;
    null !== c &&
      ((c.Kh = null),
      (c.Sf = NaN),
      this.He && c instanceof V && (c.He = !0),
      c.He && c instanceof V && (c.sc = null),
      (e = this.diagram),
      (null !== e && e.undoManager.isUndoingRedoing) ||
        (-1 !== d && c.bb(ge, 'elements', this, b, null, d, null),
        c.bb(fe, 'elements', this, null, b, null, a)));
  };

  function fn(a, b) {
    a.o = b ? a.o | 16777216 : a.o & -16777217;
  }
  t.remove = function(a) {
    for (var b = this.R.s, c = b.length, d = -1, e = 0; e < c; e++)
      if (b[e] === a) {
        d = e;
        break;
      }
    -1 !== d && this.lc(d, !0);
  };
  t.mb = function(a) {
    0 <= a && this.lc(a, !0);
  };
  t.lc = function(a, b) {
    var c = this.R,
      d = c.K(a);
    d.jj = null;
    d.ni(null);
    if (null !== this.$d) {
      var e = d.data;
      'object' === typeof e && this.$d.remove(e);
    }
    c.mb(a);
    ij(this, !1);
    this.w();
    this.Qg === d && (this.Qg = null);
    this.graduatedIntervals = null;
    var f = this.part;
    null !== f &&
      ((f.Kh = null),
      (f.Sf = NaN),
      f.Rb(),
      f instanceof V &&
        (d instanceof W
          ? d.$l(d, function(a, c) {
              Ql(f, c, b);
            })
          : Ql(f, d, b)),
      (c = this.diagram),
      (null !== c && c.undoManager.isUndoingRedoing) ||
        f.bb(ge, 'elements', this, d, null, a, null));
  };
  W.prototype.getRowDefinition = function(a) {
    0 > a && wa(a, '>= 0', W, 'getRowDefinition:idx');
    a = Math.round(a);
    var b = this.rowDefs;
    if (void 0 === b[a]) {
      var c = new Oj();
      c.ni(this);
      c.isRow = !0;
      c.index = a;
      b[a] = c;
      this.bb(fe, 'rowdefs', this, null, c, null, a);
    }
    return b[a];
  };
  W.prototype.Vz = function(a) {
    0 > a && wa(a, '>= 0', W, 'removeRowDefinition:idx');
    if (0 !== this.rowCount) {
      a = Math.round(a);
      var b = this.rowDefs,
        c = b[a];
      if (c) {
        b[a] = void 0;
        for (var d = b.length - 1; 0 <= d && void 0 === b[d--]; ) b.length--;
        this.bb(ge, 'rowdefs', this, c, null, a, null);
        this.w();
      }
    }
  };

  function Pj(a, b, c) {
    var d = a.rowDefs;
    if (!(0 > b)) {
      d[b] = c instanceof Oj ? c : void 0;
      if (!c) for (b = d.length - 1; 0 <= b && void 0 === d[b--]; ) d.length--;
      a.w();
    }
  }
  W.prototype.getColumnDefinition = function(a) {
    0 > a && wa(a, '>= 0', W, 'getColumnDefinition:idx');
    a = Math.round(a);
    var b = this.colDefs;
    if (void 0 === b[a]) {
      var c = new Oj();
      c.ni(this);
      c.isRow = !1;
      c.index = a;
      b[a] = c;
      this.bb(fe, 'coldefs', this, null, c, null, a);
    }
    return b[a];
  };
  t = W.prototype;
  t.Qz = function(a) {
    0 > a && wa(a, '>= 0', W, 'removeColumnDefinition:idx');
    if (0 !== this.columnCount) {
      a = Math.round(a);
      var b = this.colDefs,
        c = b[a];
      if (c) {
        b[a] = void 0;
        for (var d = b.length - 1; 0 <= d && void 0 === b[d--]; ) b.length--;
        this.bb(ge, 'coldefs', this, c, null, a, null);
        this.w();
      }
    }
  };

  function Qj(a, b, c) {
    var d = a.colDefs;
    if (!(0 > b)) {
      d[b] = c instanceof Oj ? c : void 0;
      if (!c) for (b = d.length - 1; 0 <= b && void 0 === d[b--]; ) d.length--;
      a.w();
    }
  }
  t.Wy = function(a) {
    if (0 > a || this.type !== W.Table || 0 === this.rowCount) return -1;
    for (
      var b = 0, c = this.rowDefs, d = c.length, e = this.topIndex;
      e < d;
      e++
    ) {
      var f = c[e];
      if (void 0 !== f && ((b += f.total), a < b)) break;
    }
    return e;
  };
  t.Oy = function(a) {
    if (0 > a || this.type !== W.Table || 0 === this.columnCount) return -1;
    for (
      var b = 0, c = this.colDefs, d = c.length, e = this.leftIndex;
      e < d;
      e++
    ) {
      var f = c[e];
      if (void 0 !== f && ((b += f.total), a < b)) break;
    }
    return e;
  };
  t.mz = function(a, b) {
    void 0 === b && (b = new I(NaN, NaN));
    if (this.type !== W.Graduated) return b.h(NaN, NaN), b;
    a = Math.min(Math.max(a, this.graduatedMin), this.graduatedMax);
    var c = this.vb();
    c.geometry.Bu((a - this.graduatedMin) / this.graduatedRange, b);
    return c.transform.Fa(b);
  };
  t.nz = function(a) {
    if (this.type !== W.Graduated) return NaN;
    var b = this.vb();
    b.transform.Ld(a);
    return b.geometry.Zw(a) * this.graduatedRange + this.graduatedMin;
  };

  function Gl(a) {
    a = a.allBindings;
    return null !== a && a._isFrozen;
  }

  function kg(a) {
    var b = a.allBindings;
    if (null === b)
      null !== a.data && C('Template cannot have .data be non-null: ' + a),
        (a.allBindings = b = new E());
    else if (b._isFrozen) return;
    var c = new E();
    fn(a, !1);
    a.$l(a, function(a, d) {
      d.ih();
      var e = d.localBindings;
      if (null !== e)
        for (Dl(d, !1), e = e.iterator; e.next(); ) {
          var f = e.value;
          f.mode === gn && Dl(d, !0);
          var g = f.sourceName;
          null !== g &&
            ('/' === g && fn(a, !0),
            (g = gl(f, a, d)),
            null !== g &&
              (c.add(g),
              null === g.srcBindings && (g.srcBindings = new E()),
              g.srcBindings.add(f)));
          b.add(f);
        }
      if (d instanceof W && d.type === W.Table) {
        if (0 < d.rowCount)
          for (a = d.rowDefs, e = a.length, f = 0; f < e; f++)
            if (((g = a[f]), void 0 !== g && null !== g.Vd))
              for (var h = g.Vd.iterator; h.next(); ) {
                var k = h.value;
                k.sd = g;
                k.Wn = 2;
                k.ll = g.index;
                b.add(k);
              }
        if (0 < d.columnCount)
          for (d = d.colDefs, a = d.length, e = 0; e < a; e++)
            if (((f = d[e]), void 0 !== f && null !== f.Vd))
              for (g = f.Vd.iterator; g.next(); )
                (h = g.value),
                  (h.sd = f),
                  (h.Wn = 1),
                  (h.ll = f.index),
                  b.add(h);
      }
    });
    for (var d = c.iterator; d.next(); ) {
      var e = d.value;
      if (null !== e.srcBindings) {
        Dl(e, !0);
        for (var f = e.srcBindings.iterator; f.next(); ) {
          var g = f.value;
          null === e.localBindings && (e.localBindings = new E());
          e.localBindings.add(g);
        }
      }
      e.srcBindings = null;
    }
    for (d = b.iterator; d.next(); )
      if (((e = d.value), (f = e.sd), null !== f)) {
        e.sd = null;
        var h = e.targetProperty,
          k = h.indexOf('.');
        0 < k &&
          f instanceof W &&
          ((g = h.substring(0, k)),
          (h = h.substr(k + 1)),
          (k = f.fb(g)),
          null !== k
            ? ((f = k), (e.targetProperty = h))
            : xa(
                'Warning: unable to find GraphObject named "' +
                  g +
                  '" for Binding: ' +
                  e.toString(),
              ));
        f instanceof Oj
          ? ((g = cb(f.panel)),
            (e.ti = void 0 === g ? -1 : g),
            (f.panel.bindingId = e.ti))
          : f instanceof Y
          ? ((g = cb(f)), (e.ti = void 0 === g ? -1 : g), (f.bindingId = e.ti))
          : C('Unknown type of binding target: ' + f);
      }
    b.freeze();
    a instanceof U && a.Tc() && a.Za();
  }
  t.By = function(a) {
    void 0 === a && (a = !1);
    var b = this.copy();
    Zm(b, function(a) {
      a instanceof W && ((a.allBindings = null), (a.qb = null));
      var b = a.localBindings;
      null !== b &&
        ((a.localBindings = null),
        b.each(function(b) {
          a.bind(b.copy());
        }));
      b = a.animationTriggers;
      null !== b &&
        ((a.animationTriggers = null),
        b.each(function(b) {
          a.mv(b.value.copy());
        }));
    });
    a && kg(b);
    return b;
  };
  t.Ka = function(a) {
    var b = this.allBindings;
    if (null !== b)
      for (void 0 === a && (a = ''), b = b.iterator; b.next(); ) {
        var c = b.value,
          d = c.sourceProperty;
        if ('' === a || '' === d || d === a)
          if (((d = c.targetProperty), null !== c.converter || '' !== d)) {
            d = this.data;
            var e = c.sourceName;
            if (null !== e)
              if ('' === e) d = this;
              else if ('/' === e) d = this;
              else if ('.' === e) d = this;
              else if ('..' === e) d = this;
              else {
                if (((d = this.fb(e)), null === d)) continue;
              }
            else if (c.isToModel)
              if (((d = this.diagram), null !== d)) d = d.model.modelData;
              else continue;
            var f = this,
              g = c.ti;
            if (-1 !== g) {
              if (((f = this.Hr(g)), null === f)) continue;
            } else null !== c.sd && (f = c.sd);
            '/' === e
              ? (d = f.part)
              : '.' === e
              ? (d = f)
              : '..' === e && (d = f.panel);
            e = c.Wn;
            if (0 !== e) {
              if (!(f instanceof W)) continue;
              1 === e
                ? (f = f.getColumnDefinition(c.ll))
                : 2 === e && (f = f.getRowDefinition(c.ll));
            }
            void 0 !== f && c.pv(f, d);
          }
      }
  };
  t.Uw = function(a) {
    return void 0 === a || null === a || null === this.$d ? null : this.$d.I(a);
  };

  function hn(a, b) {
    a = a.R.s;
    for (
      var c = a.length, d = b.length, e = 0, f = null;
      e < c && !((f = a[e]), f instanceof W && null !== f.data);

    )
      e++, (f = a[e]);
    if (c - e !== d) return !0;
    if (null === f) return 0 < d;
    for (var g = 0; e < c && g < d; ) {
      f = a[e];
      if (!(f instanceof W) || f.data !== b[g]) return !0;
      e++;
      g++;
    }
    return !1;
  }

  function bn(a) {
    if (a.type === W.Spot || a.type === W.Auto) return Math.min(a.R.length, 1);
    if (a.type === W.Link) {
      a = a.R;
      for (var b = a.length, c = 0; c < b; c++) {
        var d = a.K(c);
        if (!(d instanceof Cf && d.isPanelMain)) break;
      }
      return c;
    }
    return a.type === W.Table &&
      0 < a.R.length &&
      ((a = a.R.K(0)),
      a.isPanelMain &&
        a instanceof W &&
        (a.type === W.TableRow || a.type === W.TableColumn))
      ? 1
      : 0;
  }
  t.Vu = function() {
    for (var a = bn(this); this.R.length > a; ) this.lc(this.R.length - 1, !1);
    jn(this, this.itemArray);
  };

  function jn(a, b) {
    var c = bn(a);
    if (null === b || 0 === b.length)
      for (; a.R.length > c; ) a.lc(a.R.length - 1, !1);
    else if (a.R.length <= c) {
      c = b.length;
      for (var d = 0; d < c; d++) kn(a, b[d], d, !0);
    } else {
      d = c;
      for (var e = 0; e < b.length; e++, d++) {
        var f = b[e],
          g = d < a.R.length ? a.R.K(d) : null;
        if (g instanceof W) {
          if (g.data !== f) {
            var h = ln(a, g.data),
              k = ln(a, f),
              l = k !== h;
            l || ((h = mn(a, h)), (l = mn(a, k) !== h));
            l ? (a.lc(d, !1), kn(a, f, e, !1)) : (g.data = f);
          }
        } else kn(a, f, e, !1);
      }
      for (; d < a.R.length; ) a.lc(d, !1);
      a.Qg = null;
      nn(a, c, 0);
      nj(a) || a.w();
      a.graduatedIntervals = null;
      a.yf() || en(a, a, !1);
      b = a.part;
      null !== b &&
        ((b.Kh = null),
        (b.Sf = NaN),
        a.He && b instanceof V && (b.He = !0),
        b.He && b instanceof V && (b.sc = null));
    }
  }

  function kn(a, b, c, d) {
    if (!(void 0 === b || null === b || 0 > c)) {
      var e = ln(a, b);
      e = mn(a, e);
      if (null !== e) {
        kg(e);
        e = e.copy();
        if (0 !== (e.o & 16777216)) {
          var f = a.Yg();
          null !== f && fn(f, !0);
        }
        'object' === typeof b &&
          (null === a.$d && (a.$d = new pb()), a.$d.add(b, e));
        f = c + bn(a);
        a.Cb(f, e);
        d && ((e.qb = b), nn(a, f, c), (e.qb = null));
        e.data = b;
      }
    }
  }

  function nn(a, b, c) {
    for (a = a.R; b < a.length; ) {
      var d = a.K(b);
      if (d instanceof W) {
        var e = b,
          f = c;
        d.type === W.TableRow
          ? (d.row = e)
          : d.type === W.TableColumn && (d.column = e);
        d.itemIndex = f;
      }
      b++;
      c++;
    }
  }

  function ln(a, b) {
    if (null === b) return '';
    a = a.itemCategoryProperty;
    if ('function' === typeof a) a = a(b);
    else if ('string' === typeof a && 'object' === typeof b) {
      if ('' === a) return '';
      a = on(b, a);
    } else return '';
    if (void 0 === a) return '';
    if ('string' === typeof a) return a;
    C(
      'Panel.getCategoryForItemData found a non-string category for ' +
        b +
        ': ' +
        a,
    );
  }

  function mn(a, b) {
    var c = a.itemTemplateMap,
      d = null;
    null !== c && (d = c.I(b));
    null === d &&
      (null !== c && (d = c.I('')),
      null === d &&
        (pn ||
          ((pn = !0),
          xa('No item template Panel found for category "' + b + '" on ' + a),
          xa('  Using default item template.'),
          (a = new W()),
          (b = new Qg()),
          b.bind(new wi('text', '', Ia)),
          a.add(b),
          (qn = a)),
        (d = qn)));
    return d;
  }

  function en(a, b, c) {
    var d = b.enabledChanged;
    null !== d && d(b, c);
    if (b instanceof W) {
      b = b.R.s;
      d = b.length;
      for (var e = 0; e < d; e++) {
        var f = b[e];
        (c && f instanceof W && !f.isEnabled) || en(a, f, c);
      }
    }
  }

  function rn(a, b) {
    b.name = a;
    Kl.add(a, b);
  }
  ma.Object.defineProperties(W.prototype, {
    type: {
      get: function() {
        return this.qa;
      },
      set: function(a) {
        var b = this.qa;
        b !== a &&
          ((this.qa = a),
          (this.isAtomic = this.qa === W.Grid),
          this.w(),
          this.g('type', b, a));
      },
    },
    elements: {
      get: function() {
        return this.R.iterator;
      },
    },
    naturalBounds: {
      get: function() {
        return this.bc;
      },
    },
    padding: {
      get: function() {
        return this.ub;
      },
      set: function(a) {
        'number' === typeof a
          ? (0 > a && wa(a, '>= 0', W, 'padding'), (a = new ec(a)))
          : (0 > a.left && wa(a.left, '>= 0', W, 'padding:value.left'),
            0 > a.right && wa(a.right, '>= 0', W, 'padding:value.right'),
            0 > a.top && wa(a.top, '>= 0', W, 'padding:value.top'),
            0 > a.bottom && wa(a.bottom, '>= 0', W, 'padding:value.bottom'));
        var b = this.ub;
        b.C(a) || ((this.ub = a = a.J()), this.w(), this.g('padding', b, a));
      },
    },
    defaultAlignment: {
      get: function() {
        return this.Bm;
      },
      set: function(a) {
        var b = this.Bm;
        b.C(a) ||
          ((this.Bm = a = a.J()), this.w(), this.g('defaultAlignment', b, a));
      },
    },
    defaultStretch: {
      get: function() {
        return this.Kf;
      },
      set: function(a) {
        var b = this.Kf;
        b !== a && ((this.Kf = a), this.w(), this.g('defaultStretch', b, a));
      },
    },
    defaultSeparatorPadding: {
      get: function() {
        return null !== this.T ? this.T.tp : qc;
      },
      set: function(a) {
        'number' === typeof a && (a = new ec(a));
        var b = this.defaultSeparatorPadding;
        b.C(a) ||
          ((a = a.J()),
          null === this.T && (this.T = new sn()),
          (this.T.tp = a),
          this.w(),
          this.g('defaultSeparatorPadding', b, a));
      },
    },
    defaultRowSeparatorStroke: {
      get: function() {
        return null !== this.T ? this.T.ga : null;
      },
      set: function(a) {
        var b = this.defaultRowSeparatorStroke;
        b !== a &&
          (null === a || 'string' === typeof a || a instanceof nl) &&
          (a instanceof nl && a.freeze(),
          null === this.T && (this.T = new sn()),
          (this.T.ga = a),
          this.N(),
          this.g('defaultRowSeparatorStroke', b, a));
      },
    },
    defaultRowSeparatorStrokeWidth: {
      get: function() {
        return null !== this.T ? this.T.Ga : 1;
      },
      set: function(a) {
        var b = this.defaultRowSeparatorStrokeWidth;
        b !== a &&
          isFinite(a) &&
          0 <= a &&
          (null === this.T && (this.T = new sn()),
          (this.T.Ga = a),
          this.w(),
          this.g('defaultRowSeparatorStrokeWidth', b, a));
      },
    },
    defaultRowSeparatorDashArray: {
      get: function() {
        return null !== this.T ? this.T.W : null;
      },
      set: function(a) {
        var b = this.defaultRowSeparatorDashArray;
        if (b !== a) {
          if (null !== a) {
            for (var c = a.length, d = 0, e = 0; e < c; e++) {
              var f = a[e];
              ('number' === typeof f && 0 <= f && isFinite(f)) ||
                C(
                  'defaultRowSeparatorDashArray value ' +
                    f +
                    ' at index ' +
                    e +
                    ' must be a positive number or zero.',
                );
              d += f;
            }
            if (0 === d) {
              if (null === b) return;
              a = null;
            }
          }
          null === this.T && (this.T = new sn());
          this.T.W = a;
          this.N();
          this.g('defaultRowSeparatorDashArray', b, a);
        }
      },
    },
    defaultColumnSeparatorStroke: {
      get: function() {
        return null !== this.T ? this.T.u : null;
      },
      set: function(a) {
        var b = this.defaultColumnSeparatorStroke;
        b !== a &&
          (null === a || 'string' === typeof a || a instanceof nl) &&
          (a instanceof nl && a.freeze(),
          null === this.T && (this.T = new sn()),
          (this.T.u = a),
          this.N(),
          this.g('defaultColumnSeparatorStroke', b, a));
      },
    },
    defaultColumnSeparatorStrokeWidth: {
      get: function() {
        return null !== this.T ? this.T.F : 1;
      },
      set: function(a) {
        var b = this.defaultColumnSeparatorStrokeWidth;
        b !== a &&
          isFinite(a) &&
          0 <= a &&
          (null === this.T && (this.T = new sn()),
          (this.T.F = a),
          this.w(),
          this.g('defaultColumnSeparatorStrokeWidth', b, a));
      },
    },
    defaultColumnSeparatorDashArray: {
      get: function() {
        return null !== this.T ? this.T.m : null;
      },
      set: function(a) {
        var b = this.defaultColumnSeparatorDashArray;
        if (b !== a) {
          if (null !== a) {
            for (var c = a.length, d = 0, e = 0; e < c; e++) {
              var f = a[e];
              ('number' === typeof f && 0 <= f && isFinite(f)) ||
                C(
                  'defaultColumnSeparatorDashArray value ' +
                    f +
                    ' at index ' +
                    e +
                    ' must be a positive number or zero.',
                );
              d += f;
            }
            if (0 === d) {
              if (null === b) return;
              a = null;
            }
          }
          null === this.T && (this.T = new sn());
          this.T.m = a;
          this.N();
          this.g('defaultColumnSeparatorDashArray', b, a);
        }
      },
    },
    inRowsCols: {
      get: function() {
        return null !== this.T ? this.T.hb : null;
      },
      set: function(a) {
        null === this.T && (this.T = new sn());
        this.T.hb = a;
      },
    },
    viewboxStretch: {
      get: function() {
        return this.$n;
      },
      set: function(a) {
        var b = this.$n;
        b !== a && ((this.$n = a), this.w(), this.g('viewboxStretch', b, a));
      },
    },
    gridCellSize: {
      get: function() {
        return this.Qm;
      },
      set: function(a) {
        var b = this.Qm;
        if (!b.C(a)) {
          (a.v() && 0 !== a.width && 0 !== a.height) ||
            C('Invalid Panel.gridCellSize: ' + a);
          this.Qm = a.J();
          var c = this.diagram;
          null !== c && this === c.grid && jj(c);
          this.N();
          this.g('gridCellSize', b, a);
        }
      },
    },
    gridOrigin: {
      get: function() {
        return this.Rm;
      },
      set: function(a) {
        var b = this.Rm;
        if (!b.C(a)) {
          a.v() || C('Invalid Panel.gridOrigin: ' + a);
          this.Rm = a.J();
          var c = this.diagram;
          null !== c && this === c.grid && jj(c);
          this.N();
          this.g('gridOrigin', b, a);
        }
      },
    },
    graduatedMin: {
      get: function() {
        return null !== this.oa ? this.oa.Np : 0;
      },
      set: function(a) {
        var b = this.graduatedMin;
        b !== a &&
          (null === this.oa && (this.oa = new tn()),
          (this.oa.Np = a),
          this.w(),
          this.g('graduatedMin', b, a),
          el(this) &&
            ((a = this.part), null !== a && fl(this, a, 'graduatedRange')));
      },
    },
    graduatedMax: {
      get: function() {
        return null !== this.oa ? this.oa.F : 100;
      },
      set: function(a) {
        var b = this.graduatedMax;
        b !== a &&
          (null === this.oa && (this.oa = new tn()),
          (this.oa.F = a),
          this.w(),
          this.g('graduatedMax', b, a),
          el(this) &&
            ((a = this.part), null !== a && fl(this, a, 'graduatedRange')));
      },
    },
    graduatedRange: {
      get: function() {
        return this.graduatedMax - this.graduatedMin;
      },
    },
    graduatedTickUnit: {
      get: function() {
        return null !== this.oa ? this.oa.ga : 10;
      },
      set: function(a) {
        var b = this.graduatedTickUnit;
        b !== a &&
          0 < a &&
          (null === this.oa && (this.oa = new tn()),
          (this.oa.ga = a),
          this.w(),
          this.g('graduatedTickUnit', b, a));
      },
    },
    graduatedTickBase: {
      get: function() {
        return null !== this.oa ? this.oa.W : 0;
      },
      set: function(a) {
        var b = this.graduatedTickBase;
        b !== a &&
          (null === this.oa && (this.oa = new tn()),
          (this.oa.W = a),
          this.w(),
          this.g('graduatedTickBase', b, a));
      },
    },
    graduatedMarks: {
      get: function() {
        return null !== this.oa ? this.oa.u : null;
      },
      set: function(a) {
        null !== this.oa
          ? (this.oa.u = a)
          : null !== a && ((this.oa = new tn()), (this.oa.u = a));
      },
    },
    graduatedBounds: {
      get: function() {
        return null !== this.oa ? this.oa.j : null;
      },
      set: function(a) {
        null !== this.oa
          ? (this.oa.j = a)
          : null !== a && ((this.oa = new tn()), (this.oa.j = a));
      },
    },
    graduatedIntervals: {
      get: function() {
        return null !== this.oa ? this.oa.m : null;
      },
      set: function(a) {
        null !== this.oa
          ? (this.oa.m = a)
          : null !== a && ((this.oa = new tn()), (this.oa.m = a));
      },
    },
    temporaryTextBlock: {
      get: function() {
        return null !== this.oa ? this.oa.Sh : null;
      },
      set: function(a) {
        null !== this.oa
          ? (this.oa.Sh = a)
          : null !== a && ((this.oa = new tn()), (this.oa.Sh = a));
      },
    },
    panelLayoutState: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F = a;
      },
    },
    He: {
      get: function() {
        return 0 !== (this.o & 8388608);
      },
      set: function(a) {
        (0 !== (this.o & 8388608)) !== a && (this.o ^= 8388608);
      },
    },
    rowDefs: {
      get: function() {
        null === this.T && (this.T = new sn());
        return this.T.Ic;
      },
    },
    rowCount: {
      get: function() {
        return null === this.T ? 0 : this.rowDefs.length;
      },
    },
    colDefs: {
      get: function() {
        null === this.T && (this.T = new sn());
        return this.T.Hc;
      },
    },
    columnCount: {
      get: function() {
        return null === this.T ? 0 : this.colDefs.length;
      },
    },
    rowSizing: {
      get: function() {
        return null !== this.T ? this.T.nb : un;
      },
      set: function(a) {
        var b = this.rowSizing;
        b !== a &&
          (null === this.T && (this.T = new sn()),
          (this.T.nb = a),
          this.w(),
          this.g('rowSizing', b, a));
      },
    },
    columnSizing: {
      get: function() {
        return null !== this.T ? this.T.j : un;
      },
      set: function(a) {
        var b = this.columnSizing;
        b !== a &&
          (null === this.T && (this.T = new sn()),
          (this.T.j = a),
          this.w(),
          this.g('columnSizing', b, a));
      },
    },
    topIndex: {
      get: function() {
        return null !== this.T ? this.T.Db : 0;
      },
      set: function(a) {
        var b = this.topIndex;
        b !== a &&
          ((!isFinite(a) || 0 > a) &&
            C(
              'Panel.topIndex must be greater than zero and a real number, not: ' +
                a,
            ),
          null === this.T && (this.T = new sn()),
          (this.T.Db = a),
          this.w(),
          this.g('topIndex', b, a));
      },
    },
    leftIndex: {
      get: function() {
        return null !== this.T ? this.T.cb : 0;
      },
      set: function(a) {
        var b = this.leftIndex;
        b !== a &&
          ((!isFinite(a) || 0 > a) &&
            C(
              'Panel.leftIndex must be greater than zero and a real number, not: ' +
                a,
            ),
          null === this.T && (this.T = new sn()),
          (this.T.cb = a),
          this.w(),
          this.g('leftIndex', b, a));
      },
    },
    data: {
      get: function() {
        return this.qb;
      },
      set: function(a) {
        var b = this.qb;
        if (b !== a) {
          var c = this instanceof U && !(this instanceof ue);
          kg(this);
          this.qb = a;
          var d = this.diagram;
          null !== d &&
            (c
              ? ((c = d.partManager),
                this instanceof T
                  ? (null !== b && c.Re.remove(b),
                    null !== a && c.Re.add(a, this))
                  : this instanceof U &&
                    (null !== b && c.Se.remove(b),
                    null !== a && c.Se.add(a, this)))
              : ((c = this.panel),
                null !== c &&
                  null !== c.$d &&
                  (null !== b && c.$d.remove(b),
                  null !== a && c.$d.add(a, this))));
          this.g('data', b, a);
          (null !== d && d.undoManager.isUndoingRedoing) ||
            (null !== a && this.Ka());
        }
      },
    },
    itemIndex: {
      get: function() {
        return this.fn;
      },
      set: function(a) {
        var b = this.fn;
        b !== a && ((this.fn = a), this.g('itemIndex', b, a));
      },
    },
    allBindings: {
      get: function() {
        return null !== this.A ? this.A.hb : null;
      },
      set: function(a) {
        this.localBindings !== a &&
          (null === this.A && (this.A = new cl()), (this.A.hb = a));
      },
    },
    itemArray: {
      get: function() {
        return this.xh;
      },
      set: function(a) {
        var b = this.xh;
        if (b !== a || (null !== a && hn(this, a))) {
          var c = this.diagram;
          b !== a &&
            (null !== c && null !== b && Fj(c.partManager, this, c),
            (this.xh = a),
            null !== c && null !== a && Cj(c.partManager, this));
          this.g('itemArray', b, a);
          (null !== c && c.undoManager.isUndoingRedoing) || jn(this, a);
        }
      },
    },
    itemTemplate: {
      get: function() {
        return null === this.itemTemplateMap
          ? null
          : this.itemTemplateMap.I('');
      },
      set: function(a) {
        if (null === this.itemTemplateMap) {
          if (null === a) return;
          this.itemTemplateMap = new pb();
        }
        var b = this.itemTemplateMap.I('');
        b !== a &&
          ((a instanceof U || a.isPanelMain) &&
            C(
              'Panel.itemTemplate must not be a Part or be Panel.isPanelMain: ' +
                a,
            ),
          this.itemTemplateMap.add('', a),
          this.g('itemTemplate', b, a),
          (a = this.diagram),
          (null !== a && a.undoManager.isUndoingRedoing) || this.Vu());
      },
    },
    itemTemplateMap: {
      get: function() {
        return null !== this.A ? this.A.le : null;
      },
      set: function(a) {
        var b = this.itemTemplateMap;
        if (b !== a) {
          for (var c = a.iterator; c.next(); );
          bl(this);
          this.A.le = a;
          this.g('itemTemplateMap', b, a);
          a = this.diagram;
          (null !== a && a.undoManager.isUndoingRedoing) || this.Vu();
        }
      },
    },
    itemCategoryProperty: {
      get: function() {
        return null !== this.A ? this.A.Ic : 'category';
      },
      set: function(a) {
        var b = this.itemCategoryProperty;
        b !== a &&
          (bl(this), (this.A.Ic = a), this.g('itemCategoryProperty', b, a));
      },
    },
    isAtomic: {
      get: function() {
        return 0 !== (this.o & 1048576);
      },
      set: function(a) {
        var b = 0 !== (this.o & 1048576);
        b !== a && ((this.o ^= 1048576), this.g('isAtomic', b, a));
      },
    },
    isClipping: {
      get: function() {
        return 0 !== (this.o & 2097152);
      },
      set: function(a) {
        var b = 0 !== (this.o & 2097152);
        b !== a &&
          ((this.o ^= 2097152),
          this instanceof qf && (this.ib = null),
          this.w(),
          this.g('isClipping', b, a));
      },
    },
    isOpposite: {
      get: function() {
        return 0 !== (this.o & 33554432);
      },
      set: function(a) {
        var b = 0 !== (this.o & 33554432);
        b !== a && ((this.o ^= 33554432), this.w(), this.g('isOpposite', b, a));
      },
    },
    isEnabled: {
      get: function() {
        return 0 !== (this.o & 4194304);
      },
      set: function(a) {
        var b = 0 !== (this.o & 4194304);
        if (b !== a) {
          var c = null === this.panel || this.panel.yf();
          this.o ^= 4194304;
          this.g('isEnabled', b, a);
          b = this.diagram;
          (null !== b && b.undoManager.isUndoingRedoing) ||
            (c && en(this, this, a));
        }
      },
    },
    alignmentFocusName: {
      get: function() {
        return this.Pe;
      },
      set: function(a) {
        var b = this.Pe;
        b !== a &&
          ((this.Pe = a), this.w(), this.g('alignmentFocusName', b, a));
      },
    },
  });
  ma.Object.defineProperties(W, {
    Position: {
      get: function() {
        return Kl.I('Position');
      },
    },
    Horizontal: {
      get: function() {
        return Kl.I('Horizontal');
      },
    },
    Vertical: {
      get: function() {
        return Kl.I('Vertical');
      },
    },
    Spot: {
      get: function() {
        return Kl.I('Spot');
      },
    },
    Auto: {
      get: function() {
        return Kl.I('Auto');
      },
    },
    Table: {
      get: function() {
        return Kl.I('Table');
      },
    },
    Viewbox: {
      get: function() {
        return Kl.I('Viewbox');
      },
    },
    TableRow: {
      get: function() {
        return Kl.I('TableRow');
      },
    },
    TableColumn: {
      get: function() {
        return Kl.I('TableColumn');
      },
    },
    Link: {
      get: function() {
        return Kl.I('Link');
      },
    },
    Grid: {
      get: function() {
        return Kl.I('Grid');
      },
    },
    Graduated: {
      get: function() {
        return Kl.I('Graduated');
      },
    },
  });
  W.prototype.rebuildItemElements = W.prototype.Vu;
  W.prototype.findItemPanelForData = W.prototype.Uw;
  W.prototype.updateTargetBindings = W.prototype.Ka;
  W.prototype.copyTemplate = W.prototype.By;
  W.prototype.graduatedValueForPoint = W.prototype.nz;
  W.prototype.graduatedPointForValue = W.prototype.mz;
  W.prototype.findColumnForLocalX = W.prototype.Oy;
  W.prototype.findRowForLocalY = W.prototype.Wy;
  W.prototype.removeColumnDefinition = W.prototype.Qz;
  W.prototype.removeRowDefinition = W.prototype.Vz;
  W.prototype.removeAt = W.prototype.mb;
  W.prototype.remove = W.prototype.remove;
  W.prototype.insertAt = W.prototype.Cb;
  W.prototype.elt = W.prototype.K;
  W.prototype.add = W.prototype.add;
  W.prototype.findObject = W.prototype.fb;
  W.prototype.findInVisualTree = W.prototype.vl;
  W.prototype.walkVisualTreeFrom = W.prototype.$l;
  W.prototype.findMainElement = W.prototype.vb;
  var pn = !1,
    qn = null,
    Kl = new pb();
  W.className = 'Panel';
  W.definePanelLayout = rn;
  rn('Position', new tm());
  rn('Vertical', new wm());
  rn('Auto', new zm());
  rn('Link', new Km());

  function tn() {
    this.Np = 0;
    this.F = 100;
    this.ga = 10;
    this.W = 0;
    this.Sh = this.m = this.j = this.u = null;
  }
  tn.prototype.copy = function() {
    var a = new tn();
    a.Np = this.Np;
    a.F = this.F;
    a.ga = this.ga;
    a.W = this.W;
    a.u = this.u;
    a.j = this.j;
    a.m = this.m;
    a.Sh = this.Sh;
    return a;
  };
  tn.className = 'GradPanelSettings';

  function sn() {
    this.Ic = [];
    this.Hc = [];
    this.j = this.nb = un;
    this.cb = this.Db = 0;
    this.tp = qc;
    this.Ga = 1;
    this.W = this.ga = null;
    this.F = 1;
    this.hb = this.m = this.u = null;
  }
  sn.prototype.copy = function(a) {
    for (
      var b = new sn(), c = this.Ic, d = c.length, e = b.Ic, f = 0;
      f < d;
      f++
    )
      if (void 0 !== c[f]) {
        var g = c[f].copy();
        g.ni(a);
        e[f] = g;
      }
    c = this.Hc;
    d = c.length;
    e = b.Hc;
    for (f = 0; f < d; f++)
      void 0 !== c[f] && ((g = c[f].copy()), g.ni(a), (e[f] = g));
    b.nb = this.nb;
    b.j = this.j;
    b.Db = this.Db;
    b.cb = this.cb;
    b.tp = this.tp.J();
    b.Ga = this.Ga;
    b.ga = this.ga;
    b.W = this.W;
    b.F = this.F;
    b.u = this.u;
    b.m = this.m;
    b.hb = this.hb;
    return b;
  };
  sn.className = 'TablePanelSettings';

  function Oj() {
    Ra(this);
    this.Uf = null;
    this.Wp = !0;
    this.Wa = 0;
    this.Ac = NaN;
    this.ej = 0;
    this.cj = Infinity;
    this.Fb = Wc;
    this.pa = this.jc = this.ma = 0;
    this.Vd = null;
    this.Rn = vn;
    this.$f = Xk;
    this.On = this.Wf = null;
    this.Pn = NaN;
    this.Yb = this.oj = null;
    this.xm = !1;
  }
  Oj.prototype.copy = function() {
    var a = new Oj();
    a.Wp = this.Wp;
    a.Wa = this.Wa;
    a.Ac = this.Ac;
    a.ej = this.ej;
    a.cj = this.cj;
    a.Fb = this.Fb;
    a.ma = this.ma;
    a.jc = this.jc;
    a.pa = this.pa;
    a.$f = this.$f;
    a.Rn = this.Rn;
    null === this.Wf ? (a.Wf = null) : (a.Wf = this.Wf.J());
    a.On = this.On;
    a.Pn = this.Pn;
    a.oj = null;
    null !== this.oj && (a.separatorDashArray = Aa(this.separatorDashArray));
    a.Yb = this.Yb;
    a.xm = this.xm;
    a.Vd = this.Vd;
    return a;
  };
  t = Oj.prototype;
  t.ob = function(a) {
    a.classType === Oj && (this.sizing = a);
  };
  t.toString = function() {
    return (
      'RowColumnDefinition ' +
      (this.isRow ? '(Row ' : '(Column ') +
      this.index +
      ') #' +
      cb(this)
    );
  };
  t.ni = function(a) {
    this.Uf = a;
  };
  t.mo = function(a) {
    var b = 0,
      c = this.Uf;
    this.index !== a &&
      ((a = this.separatorStroke),
      null === a &&
        null !== c &&
        (a = this.isRow
          ? c.defaultRowSeparatorStroke
          : c.defaultColumnSeparatorStroke),
      null !== a &&
        ((b = this.separatorStrokeWidth),
        isNaN(b) &&
          (null !== c
            ? (b = this.isRow
                ? c.defaultRowSeparatorStrokeWidth
                : c.defaultColumnSeparatorStrokeWidth)
            : (b = 0))));
    a = this.Wf;
    if (null === a)
      if (null !== c) a = c.defaultSeparatorPadding;
      else return b;
    return b + (this.isRow ? a.top : a.left);
  };
  t.Qc = function() {
    var a = 0,
      b = this.Uf,
      c = 0,
      d = this.isRow;
    if (null !== b && b.type === W.Table)
      for (var e = d ? b.rowDefs.length : b.colDefs.length, f = 0; f < e; f++) {
        var g = d ? b.rowDefs[f] : b.colDefs[f];
        if (void 0 !== g && 0 !== g.ma) {
          c = g.index;
          break;
        }
      }
    this.index !== c &&
      ((c = this.separatorStroke),
      null === c &&
        null !== b &&
        (c = d ? b.defaultRowSeparatorStroke : b.defaultColumnSeparatorStroke),
      null !== c &&
        ((a = this.separatorStrokeWidth),
        isNaN(a) &&
          (null !== b
            ? (a = d
                ? b.defaultRowSeparatorStrokeWidth
                : b.defaultColumnSeparatorStrokeWidth)
            : (a = 0))));
    d = this.Wf;
    if (null === d)
      if (null !== b) d = b.defaultSeparatorPadding;
      else return a;
    return a + (this.isRow ? d.top + d.bottom : d.left + d.right);
  };
  t.Kb = function(a, b, c) {
    var d = this.Uf;
    if (
      null !== d &&
      (d.bb(de, a, this, b, c, void 0, void 0),
      null !== this.Vd &&
        ((b = d.diagram),
        null !== b &&
          !b.skipsModelSourceBindings &&
          ((d = d.Yg()), null !== d && ((b = d.data), null !== b))))
    )
      for (c = this.Vd.iterator; c.next(); ) c.value.Vo(this, b, a, d);
  };

  function Dm(a) {
    if (a.sizing === vn) {
      var b = a.Uf;
      return a.isRow ? b.rowSizing : b.columnSizing;
    }
    return a.sizing;
  }
  t.bind = function(a, b, c, d) {
    var e = null;
    'string' === typeof a ? (e = new wi(a, b, c, d)) : (e = a);
    e.sd = this;
    a = this.panel;
    null !== a &&
      ((b = a.Yg()),
      null !== b &&
        Gl(b) &&
        C(
          'Cannot add a Binding to a RowColumnDefinition that is already frozen: ' +
            e +
            ' on ' +
            a,
        ));
    null === this.Vd && (this.Vd = new E());
    this.Vd.add(e);
    return this;
  };
  ma.Object.defineProperties(Oj.prototype, {
    panel: {
      get: function() {
        return this.Uf;
      },
    },
    isRow: {
      get: function() {
        return this.Wp;
      },
      set: function(a) {
        this.Wp = a;
      },
    },
    index: {
      get: function() {
        return this.Wa;
      },
      set: function(a) {
        this.Wa = a;
      },
    },
    height: {
      get: function() {
        return this.Ac;
      },
      set: function(a) {
        var b = this.Ac;
        b !== a &&
          (0 > a && wa(a, '>= 0', Oj, 'height'),
          (this.Ac = a),
          (this.actual = this.ma),
          null !== this.panel && this.panel.w(),
          this.Kb('height', b, a));
      },
    },
    width: {
      get: function() {
        return this.Ac;
      },
      set: function(a) {
        var b = this.Ac;
        b !== a &&
          (0 > a && wa(a, '>= 0', Oj, 'width'),
          (this.Ac = a),
          (this.actual = this.ma),
          null !== this.panel && this.panel.w(),
          this.Kb('width', b, a));
      },
    },
    minimum: {
      get: function() {
        return this.ej;
      },
      set: function(a) {
        var b = this.ej;
        b !== a &&
          ((0 > a || !isFinite(a)) && wa(a, '>= 0', Oj, 'minimum'),
          (this.ej = a),
          (this.actual = this.ma),
          null !== this.panel && this.panel.w(),
          this.Kb('minimum', b, a));
      },
    },
    maximum: {
      get: function() {
        return this.cj;
      },
      set: function(a) {
        var b = this.cj;
        b !== a &&
          (0 > a && wa(a, '>= 0', Oj, 'maximum'),
          (this.cj = a),
          (this.actual = this.ma),
          null !== this.panel && this.panel.w(),
          this.Kb('maximum', b, a));
      },
    },
    alignment: {
      get: function() {
        return this.Fb;
      },
      set: function(a) {
        var b = this.Fb;
        b.C(a) ||
          ((this.Fb = a.J()),
          null !== this.panel && this.panel.w(),
          this.Kb('alignment', b, a));
      },
    },
    stretch: {
      get: function() {
        return this.$f;
      },
      set: function(a) {
        var b = this.$f;
        b !== a &&
          ((this.$f = a),
          null !== this.panel && this.panel.w(),
          this.Kb('stretch', b, a));
      },
    },
    separatorPadding: {
      get: function() {
        return this.Wf;
      },
      set: function(a) {
        'number' === typeof a && (a = new ec(a));
        var b = this.Wf;
        (null !== a && null !== b && b.C(a)) ||
          (null !== a && (a = a.J()),
          (this.Wf = a),
          null !== this.panel && this.panel.w(),
          this.Kb('separatorPadding', b, a));
      },
    },
    separatorStroke: {
      get: function() {
        return this.On;
      },
      set: function(a) {
        var b = this.On;
        b !== a &&
          (null !== a && Pl(a, 'RowColumnDefinition.separatorStroke'),
          a instanceof nl && a.freeze(),
          (this.On = a),
          null !== this.panel && this.panel.w(),
          this.Kb('separatorStroke', b, a));
      },
    },
    separatorStrokeWidth: {
      get: function() {
        return this.Pn;
      },
      set: function(a) {
        var b = this.Pn;
        b !== a &&
          ((this.Pn = a),
          null !== this.panel && this.panel.w(),
          this.Kb('separatorStrokeWidth', b, a));
      },
    },
    separatorDashArray: {
      get: function() {
        return this.oj;
      },
      set: function(a) {
        var b = this.oj;
        if (b !== a) {
          if (null !== a) {
            for (var c = a.length, d = 0, e = 0; e < c; e++) {
              var f = a[e];
              ('number' === typeof f && 0 <= f && isFinite(f)) ||
                C(
                  'separatorDashArray value ' +
                    f +
                    ' at index ' +
                    e +
                    ' must be a positive number or zero.',
                );
              d += f;
            }
            if (0 === d) {
              if (null === b) return;
              a = null;
            }
          }
          this.oj = a;
          null !== this.panel && this.panel.N();
          this.Kb('separatorDashArray', b, a);
        }
      },
    },
    background: {
      get: function() {
        return this.Yb;
      },
      set: function(a) {
        var b = this.Yb;
        b !== a &&
          (null !== a && Pl(a, 'RowColumnDefinition.background'),
          a instanceof nl && a.freeze(),
          (this.Yb = a),
          null !== this.panel && this.panel.N(),
          this.Kb('background', b, a));
      },
    },
    coversSeparators: {
      get: function() {
        return this.xm;
      },
      set: function(a) {
        var b = this.xm;
        b !== a &&
          ((this.xm = a),
          null !== this.panel && this.panel.N(),
          this.Kb('coversSeparators', b, a));
      },
    },
    sizing: {
      get: function() {
        return this.Rn;
      },
      set: function(a) {
        var b = this.Rn;
        b !== a &&
          ((this.Rn = a),
          null !== this.panel && this.panel.w(),
          this.Kb('sizing', b, a));
      },
    },
    actual: {
      get: function() {
        return this.ma;
      },
      set: function(a) {
        this.ma = isNaN(this.Ac)
          ? Math.max(Math.min(this.cj, a), this.ej)
          : Math.max(Math.min(this.cj, this.Ac), this.ej);
      },
    },
    measured: {
      get: function() {
        return this.jc;
      },
      set: function(a) {
        this.jc = a;
      },
    },
    total: {
      get: function() {
        return this.ma + this.Qc();
      },
    },
    position: {
      get: function() {
        return this.pa;
      },
      set: function(a) {
        this.pa = a;
      },
    },
  });
  Oj.prototype.computeEffectiveSpacing = Oj.prototype.Qc;
  Oj.prototype.computeEffectiveSpacingTop = Oj.prototype.mo;
  var vn = new D(Oj, 'Default', 0),
    Em = new D(Oj, 'None', 1),
    un = new D(Oj, 'ProportionalExtra', 2);
  Oj.className = 'RowColumnDefinition';
  Oj.Default = vn;
  Oj.None = Em;
  Oj.ProportionalExtra = un;

  function Cf(a, b) {
    Y.call(this);
    this.Hd = this.sa = null;
    this.Jm = 'None';
    this.Nc = this.Ak = 'black';
    this.ag = 1;
    this.Na = this.Og = null;
    this.Dn = this.Cn = NaN;
    this.fa = null;
    'string' === typeof a ? (this.figure = a) : a && Object.assign(this, a);
    b && Object.assign(this, b);
  }
  la(Cf, Y);
  Cf.prototype.cloneProtected = function(a) {
    Y.prototype.cloneProtected.call(this, a);
    a.sa = this.sa;
    a.Hd = this.Hd;
    a.Jm = this.Jm;
    a.Ak = this.Ak;
    a.Nc = this.Nc;
    a.ag = this.ag;
    null !== this.Og && (a.Og = Aa(this.Og));
    null !== this.Na && (a.Na = this.Na.ic ? this.Na : this.Na.copy());
    a.Cn = this.Cn;
    a.Dn = this.Dn;
    null !== this.fa && (a.fa = this.fa.copy());
  };

  function wn(a) {
    null === a.Na ? (a.Na = new xn()) : a.Na.ic && (a.Na = a.Na.copy());
  }
  t = Cf.prototype;
  t.ih = function() {
    Y.prototype.ih.call(this);
    null !== this.Na && (this.Na.ic = !0);
  };
  t.ob = function(a) {
    a === lg || a === ng || a === Yk || a === Xk
      ? (this.geometryStretch = a)
      : Y.prototype.ob.call(this, a);
  };
  t.toString = function() {
    return (
      'Shape(' +
      ('None' !== this.figure
        ? this.figure
        : 'None' !== this.toArrow
        ? this.toArrow
        : this.fromArrow) +
      ')#' +
      cb(this)
    );
  };

  function yn(a, b, c, d) {
    var e = c.length;
    if (!(4 > e)) {
      var f = d.measuredBounds,
        g = Math.max(1, f.width);
      f = f.height;
      for (
        var h = c[0], k = c[1], l, m, n, p, r, q, u = 0, w = Ea(), v = 2;
        v < e;
        v += 2
      )
        (l = c[v]),
          (m = c[v + 1]),
          (n = l - h),
          (h = m - k),
          0 === n && (n = 0.001),
          (p = h / n),
          (r = Math.atan2(h, n)),
          (q = Math.sqrt(n * n + h * h)),
          w.push([n, r, p, q]),
          (u += q),
          (h = l),
          (k = m);
      h = c[0];
      k = c[1];
      n = d.measuredBounds.width;
      d instanceof Cf && (n -= d.strokeWidth);
      1 > n && (n = 1);
      e = c = n;
      l = g / 2;
      m = 0 === l ? !1 : !0;
      v = 0;
      q = w[v];
      n = q[0];
      r = q[1];
      p = q[2];
      q = q[3];
      for (var z = 0; 0.1 <= u; ) {
        0 === z &&
          (m ? ((e = c), (e -= l), (u -= l), (m = !1)) : (e = c),
          0 === e && (e = 1));
        if (e > u) {
          Ga(w);
          return;
        }
        e > q ? ((z = e - q), (e = q)) : (z = 0);
        var y = Math.sqrt((e * e) / (1 + p * p));
        0 > n && (y = -y);
        h += y;
        k += p * y;
        a.translate(h, k);
        a.rotate(r);
        a.translate(-(g / 2), -(f / 2));
        0 === z && d.ai(a, b);
        a.translate(g / 2, f / 2);
        a.rotate(-r);
        a.translate(-h, -k);
        u -= e;
        q -= e;
        if (0 !== z) {
          v++;
          if (v === w.length) {
            Ga(w);
            return;
          }
          q = w[v];
          n = q[0];
          r = q[1];
          p = q[2];
          q = q[3];
          e = z;
        }
      }
      Ga(w);
    }
  }
  t.ai = function(a, b) {
    var c = this.Nc,
      d = this.Ak;
    if (null !== c || null !== d) {
      var e = this.sa;
      if (null !== e) {
        a.Pc();
        var f = this.actualBounds,
          g = this.naturalBounds;
        null !== d && gi(this, a, d, !0, !1, g, f);
        var h = this.part,
          k = this.ag;
        null === c ||
          0 !== k ||
          null === h ||
          (!this.isPanelMain && h.vb() !== this) ||
          (k =
            h.type === W.Link &&
            h instanceof ue &&
            'Selection' === h.category &&
            h.adornedObject instanceof Cf &&
            h.adornedPart.vb() === h.adornedObject
              ? h.adornedObject.strokeWidth
              : 0);
        0 === k && (c = null);
        null !== c &&
          0 !== k &&
          (gi(this, a, c, !1, !1, g, f),
          (a.lineWidth = k),
          (a.lineJoin = this.strokeJoin),
          (a.lineCap = this.strokeCap),
          (a.miterLimit = this.strokeMiterLimit));
        f = !1;
        h && b.Ge('drawShadows') && (f = h.isShadowed);
        h = !0;
        null === c || (null !== d && 'transparent' !== d) || (h = !1);
        g = !1;
        k = this.strokeDashArray;
        null !== k && ((g = !0), a.Gr(k, this.strokeDashOffset));
        if (e.type === O.j)
          a.beginPath(),
            a.moveTo(e.startX, e.startY),
            a.lineTo(e.endX, e.endY),
            null !== c && a.si();
        else if (e.type === O.u) {
          var l = e.startX;
          k = e.startY;
          var m = e.endX,
            n = e.endY;
          e = Math.min(l, m);
          var p = Math.min(k, n);
          l = Math.abs(m - l);
          k = Math.abs(n - k);
          a.beginPath();
          a.rect(e, p, l, k);
          null !== d && a.sf(d);
          if (null !== c) {
            h && f && rl(a);
            if (0 === l || 0 === k)
              a.beginPath(), a.rect(e, p, Math.max(l, 0.1), Math.max(k, 0.1));
            a.si();
            h && f && ql(a);
          }
        } else if (e.type === O.F)
          (l = e.startX),
            (k = e.startY),
            (m = e.endX),
            (n = e.endY),
            (e = Math.abs(m - l) / 2),
            (p = Math.abs(n - k) / 2),
            (l = Math.min(l, m) + e),
            (k = Math.min(k, n) + p),
            a.beginPath(),
            a.moveTo(l, k - p),
            a.bezierCurveTo(l + J.ng * e, k - p, l + e, k - J.ng * p, l + e, k),
            a.bezierCurveTo(l + e, k + J.ng * p, l + J.ng * e, k + p, l, k + p),
            a.bezierCurveTo(l - J.ng * e, k + p, l - e, k + J.ng * p, l - e, k),
            a.bezierCurveTo(l - e, k - J.ng * p, l - J.ng * e, k - p, l, k - p),
            a.closePath(),
            null !== d && a.sf(d),
            null !== c && (h && f ? (rl(a), a.si(), ql(a)) : a.si());
        else if (e.type === O.m)
          for (e = e.figures, k = e.length, p = 0; p < k; p++) {
            l = e.s[p];
            a.beginPath();
            a.moveTo(l.startX, l.startY);
            m = l.segments.s;
            n = m.length;
            for (var r = null, q = 0; q < n; q++) {
              var u = m[q];
              switch (u.type) {
                case Jd:
                  a.moveTo(u.endX, u.endY);
                  break;
                case vd:
                  a.lineTo(u.endX, u.endY);
                  break;
                case Kd:
                  a.bezierCurveTo(
                    u.point1X,
                    u.point1Y,
                    u.point2X,
                    u.point2Y,
                    u.endX,
                    u.endY,
                  );
                  break;
                case Ld:
                  a.quadraticCurveTo(u.point1X, u.point1Y, u.endX, u.endY);
                  break;
                case Md:
                  if (u.radiusX === u.radiusY) {
                    var w = Math.PI / 180;
                    a.arc(
                      u.point1X,
                      u.point1Y,
                      u.radiusX,
                      u.startAngle * w,
                      (u.startAngle + u.sweepAngle) * w,
                      0 > u.sweepAngle,
                      null !== r ? r.endX : l.startX,
                      null !== r ? r.endY : l.startY,
                    );
                  } else if (((r = Rd(u, l)), (w = r.length), 0 === w))
                    a.lineTo(u.centerX, u.centerY);
                  else
                    for (var v = 0; v < w; v++) {
                      var z = r[v];
                      0 === v && a.lineTo(z[0], z[1]);
                      a.bezierCurveTo(z[2], z[3], z[4], z[5], z[6], z[7]);
                    }
                  break;
                case Qd:
                  v = w = 0;
                  if (null !== r && r.type === Md) {
                    r = Rd(r, l);
                    z = r.length;
                    if (0 === z) {
                      a.lineTo(u.endX, u.endY);
                      break;
                    }
                    r = r[z - 1] || null;
                    null !== r && ((w = r[6]), (v = r[7]));
                  } else
                    (w = null !== r ? r.endX : l.startX),
                      (v = null !== r ? r.endY : l.startY);
                  r = Sd(u, l, w, v);
                  w = r.length;
                  if (0 === w) {
                    a.lineTo(u.endX, u.endY);
                    break;
                  }
                  for (v = 0; v < w; v++)
                    (z = r[v]),
                      a.bezierCurveTo(z[2], z[3], z[4], z[5], z[6], z[7]);
                  break;
                default:
                  C('Segment not of valid type: ' + u.type);
              }
              u.isClosed && a.closePath();
              r = u;
            }
            m = l.isFilled;
            f
              ? l.isShadowed
                ? (!0 === m && 'transparent' !== d && null !== d && a.sf(d),
                  null !== c && (m && h && rl(a), a.si(), m && h && ql(a)))
                : (rl(a),
                  m && 'transparent' !== d && null !== d && a.sf(d),
                  null !== c && a.si(),
                  ql(a))
              : (m && null !== d && a.sf(d), null !== c && a.si());
          }
        g && a.Er();
        if (null !== this.pathPattern) {
          c = this.pathPattern;
          c.measure(Infinity, Infinity);
          d = c.measuredBounds;
          c.arrange(0, 0, d.width, d.height);
          f = this.geometry;
          a.save();
          a.beginPath();
          d = Ea();
          if (f.type === O.j)
            d.push(f.startX),
              d.push(f.startY),
              d.push(f.endX),
              d.push(f.endY),
              yn(a, b, d, c);
          else if (f.type === O.m)
            for (f = f.figures.iterator; f.next(); ) {
              h = f.value;
              d.length = 0;
              d.push(h.startX);
              d.push(h.startY);
              g = h.startX;
              e = h.startY;
              k = g;
              p = e;
              l = h.segments.s;
              m = l.length;
              for (n = 0; n < m; n++) {
                q = l[n];
                switch (q.type) {
                  case Jd:
                    yn(a, b, d, c);
                    d.length = 0;
                    d.push(q.endX);
                    d.push(q.endY);
                    g = q.endX;
                    e = q.endY;
                    k = g;
                    p = e;
                    break;
                  case vd:
                    d.push(q.endX);
                    d.push(q.endY);
                    g = q.endX;
                    e = q.endY;
                    break;
                  case Kd:
                    J.De(
                      g,
                      e,
                      q.point1X,
                      q.point1Y,
                      q.point2X,
                      q.point2Y,
                      q.endX,
                      q.endY,
                      0.5,
                      d,
                    );
                    g = q.endX;
                    e = q.endY;
                    break;
                  case Ld:
                    J.Go(g, e, q.point1X, q.point1Y, q.endX, q.endY, 0.5, d);
                    g = q.endX;
                    e = q.endY;
                    break;
                  case Md:
                    u = Rd(q, h);
                    r = u.length;
                    if (0 === r) {
                      d.push(q.centerX);
                      d.push(q.centerY);
                      g = q.centerX;
                      e = q.centerY;
                      break;
                    }
                    for (w = 0; w < r; w++)
                      (v = u[w]),
                        J.De(g, e, v[2], v[3], v[4], v[5], v[6], v[7], 0.5, d),
                        (g = v[6]),
                        (e = v[7]);
                    break;
                  case Qd:
                    u = Sd(q, h, g, e);
                    r = u.length;
                    if (0 === r) {
                      d.push(q.endX);
                      d.push(q.endY);
                      g = q.endX;
                      e = q.endY;
                      break;
                    }
                    for (w = 0; w < r; w++)
                      (v = u[w]),
                        J.De(g, e, v[2], v[3], v[4], v[5], v[6], v[7], 0.5, d),
                        (g = v[6]),
                        (e = v[7]);
                    break;
                  default:
                    C('Segment not of valid type: ' + q.type);
                }
                q.isClosed && (d.push(k), d.push(p), yn(a, b, d, c));
              }
              yn(a, b, d, c);
            }
          else if (f.type === O.u)
            d.push(f.startX),
              d.push(f.startY),
              d.push(f.endX),
              d.push(f.startY),
              d.push(f.endX),
              d.push(f.endY),
              d.push(f.startX),
              d.push(f.endY),
              d.push(f.startX),
              d.push(f.startY),
              yn(a, b, d, c);
          else if (f.type === O.F) {
            e = new Xd();
            e.startX = f.endX;
            e.startY = (f.startY + f.endY) / 2;
            g = new Yd(Md);
            g.startAngle = 0;
            g.sweepAngle = 360;
            g.centerX = (f.startX + f.endX) / 2;
            g.centerY = (f.startY + f.endY) / 2;
            g.radiusX = Math.abs(f.startX - f.endX) / 2;
            g.radiusY = Math.abs(f.startY - f.endY) / 2;
            e.add(g);
            f = Rd(g, e);
            h = f.length;
            if (0 === h) d.push(g.centerX), d.push(g.centerY);
            else
              for (g = e.startX, e = e.startY, k = 0; k < h; k++)
                (p = f[k]),
                  J.De(g, e, p[2], p[3], p[4], p[5], p[6], p[7], 0.5, d),
                  (g = p[6]),
                  (e = p[7]);
            yn(a, b, d, c);
          }
          Ga(d);
          a.restore();
          a.Oc(!1);
        }
      }
    }
  };
  t.ia = function(a, b) {
    void 0 === b && (b = new I());
    if (a instanceof N) {
      a.Fc() &&
        C(
          'getDocumentPoint Spot must be a real, specific Spot, not: ' +
            a.toString(),
        );
      var c = this.naturalBounds,
        d = this.strokeWidth;
      b.h(
        a.x * (c.width + d) - d / 2 + c.x + a.offsetX,
        a.y * (c.height + d) - d / 2 + c.y + a.offsetY,
      );
    } else b.set(a);
    this.ge.Fa(b);
    return b;
  };
  t.gi = function(a) {
    void 0 === a && (a = new M());
    var b = this.naturalBounds,
      c = this.ge;
    b = M.allocAt(b.x, b.y, b.width, b.height);
    var d = this.strokeWidth;
    b.vc(d / 2, d / 2);
    d = I.allocAt(b.x, b.y).transform(c);
    a.h(d.x, d.y, 0, 0);
    d.h(b.right, b.y).transform(c);
    Zb(a, d.x, d.y, 0, 0);
    d.h(b.right, b.bottom).transform(c);
    Zb(a, d.x, d.y, 0, 0);
    d.h(b.x, b.bottom).transform(c);
    Zb(a, d.x, d.y, 0, 0);
    M.free(b);
    I.free(d);
    return a;
  };
  t.Xg = function(a, b) {
    var c = this.geometry;
    if (null === c || (null === this.fill && null === this.stroke)) return !1;
    var d = c.bounds,
      e = this.strokeWidth / 2;
    c.type !== O.j || b || (e += 2);
    var f = M.alloc();
    f.assign(d);
    f.vc(e + 2, e + 2);
    if (!f.ba(a)) return M.free(f), !1;
    d = e + 1e-4;
    if (c.type === O.j) {
      if (null === this.stroke) return !1;
      d =
        (c.endX - c.startX) * (a.x - c.startX) +
        (c.endY - c.startY) * (a.y - c.startY);
      if (
        0 >
          (c.startX - c.endX) * (a.x - c.endX) +
            (c.startY - c.endY) * (a.y - c.endY) ||
        0 > d
      )
        return !1;
      M.free(f);
      return J.Tb(c.startX, c.startY, c.endX, c.endY, e, a.x, a.y);
    }
    if (c.type === O.u) {
      b = c.startX;
      var g = c.startY,
        h = c.endX;
      c = c.endY;
      f.x = Math.min(b, h);
      f.y = Math.min(g, c);
      f.width = Math.abs(h - b);
      f.height = Math.abs(c - g);
      if (null === this.fill) {
        f.vc(-d, -d);
        if (f.ba(a)) return M.free(f), !1;
        f.vc(d, d);
      }
      null !== this.stroke && f.vc(e, e);
      a = f.ba(a);
      M.free(f);
      return a;
    }
    if (c.type === O.F) {
      g = c.startX;
      e = c.startY;
      h = c.endX;
      var k = c.endY;
      c = Math.min(g, h);
      b = Math.min(e, k);
      g = Math.abs(h - g) / 2;
      e = Math.abs(k - e) / 2;
      c = a.x - (c + g);
      b = a.y - (b + e);
      if (null === this.fill) {
        g -= d;
        e -= d;
        if (0 >= g || 0 >= e || 1 >= (c * c) / (g * g) + (b * b) / (e * e))
          return M.free(f), !1;
        g += d;
        e += d;
      }
      null !== this.stroke && ((g += d), (e += d));
      M.free(f);
      return 0 >= g || 0 >= e ? !1 : 1 >= (c * c) / (g * g) + (b * b) / (e * e);
    }
    if (c.type === O.m)
      return (
        M.free(f),
        null === this.fill
          ? Vd(c, a.x, a.y, e)
          : Td(c, a, e, 1 < this.strokeWidth, b)
      );
    C('Unknown Geometry type: ' + c.type);
  };
  t.El = function(a, b, c, d) {
    var e = this.desiredSize,
      f = this.ag;
    a = Math.max(a, 0);
    b = Math.max(b, 0);
    if (null !== this.Hd) var g = this.geometry.bounds;
    else {
      var h = this.figure,
        k = zn[h];
      if (void 0 === k) {
        var l = J.Oe[h];
        'string' === typeof l && (l = J.Oe[l]);
        'function' === typeof l
          ? ((k = l(null, 100, 100)), (zn[h] = k))
          : C('Unsupported Figure: ' + h);
      }
      g = k.bounds;
    }
    h = g.width;
    k = g.height;
    l = g.width;
    var m = g.height;
    switch (il(this, !0)) {
      case lg:
        d = c = 0;
        break;
      case td:
        l = Math.max(a - f, 0);
        m = Math.max(b - f, 0);
        break;
      case Vk:
        l = Math.max(a - f, 0);
        d = 0;
        break;
      case Wk:
        (c = 0), (m = Math.max(b - f, 0));
    }
    isFinite(e.width) && (l = e.width);
    isFinite(e.height) && (m = e.height);
    g = this.maxSize;
    var n = this.minSize;
    c = Math.max(c - f, n.width);
    d = Math.max(d - f, n.height);
    l = Math.min(g.width, l);
    m = Math.min(g.height, m);
    l = isFinite(l) ? Math.max(c, l) : Math.max(h, c);
    m = isFinite(m) ? Math.max(d, m) : Math.max(k, d);
    c = mg(this);
    switch (c) {
      case lg:
        break;
      case td:
        h = l;
        k = m;
        break;
      case ng:
        c = Math.min(l / h, m / k);
        isFinite(c) || (c = 1);
        h *= c;
        k *= c;
        break;
      default:
        C(c + ' is not a valid geometryStretch.');
    }
    null !== this.Hd
      ? (0 === h && (h = 0.001),
        0 === k && (k = 0.001),
        (c = null !== this.Hd ? this.Hd : this.sa),
        (g = c.bounds),
        (d = h / g.width),
        (g = k / g.height),
        isFinite(d) || (d = 1),
        isFinite(g) || (g = 1),
        (this.sa = 1 === d && 1 === g ? c : c.copy().scale(d, g)))
      : (null !== this.sa &&
          J.ca(this.sa.Hk, a - f) &&
          J.ca(this.sa.Gk, b - f)) ||
        (this.sa = Cf.makeGeometry(this, h, k));
    g = this.sa.bounds;
    Infinity === a || Infinity === b
      ? this.ve(
          g.x - f / 2,
          g.y - f / 2,
          0 === a && 0 === h ? 0 : g.width + f,
          0 === b && 0 === k ? 0 : g.height + f,
        )
      : this.ve(-(f / 2), -(f / 2), l + f, m + f);
    e.v() ? this.bc.h(0, 0, e.width, e.height) : this.bc.assign(g);
  };

  function mg(a) {
    var b = a.geometryStretch;
    return null !== a.Hd
      ? b === Xk
        ? td
        : b
      : b === Xk
      ? zn[a.figure].defaultStretch
      : b;
  }
  t.Vg = function(a, b, c, d) {
    kl(this, a, b, c, d);
  };
  t.Or = function(a, b, c) {
    return this.Kj(a.x, a.y, b.x, b.y, c);
  };
  t.Kj = function(a, b, c, d, e) {
    var f = this.transform,
      g = 1 / (f.m11 * f.m22 - f.m12 * f.m21),
      h = f.m22 * g,
      k = -f.m12 * g,
      l = -f.m21 * g,
      m = f.m11 * g,
      n = g * (f.m21 * f.dy - f.m22 * f.dx),
      p = g * (f.m12 * f.dx - f.m11 * f.dy);
    f = a * h + b * l + n;
    g = a * k + b * m + p;
    h = c * h + d * l + n;
    k = c * k + d * m + p;
    n = this.ag / 2;
    l = this.sa;
    null === l && (this.measure(Infinity, Infinity), (l = this.sa));
    var r = l.bounds;
    m = !1;
    if (l.type === O.j)
      if (1.5 >= this.strokeWidth)
        m = J.Je(l.startX, l.startY, l.endX, l.endY, f, g, h, k, e);
      else {
        l.startX === l.endX
          ? ((d = n), (m = 0))
          : ((b = (l.endY - l.startY) / (l.endX - l.startX)),
            (m = n / Math.sqrt(1 + b * b)),
            (d = m * b));
        b = Ea();
        a = new I();
        J.Je(
          l.startX + d,
          l.startY + m,
          l.endX + d,
          l.endY + m,
          f,
          g,
          h,
          k,
          a,
        ) && b.push(a);
        a = new I();
        J.Je(
          l.startX - d,
          l.startY - m,
          l.endX - d,
          l.endY - m,
          f,
          g,
          h,
          k,
          a,
        ) && b.push(a);
        a = new I();
        J.Je(
          l.startX + d,
          l.startY + m,
          l.startX - d,
          l.startY - m,
          f,
          g,
          h,
          k,
          a,
        ) && b.push(a);
        a = new I();
        J.Je(l.endX + d, l.endY + m, l.endX - d, l.endY - m, f, g, h, k, a) &&
          b.push(a);
        h = b.length;
        if (0 === h) return Ga(b), !1;
        m = !0;
        k = Infinity;
        for (d = 0; d < h; d++)
          (a = b[d]),
            (c = (a.x - f) * (a.x - f) + (a.y - g) * (a.y - g)),
            c < k && ((k = c), (e.x = a.x), (e.y = a.y));
        Ga(b);
      }
    else if (l.type === O.u)
      m = J.wf(
        r.x - n,
        r.y - n,
        r.x + r.width + n,
        r.y + r.height + n,
        f,
        g,
        h,
        k,
        e,
      );
    else if (l.type === O.F) {
      b = M.allocAt(r.x, r.y, r.width, r.height).vc(n, n);
      a: if (0 === b.width)
        m = J.Je(b.x, b.y, b.x, b.y + b.height, f, g, h, k, e);
      else if (0 === b.height)
        m = J.Je(b.x, b.y, b.x + b.width, b.y, f, g, h, k, e);
      else {
        a = b.width / 2;
        l = b.height / 2;
        d = b.x + a;
        m = b.y + l;
        c = 9999;
        f !== h && (c = (g - k) / (f - h));
        if (9999 > Math.abs(c)) {
          k = g - m - c * (f - d);
          if (0 > a * a * c * c + l * l - k * k) {
            e.x = NaN;
            e.y = NaN;
            m = !1;
            break a;
          }
          n = Math.sqrt(a * a * c * c + l * l - k * k);
          h = (-(a * a * c * k) + a * l * n) / (l * l + a * a * c * c) + d;
          a = (-(a * a * c * k) - a * l * n) / (l * l + a * a * c * c) + d;
          l = c * (h - d) + k + m;
          k = c * (a - d) + k + m;
          Math.abs((f - h) * (f - h)) + Math.abs((g - l) * (g - l)) <
          Math.abs((f - a) * (f - a)) + Math.abs((g - k) * (g - k))
            ? ((e.x = h), (e.y = l))
            : ((e.x = a), (e.y = k));
        } else {
          h = l * l;
          k = f - d;
          h -= (h / (a * a)) * k * k;
          if (0 > h) {
            e.x = NaN;
            e.y = NaN;
            m = !1;
            break a;
          }
          k = Math.sqrt(h);
          h = m + k;
          k = m - k;
          Math.abs(h - g) < Math.abs(k - g)
            ? ((e.x = f), (e.y = h))
            : ((e.x = f), (e.y = k));
        }
        m = !0;
      }
      M.free(b);
    } else if (l.type === O.m) {
      p = I.alloc();
      var q = h - f;
      var u = k - g,
        w = q * q + u * u,
        v = f,
        z = g;
      if (0 < w && r.contains(v, z) && ((p.x = v), (p.y = z), this.ba(p)))
        for (
          0 !== q && 0.5 > Math.abs(q)
            ? ((u *= 0.5 / q), (q = 0.5))
            : 0 !== u && 0.5 > Math.abs(u) && ((q *= 0.5 / u), (u = 0.5)),
            v -= q,
            z -= u;
          r.contains(v, z);

        )
          (v -= q), (z -= u);
      e.x = h;
      e.y = k;
      for (u = 0; u < l.figures.count; u++) {
        var y = l.figures.s[u],
          A = y.isFilled ? v : f,
          B = y.isFilled ? z : g,
          F = y.segments;
        r = y.startX;
        q = y.startY;
        for (var L = r, S = q, R = 0; R < F.count; R++) {
          var P = F.s[R],
            H = P.type;
          var da = P.endX;
          var X = P.endY;
          var oa = !1;
          switch (H) {
            case Jd:
              L = da;
              S = X;
              break;
            case vd:
              oa = An(r, q, da, X, A, B, h, k, p);
              break;
            case Kd:
              oa = J.io(
                r,
                q,
                P.point1X,
                P.point1Y,
                P.point2X,
                P.point2Y,
                da,
                X,
                A,
                B,
                h,
                k,
                0.6,
                p,
              );
              break;
            case Ld:
              oa = J.io(
                r,
                q,
                r + (2 / 3) * (P.point1X - r),
                q + (2 / 3) * (P.point1Y - q),
                da + (2 / 3) * (P.point1X - da),
                X + (2 / 3) * (P.point1Y - X),
                da,
                X,
                A,
                B,
                h,
                k,
                0.6,
                p,
              );
              break;
            case Md:
            case Qd:
              H = P.type === Md ? Rd(P, y) : Sd(P, y, r, q);
              var Ba = H.length;
              if (0 === Ba) {
                oa = An(
                  r,
                  q,
                  P.type === Md ? P.centerX : P.endX,
                  P.type === Md ? P.centerY : P.endY,
                  A,
                  B,
                  h,
                  k,
                  p,
                );
                break;
              }
              X = null;
              for (da = 0; da < Ba; da++) {
                X = H[da];
                if (0 === da && An(r, q, X[0], X[1], A, B, h, k, p)) {
                  var db = Bn(A, B, p, w, e);
                  db < w && ((w = db), (m = !0));
                }
                J.io(
                  X[0],
                  X[1],
                  X[2],
                  X[3],
                  X[4],
                  X[5],
                  X[6],
                  X[7],
                  A,
                  B,
                  h,
                  k,
                  0.6,
                  p,
                ) && ((db = Bn(A, B, p, w, e)), db < w && ((w = db), (m = !0)));
              }
              da = X[6];
              X = X[7];
              break;
            default:
              C('Unknown Segment type: ' + H);
          }
          r = da;
          q = X;
          oa && ((oa = Bn(A, B, p, w, e)), oa < w && ((w = oa), (m = !0)));
          P.isClosed &&
            ((da = L),
            (X = S),
            An(r, q, da, X, A, B, h, k, p) &&
              ((P = Bn(A, B, p, w, e)), P < w && ((w = P), (m = !0))));
        }
      }
      f = c - a;
      g = d - b;
      h = Math.sqrt(f * f + g * g);
      0 !== h && ((f /= h), (g /= h));
      e.x -= f * n;
      e.y -= g * n;
      I.free(p);
    } else C('Unknown Geometry type: ' + l.type);
    if (!m) return !1;
    this.transform.Fa(e);
    return !0;
  };

  function Bn(a, b, c, d, e) {
    a = c.x - a;
    b = c.y - b;
    b = a * a + b * b;
    return b < d ? ((e.x = c.x), (e.y = c.y), b) : d;
  }

  function An(a, b, c, d, e, f, g, h, k) {
    var l = !1,
      m = (e - g) * (b - d) - (f - h) * (a - c);
    if (0 === m) return !1;
    k.x = ((e * h - f * g) * (a - c) - (e - g) * (a * d - b * c)) / m;
    k.y = ((e * h - f * g) * (b - d) - (f - h) * (a * d - b * c)) / m;
    (a > c ? a - c : c - a) < (b > d ? b - d : d - b)
      ? ((a = b < d ? b : d),
        (b = b < d ? d : b),
        (k.y > a || J.ca(k.y, a)) && (k.y < b || J.ca(k.y, b)) && (l = !0))
      : ((b = a < c ? a : c),
        (a = a < c ? c : a),
        (k.x > b || J.ca(k.x, b)) && (k.x < a || J.ca(k.x, a)) && (l = !0));
    return l;
  }
  t.Wg = function(a, b) {
    if (void 0 === b) return a.Ee(this.actualBounds);
    var c = this.sa;
    null === c && (this.measure(Infinity, Infinity), (c = this.sa));
    c = c.bounds;
    var d = this.strokeWidth / 2,
      e = !1,
      f = I.alloc();
    f.h(c.x - d, c.y - d);
    a.ba(b.Fa(f)) &&
      (f.h(c.x - d, c.bottom + d),
      a.ba(b.Fa(f)) &&
        (f.h(c.right + d, c.bottom + d),
        a.ba(b.Fa(f)) &&
          (f.h(c.right + d, c.y - d), a.ba(b.Fa(f)) && (e = !0))));
    I.free(f);
    return e;
  };
  t.Sc = function(a, b) {
    if (
      this.Wg(a, b) ||
      (void 0 === b && ((b = this.transform), a.Ee(this.actualBounds)))
    )
      return !0;
    var c = md.alloc();
    c.set(b);
    c.Tr();
    var d = a.left,
      e = a.right,
      f = a.top;
    a = a.bottom;
    var g = I.alloc();
    g.h(d, f);
    c.Fa(g);
    if (this.Xg(g, !0)) return I.free(g), !0;
    g.h(e, f);
    c.Fa(g);
    if (this.Xg(g, !0)) return I.free(g), !0;
    g.h(d, a);
    c.Fa(g);
    if (this.Xg(g, !0)) return I.free(g), !0;
    g.h(e, a);
    c.Fa(g);
    if (this.Xg(g, !0)) return I.free(g), !0;
    var h = I.alloc(),
      k = I.alloc();
    c.set(b);
    c.Ou(this.transform);
    c.Tr();
    h.x = e;
    h.y = f;
    h.transform(c);
    g.x = d;
    g.y = f;
    g.transform(c);
    b = !1;
    Cn(this, g, h, k)
      ? (b = !0)
      : ((g.x = e),
        (g.y = a),
        g.transform(c),
        Cn(this, g, h, k)
          ? (b = !0)
          : ((h.x = d),
            (h.y = a),
            h.transform(c),
            Cn(this, g, h, k)
              ? (b = !0)
              : ((g.x = d),
                (g.y = f),
                g.transform(c),
                Cn(this, g, h, k) && (b = !0))));
    I.free(g);
    md.free(c);
    I.free(h);
    I.free(k);
    return b;
  };

  function Cn(a, b, c, d) {
    if (!a.Or(b, c, d)) return !1;
    a = b.x;
    b = b.y;
    var e = c.x,
      f = c.y;
    c = d.x;
    d = d.y;
    if (a === e) return b < f ? ((a = b), (b = f)) : (a = f), d >= a && d <= b;
    a < e ? ((d = a), (a = e)) : (d = e);
    return c >= d && c <= a;
  }
  t.Vw = function(a, b, c) {
    function d(a, b) {
      for (var c = a.length, d = 0; d < c; d += 2)
        if (b.td(a[d], a[d + 1]) > e) return !0;
      return !1;
    }
    if (c && null !== this.fill && this.Xg(a, !0)) return !0;
    var e = a.rf(b),
      f = e;
    1.5 < this.strokeWidth &&
      ((e = this.strokeWidth / 2 + Math.sqrt(e)), (e *= e));
    b = this.sa;
    if (
      null === b &&
      (this.measure(Infinity, Infinity), (b = this.sa), null === b)
    )
      return !1;
    if (!c) {
      var g = b.bounds,
        h = g.x,
        k = g.y,
        l = g.x + g.width;
      g = g.y + g.height;
      if (
        Ab(a.x, a.y, h, k) <= e &&
        Ab(a.x, a.y, l, k) <= e &&
        Ab(a.x, a.y, h, g) <= e &&
        Ab(a.x, a.y, l, g) <= e
      )
        return !0;
    }
    h = b.startX;
    k = b.startY;
    l = b.endX;
    g = b.endY;
    if (b.type === O.j) {
      if (
        ((c = (h - l) * (a.x - l) + (k - g) * (a.y - g)),
        zb(a.x, a.y, h, k, l, g) <=
          (0 <= (l - h) * (a.x - h) + (g - k) * (a.y - k) && 0 <= c ? e : f))
      )
        return !0;
    } else {
      if (b.type === O.u)
        return (
          (b = !1),
          c &&
            (b =
              zb(a.x, a.y, h, k, h, g) <= e ||
              zb(a.x, a.y, h, k, l, k) <= e ||
              zb(a.x, a.y, l, k, l, g) <= e ||
              zb(a.x, a.y, h, g, l, g) <= e),
          b
        );
      if (b.type === O.F) {
        b = a.x - (h + l) / 2;
        f = a.y - (k + g) / 2;
        var m = Math.abs(l - h) / 2,
          n = Math.abs(g - k) / 2;
        if (0 === m || 0 === n) return zb(a.x, a.y, h, k, l, g) <= e ? !0 : !1;
        if (c) {
          if (((a = J.Hy(m, n, b, f)), a * a <= e)) return !0;
        } else
          return Ab(b, f, -m, 0) >= e ||
            Ab(b, f, 0, -n) >= e ||
            Ab(b, f, 0, n) >= e ||
            Ab(b, f, m, 0) >= e
            ? !1
            : !0;
      } else if (b.type === O.m) {
        l = b.bounds;
        f = l.x;
        h = l.y;
        k = l.x + l.width;
        l = l.y + l.height;
        if (
          a.x > k &&
          a.x < f &&
          a.y > l &&
          a.y < h &&
          zb(a.x, a.y, f, h, f, l) > e &&
          zb(a.x, a.y, f, h, k, h) > e &&
          zb(a.x, a.y, k, l, f, l) > e &&
          zb(a.x, a.y, k, l, k, h) > e
        )
          return !1;
        f = Math.sqrt(e);
        if (c) {
          if (null === this.fill ? Vd(b, a.x, a.y, f) : Td(b, a, f, !0, !1))
            return !0;
        } else {
          c = b.figures;
          for (b = 0; b < c.count; b++) {
            f = c.s[b];
            g = f.startX;
            m = f.startY;
            if (a.td(g, m) > e) return !1;
            h = f.segments.s;
            k = h.length;
            for (l = 0; l < k; l++)
              switch (((n = h[l]), n.type)) {
                case Jd:
                case vd:
                  g = n.endX;
                  m = n.endY;
                  if (a.td(g, m) > e) return !1;
                  break;
                case Kd:
                  var p = Ea();
                  J.De(
                    g,
                    m,
                    n.point1X,
                    n.point1Y,
                    n.point2X,
                    n.point2Y,
                    n.endX,
                    n.endY,
                    0.8,
                    p,
                  );
                  g = d(p, a);
                  Ga(p);
                  if (g) return !1;
                  g = n.endX;
                  m = n.endY;
                  if (a.td(g, m) > e) return !1;
                  break;
                case Ld:
                  p = Ea();
                  J.Go(g, m, n.point1X, n.point1Y, n.endX, n.endY, 0.8, p);
                  g = d(p, a);
                  Ga(p);
                  if (g) return !1;
                  g = n.endX;
                  m = n.endY;
                  if (a.td(g, m) > e) return !1;
                  break;
                case Md:
                case Qd:
                  p = n.type === Md ? Rd(n, f) : Sd(n, f, g, m);
                  var r = p.length;
                  if (0 === r) {
                    g = n.type === Md ? n.centerX : n.endX;
                    m = n.type === Md ? n.centerY : n.endY;
                    if (a.td(g, m) > e) return !1;
                    break;
                  }
                  n = null;
                  for (var q = Ea(), u = 0; u < r; u++)
                    if (
                      ((n = p[u]),
                      (q.length = 0),
                      J.De(
                        n[0],
                        n[1],
                        n[2],
                        n[3],
                        n[4],
                        n[5],
                        n[6],
                        n[7],
                        0.8,
                        q,
                      ),
                      d(q, a))
                    )
                      return Ga(q), !1;
                  Ga(q);
                  null !== n && ((g = n[6]), (m = n[7]));
                  break;
                default:
                  C('Unknown Segment type: ' + n.type);
              }
          }
          return !0;
        }
      }
    }
    return !1;
  };
  t.mc = function() {
    this.sa = null;
  };
  t.Sv = function() {
    return this.ag;
  };

  function Dn(a) {
    var b = a.diagram;
    (null !== b && b.undoManager.isUndoingRedoing) ||
      ((a.segmentOrientation = Tm),
      'None' !== a.toArrow
        ? ((a.segmentIndex = -1), (a.alignmentFocus = ed))
        : 'None' !== a.fromArrow &&
          ((a.segmentIndex = 0), (a.alignmentFocus = new N(1 - ed.x, ed.y))));
  }
  Cf.makeGeometry = function(a, b, c) {
    if ('None' !== a.toArrow) var d = En[a.toArrow];
    else
      'None' !== a.fromArrow
        ? (d = En[a.fromArrow])
        : ((d = J.Oe[a.figure]),
          'string' === typeof d && (d = J.Oe[d]),
          void 0 === d && C('Unknown Shape.figure: ' + a.figure),
          (d = d(a, b, c)),
          (d.Hk = b),
          (d.Gk = c));
    if (null === d) {
      var e = J.Oe.Rectangle;
      'function' === typeof e && (d = e(a, b, c));
    }
    return d;
  };

  function Fn(a) {
    var b = En[a];
    if (void 0 === b) {
      var c = a.toLowerCase();
      if ('none' === c) return 'None';
      b = En[c];
      if (void 0 === b) {
        var d = null,
          e;
        for (e in J.dm)
          if (e.toLowerCase() === c) {
            d = e;
            break;
          }
        if (null !== d)
          return (
            (a = O.parse(J.dm[d], !1)), (En[d] = a), c !== d && (En[c] = d), d
          );
      }
    }
    return 'string' === typeof b ? b : b instanceof O ? a : null;
  }
  ma.Object.defineProperties(Cf.prototype, {
    geometry: {
      get: function() {
        return null !== this.sa ? this.sa : this.Hd;
      },
      set: function(a) {
        var b = this.sa,
          c = this.Hd;
        if (b !== a) {
          null !== a
            ? (this.Hd = this.sa = a.freeze())
            : (this.Hd = this.sa = null);
          var d = this.part;
          null !== d && (d.Sf = NaN);
          this.w();
          this.g('geometry', b || c, a);
          el(this) &&
            ((a = this.part), null !== a && fl(this, a, 'geometryString'));
        }
      },
    },
    geometryString: {
      get: function() {
        return null === this.geometry ? '' : this.geometry.toString();
      },
      set: function(a) {
        a = O.parse(a);
        var b = a.normalize();
        this.geometry = a;
        this.position = a = I.allocAt(-b.x, -b.y);
        I.free(a);
      },
    },
    isGeometryPositioned: {
      get: function() {
        return 0 !== (this.o & 1048576);
      },
      set: function(a) {
        var b = 0 !== (this.o & 1048576);
        b !== a &&
          ((this.o ^= 1048576), this.w(), this.g('isGeometryPositioned', b, a));
      },
    },
    fill: {
      get: function() {
        return this.Ak;
      },
      set: function(a) {
        var b = this.Ak;
        b !== a &&
          (null !== a && Pl(a, 'Shape.fill'),
          a instanceof nl && a.freeze(),
          (this.Ak = a),
          this.N(),
          this.g('fill', b, a));
      },
    },
    stroke: {
      get: function() {
        return this.Nc;
      },
      set: function(a) {
        var b = this.Nc;
        b !== a &&
          (null !== a && Pl(a, 'Shape.stroke'),
          a instanceof nl && a.freeze(),
          (this.Nc = a),
          this.N(),
          this.g('stroke', b, a));
      },
    },
    strokeWidth: {
      get: function() {
        return this.ag;
      },
      set: function(a) {
        var b = this.ag;
        if (b !== a)
          if (0 <= a) {
            this.ag = a;
            this.w();
            var c = this.part;
            null !== c && (c.Sf = NaN);
            this.g('strokeWidth', b, a);
          } else wa(a, 'value >= 0', Cf, 'strokeWidth:value');
      },
    },
    strokeCap: {
      get: function() {
        return null !== this.Na ? this.Na.dr : 'butt';
      },
      set: function(a) {
        var b = this.strokeCap;
        b !== a &&
          ('string' !== typeof a ||
          ('butt' !== a && 'round' !== a && 'square' !== a)
            ? wa(a, '"butt", "round", or "square"', Cf, 'strokeCap')
            : (wn(this),
              (this.Na.dr = a),
              this.N(),
              this.g('strokeCap', b, a)));
      },
    },
    strokeJoin: {
      get: function() {
        return null !== this.Na ? this.Na.er : 'miter';
      },
      set: function(a) {
        var b = this.strokeJoin;
        b !== a &&
          ('string' !== typeof a ||
          ('miter' !== a && 'bevel' !== a && 'round' !== a)
            ? wa(a, '"miter", "bevel", or "round"', Cf, 'strokeJoin')
            : (wn(this),
              (this.Na.er = a),
              this.N(),
              this.g('strokeJoin', b, a)));
      },
    },
    strokeMiterLimit: {
      get: function() {
        return null !== this.Na ? this.Na.fr : 10;
      },
      set: function(a) {
        var b = this.strokeMiterLimit;
        if (b !== a && 1 <= a) {
          wn(this);
          this.Na.fr = a;
          this.N();
          var c = this.part;
          null !== c && (c.Sf = NaN);
          this.g('strokeMiterLimit', b, a);
        }
      },
    },
    strokeDashArray: {
      get: function() {
        return this.Og;
      },
      set: function(a) {
        var b = this.Og;
        if (b !== a) {
          if (null !== a) {
            for (var c = a.length, d = 0, e = 0; e < c; e++) {
              var f = a[e];
              (0 <= f && isFinite(f)) ||
                C(
                  'strokeDashArray:value ' +
                    f +
                    ' at index ' +
                    e +
                    ' must be a positive number or zero.',
                );
              d += f;
            }
            if (0 === d) {
              if (null === b) return;
              a = null;
            }
          }
          this.Og = a;
          this.N();
          this.g('strokeDashArray', b, a);
        }
      },
    },
    strokeDashOffset: {
      get: function() {
        return null !== this.Na ? this.Na.pj : 0;
      },
      set: function(a) {
        var b = this.strokeDashOffset;
        b !== a &&
          0 <= a &&
          (wn(this),
          (this.Na.pj = a),
          this.N(),
          this.g('strokeDashOffset', b, a));
      },
    },
    figure: {
      get: function() {
        return this.Jm;
      },
      set: function(a) {
        var b = this.Jm;
        if (b !== a) {
          var c = J.Oe[a];
          'function' === typeof c
            ? (c = a)
            : (c = J.Oe[a.toLowerCase()]) || C('Unknown Shape.figure: ' + a);
          b !== c &&
            ((a = this.part),
            null !== a && (a.Sf = NaN),
            (this.Jm = c),
            (this.Hd = null),
            this.mc(),
            this.w(),
            this.g('figure', b, c));
        }
      },
    },
    toArrow: {
      get: function() {
        return null !== this.Ra ? this.Ra.W : 'None';
      },
      set: function(a) {
        var b = this.toArrow;
        !0 === a ? (a = 'Standard') : !1 === a && (a = '');
        if (b !== a) {
          var c = Fn(a);
          null === c
            ? C('Unknown Shape.toArrow: ' + a)
            : b !== c &&
              (null === this.Ra && (this.Ra = new Ol()),
              (this.Ra.W = c),
              (this.Hd = null),
              this.mc(),
              this.w(),
              Dn(this),
              this.g('toArrow', b, c));
        }
      },
    },
    fromArrow: {
      get: function() {
        return null !== this.Ra ? this.Ra.j : 'None';
      },
      set: function(a) {
        var b = this.fromArrow;
        !0 === a ? (a = 'Standard') : !1 === a && (a = '');
        if (b !== a) {
          var c = Fn(a);
          null === c
            ? C('Unknown Shape.fromArrow: ' + a)
            : b !== c &&
              (null === this.Ra && (this.Ra = new Ol()),
              (this.Ra.j = c),
              (this.Hd = null),
              this.mc(),
              this.w(),
              Dn(this),
              this.g('fromArrow', b, c));
        }
      },
    },
    spot1: {
      get: function() {
        return null !== this.Na ? this.Na.Yf : Wc;
      },
      set: function(a) {
        var b = this.spot1;
        b.C(a) ||
          ((a = a.J()),
          wn(this),
          (this.Na.Yf = a),
          this.w(),
          this.g('spot1', b, a));
      },
    },
    spot2: {
      get: function() {
        return null !== this.Na ? this.Na.Zf : Wc;
      },
      set: function(a) {
        var b = this.spot2;
        b.C(a) ||
          ((a = a.J()),
          wn(this),
          (this.Na.Zf = a),
          this.w(),
          this.g('spot2', b, a));
      },
    },
    parameter1: {
      get: function() {
        return this.Cn;
      },
      set: function(a) {
        var b = this.Cn;
        b !== a &&
          ((this.Cn = a), this.mc(), this.w(), this.g('parameter1', b, a));
      },
    },
    parameter2: {
      get: function() {
        return this.Dn;
      },
      set: function(a) {
        var b = this.Dn;
        b !== a &&
          ((this.Dn = a), this.mc(), this.w(), this.g('parameter2', b, a));
      },
    },
    naturalBounds: {
      get: function() {
        return this.bc;
      },
    },
    pathPattern: {
      get: function() {
        return null !== this.Na ? this.Na.Aq : null;
      },
      set: function(a) {
        var b = this.pathPattern;
        b !== a &&
          (wn(this), (this.Na.Aq = a), this.N(), this.g('pathPattern', b, a));
      },
    },
    geometryStretch: {
      get: function() {
        return null !== this.Na ? this.Na.Mp : Xk;
      },
      set: function(a) {
        var b = this.geometryStretch;
        b !== a &&
          (wn(this),
          (this.Na.Mp = a),
          this.w(),
          this.g('geometryStretch', b, a));
      },
    },
    interval: {
      get: function() {
        return null !== this.fa ? this.fa.Ik : 1;
      },
      set: function(a) {
        var b = this.interval;
        a = Math.round(a);
        if (b !== a && 0 !== a && isFinite(a)) {
          null === this.fa && (this.fa = new Gn());
          this.fa.Ik = a;
          var c = this.diagram;
          null !== c && this.panel === c.grid && jj(c);
          this.w();
          c = this.panel;
          null !== c && (c.graduatedIntervals = null);
          this.g('interval', b, a);
        }
      },
    },
    graduatedStart: {
      get: function() {
        return null !== this.fa ? this.fa.u : 0;
      },
      set: function(a) {
        var b = this.graduatedStart;
        b !== a &&
          (0 > a ? (a = 0) : 1 < a && (a = 1),
          null === this.fa && (this.fa = new Gn()),
          (this.fa.u = a),
          this.w(),
          this.g('graduatedStart', b, a));
      },
    },
    graduatedEnd: {
      get: function() {
        return null !== this.fa ? this.fa.j : 1;
      },
      set: function(a) {
        var b = this.graduatedEnd;
        b !== a &&
          (0 > a ? (a = 0) : 1 < a && (a = 1),
          null === this.fa && (this.fa = new Gn()),
          (this.fa.j = a),
          this.w(),
          this.g('graduatedEnd', b, a));
      },
    },
    graduatedSkip: {
      get: function() {
        return null !== this.fa ? this.fa.m : null;
      },
      set: function(a) {
        var b = this.graduatedSkip;
        b !== a &&
          (null === this.fa && (this.fa = new Gn()),
          (this.fa.m = a),
          this.w(),
          this.g('graduatedSkip', b, a));
      },
    },
  });
  Cf.prototype.intersectsRect = Cf.prototype.Sc;
  Cf.prototype.containedInRect = Cf.prototype.Wg;
  Cf.prototype.getNearestIntersectionPoint = Cf.prototype.Or;
  Cf.prototype.getDocumentBounds = Cf.prototype.gi;
  Cf.prototype.getDocumentPoint = Cf.prototype.ia;
  var En = new Wa(),
    zn = new Wa();
  Cf.className = 'Shape';
  Cf.getFigureGenerators = function() {
    var a = new pb(),
      b;
    for (b in J.Oe) b !== b.toLowerCase() && a.add(b, J.Oe[b]);
    a.freeze();
    return a;
  };
  Cf.defineFigureGenerator = function(a, b) {
    var c = a.toLowerCase(),
      d = J.Oe;
    d[a] = b;
    d[c] = a;
  };
  Cf.getArrowheadGeometries = function() {
    var a = new pb();
    for (d in J.dm)
      if (void 0 === En[d]) {
        var b = O.parse(J.dm[d], !1);
        En[d] = b;
        b = d.toLowerCase();
        b !== d && (En[b] = d);
      }
    for (var c in En)
      if (c !== c.toLowerCase()) {
        var d = En[c];
        d instanceof O && a.add(c, d);
      }
    a.freeze();
    return a;
  };
  Cf.defineArrowheadGeometry = function(a, b) {
    var c = null;
    'string' === typeof b ? (c = O.parse(b, !1)) : (c = b);
    b = a.toLowerCase();
    ('none' !== b && a !== b) ||
      C(
        'Shape.defineArrowheadGeometry name must not be empty or None or all-lower-case: ' +
          a,
      );
    var d = En;
    d[a] = c;
    d[b] = a;
  };

  function xn() {
    this.ic = !1;
    this.dr = 'butt';
    this.er = 'miter';
    this.fr = 10;
    this.pj = 0;
    this.Aq = null;
    this.Mp = Xk;
    this.Zf = this.Yf = Wc;
  }
  xn.prototype.copy = function() {
    var a = new xn();
    a.dr = this.dr;
    a.er = this.er;
    a.fr = this.fr;
    a.pj = this.pj;
    a.Aq = this.Aq;
    a.Mp = this.Mp;
    a.Yf = this.Yf.J();
    a.Zf = this.Zf.J();
    return a;
  };

  function Qg(a, b) {
    Y.call(this);
    Hn || ((In = Og ? new Bk(null).context : null), (Hn = !0));
    this.o |= 2097152;
    this.cc = '';
    this.Nc = 'black';
    this.re = '13px sans-serif';
    this.kq = this.yb = this.dd = 0;
    this.da = this.fa = this.om = this.rt = this.st = null;
    this.zh = 0;
    this.Te = null;
    this.Ae = 0;
    this.qe = this.Wb = this.Jc = null;
    'string' === typeof a ? (this.text = a) : a && Object.assign(this, a);
    b && Object.assign(this, b);
    return this;
  }
  la(Qg, Y);
  Qg.prototype.cloneProtected = function(a) {
    Y.prototype.cloneProtected.call(this, a);
    a.cc = this.cc;
    a.Nc = this.Nc;
    a.re = this.re;
    a.dd = this.dd;
    a.yb = this.yb;
    a.kq = this.kq;
    a.st = this.st;
    a.rt = this.rt;
    a.om = this.om;
    null !== this.fa && (a.fa = this.fa.copy());
    null !== this.da && (a.da = this.da.ic ? this.da : this.da.copy());
    a.zh = this.zh;
    a.Te = this.Te;
    a.Ae = this.Ae;
    a.Jc = this.Jc;
    a.Wb = this.Wb;
    a.qe = this.qe;
  };

  function Jn(a) {
    null === a.da ? (a.da = new Rn()) : a.da.ic && (a.da = a.da.copy());
  }
  t = Qg.prototype;
  t.ih = function() {
    Y.prototype.ih.call(this);
    null !== this.da && (this.da.ic = !0);
  };

  function Sm(a, b) {
    a.o = b.o | 6144;
    a.tb = b.opacity;
    a.Yb = b.background;
    a.areaBackground = b.areaBackground;
    a.$c = b.desiredSize.J();
    a.minSize = b.minSize.J();
    a.maxSize = b.maxSize.J();
    null !== b.Ib ? (a.Ib = b.Ib.copy()) : (a.Ib = null);
    a.xa = b.scale;
    a.Gb = b.angle;
    a.stretch = b.stretch;
    a.Ag = b.margin.J();
    a.Fb = b.alignment.J();
    a.fk = b.alignmentFocus.J();
    a.segmentFraction = b.segmentFraction;
    a.segmentOffset = b.segmentOffset.J();
    a.segmentOrientation = b.segmentOrientation;
    null !== b.ib && (a.ib = b.ib.copy());
    a.shadowVisible = b.shadowVisible;
    a.cc = b.cc;
    a.Nc = b.Nc;
    a.re = b.re;
    null !== a.fa && (a.fa = b.fa.copy());
    null !== b.da && (a.da = b.da.ic ? b.da : b.da.copy());
    a.zh = b.zh;
  }
  t.ob = function(a) {
    a.classType === Qg ? (this.wrap = a) : Y.prototype.ob.call(this, a);
  };
  t.toString = function() {
    return 22 < this.cc.length
      ? 'TextBlock("' + this.cc.substring(0, 20) + '"...)'
      : 'TextBlock("' + this.cc + '")';
  };
  t.w = function() {
    Y.prototype.w.call(this);
    this.rt = this.st = null;
  };
  t.ai = function(a, b) {
    if (null !== this.Nc && 0 !== this.cc.length && null !== this.re) {
      var c = this.naturalBounds,
        d = this.actualBounds,
        e = c.width,
        f = c.height,
        g = Sn(this),
        h = (a.textAlign = this.textAlign),
        k = b.$m;
      'start' === h
        ? (h = k ? 'right' : 'left')
        : 'end' === h && (h = k ? 'left' : 'right');
      k = this.isUnderline;
      var l = this.isStrikethrough;
      gi(this, a, this.Nc, !0, !1, c, d);
      (k || l) && gi(this, a, this.Nc, !1, !1, c, d);
      d = 0;
      c = !1;
      var m = this.ge,
        n = m.dx - (g * m.m21 + m.dx);
      m = m.dy - (g * m.m22 + m.dy);
      var p = b.scale;
      8 > (n * n + m * m) * p * p && (c = !0);
      b.Zb !== a && (c = !1);
      !1 === b.Ge('textGreeking') && (c = !1);
      b = this.spacingAbove;
      n = this.spacingBelow;
      switch (this.flip) {
        case $k:
          a.translate(e, 0);
          a.scale(-1, 1);
          break;
        case Zk:
          a.translate(0, f);
          a.scale(1, -1);
          break;
        case al:
          a.translate(e, f), a.scale(-1, -1);
      }
      a.Pc();
      m = this.dd;
      p = (b + g + n) * m;
      f > p &&
        ((d = this.verticalAlignment), (d = d.y * f - d.y * p + d.offsetY));
      if (1 === m && null !== this.qe)
        (n = this.yb),
          n > e && (n = e),
          this.$h(this.qe, a, 0, d + b, e, g, n, c, h, k, l);
      else if (null !== this.Jc && null !== this.Wb)
        for (p = 0; p < m; p++) {
          var r = this.Jc[p];
          r > e && (r = e);
          d += b;
          this.$h(this.Wb[p], a, 0, d, e, g, r, c, h, k, l);
          d += g + n;
        }
      switch (this.flip) {
        case $k:
          a.scale(-1, 1);
          a.translate(-e, 0);
          break;
        case Zk:
          a.scale(1, -1);
          a.translate(0, -f);
          break;
        case al:
          a.scale(-1, -1), a.translate(-e, -f);
      }
    }
  };
  t.$h = function(a, b, c, d, e, f, g, h, k, l, m) {
    var n = 0;
    h
      ? ('left' === k
          ? (n = 0)
          : 'right' === k
          ? (n = e - g)
          : 'center' === k && (n = (e - g) / 2),
        b.fillRect(c + n, d + 0.25 * f, g, 1))
      : ('left' === k
          ? (n = 0)
          : 'right' === k
          ? (n = e)
          : 'center' === k && (n = e / 2),
        (e = null !== Tn ? Tn(this, f) : 0.75 * f),
        b.fillText(a, c + n, d + e),
        (a = (f / 20) | 0),
        0 === a && (a = 1),
        'right' === k ? (n -= g) : 'center' === k && (n -= g / 2),
        l &&
          ((k = null !== Un ? Un(this, f) : 0.8 * f),
          b.beginPath(),
          (b.lineWidth = a),
          b.moveTo(c + n, d + k),
          b.lineTo(c + n + g, d + k),
          b.stroke()),
        m &&
          (b.beginPath(),
          (b.lineWidth = a),
          (d = (d + f - f / 2.2) | 0),
          0 !== a % 2 && (d += 0.5),
          b.moveTo(c + n, d),
          b.lineTo(c + n + g, d),
          b.stroke()));
  };
  t.El = function(a, b, c, d) {
    this.zh = a;
    var e = this.re;
    null !== In && Vn !== e && (Vn = In.font = e);
    this.yb = this.Ae = 0;
    this.qe = this.Wb = this.Jc = this.Te = null;
    var f;
    if (isNaN(this.desiredSize.width)) {
      e = this.cc.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
      if (0 === e.length) e = 0;
      else if (this.isMultiline) {
        for (var g = (f = 0), h = !1; !h; ) {
          var k = e.indexOf('\n', g);
          -1 === k && ((k = e.length), (h = !0));
          g = e.substr(g, k - g);
          this.formatting === Wn && (g = g.trim());
          f = Math.max(f, Xn(g));
          g = k + 1;
        }
        e = f;
      } else
        (f = e.indexOf('\n', 0)), 0 <= f && (e = e.substr(0, f)), (e = Xn(e));
      e = Math.min(e, a / this.scale);
      e = Math.max(8, e);
    } else e = this.desiredSize.width;
    null !== this.panel && (e = Math.min(e, this.panel.maxSize.width));
    f = Yn(this, e);
    isNaN(this.desiredSize.height)
      ? (f = Math.min(f, b / this.scale))
      : (f = this.desiredSize.height);
    h = f;
    if (
      0 !== this.yb &&
      null !== this.Jc &&
      null !== this.Wb &&
      this.overflow === Zn &&
      ((b = this.re),
      (b = this.overflow === Zn ? $n(b) : 0),
      (k = this.spacingAbove + this.spacingBelow),
      (k = Math.max(0, Sn(this) + k)),
      (h = Math.min(
        this.maxLines - 1,
        Math.max(Math.floor(h / k + 0.01) - 1, 0),
      )),
      !(h + 1 >= this.Wb.length))
    ) {
      k = this.Wb[h];
      for (b = Math.max(1, a - b); Xn(k) > b && 1 < k.length; )
        k = k.substr(0, k.length - 1);
      k += ao;
      b = Xn(k);
      this.Wb[h] = k;
      this.Wb = this.Wb.slice(0, h + 1);
      this.Jc[h] = b;
      this.Jc = this.Jc.slice(0, h + 1);
      this.Ae = this.Wb.length;
      this.yb = Math.max(this.yb, b);
      this.dd = this.Ae;
      1 === this.dd && (this.qe = this.Wb[0]);
    }
    if (this.wrap === bo || isNaN(this.desiredSize.width))
      (e = isNaN(a) ? this.yb : Math.min(a, this.yb)),
        isNaN(this.desiredSize.width) && (e = Math.max(8, e));
    e = Math.max(c, e);
    f = Math.max(d, f);
    Qb(this.bc, e, f);
    this.ve(0, 0, e, f);
  };
  t.Vg = function(a, b, c, d) {
    kl(this, a, b, c, d);
  };

  function co(a, b, c) {
    if (null === a.qe) (a.qe = b), (a.yb = c);
    else {
      if (null === a.Wb || null === a.Jc)
        (a.Wb = []), (a.Jc = []), a.Wb.push(a.qe), a.Jc.push(a.yb);
      a.Wb.push(b);
      a.Jc.push(c);
    }
  }

  function eo(a, b, c, d) {
    var e = a.formatting === Wn;
    e && (b = b.trim());
    var f = 0,
      g = a.re,
      h = a.spacingAbove + a.spacingBelow;
    h = Math.max(0, Sn(a) + h);
    var k = a.overflow === Zn ? $n(g) : 0;
    if (a.dd >= a.maxLines) null !== d && d.h(0, h);
    else if (((g = b), a.wrap === fo)) {
      a.Ae = 1;
      var l = Xn(b);
      if (0 === k || l <= c)
        (a.yb = Math.max(a.yb, l)), co(a, b, a.yb), null !== d && d.h(l, h);
      else {
        f = go(a, g);
        g = g.substr(f.length);
        b = go(a, g);
        for (l = Xn(f + b); 0 < b.length && l <= c; )
          (f += b),
            (g = g.substr(b.length)),
            (b = go(a, g)),
            (l = f + b),
            e && (l = l.trim()),
            (l = Xn(l));
        e && (b = b.trim());
        f += b;
        for (c = Math.max(1, c - k); Xn(f) > c && 1 < f.length; )
          f = f.substr(0, f.length - 1);
        f += ao;
        var m = Xn(f);
        a.yb = m;
        co(a, f, m);
        null !== d && d.h(m, h);
      }
    } else {
      k = 0;
      0 === g.length && ((k = 1), co(a, g, 0));
      for (; 0 < g.length; ) {
        b = go(a, g);
        for (g = g.substr(b.length); Xn(b) > c; ) {
          var n = 1;
          l = Xn(b.substr(0, n));
          for (m = 0; l <= c; ) n++, (m = l), (l = Xn(b.substr(0, n)));
          if (1 === n) {
            var p = l;
            f = Math.max(f, l);
          } else (p = m), (f = Math.max(f, m));
          n--;
          1 > n && (n = 1);
          co(a, b.substr(0, n), p);
          k++;
          b = b.substr(n);
          if (a.dd + k > a.maxLines) break;
        }
        m = go(a, g);
        for (l = Xn(b + m); 0 < m.length && l <= c; )
          (b += m),
            (g = g.substr(m.length)),
            (m = go(a, g)),
            (l = b + m),
            e && (l = l.trim()),
            (l = Xn(l));
        e && (b = b.trim());
        if (
          '' !== b &&
          ('­' === b[b.length - 1] && (b = b.substring(0, b.length - 1) + '‐'),
          0 === m.length
            ? ((n = l), (f = Math.max(f, l)))
            : ((n = m = Xn(b)), (f = Math.max(f, m))),
          co(a, b, n),
          k++,
          a.dd + k > a.maxLines)
        )
          break;
      }
      a.Ae = Math.min(a.maxLines, k);
      a.yb = Math.max(a.yb, f);
      null !== d && d.h(a.yb, h * a.Ae);
    }
  }

  function go(a, b) {
    if (a.wrap === ho) return b.substr(0, 1);
    for (var c = b.length, d = 0, e = io; d < c && !e.test(b.charAt(d)); ) d++;
    for (
      a.formatting === jo && (c = Math.min(c, d + 1));
      d < c && e.test(b.charAt(d));

    )
      d++;
    return d >= b.length ? b : b.substr(0, d);
  }

  function Xn(a) {
    return null === In ? 8 * a.length : In.measureText(a).width;
  }

  function Sn(a) {
    if (null !== a.Te) return a.Te;
    var b = a.re;
    if (null === In) {
      var c = 16;
      return (a.Te = c);
    }
    void 0 !== ko[b] && 5e3 > lo
      ? (c = ko[b])
      : ((c = 1.3 * In.measureText('M').width), (ko[b] = c), lo++);
    return (a.Te = c);
  }

  function $n(a) {
    if (null === In) return 6;
    if (void 0 !== mo[a] && 5e3 > no) var b = mo[a];
    else (b = In.measureText(ao).width), (mo[a] = b), no++;
    return b;
  }

  function Yn(a, b) {
    var c = a.cc.replace(/\r\n/g, '\n').replace(/\r/g, '\n'),
      d = a.spacingAbove + a.spacingBelow;
    d = Math.max(0, Sn(a) + d);
    if (0 === c.length) return (a.yb = 0), (a.dd = 1), d;
    if (!a.isMultiline) {
      var e = c.indexOf('\n', 0);
      0 <= e && (c = c.substr(0, e));
    }
    e = 0;
    for (var f = (a.dd = 0), g, h = !1; !h; ) {
      g = c.indexOf('\n', f);
      -1 === g && ((g = c.length), (h = !0));
      if (f <= g) {
        f = c.substr(f, g - f);
        if (a.wrap !== fo) {
          a.Ae = 0;
          var k = K.alloc();
          eo(a, f, b, k);
          e += k.height;
          K.free(k);
          a.dd += a.Ae;
        } else eo(a, f, b, null), (e += d), a.dd++;
        a.dd === a.maxLines && (h = !0);
      }
      f = g + 1;
    }
    return (a.kq = e);
  }
  ma.Object.defineProperties(Qg.prototype, {
    font: {
      get: function() {
        return this.re;
      },
      set: function(a) {
        var b = this.re;
        b !== a &&
          ((this.re = a), (this.Te = null), this.w(), this.g('font', b, a));
      },
    },
    text: {
      get: function() {
        return this.cc;
      },
      set: function(a) {
        var b = this.cc;
        null !== a && void 0 !== a ? (a = a.toString()) : (a = '');
        b !== a && ((this.cc = a), this.w(), this.g('text', b, a));
      },
    },
    textAlign: {
      get: function() {
        return null !== this.da ? this.da.mr : 'start';
      },
      set: function(a) {
        var b = this.textAlign;
        b === a ||
          ('start' !== a &&
            'end' !== a &&
            'left' !== a &&
            'right' !== a &&
            'center' !== a) ||
          (Jn(this), (this.da.mr = a), this.N(), this.g('textAlign', b, a));
      },
    },
    flip: {
      get: function() {
        return null !== this.da ? this.da.Nf : lg;
      },
      set: function(a) {
        var b = this.flip;
        b !== a && (Jn(this), (this.da.Nf = a), this.N(), this.g('flip', b, a));
      },
    },
    verticalAlignment: {
      get: function() {
        return null !== this.da ? this.da.xr : Zc;
      },
      set: function(a) {
        var b = this.verticalAlignment;
        b.C(a) ||
          ((a = a.J()),
          Jn(this),
          (this.da.xr = a),
          Al(this),
          this.g('verticalAlignment', b, a));
      },
    },
    naturalBounds: {
      get: function() {
        if (!this.bc.v()) {
          var a = K.alloc();
          eo(this, this.cc, 999999, a);
          var b = a.width;
          K.free(a);
          a = Yn(this, b);
          var c = this.desiredSize;
          isNaN(c.width) || (b = c.width);
          isNaN(c.height) || (a = c.height);
          Qb(this.bc, b, a);
        }
        return this.bc;
      },
    },
    isMultiline: {
      get: function() {
        return 0 !== (this.o & 2097152);
      },
      set: function(a) {
        var b = 0 !== (this.o & 2097152);
        b !== a && ((this.o ^= 2097152), this.w(), this.g('isMultiline', b, a));
      },
    },
    isUnderline: {
      get: function() {
        return 0 !== (this.o & 4194304);
      },
      set: function(a) {
        var b = 0 !== (this.o & 4194304);
        b !== a && ((this.o ^= 4194304), this.N(), this.g('isUnderline', b, a));
      },
    },
    isStrikethrough: {
      get: function() {
        return 0 !== (this.o & 8388608);
      },
      set: function(a) {
        var b = 0 !== (this.o & 8388608);
        b !== a &&
          ((this.o ^= 8388608), this.N(), this.g('isStrikethrough', b, a));
      },
    },
    wrap: {
      get: function() {
        return null !== this.da ? this.da.Ar : oo;
      },
      set: function(a) {
        var b = this.wrap;
        b !== a && (Jn(this), (this.da.Ar = a), this.w(), this.g('wrap', b, a));
      },
    },
    overflow: {
      get: function() {
        return null !== this.da ? this.da.yq : po;
      },
      set: function(a) {
        var b = this.overflow;
        b !== a &&
          (Jn(this), (this.da.yq = a), this.w(), this.g('overflow', b, a));
      },
    },
    stroke: {
      get: function() {
        return this.Nc;
      },
      set: function(a) {
        var b = this.Nc;
        b !== a &&
          (null !== a && Pl(a, 'TextBlock.stroke'),
          a instanceof nl && a.freeze(),
          (this.Nc = a),
          this.N(),
          this.g('stroke', b, a));
      },
    },
    lineCount: {
      get: function() {
        return this.dd;
      },
    },
    lineHeight: {
      get: function() {
        return Sn(this);
      },
    },
    editable: {
      get: function() {
        return 0 !== (this.o & 1048576);
      },
      set: function(a) {
        var b = 0 !== (this.o & 1048576);
        b !== a && ((this.o ^= 1048576), this.g('editable', b, a));
      },
    },
    textEditor: {
      get: function() {
        return null !== this.da ? this.da.pr : null;
      },
      set: function(a) {
        var b = this.textEditor;
        b !== a && (Jn(this), (this.da.pr = a), this.g('textEditor', b, a));
      },
    },
    errorFunction: {
      get: function() {
        return null !== this.da ? this.da.zd : null;
      },
      set: function(a) {
        var b = this.errorFunction;
        b !== a && (Jn(this), (this.da.zd = a), this.g('errorFunction', b, a));
      },
    },
    interval: {
      get: function() {
        return null !== this.fa ? this.fa.Ik : 1;
      },
      set: function(a) {
        var b = this.interval;
        a = Math.round(a);
        if (b !== a && 0 !== a && isFinite(a)) {
          null === this.fa && (this.fa = new Gn());
          this.fa.Ik = a;
          this.w();
          var c = this.panel;
          null !== c && (c.graduatedIntervals = null);
          this.g('interval', b, a);
        }
      },
    },
    graduatedStart: {
      get: function() {
        return null !== this.fa ? this.fa.u : 0;
      },
      set: function(a) {
        var b = this.graduatedStart;
        b !== a &&
          (0 > a ? (a = 0) : 1 < a && (a = 1),
          null === this.fa && (this.fa = new Gn()),
          (this.fa.u = a),
          this.w(),
          this.g('graduatedStart', b, a));
      },
    },
    graduatedEnd: {
      get: function() {
        return null !== this.fa ? this.fa.j : 1;
      },
      set: function(a) {
        var b = this.graduatedEnd;
        b !== a &&
          (0 > a ? (a = 0) : 1 < a && (a = 1),
          null === this.fa && (this.fa = new Gn()),
          (this.fa.j = a),
          this.w(),
          this.g('graduatedEnd', b, a));
      },
    },
    graduatedFunction: {
      get: function() {
        return null !== this.fa ? this.fa.F : null;
      },
      set: function(a) {
        var b = this.graduatedFunction;
        b !== a &&
          (null === this.fa && (this.fa = new Gn()),
          (this.fa.F = a),
          this.w(),
          this.g('graduatedFunction', b, a));
      },
    },
    graduatedSkip: {
      get: function() {
        return null !== this.fa ? this.fa.m : null;
      },
      set: function(a) {
        var b = this.graduatedSkip;
        b !== a &&
          (null === this.fa && (this.fa = new Gn()),
          (this.fa.m = a),
          this.w(),
          this.g('graduatedSkip', b, a));
      },
    },
    textValidation: {
      get: function() {
        return null !== this.da ? this.da.qj : null;
      },
      set: function(a) {
        var b = this.textValidation;
        b !== a && (Jn(this), (this.da.qj = a), this.g('textValidation', b, a));
      },
    },
    textEdited: {
      get: function() {
        return null !== this.da ? this.da.nr : null;
      },
      set: function(a) {
        var b = this.textEdited;
        b !== a && (Jn(this), (this.da.nr = a), this.g('textEdited', b, a));
      },
    },
    spacingAbove: {
      get: function() {
        return null !== this.da ? this.da.$q : 0;
      },
      set: function(a) {
        var b = this.spacingAbove;
        b !== a &&
          (Jn(this), (this.da.$q = a), this.w(), this.g('spacingAbove', b, a));
      },
    },
    spacingBelow: {
      get: function() {
        return null !== this.da ? this.da.ar : 0;
      },
      set: function(a) {
        var b = this.spacingBelow;
        b !== a &&
          (Jn(this), (this.da.ar = a), this.w(), this.g('spacingBelow', b, a));
      },
    },
    formatting: {
      get: function() {
        return null !== this.da ? this.da.Jp : Wn;
      },
      set: function(a) {
        var b = this.formatting;
        b !== a &&
          (Jn(this), (this.da.Jp = a), this.w(), this.g('formatting', b, a));
      },
    },
    maxLines: {
      get: function() {
        return null !== this.da ? this.da.iq : Infinity;
      },
      set: function(a) {
        var b = this.maxLines;
        b !== a &&
          ((a = Math.floor(a)),
          0 >= a && wa(a, '> 0', Qg, 'maxLines'),
          Jn(this),
          (this.da.iq = a),
          this.w(),
          this.g('maxLines', b, a));
      },
    },
    metrics: {
      get: function() {
        return {
          arrSize: null !== this.Jc ? this.Jc : [this.yb],
          arrText: null !== this.Wb ? this.Wb : [this.qe],
          maxLineWidth: this.yb,
          fontHeight: this.Te,
        };
      },
    },
    choices: {
      get: function() {
        return this.om;
      },
      set: function(a) {
        var b = this.om;
        b !== a && ((this.om = a), this.g('choices', b, a));
      },
    },
  });
  var Tn = null,
    Un = null,
    fo = new D(Qg, 'None', 0),
    bo = new D(Qg, 'WrapFit', 1),
    oo = new D(Qg, 'WrapDesiredSize', 2),
    ho = new D(Qg, 'WrapBreakAll', 3),
    po = new D(Qg, 'OverflowClip', 0),
    Zn = new D(Qg, 'OverflowEllipsis', 1),
    Wn = new D(Qg, 'FormatTrim', 0),
    jo = new D(Qg, 'FormatNone', 0),
    io = /[ ​­]/,
    ko = new Wa(),
    lo = 0,
    mo = new Wa(),
    no = 0,
    ao = '...',
    Vn = '',
    In = null,
    Hn = !1;
  Qg.className = 'TextBlock';

  function Rn() {
    this.ic = !1;
    this.zd = null;
    this.Nf = lg;
    this.Jp = Wn;
    this.iq = Infinity;
    this.yq = po;
    this.ar = this.$q = 0;
    this.mr = 'start';
    this.qj = this.pr = this.nr = null;
    this.xr = Zc;
    this.Ar = oo;
  }
  Rn.prototype.copy = function() {
    var a = new Rn();
    a.zd = this.zd;
    a.Nf = this.Nf;
    a.Jp = this.Jp;
    a.iq = this.iq;
    a.yq = this.yq;
    a.$q = this.$q;
    a.ar = this.ar;
    a.mr = this.mr;
    a.nr = this.nr;
    a.pr = this.pr;
    a.qj = this.qj;
    a.xr = this.xr;
    a.Ar = this.Ar;
    return a;
  };
  Qg.getEllipsis = function() {
    return ao;
  };
  Qg.setEllipsis = function(a) {
    ao = a;
    mo = new Wa();
    no = 0;
  };
  Qg.getBaseline = function() {
    return Tn;
  };
  Qg.setBaseline = function(a) {
    Tn = a;
  };
  Qg.getUnderline = function() {
    return Un;
  };
  Qg.setUnderline = function(a) {
    Un = a;
  };
  Qg.isValidFont = function(a) {
    Hn || ((In = Og ? new Bk(null).context : null), (Hn = !0));
    if (null === In) return !0;
    var b = In.font;
    if (a === b || '10px sans-serif' === a) return !0;
    In.font = '10px sans-serif';
    In.font = a;
    var c = In.font;
    if ('10px sans-serif' !== c) return (In.font = b), !0;
    In.font = '19px serif';
    var d = In.font;
    In.font = a;
    c = In.font;
    In.font = b;
    return c !== d;
  };
  Qg.FormatNone = jo;
  Qg.FormatTrim = Wn;
  Qg.None = fo;
  Qg.OverflowClip = po;
  Qg.OverflowEllipsis = Zn;
  Qg.WrapBreakAll = ho;
  Qg.WrapDesiredSize = oo;
  Qg.WrapFit = bo;

  function Gn() {
    this.Ik = 1;
    this.u = 0;
    this.j = 1;
    this.m = this.F = null;
  }
  Gn.prototype.copy = function() {
    var a = new Gn();
    a.Ik = this.Ik;
    a.u = this.u;
    a.j = this.j;
    a.F = this.F;
    a.m = this.m;
    return a;
  };
  Gn.className = 'GradElementSettings';

  function Wj(a, b) {
    Y.call(this);
    this.vg = null;
    this.Tn = '';
    this.Ng = dc;
    this.Ck = td;
    this.Pg = this.zd = null;
    this.Bk = yc;
    this.Nf = lg;
    this.kl = null;
    this.Xm = !1;
    this.Mm = !0;
    this.Qk = !1;
    this.gl = null;
    'string' === typeof a ? (this.source = a) : a && Object.assign(this, a);
    b && Object.assign(this, b);
  }
  var qo;
  la(Wj, Y);
  Wj.prototype.cloneProtected = function(a) {
    Y.prototype.cloneProtected.call(this, a);
    a.element = this.vg;
    a.Tn = this.Tn;
    a.Ng = this.Ng.J();
    a.Ck = this.Ck;
    a.Nf = this.Nf;
    a.zd = this.zd;
    a.Pg = this.Pg;
    a.Bk = this.Bk.J();
    a.Mm = this.Mm;
    a.gl = this.gl;
  };
  Wj.prototype.ob = function(a) {
    a === lg || a === ng || a === Yk
      ? (this.imageStretch = a)
      : Y.prototype.ob.call(this, a);
  };
  Wj.prototype.toString = function() {
    return 'Picture(' + this.source + ')#' + cb(this);
  };

  function Bi(a) {
    void 0 === a && (a = '');
    '' !== a ? qo[a] && (delete qo[a], ro--) : ((qo = new Wa()), (ro = 0));
  }

  function so(a, b) {
    b.Wx ||
      ((b.fq = function(c) {
        b.Up = !0;
        b.Sm = !1;
        var d = b.sg.copy();
        if (null !== d && void 0 !== d) {
          for (d = d.iterator; d.next(); ) {
            var e = d.value;
            var f = b.getAttribute('src') || '';
            var g = e.Fg.I(f);
            if (null !== g)
              for (var h = g.length, k = 0; k < h; k++)
                (f = g[k]),
                  e.Fn.add(f),
                  e.Mb(),
                  b.Pm &&
                    (void 0 === b.Kt && (b.Kt = c),
                    null !== f.Pg && f.Pg(f, c));
          }
          b.sg.clear();
        }
        a.desiredSize.v() || (ij(a, !1), a.w());
      }),
      (b.Bp = function(a) {
        b.Sm = a;
        var c = b.sg.copy();
        if (null !== c && void 0 !== c) {
          for (c = c.iterator; c.next(); ) {
            var e = c.value,
              f = b.getAttribute('src') || '';
            var g = e.Fg.I(f);
            if (null !== g) {
              e = g.length;
              f = Ea();
              for (var h = 0; h < e; h++) f.push(g[h]);
              if (b.Pm)
                for (h = 0; h < e; h++) (g = f[h]), null !== g.zd && g.zd(g, a);
              Ga(f);
            }
          }
          b.sg.clear();
        }
      }),
      b.addEventListener('load', b.fq),
      b.addEventListener('error', b.Bp),
      (b.Wx = !0));
  }

  function Yj(a) {
    a.fq && a.removeEventListener('load', a.fq);
    a.Bp && a.removeEventListener('error', a.Bp);
    delete a.fq;
    delete a.Bp;
  }
  Wj.prototype.Oz = function() {
    if ('' !== this.source) {
      Bi(this.source);
      var a = this.source;
      this.source = '';
      this.source = a;
    }
  };
  Wj.prototype.redraw = function() {
    this.N();
  };
  Wj.prototype.ai = function(a, b) {
    var c = this.vg;
    if (null !== c) {
      var d = c.getAttribute('src');
      if (
        !(
          (c instanceof HTMLImageElement && (null === d || '' === d)) ||
          (c.Sm instanceof Event && a instanceof vl)
        )
      ) {
        d = this.naturalBounds;
        var e = 0,
          f = 0,
          g = this.Xm,
          h = g ? +c.width : c.naturalWidth;
        g = g ? +c.height : c.naturalHeight;
        void 0 === h && c.videoWidth && (h = c.videoWidth);
        void 0 === g && c.videoHeight && (g = c.videoHeight);
        h = h || d.width;
        g = g || d.height;
        if (0 !== h && 0 !== g) {
          var k = h,
            l = g;
          this.sourceRect.v() &&
            ((e = this.Ng.x),
            (f = this.Ng.y),
            (h = this.Ng.width),
            (g = this.Ng.height));
          var m = h,
            n = g,
            p = this.Ck,
            r = this.Bk;
          switch (p) {
            case lg:
              if (this.sourceRect.v()) break;
              m >= d.width && (e = e + r.offsetX + (m * r.x - d.width * r.x));
              n >= d.height && (f = f + r.offsetY + (n * r.y - d.height * r.y));
              h = Math.min(d.width, m);
              g = Math.min(d.height, n);
              break;
            case td:
              m = d.width;
              n = d.height;
              break;
            case ng:
            case Yk:
              p === ng
                ? ((p = Math.min(d.height / n, d.width / m)),
                  (m *= p),
                  (n *= p))
                : p === Yk &&
                  ((p = Math.max(d.height / n, d.width / m)),
                  (m *= p),
                  (n *= p),
                  m >= d.width &&
                    (e = (e + r.offsetX + (m * r.x - d.width * r.x) / m) * h),
                  n >= d.height &&
                    (f = (f + r.offsetY + (n * r.y - d.height * r.y) / n) * g),
                  (h *= 1 / (m / d.width)),
                  (g *= 1 / (n / d.height)),
                  (m = d.width),
                  (n = d.height));
          }
          p = this.uf() * b.scale;
          var q = m * p * n * p,
            u = (h * g) / q,
            w = c.__goCache;
          p = null;
          var v = to;
          if (c.Up && void 0 !== w && 4 < q && u > v * v)
            for (
              null === w.Zh && (uo(w, 4, k, l, c), uo(w, 16, k, l, c)),
                k = w.Zh,
                l = k.length,
                q = 0;
              q < l;
              q++
            )
              if (k[q].ratio * k[q].ratio < u) p = k[q];
              else break;
          if (!b.Fm) {
            if (null === this.kl)
              if (null === this.vg) this.kl = !1;
              else {
                k = new Bk(null).context;
                try {
                  k.drawImage(this.vg, 0, 0);
                } catch (z) {
                  this.Mm = !1;
                }
                try {
                  k.getImageData(0, 0, 1, 1).data[3] && (this.kl = !1),
                    (this.kl = !1);
                } catch (z) {
                  this.kl = !0;
                }
              }
            if (this.kl) return;
          }
          k = 0;
          m < d.width && (k = r.offsetX + (d.width * r.x - m * r.x));
          l = 0;
          n < d.height && (l = r.offsetY + (d.height * r.y - n * r.y));
          switch (this.flip) {
            case $k:
              a.translate(Math.min(d.width, m), 0);
              a.scale(-1, 1);
              break;
            case Zk:
              a.translate(0, Math.min(d.height, n));
              a.scale(1, -1);
              break;
            case al:
              a.translate(Math.min(d.width, m), Math.min(d.height, n)),
                a.scale(-1, -1);
          }
          a.Pc();
          if (
            b.Ge('pictureRatioOptimization') &&
            !b.Vi &&
            void 0 !== w &&
            null !== p &&
            1 !== p.ratio
          ) {
            a.save();
            b = p.ratio;
            try {
              a.drawImage(
                p.source,
                e / b,
                f / b,
                Math.min(p.source.width, h / b),
                Math.min(p.source.height, g / b),
                k,
                l,
                Math.min(d.width, m),
                Math.min(d.height, n),
              );
            } catch (z) {
              this.Mm = !1;
            }
            a.restore();
          } else
            try {
              a.drawImage(
                c,
                e,
                f,
                h,
                g,
                k,
                l,
                Math.min(d.width, m),
                Math.min(d.height, n),
              );
            } catch (z) {
              this.Mm = !1;
            }
          switch (this.flip) {
            case $k:
              a.scale(-1, 1);
              a.translate(-Math.min(d.width, m), 0);
              break;
            case Zk:
              a.scale(1, -1);
              a.translate(0, -Math.min(d.height, n));
              break;
            case al:
              a.scale(-1, -1),
                a.translate(-Math.min(d.width, m), -Math.min(d.height, n));
          }
        }
      }
    }
  };
  Wj.prototype.El = function(a, b, c, d) {
    var e = this.desiredSize,
      f = il(this, !0),
      g = this.vg,
      h = this.Xm;
    if (h || (!this.Qk && g && g.complete)) this.Qk = !0;
    null === g && (isFinite(e.width) || (a = 0), isFinite(e.height) || (b = 0));
    isFinite(e.width) || f === td || f === Vk
      ? (isFinite(a) ||
          (this.sourceRect.v()
            ? (a = this.sourceRect.width)
            : null !== g && (a = h ? +g.width : g.naturalWidth)),
        (c = 0))
      : null !== g &&
        !1 !== this.Qk &&
        (a = this.sourceRect.v()
          ? this.sourceRect.width
          : h
          ? +g.width
          : g.naturalWidth);
    isFinite(e.height) || f === td || f === Wk
      ? (isFinite(b) ||
          (this.sourceRect.v()
            ? (b = this.sourceRect.height)
            : null !== g && (b = h ? +g.height : g.naturalHeight)),
        (d = 0))
      : null !== g &&
        !1 !== this.Qk &&
        (b = this.sourceRect.v()
          ? this.sourceRect.height
          : h
          ? +g.height
          : g.naturalHeight);
    isFinite(e.width) && (a = e.width);
    isFinite(e.height) && (b = e.height);
    e = this.maxSize;
    f = this.minSize;
    c = Math.max(c || 0, f.width);
    d = Math.max(d || 0, f.height);
    a = Math.min(e.width, a);
    b = Math.min(e.height, b);
    a = Math.max(c, a);
    b = Math.max(d, b);
    null === g ||
      g.complete ||
      (isFinite(a) || (a = 0), isFinite(b) || (b = 0));
    Qb(this.bc, a, b);
    this.ve(0, 0, a, b);
  };
  Wj.prototype.Vg = function(a, b, c, d) {
    kl(this, a, b, c, d);
  };
  ma.Object.defineProperties(Wj.prototype, {
    element: {
      get: function() {
        return this.vg;
      },
      set: function(a) {
        var b = this.vg;
        if (b !== a) {
          this.Xm = a instanceof HTMLCanvasElement;
          var c = a instanceof HTMLImageElement;
          b instanceof HTMLImageElement && Yj(b);
          null === a ||
            c ||
            a instanceof HTMLVideoElement ||
            this.Xm ||
            C(
              'Picture.element must be an instance of Image, Canvas, or Video, not: ' +
                a,
            );
          var d = this.diagram;
          null !== d && Xj(d, this);
          this.vg = a;
          null !== a && c && void 0 === a.sg && (a.sg = new G());
          null !== d && c && Vj(d, this);
          null !== a &&
            (this.Xm || !0 === a.complete
              ? (a.Pm &&
                  (a.Sm instanceof Event && null !== this.zd
                    ? this.zd(this, a.Sm)
                    : !0 === a.Up &&
                      !a.Sm &&
                      null !== this.Pg &&
                      a.Kt &&
                      this.Pg(this, a.Kt)),
                (a.Up = !0),
                this.desiredSize.v() || (ij(this, !1), this.w()))
              : c && so(this, a));
          this.g('element', b, a);
          this.N();
        }
      },
    },
    source: {
      get: function() {
        return this.Tn;
      },
      set: function(a) {
        var b = this.Tn;
        if (b !== a) {
          this.Tn = a;
          var c = qo;
          if (Og) {
            if (void 0 !== c[a]) var d = c[a];
            else if ('' !== a) {
              30 < ro && (Bi(), (c = qo));
              d = ua('img');
              d.Pm = !0;
              so(this, d);
              var e = this.gl;
              null !== e && (d.crossOrigin = e(this));
              d.src = a;
              c[a] = d;
              ro++;
            }
            this.element = d;
            null !== d && void 0 === d.__goCache && (d.__goCache = new vo());
            this.w();
            this.N();
          }
          this.g('source', b, a);
        }
      },
    },
    sourceCrossOrigin: {
      get: function() {
        return this.gl;
      },
      set: function(a) {
        if (this.gl !== a && ((this.gl = a), null !== this.element)) {
          var b = this.element.getAttribute('src');
          null === a && 'string' === typeof b
            ? (this.element.crossOrigin = null)
            : null !== a && (this.element.crossOrigin = a(this));
          this.element.src = b;
        }
      },
    },
    sourceRect: {
      get: function() {
        return this.Ng;
      },
      set: function(a) {
        var b = this.Ng;
        b.C(a) || ((this.Ng = a = a.J()), this.N(), this.g('sourceRect', b, a));
      },
    },
    imageStretch: {
      get: function() {
        return this.Ck;
      },
      set: function(a) {
        var b = this.Ck;
        b !== a && ((this.Ck = a), this.N(), this.g('imageStretch', b, a));
      },
    },
    flip: {
      get: function() {
        return this.Nf;
      },
      set: function(a) {
        var b = this.Nf;
        b !== a && ((this.Nf = a), this.N(), this.g('flip', b, a));
      },
    },
    imageAlignment: {
      get: function() {
        return this.Bk;
      },
      set: function(a) {
        var b = this.Bk;
        b.C(a) ||
          ((this.Bk = a = a.J()), this.N(), this.g('imageAlignment', b, a));
      },
    },
    errorFunction: {
      get: function() {
        return this.zd;
      },
      set: function(a) {
        var b = this.zd;
        b !== a && ((this.zd = a), this.g('errorFunction', b, a));
      },
    },
    successFunction: {
      get: function() {
        return this.Pg;
      },
      set: function(a) {
        var b = this.Pg;
        b !== a && ((this.Pg = a), this.g('successFunction', b, a));
      },
    },
    naturalBounds: {
      get: function() {
        return this.bc;
      },
    },
  });
  Wj.prototype.redraw = Wj.prototype.redraw;
  Wj.prototype.reloadSource = Wj.prototype.Oz;
  var ro = 0,
    to = 4;
  Wj.className = 'Picture';
  qo = new Wa();
  Wj.clearCache = Bi;

  function vo() {
    this.Zh = null;
  }

  function uo(a, b, c, d, e) {
    null === a.Zh && (a.Zh = []);
    var f = new Bk(null),
      g = f.context,
      h = 1 / b;
    f.width = c / b;
    f.height = d / b;
    0 !== f.width &&
      0 !== f.height &&
      ((b = new wo(f.Sa, b)),
      (c = 1),
      0 < a.Zh.length &&
        ((c = a.Zh[a.Zh.length - 1]), (e = c.source), (c = c.ratio)),
      g.setTransform(h * c, 0, 0, h * c, 0, 0),
      g.Pc(),
      g.drawImage(e, 0, 0),
      a.Zh.push(b));
  }
  vo.className = 'PictureCacheArray';

  function wo(a, b) {
    this.source = a;
    this.ratio = b;
  }
  wo.className = 'PictureCacheInstance';

  function xo() {
    this.Lr = new O();
    this.pc = null;
  }
  xo.prototype.reset = function(a) {
    null !== a
      ? (a.ja(), (this.Lr = a), a.figures.clear())
      : (this.Lr = new O());
    this.pc = null;
  };

  function xd(a, b, c, d, e) {
    a.pc = new Xd();
    a.pc.startX = b;
    a.pc.startY = c;
    a.pc.isFilled = d;
    a.Lr.figures.add(a.pc);
    void 0 !== e && (a.pc.isShadowed = e);
  }

  function Gd(a) {
    var b = a.pc.segments.length;
    0 < b && a.pc.segments.K(b - 1).close();
  }
  xo.prototype.Xl = function(a) {
    this.pc.isShadowed = a;
  };
  xo.prototype.moveTo = function(a, b, c) {
    void 0 === c && (c = !1);
    var d = new Yd(Jd);
    d.endX = a;
    d.endY = b;
    c && d.close();
    this.pc.segments.add(d);
  };
  xo.prototype.lineTo = function(a, b, c) {
    void 0 === c && (c = !1);
    var d = new Yd(vd);
    d.endX = a;
    d.endY = b;
    c && d.close();
    this.pc.segments.add(d);
  };

  function yd(a, b, c, d, e, f, g) {
    var h;
    void 0 === h && (h = !1);
    var k = new Yd(Kd);
    k.point1X = b;
    k.point1Y = c;
    k.point2X = d;
    k.point2Y = e;
    k.endX = f;
    k.endY = g;
    h && k.close();
    a.pc.segments.add(k);
  }

  function zd(a, b, c, d, e) {
    var f;
    void 0 === f && (f = !1);
    var g = new Yd(Ld);
    g.point1X = b;
    g.point1Y = c;
    g.endX = d;
    g.endY = e;
    f && g.close();
    a.pc.segments.add(g);
  }
  xo.prototype.arcTo = function(a, b, c, d, e, f, g) {
    void 0 === f && (f = 0);
    void 0 === g && (g = !1);
    var h = new Yd(Md);
    h.startAngle = a;
    h.sweepAngle = b;
    h.centerX = c;
    h.centerY = d;
    h.radiusX = e;
    h.radiusY = 0 !== f ? f : e;
    g && h.close();
    this.pc.segments.add(h);
  };

  function Ad(a, b, c, d, e, f, g, h) {
    var k;
    void 0 === k && (k = !1);
    b = new Yd(Qd, g, h, b, c, d, e, f);
    k && b.close();
    a.pc.segments.add(b);
  }

  function wd(a) {
    var b = Hd;
    if (null !== b) return (Hd = null), b.reset(a), b;
    b = new xo();
    b.reset(a);
    return b;
  }
  var Hd = null;
  xo.className = 'StreamGeometryContext';

  function yo(a, b) {
    var c = a.toLowerCase(),
      d = J.Oe;
    d[a] = b;
    d[c] = a;
  }
  yo('Rectangle', function(a, b, c) {
    a = 'r' + b + ',' + c;
    var d = J.Df[a];
    if (void 0 !== d) return d;
    d = new O(O.u);
    d.endX = b;
    d.endY = c;
    J.Ef < J.em && ((J.Df[a] = d), J.Ef++);
    return d;
  });
  yo('Square', function(a, b, c) {
    a = 's' + b + ',' + c;
    var d = J.Df[a];
    if (void 0 !== d) return d;
    d = new O(O.u);
    d.endX = b;
    d.endY = c;
    d.defaultStretch = ng;
    J.Ef < J.em && ((J.Df[a] = d), J.Ef++);
    return d;
  });
  yo('RoundedRectangle', function(a, b, c) {
    a = a ? a.parameter1 : NaN;
    if (isNaN(a) || 0 > a) a = 5;
    a = Math.min(a, b / 3);
    a = Math.min(a, c / 3);
    var d = 'rr' + b + ',' + c + ',' + a,
      e = J.Df[d];
    if (void 0 !== e) return e;
    var f = a * J.ng;
    e = new O().add(
      new Xd(a, 0, !0)
        .add(new Yd(vd, b - a, 0))
        .add(new Yd(Kd, b, a, b - f, 0, b, f))
        .add(new Yd(vd, b, c - a))
        .add(new Yd(Kd, b - a, c, b, c - f, b - f, c))
        .add(new Yd(vd, a, c))
        .add(new Yd(Kd, 0, c - a, f, c, 0, c - f))
        .add(new Yd(vd, 0, a))
        .add(new Yd(Kd, a, 0, 0, f, f, 0).close()),
    );
    1 < f && ((e.spot1 = new N(0, 0, f, f)), (e.spot2 = new N(1, 1, -f, -f)));
    J.Ef < J.em && ((J.Df[d] = e), J.Ef++);
    return e;
  });
  yo('Border', 'RoundedRectangle');
  yo('Ellipse', function(a, b, c) {
    a = 'e' + b + ',' + c;
    var d = J.Df[a];
    if (void 0 !== d) return d;
    d = new O(O.F);
    d.endX = b;
    d.endY = c;
    d.spot1 = gd;
    d.spot2 = hd;
    J.Ef < J.em && ((J.Df[a] = d), J.Ef++);
    return d;
  });
  yo('Circle', function(a, b, c) {
    a = 'c' + b + ',' + c;
    var d = J.Df[a];
    if (void 0 !== d) return d;
    d = new O(O.F);
    d.endX = b;
    d.endY = c;
    d.spot1 = gd;
    d.spot2 = hd;
    d.defaultStretch = ng;
    J.Ef < J.em && ((J.Df[a] = d), J.Ef++);
    return d;
  });
  yo('TriangleRight', function(a, b, c) {
    return new O()
      .add(
        new Xd(0, 0).add(new Yd(vd, b, 0.5 * c)).add(new Yd(vd, 0, c).close()),
      )
      .Yl(0, 0.25, 0.5, 0.75);
  });
  yo('TriangleDown', function(a, b, c) {
    return new O()
      .add(
        new Xd(0, 0).add(new Yd(vd, b, 0)).add(new Yd(vd, 0.5 * b, c).close()),
      )
      .Yl(0.25, 0, 0.75, 0.5);
  });
  yo('TriangleLeft', function(a, b, c) {
    return new O()
      .add(
        new Xd(b, c).add(new Yd(vd, 0, 0.5 * c)).add(new Yd(vd, b, 0).close()),
      )
      .Yl(0.5, 0.25, 1, 0.75);
  });
  yo('TriangleUp', function(a, b, c) {
    return new O()
      .add(
        new Xd(b, c).add(new Yd(vd, 0, c)).add(new Yd(vd, 0.5 * b, 0).close()),
      )
      .Yl(0.25, 0.5, 0.75, 1);
  });
  yo('Triangle', 'TriangleUp');
  yo('Diamond', function(a, b, c) {
    return new O()
      .add(
        new Xd(0.5 * b, 0)
          .add(new Yd(vd, 0, 0.5 * c))
          .add(new Yd(vd, 0.5 * b, c))
          .add(new Yd(vd, b, 0.5 * c).close()),
      )
      .Yl(0.25, 0.25, 0.75, 0.75);
  });
  yo('LineH', function(a, b, c) {
    a = new O(O.j);
    a.startX = 0;
    a.startY = c / 2;
    a.endX = b;
    a.endY = c / 2;
    return a;
  });
  yo('LineV', function(a, b, c) {
    a = new O(O.j);
    a.startX = b / 2;
    a.startY = 0;
    a.endX = b / 2;
    a.endY = c;
    return a;
  });
  yo('None', 'Rectangle');
  yo('BarH', 'Rectangle');
  yo('BarV', 'Rectangle');
  yo('MinusLine', 'LineH');
  yo('PlusLine', function(a, b, c) {
    return new O().add(
      new Xd(0, c / 2, !1)
        .add(new Yd(vd, b, c / 2))
        .add(new Yd(Jd, b / 2, 0))
        .add(new Yd(vd, b / 2, c)),
    );
  });
  yo('XLine', function(a, b, c) {
    return new O().add(
      new Xd(0, c, !1)
        .add(new Yd(vd, b, 0))
        .add(new Yd(Jd, 0, 0))
        .add(new Yd(vd, b, c)),
    );
  });
  yo('LineRight', function(a, b, c) {
    return new O().add(
      new Xd(0.25 * b, 0, !1)
        .add(new Yd(vd, 0.75 * b, 0.5 * c))
        .add(new Yd(vd, 0.25 * b, c)),
    );
  });
  yo('LineDown', function(a, b, c) {
    return new O().add(
      new Xd(0, 0.25 * c, !1)
        .add(new Yd(vd, 0.5 * b, 0.75 * c))
        .add(new Yd(vd, b, 0.25 * c)),
    );
  });
  yo('LineLeft', function(a, b, c) {
    return new O().add(
      new Xd(0.75 * b, 0, !1)
        .add(new Yd(vd, 0.25 * b, 0.5 * c))
        .add(new Yd(vd, 0.75 * b, c)),
    );
  });
  yo('LineUp', function(a, b, c) {
    return new O().add(
      new Xd(0, 0.75 * c, !1)
        .add(new Yd(vd, 0.5 * b, 0.25 * c))
        .add(new Yd(vd, b, 0.75 * c)),
    );
  });
  J.dm = {
    '': '',
    Standard: 'F1 m 0,0 l 8,4 -8,4 2,-4 z',
    Backward: 'F1 m 8,0 l -2,4 2,4 -8,-4 z',
    Triangle: 'F1 m 0,0 l 8,4.62 -8,4.62 z',
    BackwardTriangle: 'F1 m 8,4 l 0,4 -8,-4 8,-4 0,4 z',
    Boomerang: 'F1 m 0,0 l 8,4 -8,4 4,-4 -4,-4 z',
    BackwardBoomerang: 'F1 m 8,0 l -8,4 8,4 -4,-4 4,-4 z',
    SidewaysV: 'm 0,0 l 8,4 -8,4 0,-1 6,-3 -6,-3 0,-1 z',
    BackwardV: 'm 8,0 l -8,4 8,4 0,-1 -6,-3 6,-3 0,-1 z',
    OpenTriangle: 'm 0,0 l 8,4 -8,4',
    BackwardOpenTriangle: 'm 8,0 l -8,4 8,4',
    OpenTriangleLine: 'm 0,0 l 8,4 -8,4 m 8.5,0 l 0,-8',
    BackwardOpenTriangleLine: 'm 8,0 l  -8,4 8,4 m -8.5,0 l 0,-8',
    OpenTriangleTop: 'm 0,0 l 8,4 m 0,4',
    BackwardOpenTriangleTop: 'm 8,0 l -8,4 m 0,4',
    OpenTriangleBottom: 'm 0,8 l 8,-4',
    BackwardOpenTriangleBottom: 'm 0,4 l 8,4',
    HalfTriangleTop: 'F1 m 0,0 l 0,4 8,0 z m 0,8',
    BackwardHalfTriangleTop: 'F1 m 8,0 l 0,4 -8,0 z m 0,8',
    HalfTriangleBottom: 'F1 m 0,4 l 0,4 8,-4 z',
    BackwardHalfTriangleBottom: 'F1 m 8,4 l 0,4 -8,-4 z',
    ForwardSemiCircle: 'm 4,0 b 270 180 0 4 4',
    BackwardSemiCircle: 'm 4,8 b 90 180 0 -4 4',
    Feather: 'm 0,0 l 3,4 -3,4',
    BackwardFeather: 'm 3,0 l -3,4 3,4',
    DoubleFeathers: 'm 0,0 l 3,4 -3,4 m 3,-8 l 3,4 -3,4',
    BackwardDoubleFeathers: 'm 3,0 l -3,4 3,4 m 3,-8 l -3,4 3,4',
    TripleFeathers: 'm 0,0 l 3,4 -3,4 m 3,-8 l 3,4 -3,4 m 3,-8 l 3,4 -3,4',
    BackwardTripleFeathers:
      'm 3,0 l -3,4 3,4 m 3,-8 l -3,4 3,4 m 3,-8 l -3,4 3,4',
    ForwardSlash: 'm 0,8 l 5,-8',
    BackSlash: 'm 0,0 l 5,8',
    DoubleForwardSlash: 'm 0,8 l 4,-8 m -2,8 l 4,-8',
    DoubleBackSlash: 'm 0,0 l 4,8 m -2,-8 l 4,8',
    TripleForwardSlash: 'm 0,8 l 4,-8 m -2,8 l 4,-8 m -2,8 l 4,-8',
    TripleBackSlash: 'm 0,0 l 4,8 m -2,-8 l 4,8 m -2,-8 l 4,8',
    Fork: 'm 0,4 l 8,0 m -8,0 l 8,-4 m -8,4 l 8,4',
    BackwardFork: 'm 8,4 l -8,0 m 8,0 l -8,-4 m 8,4 l -8,4',
    LineFork: 'm 0,0 l 0,8 m 0,-4 l 8,0 m -8,0 l 8,-4 m -8,4 l 8,4',
    BackwardLineFork: 'm 8,4 l -8,0 m 8,0 l -8,-4 m 8,4 l -8,4 m 8,-8 l 0,8',
    CircleFork:
      'F1 m 6,4 b 0 360 -3 0 3 z m 0,0 l 6,0 m -6,0 l 6,-4 m -6,4 l 6,4',
    BackwardCircleFork:
      'F1 m 0,4 l 6,0 m -6,-4 l 6,4 m -6,4 l 6,-4 m 6,0 b 0 360 -3 0 3',
    CircleLineFork:
      'F1 m 6,4 b 0 360 -3 0 3 z m 1,-4 l 0,8 m 0,-4 l 6,0 m -6,0 l 6,-4 m -6,4 l 6,4',
    BackwardCircleLineFork:
      'F1 m 0,4 l 6,0 m -6,-4 l 6,4 m -6,4 l 6,-4 m 0,-4 l 0,8 m 7,-4 b 0 360 -3 0 3',
    Circle: 'F1 m 8,4 b 0 360 -4 0 4 z',
    Block: 'F1 m 0,0 l 0,8 8,0 0,-8 z',
    StretchedDiamond: 'F1 m 0,3 l 5,-3 5,3 -5,3 -5,-3 z',
    Diamond: 'F1 m 0,4 l 4,-4 4,4 -4,4 -4,-4 z',
    Chevron: 'F1 m 0,0 l 5,0 3,4 -3,4 -5,0 3,-4 -3,-4 z',
    StretchedChevron: 'F1 m 0,0 l 8,0 3,4 -3,4 -8,0 3,-4 -3,-4 z',
    NormalArrow: 'F1 m 0,2 l 4,0 0,-2 4,4 -4,4 0,-2 -4,0 z',
    X: 'm 0,0 l 8,8 m 0,-8 l -8,8',
    TailedNormalArrow:
      'F1 m 0,0 l 2,0 1,2 3,0 0,-2 2,4 -2,4 0,-2 -3,0 -1,2 -2,0 1,-4 -1,-4 z',
    DoubleTriangle: 'F1 m 0,0 l 4,4 -4,4 0,-8 z  m 4,0 l 4,4 -4,4 0,-8 z',
    BigEndArrow: 'F1 m 0,0 l 5,2 0,-2 3,4 -3,4 0,-2 -5,2 0,-8 z',
    ConcaveTailArrow: 'F1 m 0,2 h 4 v -2 l 4,4 -4,4 v -2 h -4 l 2,-2 -2,-2 z',
    RoundedTriangle:
      'F1 m 0,1 a 1,1 0 0 1 1,-1 l 7,3 a 0.5,1 0 0 1 0,2 l -7,3 a 1,1 0 0 1 -1,-1 l 0,-6 z',
    SimpleArrow:
      'F1 m 1,2 l -1,-2 2,0 1,2 -1,2 -2,0 1,-2 5,0 0,-2 2,2 -2,2 0,-2 z',
    AccelerationArrow:
      'F1 m 0,0 l 0,8 0.2,0 0,-8 -0.2,0 z m 2,0 l 0,8 1,0 0,-8 -1,0 z m 3,0 l 2,0 2,4 -2,4 -2,0 0,-8 z',
    BoxArrow: 'F1 m 0,0 l 4,0 0,2 2,0 0,-2 2,4 -2,4 0,-2 -2,0 0,2 -4,0 0,-8 z',
    TriangleLine: 'F1 m 8,4 l -8,-4 0,8 8,-4 z m 0.5,4 l 0,-8',
    CircleEndedArrow:
      'F1 m 10,4 l -2,-3 0,2 -2,0 0,2 2,0 0,2 2,-3 z m -4,0 b 0 360 -3 0 3 z',
    DynamicWidthArrow:
      'F1 m 0,3 l 2,0 2,-1 2,-2 2,4 -2,4 -2,-2 -2,-1 -2,0 0,-2 z',
    EquilibriumArrow: 'm 0,3 l 8,0 -3,-3 m 3,5 l -8,0 3,3',
    FastForward:
      'F1 m 0,0 l 3.5,4 0,-4 3.5,4 0,-4 1,0 0,8 -1,0 0,-4 -3.5,4 0,-4 -3.5,4 0,-8 z',
    Kite: 'F1 m 0,4 l 2,-4 6,4 -6,4 -2,-4 z',
    HalfArrowTop: 'F1 m 0,0 l 4,4 4,0 -8,-4 z m 0,8',
    HalfArrowBottom: 'F1 m 0,8 l 4,-4 4,0 -8,4 z',
    OpposingDirectionDoubleArrow:
      'F1 m 0,4 l 2,-4 0,2 4,0 0,-2 2,4 -2,4 0,-2 -4,0 0,2 -2,-4 z',
    PartialDoubleTriangle: 'F1 m 0,0 4,3 0,-3 4,4 -4,4 0,-3 -4,3 0,-8 z',
    LineCircle: 'F1 m 0,0 l 0,8 m 7 -4 b 0 360 -3 0 3 z',
    DoubleLineCircle: 'F1 m 0,0 l 0,8 m 2,-8 l 0,8 m 7 -4 b 0 360 -3 0 3 z',
    TripleLineCircle:
      'F1 m 0,0 l 0,8 m 2,-8 l 0,8 m 2,-8 l 0,8 m 7 -4 b 0 360 -3 0 3 z',
    CircleLine: 'F1 m 6 4 b 0 360 -3 0 3 z m 1,-4 l 0,8',
    DiamondCircle: 'F1 m 8,4 l -4,4 -4,-4 4,-4 4,4 m 8,0 b 0 360 -4 0 4 z',
    PlusCircle: 'F1 m 8,4 b 0 360 -4 0 4 l -8 0 z m -4 -4 l 0 8',
    OpenRightTriangleTop: 'm 8,0 l 0,4 -8,0 m 0,4',
    OpenRightTriangleBottom: 'm 8,8 l 0,-4 -8,0',
    Line: 'm 0,0 l 0,8',
    DoubleLine: 'm 0,0 l 0,8 m 2,0 l 0,-8',
    TripleLine: 'm 0,0 l 0,8 m 2,0 l 0,-8 m 2,0 l 0,8',
    PentagonArrow: 'F1 m 8,4 l -4,-4 -4,0 0,8 4,0 4,-4 z',
  };

  function zo() {
    this.ic = !1;
    this.Qq = this.np = this.Zp = null;
    this.Sq = '';
    this.Eq = this.Qp = this.Rq = null;
    this.Gq = '';
    this.Fq = Mb;
    this.Hq = null;
    this.Iq = '';
    this.Kq = Wc;
    this.gq = '';
    this.hq = tc;
    this.oq = rb;
    this.jq = sb;
    this.yp = null;
    this.bq = 127;
    this.Wq = tb;
    this.Vq = 'gray';
    this.Lg = 4;
  }
  zo.prototype.copy = function() {
    var a = new zo();
    a.Zp = this.Zp;
    a.np = this.np;
    a.Qq = this.Qq;
    a.Sq = this.Sq;
    a.Rq = this.Rq;
    a.Qp = this.Qp;
    a.Eq = this.Eq;
    a.Gq = this.Gq;
    a.Fq = this.Fq.J();
    a.Hq = this.Hq;
    a.Iq = this.Iq;
    a.Kq = this.Kq.J();
    a.gq = this.gq;
    a.hq = this.hq.J();
    a.oq = this.oq.J();
    a.jq = this.jq.J();
    a.yp = this.yp;
    a.bq = this.bq;
    a.Wq = this.Wq.J();
    a.Vq = this.Vq;
    a.Lg = this.Lg;
    return a;
  };

  function U(a, b) {
    void 0 === a || a instanceof Ll || 'string' === typeof a
      ? W.call(this, a)
      : (W.call(this), a && (b = a));
    this.G = 2408959;
    this.Jf = '';
    this.O = null;
    this.zg = '';
    this.Hf = this.Kg = null;
    this.cc = '';
    this.ph = this.Ah = null;
    this.de = new I(NaN, NaN).freeze();
    this.af = null;
    this.eo = NaN;
    this.aw = -1;
    this.Vx = new M();
    this.Kh = null;
    this.Sf = NaN;
    b && Object.assign(this, b);
  }
  la(U, W);
  U.prototype.cloneProtected = function(a) {
    W.prototype.cloneProtected.call(this, a);
    a.G = (this.G & -4097) | 49152;
    a.Jf = this.Jf;
    null !== this.O && (a.O = this.O.ic ? this.O : this.O.copy());
    a.zg = this.zg;
    a.Hf = null;
    a.cc = this.cc;
    a.de.assign(this.de);
    a.eo = this.eo;
  };
  t = U.prototype;
  t.qf = function(a) {
    W.prototype.qf.call(this, a);
    a.dh();
    a.Kg = null;
    a.af = null;
    a.Kh = null;
  };
  t.toString = function() {
    var a = Ha(this.constructor) + '#' + cb(this);
    null !== this.data && (a += '(' + Ia(this.data) + ')');
    return a;
  };

  function Ao(a) {
    null === a.O ? (a.O = new zo()) : a.O.ic && (a.O = a.O.copy());
  }
  t.ih = function() {
    W.prototype.ih.call(this);
    null !== this.O && (this.O.ic = !0);
  };
  t.$j = function(a, b, c, d, e, f, g) {
    var h = this.diagram;
    null !== h &&
      (a === fe && 'elements' === b
        ? e instanceof W
          ? Aj(e, function(a) {
              Cj(h.partManager, a);
              Bj(h, a);
            })
          : Vj(h, e)
        : a === ge &&
          'elements' === b &&
          (e instanceof W
            ? Aj(e, function(a) {
                Fj(h.partManager, a, h);
              })
            : Xj(h, e)),
      h.bb(a, b, c, d, e, f, g));
  };
  t.Ka = function(a) {
    W.prototype.Ka.call(this, a);
    if (null !== this.data) {
      for (var b = this.R.s, c = b.length, d = 0; d < c; d++) {
        var e = b[d];
        e instanceof W &&
          Aj(e, function(a) {
            null !== a.data && a.Ka();
          });
      }
      for (b = this.adornments; b.next(); ) b.value.Ka(a);
    }
  };
  U.prototype.updateRelationshipsFromData = function() {
    var a;
    null !== this.data &&
      (null === (a = this.diagram) || void 0 === a
        ? void 0
        : a.partManager.updateRelationshipsFromData(this));
  };
  U.prototype.Hj = function(a) {
    var b = this.Hf;
    return null === b ? null : b.I(a);
  };
  U.prototype.Tg = function(a, b) {
    if (null !== b) {
      var c = null,
        d = this.Hf;
      null !== d && (c = d.I(a));
      if (c !== b) {
        if (null !== c) {
          var e = c.diagram;
          null !== e && e.remove(c);
        }
        null === d && (this.Hf = d = new pb());
        b.Jf !== a && (b.category = a);
        d.add(a, b);
        a = this.diagram;
        null !== a &&
          (a.add(b),
          (a = b.adornedObject),
          null !== a && ((a = a.Yg()), null !== a && (b.data = a.data)));
      }
    }
  };
  U.prototype.Af = function(a) {
    var b = this.Hf;
    if (null !== b) {
      var c = b.I(a);
      if (null !== c) {
        var d = c.diagram;
        null !== d && d.remove(c);
      }
      b.remove(a);
      0 === b.count && (this.Hf = null);
    }
  };
  U.prototype.zj = function() {
    var a = this.Hf;
    if (null !== a) {
      var b = Ea();
      for (a = a.iterator; a.next(); ) b.push(a.key);
      a = b.length;
      for (var c = 0; c < a; c++) this.Af(b[c]);
      Ga(b);
    }
  };
  U.prototype.updateAdornments = function() {
    var a = this.diagram;
    if (null !== a) {
      for (var b = this.adornments; b.next(); ) {
        var c = b.value;
        c.w();
        c.placeholder && c.placeholder.w();
      }
      a: {
        if (
          this.isSelected &&
          this.selectionAdorned &&
          ((b = this.selectionObject),
          null !== b &&
            this.actualBounds.v() &&
            this.isVisible() &&
            b.zf() &&
            b.actualBounds.v())
        ) {
          c = this.Hj('Selection');
          if (null === c) {
            c = this.selectionAdornmentTemplate;
            null === c &&
              (c = this.eh()
                ? a.linkSelectionAdornmentTemplate
                : this instanceof qf
                ? a.groupSelectionAdornmentTemplate
                : a.nodeSelectionAdornmentTemplate);
            if (!(c instanceof ue)) break a;
            kg(c);
            c = c.copy();
            null !== c &&
              (this.eh() &&
                this.selectionObject === this.path &&
                (c.type = W.Link),
              (c.adornedObject = b));
          }
          if (null !== c) {
            c.type === W.Link && c.w();
            this.Tg('Selection', c);
            break a;
          }
        }
        this.Af('Selection');
      }
      Bo(this, a);
      for (b = this.adornments; b.next(); ) b.value.Ka();
    }
  };
  U.prototype.Rb = function() {
    var a = this.diagram;
    null !== a &&
      (Ri(a), (0 !== (this.G & 16384)) !== !0 && ((this.G |= 16384), a.Mb()));
  };

  function ei(a) {
    (0 !== (a.G & 16384)) !== !1 && (a.updateAdornments(), (a.G &= -16385));
  }

  function Bo(a, b) {
    b.toolManager.mouseDownTools.each(function(b) {
      b.isEnabled && b.updateAdornments(a);
    });
    b.toolManager.updateAdornments(a);
  }

  function Co(a) {
    if (!1 === pj(a)) {
      Do(a, !0);
      a.Jk();
      var b = a.diagram;
      null !== b && (b.te.add(a), b.Mb());
    }
  }

  function Eo(a) {
    a.G |= 2097152;
    if (!1 !== pj(a)) {
      var b = a.position,
        c = a.location;
      (c.v() && b.v()) || Fo(a, b, c);
      c = a.Eb;
      var d = M.alloc().assign(c);
      c.ja();
      c.x = b.x;
      c.y = b.y;
      c.freeze();
      a.Fl(d, c);
      M.free(d);
      Do(a, !1);
    }
  }
  U.prototype.ve = function(a, b, c, d) {
    var e = this.qc;
    e.h(a, b, c, d);
    null === this.Ib && (this.Ib = new md());
    var f = this.Ib;
    f.reset();
    this.Qn(f, a, b, c, d);
    this.Ib = f;
    f.Ur() || f.So(e);
  };
  U.prototype.Qn = function(a, b, c, d, e) {
    1 !== this.xa && a.scale(this.xa);
    if (0 !== this.Gb) {
      var f = yc;
      this.locationSpot.pb() && (f = this.locationSpot);
      var g = I.alloc();
      if (this.locationObject !== this)
        for (
          b = this.locationObject,
            c = b.naturalBounds,
            g.pi(c.x, c.y, c.width, c.height, f),
            null !== b.Ib && b.Ib.Fa(g),
            g.offset(-b.measuredBounds.x, -b.measuredBounds.y),
            f = b.panel;
          null !== f && f !== this;

        )
          null !== f.Ib && f.Ib.Fa(g),
            g.offset(-f.measuredBounds.x, -f.measuredBounds.y),
            (f = f.panel);
      else g.pi(b, c, d, e, f);
      a.rotate(this.Gb, g.x, g.y);
      I.free(g);
    }
  };
  U.prototype.move = function(a, b) {
    !0 === b ? (this.location = a) : (this.position = a);
  };
  U.prototype.moveTo = function(a, b, c) {
    a = I.allocAt(a, b);
    this.move(a, c);
    I.free(a);
  };
  U.prototype.isVisible = function() {
    if (!this.visible) return !1;
    var a = this.layer;
    if (null !== a) {
      if (!a.visible) return !1;
      a = a.diagram;
      if (null !== a && a.animationManager.es(this)) return !0;
    }
    a = this.containingGroup;
    return null === a || (a.isSubGraphExpanded && a.isVisible()) ? !0 : !1;
  };
  U.prototype.Ub = function(a) {
    var b = this.diagram;
    a
      ? (this.D(4), this.Rb(), null !== b && b.te.add(this))
      : (this.D(8), this.zj());
    this.dh();
    null !== b && (b.Va(), b.N());
  };
  U.prototype.fb = function(a) {
    if (this.name === a) return this;
    var b = this.Kh;
    null === b && (this.Kh = b = new pb());
    if (null !== b.I(a)) return b.I(a);
    var c = W.prototype.fb.call(this, a);
    if (null !== c) return b.set(a, c), c;
    b.set(a, null);
    return null;
  };

  function Go(a, b, c, d) {
    void 0 === d && (d = new I());
    c = c.Fc() ? yc : c;
    var e = b.naturalBounds;
    d.h(e.width * c.x + c.offsetX, e.height * c.y + c.offsetY);
    if (null === b || b === a) return d;
    b.transform.Fa(d);
    for (b = b.panel; null !== b && b !== a; ) b.transform.Fa(d), (b = b.panel);
    null !== a.Ib && a.Ib.Fa(d);
    d.offset(-a.qc.x, -a.qc.y);
    return d;
  }
  U.prototype.gi = function(a) {
    void 0 === a && (a = new M());
    return a.assign(this.actualBounds);
  };
  U.prototype.Za = function() {
    !0 === nj(this) && this.measure(Infinity, Infinity);
    this.arrange();
  };

  function yj(a, b) {
    var c = a.Vx;
    isNaN(a.Sf) && (a.Sf = cn(a));
    var d = a.Sf;
    var e = 2 * d;
    if (!a.isShadowed)
      return (
        c.h(b.x - 1 - d, b.y - 1 - d, b.width + 2 + e, b.height + 2 + e), c
      );
    d = b.x;
    e = b.y;
    var f = b.width;
    b = b.height;
    var g = a.shadowBlur;
    a = a.shadowOffset;
    f += g;
    b += g;
    d -= g / 2;
    e -= g / 2;
    0 < a.x ? (f += a.x) : ((d += a.x), (f -= a.x));
    0 < a.y ? (b += a.y) : ((e += a.y), (b -= a.y));
    c.h(d - 1, e - 1, f + 2, b + 2);
    return c;
  }
  U.prototype.arrange = function() {
    if (!1 === oj(this)) Eo(this);
    else {
      jl(this, !1);
      var a = this.Eb,
        b = M.alloc();
      b.assign(a);
      var c = ig(this);
      this.Vg(0, 0, this.qc.width, this.qc.height);
      var d = this.position;
      Fo(this, d, this.location);
      a.ja();
      a.x = d.x;
      a.y = d.y;
      a.freeze();
      this.Fl(b, a);
      b.C(a)
        ? this.Pd(c)
        : !this.Tc() ||
          (J.B(b.width, a.width) && J.B(b.height, a.height)) ||
          (0 <= this.aw && this.D(16));
      M.free(b);
      Do(this, !1);
    }
  };
  t = U.prototype;
  t.Fl = function(a, b) {
    var c = this.diagram;
    if (null !== c) {
      var d = !1;
      if (!1 === c.Si && a.v()) {
        var e = M.alloc();
        e.assign(c.documentBounds);
        e.jv(c.padding);
        a.x > e.x &&
          a.y > e.y &&
          a.right < e.right &&
          a.bottom < e.bottom &&
          b.x > e.x &&
          b.y > e.y &&
          b.right < e.right &&
          b.bottom < e.bottom &&
          (d = !0);
        M.free(e);
      }
      ((0 !== (this.G & 65536)) !== !0 && a.C(b)) || Dj(this, d, c);
      c.N();
      (!a.v() && !b.v()) ||
        Tb(a, b) ||
        (this instanceof V && !c.undoManager.isUndoingRedoing && this.vd(),
        this.dh());
    }
  };
  t.fv = function(a, b, c) {
    if (this.eh() || !a.v()) return !1;
    var d = this.diagram;
    null !== d && Ho(this, d, a, b, c);
    this.pa = a;
    this.G &= -2097153;
    !this.de.v() ||
      (null !== d &&
        !d.animationManager.isTicking &&
        d.undoManager.isUndoingRedoing) ||
      ((d = this.de),
      (this.de = new I(d.x + (a.x - b), d.y + (a.y - c))),
      this.g('location', d, this.de.copy()));
    !1 === pj(this) && !1 === oj(this) && (Co(this), Eo(this));
    return !0;
  };

  function Ho(a, b, c, d, e) {
    null === b ||
      a instanceof ue ||
      ((b = b.animationManager), b.zb && xh(b, a, new I(d, e), c));
  }
  t.Ul = function(a, b, c) {
    var d = this.de,
      e = this.pa;
    if (c) {
      if (d.x === a && d.y === b) return;
      pj(this) || oj(this) ? e.h(NaN, NaN) : e.h(e.x + a - d.x, e.y + b - d.y);
      d.h(a, b);
    } else {
      if (e.x === a && e.y === b) return;
      pj(this) || oj(this) ? this.ns() : d.h(d.x + a - e.x, d.y + b - e.y);
      e.h(a, b);
    }
    Co(this);
  };
  t.ns = function() {
    this.G &= -2097153;
    Co(this);
  };

  function Fo(a, b, c) {
    var d = I.alloc(),
      e = a.locationObject,
      f = e.naturalBounds,
      g = e instanceof Cf ? e.strokeWidth : 0;
    d.pi(0, 0, f.width + g, f.height + g, a.locationSpot);
    if (e !== a)
      for (
        d.offset(-g / 2, -g / 2), e.transform.Fa(d), e = e.panel;
        null !== e && e !== a;

      )
        e.transform.Fa(d), (e = e.panel);
    null !== a.Ib && a.Ib.Fa(d);
    d.offset(-a.qc.x, -a.qc.y);
    e = a.diagram;
    f = c.v();
    g = b.v();
    f && g
      ? 0 !== (a.G & 2097152)
        ? Io(a, b, c, e, d)
        : Jo(a, b, c, e, d)
      : f
      ? Io(a, b, c, e, d)
      : g && Jo(a, b, c, e, d);
    a.G |= 2097152;
    I.free(d);
    a.Jk();
  }

  function Io(a, b, c, d, e) {
    var f = b.x,
      g = b.y;
    b.h(c.x - e.x, c.y - e.y);
    null !== d &&
      ((c = d.animationManager),
      (d = c.defaultAnimation.isAnimating) ||
        !c.zb ||
        a instanceof ue ||
        xh(c, a, new I(f, g), b),
      d || (b.x === f && b.y === g) || a.g('position', new I(f, g), b.copy()));
  }

  function Jo(a, b, c, d, e) {
    var f = c.copy();
    c.h(b.x + e.x, b.y + e.y);
    c.C(f) || null === d || a.g('location', f, c.copy());
  }

  function Dj(a, b, c) {
    ll(a, !1);
    a instanceof V && lk(c, a);
    a.layer.isTemporary || b || c.Va();
    b = a.Eb;
    var d = c.viewportBounds;
    d.v()
      ? ig(a)
        ? (Yb(b, d) || a.Pd(!1), a.updateAdornments())
        : b.Sc(d)
        ? (a.Pd(!0), a.updateAdornments())
        : a.Rb()
      : (c.Ui = !0);
  }
  t.mi = function() {
    return !0;
  };
  t.Tc = function() {
    return !0;
  };
  t.eh = function() {
    return !1;
  };
  t.li = function() {
    return !0;
  };

  function Ko(a, b, c, d) {
    b.constructor === a.constructor ||
      Lo ||
      ((Lo = !0),
      xa(
        'Should not change the class of the Part when changing category from "' +
          c +
          '" to "' +
          d +
          '"',
      ),
      xa(
        '  Old class: ' +
          Ha(a.constructor) +
          ', new class: ' +
          Ha(b.constructor) +
          ', part: ' +
          a.toString(),
      ));
    a.zj();
    var e = a.data;
    c = a.layerName;
    var f = a.isSelected,
      g = a.isHighlighted,
      h = !0,
      k = !0,
      l = !1;
    a instanceof V &&
      ((h = a.isTreeLeaf), (k = a.isTreeExpanded), (l = a.wasTreeExpanded));
    b.qf(a);
    b.cloneProtected(a);
    a.Jf = d;
    a.w();
    a.N();
    b = a.diagram;
    d = !0;
    null !== b && ((d = b.skipsUndoManager), (b.skipsUndoManager = !0));
    a.qb = e;
    a.G = f ? a.G | 4096 : a.G & -4097;
    a.G = g ? a.G | 524288 : a.G & -524289;
    a instanceof V &&
      ((a.U = h ? a.U | 4 : a.U & -5),
      (a.U = k ? a.U | 1 : a.U & -2),
      (a.U = l ? a.U | 2 : a.U & -3));
    null !== e && a.Ka();
    e = a.layerName;
    e !== c && ((a.zg = c), (a.layerName = e));
    null !== b && (b.skipsUndoManager = d);
    a.Tc() && a.D(64);
  }
  U.prototype.canCopy = function() {
    if (!this.copyable) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowCopy) return !1;
    a = a.diagram;
    return null === a ? !0 : a.allowCopy ? !0 : !1;
  };
  U.prototype.canDelete = function() {
    if (!this.deletable) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowDelete) return !1;
    a = a.diagram;
    return null === a ? !0 : a.allowDelete ? !0 : !1;
  };
  U.prototype.canEdit = function() {
    if (!this.textEditable) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowTextEdit) return !1;
    a = a.diagram;
    return null === a ? !0 : a.allowTextEdit ? !0 : !1;
  };
  U.prototype.canGroup = function() {
    if (!this.groupable) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowGroup) return !1;
    a = a.diagram;
    return null === a ? !0 : a.allowGroup ? !0 : !1;
  };
  U.prototype.canMove = function() {
    if (!this.movable) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowMove) return !1;
    a = a.diagram;
    return null === a ? !0 : a.allowMove ? !0 : !1;
  };
  U.prototype.canReshape = function() {
    if (!this.reshapable) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowReshape) return !1;
    a = a.diagram;
    return null === a ? !0 : a.allowReshape ? !0 : !1;
  };
  U.prototype.canResize = function() {
    if (!this.resizable) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowResize) return !1;
    a = a.diagram;
    return null === a ? !0 : a.allowResize ? !0 : !1;
  };
  U.prototype.canRotate = function() {
    if (!this.rotatable) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowRotate) return !1;
    a = a.diagram;
    return null === a ? !0 : a.allowRotate ? !0 : !1;
  };
  U.prototype.canSelect = function() {
    if (!this.selectable) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowSelect) return !1;
    a = a.diagram;
    return null === a ? !0 : a.allowSelect ? !0 : !1;
  };

  function pj(a) {
    return 0 !== (a.G & 32768);
  }

  function Do(a, b) {
    a.G = b ? a.G | 32768 : a.G & -32769;
  }

  function ll(a, b) {
    a.G = b ? a.G | 65536 : a.G & -65537;
  }

  function ig(a) {
    return 0 !== (a.G & 131072);
  }
  t = U.prototype;
  t.Pd = function(a) {
    this.G = a ? this.G | 131072 : this.G & -131073;
  };

  function Mo(a, b) {
    a.G = b ? a.G | 1048576 : a.G & -1048577;
  }
  t.dh = function() {
    var a = this.containingGroup;
    null !== a && (a.w(), null !== a.placeholder && a.placeholder.w(), a.vd());
  };
  t.N = function() {
    var a = this.diagram;
    null !== a &&
      !oj(this) &&
      !pj(this) &&
      this.isVisible() &&
      this.Eb.v() &&
      a.N(yj(this, this.Eb));
  };
  t.w = function() {
    W.prototype.w.call(this);
    var a = this.diagram;
    null !== a &&
      (a.te.add(this),
      this instanceof V && null !== this.labeledLink && Al(this.labeledLink),
      a.Mb(!0));
  };
  t.yo = function(a) {
    a || ((a = this.ph), null !== a && No(a, this));
  };
  t.zo = function(a) {
    a || ((a = this.ph), null !== a && Oo(a, this));
  };
  t.Fj = function() {
    var a = this.data;
    if (null !== a) {
      var b = this.diagram;
      null !== b && ((b = b.model), null !== b && b.Kl(a));
    }
  };
  t.Xy = function() {
    return Po(this, this);
  };

  function Po(a, b) {
    var c = b.containingGroup;
    return null !== c
      ? 1 + Po(a, c)
      : b instanceof V && ((b = b.labeledLink), null !== b)
      ? Po(a, b)
      : 0;
  }
  t.az = function() {
    return Qo(this, this);
  };

  function Qo(a, b) {
    var c = b.containingGroup;
    return null !== c || (b instanceof V && ((c = b.labeledLink), null !== c))
      ? Qo(a, c)
      : b;
  }
  t.Md = function(a) {
    return a instanceof qf ? Ro(this, this, a) : !1;
  };

  function Ro(a, b, c) {
    if (b === c || null === c) return !1;
    var d = b.containingGroup;
    return null === d || (d !== c && !Ro(a, d, c))
      ? b instanceof V && ((b = b.labeledLink), null !== b)
        ? Ro(a, b, c)
        : !1
      : !0;
  }
  t.Sw = function(a) {
    if (null === a) return null;
    if (this === a) return this.containingGroup;
    for (var b = this; null !== b; ) {
      b instanceof qf && Mo(b, !0);
      if (b instanceof V) {
        var c = b.labeledLink;
        null !== c && (b = c);
      }
      b = b.containingGroup;
    }
    c = null;
    for (b = a; null !== b; ) {
      if (0 !== (b.G & 1048576)) {
        c = b;
        break;
      }
      b instanceof V && ((a = b.labeledLink), null !== a && (b = a));
      b = b.containingGroup;
    }
    for (b = this; null !== b; )
      b instanceof qf && Mo(b, !1),
        b instanceof V && ((a = b.labeledLink), null !== a && (b = a)),
        (b = b.containingGroup);
    return c;
  };
  U.prototype.canLayout = function() {
    if (!this.isLayoutPositioned || !this.isVisible()) return !1;
    var a = this.layer;
    return (null !== a && a.isTemporary) ||
      (this instanceof V && this.isLinkLabel)
      ? !1
      : !0;
  };
  U.prototype.D = function(a) {
    void 0 === a && (a = 16777215);
    if (this.isLayoutPositioned && 0 !== (a & this.layoutConditions)) {
      var b = this.layer;
      (null !== b && b.isTemporary) || (this instanceof V && this.isLinkLabel)
        ? (b = !1)
        : ((b = this.diagram),
          (b = null !== b && b.undoManager.isUndoingRedoing ? !1 : !0));
    } else b = !1;
    if (b)
      if (((b = this.ph), null !== b)) {
        var c = b.layout;
        null !== c ? c.D() : b.D(a);
      } else
        (a = this.diagram), null !== a && ((a = a.layout), null !== a && a.D());
  };

  function Ej(a) {
    if (!a.isVisible()) return !1;
    a = a.layer;
    return null !== a && a.isTemporary ? !1 : !0;
  }

  function Sk(a, b, c, d, e, f) {
    void 0 === f && (f = null);
    if (!(a.contains(b) || (null !== f && !f(b)) || b instanceof ue))
      if ((a.add(b), b instanceof V)) {
        if (c && b instanceof qf)
          for (var g = b.memberParts; g.next(); ) Sk(a, g.value, c, d, e, f);
        if (!1 !== e)
          for (g = b.linksConnected; g.next(); ) {
            var h = g.value;
            if (!a.contains(h)) {
              var k = h.fromNode,
                l = h.toNode;
              k = null === k || a.contains(k);
              l = null === l || a.contains(l);
              (e ? k && l : k || l) && Sk(a, h, c, d, e, f);
            }
          }
        if (1 < d) for (b = b.Au(); b.next(); ) Sk(a, b.value, c, d - 1, e, f);
      } else if (b instanceof T)
        for (b = b.labelNodes; b.next(); ) Sk(a, b.value, c, d, e, f);
  }
  ma.Object.defineProperties(U.prototype, {
    key: {
      get: function() {
        var a = this.diagram;
        if (null !== a) return a.model.ua(this.data);
      },
    },
    adornments: {
      get: function() {
        return null === this.Hf ? Za : this.Hf.iteratorValues;
      },
    },
    layer: {
      get: function() {
        return this.Ah;
      },
    },
    diagram: {
      get: function() {
        var a = this.Ah;
        return null === a || void 0 === a ? null : a.diagram;
      },
    },
    layerName: {
      get: function() {
        return this.zg;
      },
      set: function(a) {
        var b = this.zg;
        if (b !== a) {
          var c = this.diagram;
          if (
            null === c ||
            (null !== c.Ij(a) && !c.partManager.addsToTemporaryLayer)
          )
            if (
              ((this.zg = a),
              null !== c && c.Va(),
              this.g('layerName', b, a),
              (b = this.layer),
              null !== b &&
                b.name !== a &&
                ((c = b.diagram),
                null !== c && ((a = c.Ij(a)), null !== a && a !== b)))
            ) {
              var d = b.lc(-1, this, !0);
              0 <= d && c.bb(ge, 'parts', b, this, null, d, !0);
              d = a.ii(99999999, this, !0);
              b.visible !== a.visible && this.Ub(a.visible);
              0 <= d && c.bb(fe, 'parts', a, null, this, !0, d);
              d = this.layerChanged;
              if (null !== d) {
                var e = c.$;
                c.$ = !0;
                d(this, b, a);
                c.$ = e;
              }
            }
        }
      },
    },
    layerChanged: {
      get: function() {
        return null !== this.O ? this.O.Zp : null;
      },
      set: function(a) {
        var b = this.layerChanged;
        b !== a && (Ao(this), (this.O.Zp = a), this.g('layerChanged', b, a));
      },
    },
    zOrder: {
      get: function() {
        return this.eo;
      },
      set: function(a) {
        var b = this.eo;
        if (b !== a) {
          this.eo = a;
          var c = this.layer;
          null !== c && hi(c, -1, this);
          this.g('zOrder', b, a);
          a = this.diagram;
          null !== a && a.N();
        }
      },
    },
    locationObject: {
      get: function() {
        if (null === this.af) {
          var a = this.locationObjectName;
          '' !== a
            ? ((a = this.fb(a)), null !== a ? (this.af = a) : (this.af = this))
            : this instanceof ue
            ? this.type !== W.Link && null !== this.placeholder
              ? (this.af = this.placeholder)
              : (this.af = this)
            : (this.af = this);
        }
        return this.af.visible ? this.af : this;
      },
    },
    minLocation: {
      get: function() {
        return null !== this.O ? this.O.oq : rb;
      },
      set: function(a) {
        var b = this.minLocation;
        b.C(a) ||
          ((a = a.J()), Ao(this), (this.O.oq = a), this.g('minLocation', b, a));
      },
    },
    maxLocation: {
      get: function() {
        return null !== this.O ? this.O.jq : sb;
      },
      set: function(a) {
        var b = this.maxLocation;
        b.C(a) ||
          ((a = a.J()), Ao(this), (this.O.jq = a), this.g('maxLocation', b, a));
      },
    },
    locationObjectName: {
      get: function() {
        return null !== this.O ? this.O.gq : '';
      },
      set: function(a) {
        var b = this.locationObjectName;
        b !== a &&
          (Ao(this),
          (this.O.gq = a),
          (this.af = null),
          this.w(),
          this.g('locationObjectName', b, a));
      },
    },
    locationSpot: {
      get: function() {
        return null !== this.O ? this.O.hq : tc;
      },
      set: function(a) {
        var b = this.locationSpot;
        b.C(a) ||
          ((a = a.J()),
          Ao(this),
          (this.O.hq = a),
          this.w(),
          this.g('locationSpot', b, a));
      },
    },
    location: {
      get: function() {
        return this.de;
      },
      set: function(a) {
        var b = a.x,
          c = a.y,
          d = this.de;
        if (
          !(d.x === b || (isNaN(d.x) && isNaN(b))) ||
          !(d.y === c || (isNaN(d.y) && isNaN(c)))
        ) {
          a = a.copy();
          b = a;
          if (this.eh()) b = !1;
          else {
            this.de = b;
            this.G |= 2097152;
            if (!1 === oj(this) && (Co(this), (c = this.pa), c.v())) {
              var e = this.diagram;
              if (
                null === e ||
                e.animationManager.isTicking ||
                !e.undoManager.isUndoingRedoing
              ) {
                var f = c.copy();
                c.h(c.x + (b.x - d.x), c.y + (b.y - d.y));
                Ho(this, e, c, f.x, f.y);
                this.g('position', f, c.copy());
              }
            }
            b = !0;
          }
          b && this.g('location', d, a.copy());
        }
      },
    },
    category: {
      get: function() {
        return this.Jf;
      },
      set: function(a) {
        var b = this.Jf;
        if (b !== a) {
          var c = this.diagram,
            d = this.data,
            e = null;
          if (null !== c && null !== d && !(this instanceof ue)) {
            var f = c.model.undoManager;
            f.isEnabled &&
              !f.isUndoingRedoing &&
              ((e = this.clone()), e.R.addAll(this.R));
          }
          this.Jf = a;
          this.g('category', b, a);
          null === c || null === d || this instanceof ue
            ? this instanceof ue &&
              ((e = this.adornedPart),
              null !== e &&
                ((a = e.Hf),
                null !== a && a.remove(b),
                e.Tg(this.category, this)))
            : ((f = c.model),
              f.undoManager.isUndoingRedoing ||
                (this.eh()
                  ? (c.partManager.setLinkCategoryForData(d, a),
                    (c = c.partManager.findLinkTemplateForCategory(a)),
                    null !== c &&
                      (kg(c), (c = c.copy()), null !== c && Ko(this, c, b, a)))
                  : (null !== f && f.Rl(d, a),
                    (c = So(c.partManager, d, a)),
                    null !== c &&
                      (kg(c),
                      (c = c.copy()),
                      null === c ||
                        c instanceof T ||
                        ((d = this.location.copy()),
                        Ko(this, c, b, a),
                        this.location.v() || (this.location = d)))),
                null !== e &&
                  ((b = this.clone()),
                  b.R.addAll(this.R),
                  this.g('self', e, b))));
        }
      },
    },
    self: {
      get: function() {
        return this;
      },
      set: function(a) {
        Ko(this, a, this.category, a.category);
      },
    },
    copyable: {
      get: function() {
        return 0 !== (this.G & 1);
      },
      set: function(a) {
        var b = 0 !== (this.G & 1);
        b !== a && ((this.G ^= 1), this.g('copyable', b, a));
      },
    },
    deletable: {
      get: function() {
        return 0 !== (this.G & 2);
      },
      set: function(a) {
        var b = 0 !== (this.G & 2);
        b !== a && ((this.G ^= 2), this.g('deletable', b, a));
      },
    },
    textEditable: {
      get: function() {
        return 0 !== (this.G & 4);
      },
      set: function(a) {
        var b = 0 !== (this.G & 4);
        b !== a && ((this.G ^= 4), this.g('textEditable', b, a), this.Rb());
      },
    },
    groupable: {
      get: function() {
        return 0 !== (this.G & 8);
      },
      set: function(a) {
        var b = 0 !== (this.G & 8);
        b !== a && ((this.G ^= 8), this.g('groupable', b, a));
      },
    },
    movable: {
      get: function() {
        return 0 !== (this.G & 16);
      },
      set: function(a) {
        var b = 0 !== (this.G & 16);
        b !== a && ((this.G ^= 16), this.g('movable', b, a));
      },
    },
    selectionAdorned: {
      get: function() {
        return 0 !== (this.G & 32);
      },
      set: function(a) {
        var b = 0 !== (this.G & 32);
        b !== a &&
          ((this.G ^= 32), this.g('selectionAdorned', b, a), this.Rb());
      },
    },
    isInDocumentBounds: {
      get: function() {
        return 0 !== (this.G & 64);
      },
      set: function(a) {
        var b = 0 !== (this.G & 64);
        if (b !== a) {
          this.G ^= 64;
          var c = this.diagram;
          null !== c && c.Va();
          this.g('isInDocumentBounds', b, a);
        }
      },
    },
    isLayoutPositioned: {
      get: function() {
        return 0 !== (this.G & 128);
      },
      set: function(a) {
        var b = 0 !== (this.G & 128);
        b !== a &&
          ((this.G ^= 128),
          this.g('isLayoutPositioned', b, a),
          this.D(a ? 4 : 8));
      },
    },
    selectable: {
      get: function() {
        return 0 !== (this.G & 256);
      },
      set: function(a) {
        var b = 0 !== (this.G & 256);
        b !== a && ((this.G ^= 256), this.g('selectable', b, a), this.Rb());
      },
    },
    reshapable: {
      get: function() {
        return 0 !== (this.G & 512);
      },
      set: function(a) {
        var b = 0 !== (this.G & 512);
        b !== a && ((this.G ^= 512), this.g('reshapable', b, a), this.Rb());
      },
    },
    resizable: {
      get: function() {
        return 0 !== (this.G & 1024);
      },
      set: function(a) {
        var b = 0 !== (this.G & 1024);
        b !== a && ((this.G ^= 1024), this.g('resizable', b, a), this.Rb());
      },
    },
    rotatable: {
      get: function() {
        return 0 !== (this.G & 2048);
      },
      set: function(a) {
        var b = 0 !== (this.G & 2048);
        b !== a && ((this.G ^= 2048), this.g('rotatable', b, a), this.Rb());
      },
    },
    isSelected: {
      get: function() {
        return 0 !== (this.G & 4096);
      },
      set: function(a) {
        var b = 0 !== (this.G & 4096);
        if (b !== a) {
          var c = this.diagram;
          if (
            !a ||
            (this.canSelect() &&
              !(null !== c && c.selection.count >= c.maxSelectionCount))
          ) {
            this.G ^= 4096;
            var d = !1;
            if (null !== c) {
              d = c.skipsUndoManager;
              c.skipsUndoManager = !0;
              var e = c.selection;
              e.ja();
              a ? e.add(this) : e.remove(this);
              e.freeze();
            }
            this.g('isSelected', b, a);
            this.Rb();
            a = this.selectionChanged;
            null !== a && a(this);
            null !== c && (c.Mb(), (c.skipsUndoManager = d));
          }
        }
      },
    },
    isHighlighted: {
      get: function() {
        return 0 !== (this.G & 524288);
      },
      set: function(a) {
        var b = 0 !== (this.G & 524288);
        if (b !== a) {
          this.G ^= 524288;
          var c = this.diagram;
          null !== c &&
            ((c = c.highlighteds),
            c.ja(),
            a ? c.add(this) : c.remove(this),
            c.freeze());
          this.g('isHighlighted', b, a);
          this.N();
          a = this.highlightedChanged;
          null !== a && a(this);
        }
      },
    },
    isShadowed: {
      get: function() {
        return 0 !== (this.G & 8192);
      },
      set: function(a) {
        var b = 0 !== (this.G & 8192);
        b !== a && ((this.G ^= 8192), this.g('isShadowed', b, a), this.N());
      },
    },
    isAnimated: {
      get: function() {
        return 0 !== (this.G & 262144);
      },
      set: function(a) {
        var b = 0 !== (this.G & 262144);
        b !== a && ((this.G ^= 262144), this.g('isAnimated', b, a));
      },
    },
    highlightedChanged: {
      get: function() {
        return null !== this.O ? this.O.Qp : null;
      },
      set: function(a) {
        var b = this.highlightedChanged;
        b !== a &&
          (Ao(this), (this.O.Qp = a), this.g('highlightedChanged', b, a));
      },
    },
    selectionObjectName: {
      get: function() {
        return null !== this.O ? this.O.Sq : '';
      },
      set: function(a) {
        var b = this.selectionObjectName;
        b !== a &&
          (Ao(this),
          (this.O.Sq = a),
          (this.Kg = null),
          this.g('selectionObjectName', b, a));
      },
    },
    selectionAdornmentTemplate: {
      get: function() {
        return null !== this.O ? this.O.Qq : null;
      },
      set: function(a) {
        var b = this.selectionAdornmentTemplate;
        b !== a &&
          (Ao(this),
          (this.O.Qq = a),
          this.g('selectionAdornmentTemplate', b, a));
      },
    },
    selectionObject: {
      get: function() {
        if (null === this.Kg) {
          var a = this.selectionObjectName;
          null !== a && '' !== a
            ? ((a = this.fb(a)), null !== a ? (this.Kg = a) : (this.Kg = this))
            : this instanceof T
            ? ((a = this.path), null !== a ? (this.Kg = a) : (this.Kg = this))
            : (this.Kg = this);
        }
        return this.Kg;
      },
    },
    selectionChanged: {
      get: function() {
        return null !== this.O ? this.O.Rq : null;
      },
      set: function(a) {
        var b = this.selectionChanged;
        b !== a &&
          (Ao(this), (this.O.Rq = a), this.g('selectionChanged', b, a));
      },
    },
    resizeAdornmentTemplate: {
      get: function() {
        return null !== this.O ? this.O.Eq : null;
      },
      set: function(a) {
        var b = this.resizeAdornmentTemplate;
        b !== a &&
          (Ao(this), (this.O.Eq = a), this.g('resizeAdornmentTemplate', b, a));
      },
    },
    resizeObjectName: {
      get: function() {
        return null !== this.O ? this.O.Gq : '';
      },
      set: function(a) {
        var b = this.resizeObjectName;
        b !== a &&
          (Ao(this), (this.O.Gq = a), this.g('resizeObjectName', b, a));
      },
    },
    resizeObject: {
      get: function() {
        var a = this.resizeObjectName;
        return '' !== a && ((a = this.fb(a)), null !== a) ? a : this;
      },
    },
    resizeCellSize: {
      get: function() {
        return null !== this.O ? this.O.Fq : Mb;
      },
      set: function(a) {
        var b = this.resizeCellSize;
        b.C(a) ||
          ((a = a.J()),
          Ao(this),
          (this.O.Fq = a),
          this.g('resizeCellSize', b, a));
      },
    },
    rotateAdornmentTemplate: {
      get: function() {
        return null !== this.O ? this.O.Hq : null;
      },
      set: function(a) {
        var b = this.rotateAdornmentTemplate;
        b !== a &&
          (Ao(this), (this.O.Hq = a), this.g('rotateAdornmentTemplate', b, a));
      },
    },
    rotateObjectName: {
      get: function() {
        return null !== this.O ? this.O.Iq : '';
      },
      set: function(a) {
        var b = this.rotateObjectName;
        b !== a &&
          (Ao(this), (this.O.Iq = a), this.g('rotateObjectName', b, a));
      },
    },
    rotateObject: {
      get: function() {
        var a = this.rotateObjectName;
        return '' !== a && ((a = this.fb(a)), null !== a) ? a : this;
      },
    },
    rotationSpot: {
      get: function() {
        return null !== this.O ? this.O.Kq : Wc;
      },
      set: function(a) {
        var b = this.rotationSpot;
        b.C(a) ||
          ((a = a.J()),
          Ao(this),
          (this.O.Kq = a),
          this.g('rotationSpot', b, a));
      },
    },
    text: {
      get: function() {
        return this.cc;
      },
      set: function(a) {
        var b = this.cc;
        b !== a && ((this.cc = a), this.g('text', b, a));
      },
    },
    containingGroup: {
      get: function() {
        return this.ph;
      },
      set: function(a) {
        if (this.Tc()) {
          var b = this.ph;
          if (b !== a) {
            null === a ||
              (this !== a && !a.Md(this)) ||
              (this === a &&
                C('Cannot make a Group a member of itself: ' + this.toString()),
              C(
                'Cannot make a Group indirectly contain itself: ' +
                  this.toString() +
                  ' already contains ' +
                  a.toString(),
              ));
            this.D(2);
            var c = this.diagram;
            null !== b
              ? Oo(b, this)
              : this instanceof qf && null !== c && c.Uh.remove(this);
            this.ph = a;
            null !== a
              ? No(a, this)
              : this instanceof qf && null !== c && c.Uh.add(this);
            this.D(1);
            if (null !== c && c.$) {
              var d = this.data,
                e = c.model;
              if (null !== d && e.Oj()) {
                var f = e.ua(null !== a ? a.data : null);
                e.Po(d, f);
              }
            }
            d = this.containingGroupChanged;
            null !== d &&
              ((e = !0),
              null !== c && ((e = c.$), (c.$ = !0)),
              d(this, b, a),
              null !== c && (c.$ = e));
            if (this instanceof qf)
              for (
                c = new G(), Sk(c, this, !0, 0, !0), c = c.iterator;
                c.next();

              )
                if (((d = c.value), d instanceof V))
                  for (d = d.linksConnected; d.next(); ) To(d.value);
            if (this instanceof V) {
              for (c = this.linksConnected; c.next(); ) To(c.value);
              c = this.labeledLink;
              null !== c && To(c);
            }
            this.g('containingGroup', b, a);
            null !== a && ((b = a.layer), null !== b && hi(b, -1, a));
          }
        } else C('cannot set the Part.containingGroup of a Link or Adornment');
      },
    },
    containingGroupChanged: {
      get: function() {
        return null !== this.O ? this.O.np : null;
      },
      set: function(a) {
        var b = this.containingGroupChanged;
        b !== a &&
          (Ao(this), (this.O.np = a), this.g('containingGroupChanged', b, a));
      },
    },
    isTopLevel: {
      get: function() {
        return null !== this.containingGroup ||
          (this instanceof V && null !== this.labeledLink)
          ? !1
          : !0;
      },
    },
    layoutConditions: {
      get: function() {
        return null !== this.O ? this.O.bq : 127;
      },
      set: function(a) {
        var b = this.layoutConditions;
        b !== a &&
          (Ao(this), (this.O.bq = a), this.g('layoutConditions', b, a));
      },
    },
    dragComputation: {
      get: function() {
        return null !== this.O ? this.O.yp : null;
      },
      set: function(a) {
        var b = this.dragComputation;
        b !== a && (Ao(this), (this.O.yp = a), this.g('dragComputation', b, a));
      },
    },
    shadowOffset: {
      get: function() {
        return null !== this.O ? this.O.Wq : tb;
      },
      set: function(a) {
        var b = this.shadowOffset;
        b.C(a) ||
          ((a = a.J()),
          Ao(this),
          (this.O.Wq = a),
          this.N(),
          this.g('shadowOffset', b, a));
      },
    },
    shadowColor: {
      get: function() {
        return null !== this.O ? this.O.Vq : 'gray';
      },
      set: function(a) {
        var b = this.shadowColor;
        b !== a &&
          (Ao(this), (this.O.Vq = a), this.N(), this.g('shadowColor', b, a));
      },
    },
    shadowBlur: {
      get: function() {
        return null !== this.O ? this.O.Lg : 4;
      },
      set: function(a) {
        var b = this.shadowBlur;
        b !== a &&
          (Ao(this), (this.O.Lg = a), this.N(), this.g('shadowBlur', b, a));
      },
    },
  });
  U.prototype.invalidateLayout = U.prototype.D;
  U.prototype.findCommonContainingGroup = U.prototype.Sw;
  U.prototype.isMemberOf = U.prototype.Md;
  U.prototype.findTopLevelPart = U.prototype.az;
  U.prototype.findSubGraphLevel = U.prototype.Xy;
  U.prototype.ensureBounds = U.prototype.Za;
  U.prototype.getDocumentBounds = U.prototype.gi;
  U.prototype.findObject = U.prototype.fb;
  U.prototype.moveTo = U.prototype.moveTo;
  U.prototype.invalidateAdornments = U.prototype.Rb;
  U.prototype.clearAdornments = U.prototype.zj;
  U.prototype.removeAdornment = U.prototype.Af;
  U.prototype.addAdornment = U.prototype.Tg;
  U.prototype.findAdornment = U.prototype.Hj;
  U.prototype.updateTargetBindings = U.prototype.Ka;
  var Lo = !1;
  U.className = 'Part';
  U.LayoutNone = 0;
  U.LayoutAdded = 1;
  U.LayoutRemoved = 2;
  U.LayoutShown = 4;
  U.LayoutHidden = 8;
  U.LayoutNodeSized = 16;
  U.LayoutGroupLayout = 32;
  U.LayoutNodeReplaced = 64;
  U.LayoutStandard = 127;
  U.LayoutAll = 16777215;

  function ue(a, b) {
    void 0 === a || a instanceof Ll || 'string' === typeof a
      ? U.call(this, a)
      : (U.call(this), a && (b = a));
    this.G &= -257;
    this.zg = 'Adornment';
    this.me = null;
    this.ew = 0;
    this.yw = !1;
    this.j = this.Xa = null;
    b && Object.assign(this, b);
  }
  la(ue, U);
  ue.prototype.toString = function() {
    var a = this.adornedPart;
    return (
      'Adornment(' + this.category + ')' + (null !== a ? a.toString() : '')
    );
  };
  ue.prototype.updateRelationshipsFromData = function() {};
  ue.prototype.Rj = function(a) {
    var b = this.adornedObject,
      c = null === b || void 0 === b ? void 0 : b.part;
    if (c instanceof T && b instanceof Cf) {
      b = c.path;
      c.Rj(a);
      a = b.geometry;
      c = this.R.s;
      b = c.length;
      for (var d = 0; d < b; d++) {
        var e = c[d];
        e.isPanelMain && e instanceof Cf && (e.sa = a);
      }
    }
  };
  ue.prototype.mi = function() {
    var a = this.me;
    if (null === a) return !0;
    a = a.part;
    return null === a || !oj(a);
  };
  ue.prototype.Tc = function() {
    return !1;
  };
  ue.prototype.$j = function(a, b, c, d, e, f, g) {
    if (a === fe && 'elements' === b)
      if (e instanceof jg) null === this.Xa && (this.Xa = e);
      else {
        if (e instanceof W) {
          var h = e.vl(function(a) {
            return a instanceof jg;
          });
          h instanceof jg && null === this.Xa && (this.Xa = h);
        }
      }
    else
      a === ge &&
        'elements' === b &&
        null !== this.Xa &&
        (d === this.Xa
          ? (this.Xa = null)
          : d instanceof W && this.Xa.jg(d) && (this.Xa = null));
    U.prototype.$j.call(this, a, b, c, d, e, f, g);
  };
  ue.prototype.updateAdornments = function() {};
  ue.prototype.Fj = function() {};
  ma.Object.defineProperties(ue.prototype, {
    placeholder: {
      get: function() {
        return this.Xa;
      },
    },
    adornedObject: {
      get: function() {
        return this.me;
      },
      set: function(a) {
        var b = this.adornedPart,
          c = null;
        null !== a && (c = a.part);
        null === b || (null !== a && b === c) || b.Af(this.category);
        this.me = a;
        null !== c && c.Tg(this.category, this);
      },
    },
    adornedPart: {
      get: function() {
        var a = this.me;
        return null !== a ? a.part : null;
      },
    },
    containingGroup: {
      get: function() {
        return null;
      },
    },
  });
  ue.className = 'Adornment';

  function Uo() {
    this.ic = !1;
    this.ur = this.bj = this.eq = this.cq = null;
    this.ap = rc;
    this.Dq = Vo;
    this.gr = this.dj = this.mq = this.lq = null;
  }
  Uo.prototype.copy = function() {
    var a = new Uo();
    a.cq = this.cq;
    a.eq = this.eq;
    a.bj = this.bj;
    a.ur = this.ur;
    a.ap = this.ap.J();
    a.Dq = this.Dq;
    a.lq = this.lq;
    a.mq = this.mq;
    a.dj = this.dj;
    a.gr = this.gr;
    return a;
  };

  function V(a, b) {
    void 0 === a || a instanceof Ll || 'string' === typeof a
      ? U.call(this, a)
      : (U.call(this), a && (b = a));
    this.U = 13;
    this.ya = null;
    this.jb = new E();
    this.sc = this.Qe = this.Nk = null;
    this.Rg = !1;
    b && Object.assign(this, b);
  }
  la(V, U);
  V.prototype.cloneProtected = function(a) {
    U.prototype.cloneProtected.call(this, a);
    a.U = this.U;
    null !== this.ya && (a.ya = this.ya.ic ? this.ya : this.ya.copy());
  };
  t = V.prototype;
  t.qf = function(a) {
    U.prototype.qf.call(this, a);
    a.vd();
    a.Qe = this.Qe;
    a.sc = null;
  };

  function Wo(a) {
    null === a.ya ? (a.ya = new Uo()) : a.ya.ic && (a.ya = a.ya.copy());
  }
  t.ih = function() {
    U.prototype.ih.call(this);
    null !== this.ya && (this.ya.ic = !0);
  };

  function Xo(a, b) {
    null !== b && (null === a.Qe && (a.Qe = new G()), a.Qe.add(b));
  }

  function Yo(a, b, c, d) {
    if (null === b || null === a.Qe) return null;
    for (var e = a.Qe.iterator; e.next(); ) {
      var f = e.value;
      if (
        (f.cs === a && f.Pu === b && f.vx === c && f.wx === d) ||
        (f.cs === b && f.Pu === a && f.vx === d && f.wx === c)
      )
        return f;
    }
    return null;
  }
  t.uz = function(a, b, c) {
    if (void 0 === b || null === b) b = '';
    if (void 0 === c || null === c) c = '';
    a = Yo(this, a, b, c);
    null !== a && a.Al();
  };
  t.$j = function(a, b, c, d, e, f, g) {
    a === fe && 'elements' === b
      ? (this.sc = null)
      : a === ge && 'elements' === b && (this.sc = null);
    U.prototype.$j.call(this, a, b, c, d, e, f, g);
  };
  t.vd = function(a) {
    for (var b = this.linksConnected; b.next(); ) {
      var c = b.value;
      (void 0 !== a && a.contains(c)) || (Zo(c.fromPort), Zo(c.toPort), c.ab());
    }
  };

  function ml(a, b) {
    for (a = a.linksConnected; a.next(); ) {
      var c = a.value;
      if (c.fromPort === b || c.toPort === b)
        Zo(c.fromPort), Zo(c.toPort), c.ab();
    }
  }

  function Zo(a) {
    if (null !== a) {
      var b = a.Hn;
      null !== b && b.Al();
      a = a.part;
      b = a.containingGroup;
      null === b || a.isVisible() || Zo(b.port);
    }
  }
  t.mi = function() {
    return !0;
  };
  V.prototype.getAvoidableRect = function(a) {
    a.set(this.actualBounds);
    a.fo(this.avoidableMargin);
    return a;
  };
  V.prototype.findVisibleNode = function() {
    for (var a = this; null !== a && !a.isVisible(); ) a = a.containingGroup;
    return a;
  };
  V.prototype.isVisible = function() {
    if (!U.prototype.isVisible.call(this)) return !1;
    var a = !0,
      b = vi,
      c = this.diagram;
    if (null !== c) {
      if (c.animationManager.es(this)) return !0;
      a = c.isTreePathToChildren;
      b = c.treeCollapsePolicy;
    }
    if (b === vi) {
      if (((a = this.ig()), null !== a && !a.isTreeExpanded)) return !1;
    } else if (b === Dk) {
      if (
        ((a = a ? this.xu() : this.yu()),
        0 < a.count &&
          a.all(function(a) {
            return !a.isTreeExpanded;
          }))
      )
        return !1;
    } else if (
      b === Ek &&
      ((a = a ? this.xu() : this.yu()),
      0 < a.count &&
        a.any(function(a) {
          return !a.isTreeExpanded;
        }))
    )
      return !1;
    a = this.labeledLink;
    return null !== a ? a.isVisible() : !0;
  };
  V.prototype.Ub = function(a) {
    U.prototype.Ub.call(this, a);
    for (var b = this.linksConnected; b.next(); ) {
      var c = b.value;
      if (a && null !== this.containingGroup) {
        var d = c.wo(this);
        null === d || d.Md(this.containingGroup) || c.ab();
      }
      c.Ub(a);
    }
  };
  V.prototype.Tw = function() {
    var a = new G(),
      b = new G();
    $o(this, this, a, b);
    return b.iterator;
  };

  function $o(a, b, c, d) {
    if (null !== b && !c.has(b)) {
      c.add(b);
      var e = !0,
        f = a.diagram;
      null !== f && (e = f.isTreePathToChildren);
      b.linksConnected.each(function(f) {
        f.isTreeLink
          ? (e ? f.fromNode === b : f.toNode === b) &&
            $o(a, e ? f.toNode : f.fromNode, c, d)
          : d.add(f);
      });
    }
  }
  V.prototype.findLinksConnected = function(a) {
    void 0 === a && (a = null);
    if (null === a) return this.jb.iterator;
    var b = new ab(this.jb),
      c = this;
    b.predicate = function(b) {
      return (
        (b.fromNode === c && b.fromPortId === a) ||
        (b.toNode === c && b.toPortId === a)
      );
    };
    return b;
  };
  t = V.prototype;
  t.ro = function(a) {
    void 0 === a && (a = null);
    var b = new ab(this.jb),
      c = this;
    b.predicate = function(b) {
      return b.fromNode !== c ? !1 : null === a ? !0 : b.fromPortId === a;
    };
    return b;
  };
  t.Kd = function(a) {
    void 0 === a && (a = null);
    var b = new ab(this.jb),
      c = this;
    b.predicate = function(b) {
      return b.toNode !== c ? !1 : null === a ? !0 : b.toPortId === a;
    };
    return b;
  };
  t.wu = function(a) {
    void 0 === a && (a = null);
    for (var b = null, c = null, d = this.jb.iterator; d.next(); ) {
      var e = d.value;
      if (e.fromNode === this) {
        if (null === a || e.fromPortId === a)
          (e = e.toNode),
            null !== b
              ? b.add(e)
              : null !== c && c !== e
              ? ((b = new G()), b.add(c), b.add(e))
              : (c = e);
      } else
        e.toNode !== this ||
          (null !== a && e.toPortId !== a) ||
          ((e = e.fromNode),
          null !== b
            ? b.add(e)
            : null !== c && c !== e
            ? ((b = new G()), b.add(c), b.add(e))
            : (c = e));
    }
    return null !== b ? b.iterator : null !== c ? new $a(c) : Za;
  };
  t.yu = function(a) {
    void 0 === a && (a = null);
    for (var b = null, c = null, d = this.jb.iterator; d.next(); ) {
      var e = d.value;
      e.fromNode !== this ||
        (null !== a && e.fromPortId !== a) ||
        ((e = e.toNode),
        null !== b
          ? b.add(e)
          : null !== c && c !== e
          ? ((b = new G()), b.add(c), b.add(e))
          : (c = e));
    }
    return null !== b ? b.iterator : null !== c ? new $a(c) : Za;
  };
  t.xu = function(a) {
    void 0 === a && (a = null);
    for (var b = null, c = null, d = this.jb.iterator; d.next(); ) {
      var e = d.value;
      e.toNode !== this ||
        (null !== a && e.toPortId !== a) ||
        ((e = e.fromNode),
        null !== b
          ? b.add(e)
          : null !== c && c !== e
          ? ((b = new G()), b.add(c), b.add(e))
          : (c = e));
    }
    return null !== b ? b.iterator : null !== c ? new $a(c) : Za;
  };
  t.Sy = function(a, b, c) {
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    var d = new ab(this.jb),
      e = this;
    d.predicate = function(d) {
      return (d.fromNode !== e ||
        d.toNode !== a ||
        (null !== b && d.fromPortId !== b) ||
        (null !== c && d.toPortId !== c)) &&
        (d.fromNode !== a ||
          d.toNode !== e ||
          (null !== c && d.fromPortId !== c) ||
          (null !== b && d.toPortId !== b))
        ? !1
        : !0;
    };
    return d;
  };
  t.Ty = function(a, b, c) {
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    var d = new ab(this.jb),
      e = this;
    d.predicate = function(d) {
      return d.fromNode !== e ||
        d.toNode !== a ||
        (null !== b && d.fromPortId !== b) ||
        (null !== c && d.toPortId !== c)
        ? !1
        : !0;
    };
    return d;
  };

  function ap(a, b, c) {
    Zo(c);
    var d = a.jb.contains(b);
    d || a.jb.add(b);
    if (!d || b.fromNode === b.toNode) {
      var e = a.linkConnected;
      if (null !== e) {
        var f = !0,
          g = a.diagram;
        null !== g && ((f = g.$), (g.$ = !0));
        e(a, b, c);
        null !== g && (g.$ = f);
      }
    }
    !d &&
      b.isTreeLink &&
      ((c = b.fromNode),
      (b = b.toNode),
      null !== c &&
        null !== b &&
        c !== b &&
        ((d = !0),
        (a = a.diagram),
        null !== a && (d = a.isTreePathToChildren),
        (e = d ? b : c),
        (f = d ? c : b),
        e.Rg || (e.Rg = f),
        !f.isTreeLeaf ||
          (null !== a && a.undoManager.isUndoingRedoing) ||
          (d
            ? c === f && (f.isTreeLeaf = !1)
            : b === f && (f.isTreeLeaf = !1))));
  }

  function bp(a, b, c) {
    Zo(c);
    var d = a.jb.remove(b),
      e = null;
    if (d || b.toNode === b.fromNode) {
      var f = a.linkDisconnected;
      e = a.diagram;
      if (null !== f) {
        var g = !0;
        null !== e && ((g = e.$), (e.$ = !0));
        f(a, b, c);
        null !== e && (e.$ = g);
      }
    }
    d &&
      b.isTreeLink &&
      ((c = !0),
      null !== e && (c = e.isTreePathToChildren),
      (a = c ? b.toNode : b.fromNode),
      (b = c ? b.fromNode : b.toNode),
      null !== a && (a.Rg = !1),
      null === b ||
        b.isTreeLeaf ||
        (0 === b.jb.count
          ? ((b.Rg = null),
            (null !== e && e.undoManager.isUndoingRedoing) ||
              (b.isTreeLeaf = !0))
          : Ck(b)));
  }

  function Ck(a) {
    a.Rg = !1;
    if (0 !== a.jb.count) {
      var b = !0,
        c = a.diagram;
      if (null === c || !c.undoManager.isUndoingRedoing) {
        null !== c && (b = c.isTreePathToChildren);
        for (c = a.jb.iterator; c.next(); ) {
          var d = c.value;
          if (d.isTreeLink)
            if (b) {
              if (d.fromNode === a) {
                a.isTreeLeaf = !1;
                return;
              }
            } else if (d.toNode === a) {
              a.isTreeLeaf = !1;
              return;
            }
        }
        a.isTreeLeaf = !0;
      }
    }
  }
  V.prototype.updateRelationshipsFromData = function() {
    var a = this.diagram;
    null !== a && a.partManager.updateRelationshipsFromData(this);
  };
  t = V.prototype;
  t.yo = function(a) {
    U.prototype.yo.call(this, a);
    a || (Ck(this), (a = this.Nk), null !== a && cp(a, this));
  };
  t.zo = function(a) {
    U.prototype.zo.call(this, a);
    a ||
      ((a = this.Nk),
      null !== a && null !== a.rd && (a.rd.remove(this), a.w()));
  };
  t.Fj = function() {
    if (0 < this.jb.count) {
      var a = this.diagram;
      if (null !== a)
        for (
          var b =
              null !== a.commandHandler
                ? a.commandHandler.deletesConnectedLinks
                : !0,
            c = this.jb.copy().iterator;
          c.next();

        ) {
          var d = c.value;
          b
            ? a.remove(d)
            : (d.fromNode === this && (d.fromNode = null),
              d.toNode === this && (d.toNode = null));
        }
    }
    this.labeledLink = null;
    U.prototype.Fj.call(this);
  };
  t.Kr = function(a) {
    if (null === this.sc) {
      if ('' === a && !1 === this.He) return this;
      dp(this);
    }
    var b = this.sc.I(a);
    return null !== b || ('' !== a && ((b = this.sc.I('')), null !== b))
      ? b
      : this;
  };

  function dp(a) {
    null === a.sc ? (a.sc = new pb()) : a.sc.clear();
    a.$l(a, function(a, c) {
      Rl(a, c);
    });
    0 === a.sc.count && a.sc.add('', a);
  }

  function Rl(a, b) {
    var c = b.portId;
    null !== c && null !== a.sc && a.sc.add(c, b);
  }

  function Ql(a, b, c) {
    var d = b.portId;
    if (
      null !== d &&
      (null !== a.sc && a.sc.remove(d), (b = a.diagram), null !== b && c)
    ) {
      c = null;
      for (a = a.findLinksConnected(d); a.next(); )
        (d = a.value), null === c && (c = Ea()), c.push(d);
      if (null !== c) {
        for (a = 0; a < c.length; a++) b.remove(c[a]);
        Ga(c);
      }
    }
  }
  t.wz = function(a) {
    if (null === a || a === this) return !1;
    var b = !0,
      c = this.diagram;
    null !== c && (b = c.isTreePathToChildren);
    c = this;
    if (b)
      for (; c !== a; ) {
        b = null;
        for (var d = c.jb.iterator; d.next(); ) {
          var e = d.value;
          if (e.isTreeLink && ((b = e.fromNode), b !== c && b !== this)) break;
        }
        if (b === this || null === b || b === c) return !1;
        c = b;
      }
    else
      for (; c !== a; ) {
        b = null;
        for (
          d = c.jb.iterator;
          d.next() &&
          ((e = d.value),
          !e.isTreeLink || ((b = e.toNode), b === c || b === this));

        );
        if (b === this || null === b || b === c) return !1;
        c = b;
      }
    return !0;
  };
  t.ez = function() {
    var a = !0,
      b = this.diagram;
    null !== b && (a = b.isTreePathToChildren);
    b = this;
    if (a)
      for (;;) {
        a = null;
        for (var c = b.jb.iterator; c.next(); ) {
          var d = c.value;
          if (d.isTreeLink && ((a = d.fromNode), a !== b && a !== this)) break;
        }
        if (a === this) return this;
        if (null === a || a === b) return b;
        b = a;
      }
    else
      for (;;) {
        a = null;
        for (
          c = b.jb.iterator;
          c.next() &&
          ((d = c.value),
          !d.isTreeLink || ((a = d.toNode), a === b || a === this));

        );
        if (a === this) return this;
        if (null === a || a === b) return b;
        b = a;
      }
  };
  t.Py = function(a) {
    if (null === a) return null;
    if (this === a) return this;
    for (var b = this; null !== b; ) Mo(b, !0), (b = b.ig());
    var c = null;
    for (b = a; null !== b; ) {
      if (0 !== (b.G & 1048576)) {
        c = b;
        break;
      }
      b = b.ig();
    }
    for (b = this; null !== b; ) Mo(b, !1), (b = b.ig());
    return c;
  };
  t.$g = function() {
    var a = !0,
      b = this.diagram;
    null !== b && (a = b.isTreePathToChildren);
    b = this.jb.iterator;
    if (a)
      for (; b.next(); ) {
        if (((a = b.value), a.isTreeLink && a.fromNode !== this)) return a;
      }
    else
      for (; b.next(); )
        if (((a = b.value), a.isTreeLink && a.toNode !== this)) return a;
    return null;
  };
  t.ig = function() {
    var a = this.Rg;
    if (null === a) return null;
    if (a instanceof V) return a;
    var b = !0;
    a = this.diagram;
    null !== a && (b = a.isTreePathToChildren);
    a = this.jb.iterator;
    if (b)
      for (; a.next(); ) {
        if (((b = a.value), b.isTreeLink && ((b = b.fromNode), b !== this)))
          return (this.Rg = b);
      }
    else
      for (; a.next(); )
        if (((b = a.value), b.isTreeLink && ((b = b.toNode), b !== this)))
          return (this.Rg = b);
    return (this.Rg = null);
  };
  t.cz = function() {
    function a(b, d) {
      d.add(b);
      var c = b.$g();
      null !== c && (d.add(c), (b = b.ig()), null !== b && a(b, d));
    }
    var b = new G();
    a(this, b);
    return b;
  };
  t.bz = function() {
    return ep(this, this);
  };

  function ep(a, b) {
    b = b.ig();
    return null === b ? 0 : 1 + ep(a, b);
  }
  t.to = function() {
    var a = !0,
      b = this.diagram;
    null !== b && (a = b.isTreePathToChildren);
    b = new ab(this.jb);
    var c = this;
    b.predicate = a
      ? function(a) {
          return a.isTreeLink && a.fromNode === c ? !0 : !1;
        }
      : function(a) {
          return a.isTreeLink && a.toNode === c ? !0 : !1;
        };
    return b;
  };
  t.Au = function() {
    var a = !0,
      b = this.diagram;
    null !== b && (a = b.isTreePathToChildren);
    var c = (b = null),
      d = this.jb.iterator;
    if (a)
      for (; d.next(); )
        (a = d.value),
          a.isTreeLink &&
            a.fromNode === this &&
            ((a = a.toNode),
            null !== b
              ? b.add(a)
              : null !== c && c !== a
              ? ((b = new E()), b.add(c), b.add(a))
              : (c = a));
    else
      for (; d.next(); )
        (a = d.value),
          a.isTreeLink &&
            a.toNode === this &&
            ((a = a.fromNode),
            null !== b
              ? b.add(a)
              : null !== c && c !== a
              ? ((b = new E()), b.add(c), b.add(a))
              : (c = a));
    return null !== b ? b.iterator : null !== c ? new $a(c) : Za;
  };
  t.dz = function(a) {
    void 0 === a && (a = Infinity);
    var b = new G();
    Sk(b, this, !1, a, !0);
    return b;
  };
  V.prototype.collapseTree = function(a) {
    void 0 === a && (a = 1);
    1 > a && (a = 1);
    var b = this.diagram;
    if (null !== b && !b.Ie) {
      b.Ie = !0;
      var c = new G();
      c.add(this);
      fp(
        this,
        c,
        b.isTreePathToChildren,
        a,
        b,
        this,
        b.treeCollapsePolicy === vi,
      );
      b.Ie = !1;
    }
  };

  function fp(a, b, c, d, e, f, g) {
    if (1 < d)
      for (var h = c ? a.ro() : a.Kd(); h.next(); ) {
        var k = h.value;
        k.isTreeLink &&
          ((k = k.wo(a)),
          null === k ||
            k === a ||
            b.contains(k) ||
            (b.add(k), fp(k, b, c, d - 1, e, f, g)));
      }
    else gp(a, b, c, e, f, g);
  }

  function gp(a, b, c, d, e, f) {
    for (
      var g = e === a ? !0 : a.isTreeExpanded, h = c ? a.ro() : a.Kd();
      h.next();

    ) {
      var k = h.value;
      if (k.isTreeLink && ((k = k.wo(a)), null !== k && k !== a)) {
        var l = b.contains(k);
        l || b.add(k);
        g && (f && d.vj(k, e), k.dh(), k.Ub(!1));
        k.isTreeExpanded &&
          ((k.wasTreeExpanded = k.isTreeExpanded), l || gp(k, b, c, d, e, f));
      }
    }
    a.isTreeExpanded = !1;
  }
  V.prototype.expandTree = function(a) {
    void 0 === a && (a = 2);
    2 > a && (a = 2);
    var b = this.diagram;
    if (null !== b && !b.Ie) {
      b.Ie = !0;
      var c = new G();
      c.add(this);
      hp(
        this,
        c,
        b.isTreePathToChildren,
        a,
        b,
        this,
        b.treeCollapsePolicy === vi,
      );
      b.Ie = !1;
    }
  };

  function hp(a, b, c, d, e, f, g) {
    for (
      var h = f === a ? !1 : a.isTreeExpanded, k = c ? a.ro() : a.Kd();
      k.next();

    ) {
      var l = k.value;
      l.isTreeLink &&
        (h || l.xd || l.ab(),
        (l = l.wo(a)),
        null !== l &&
          l !== a &&
          !b.contains(l) &&
          (b.add(l),
          h || (l.Ub(!0), l.dh(), g && e.xj(l, f)),
          2 < d || l.wasTreeExpanded)) &&
        ((l.wasTreeExpanded = !1), hp(l, b, c, d - 1, e, f, g));
    }
    a.isTreeExpanded = !0;
  }
  ma.Object.defineProperties(V.prototype, {
    portSpreading: {
      get: function() {
        return null !== this.ya ? this.ya.Dq : Vo;
      },
      set: function(a) {
        var b = this.portSpreading;
        b !== a &&
          (Wo(this),
          (this.ya.Dq = a),
          this.g('portSpreading', b, a),
          (a = this.diagram),
          (null !== a && a.undoManager.isUndoingRedoing) || this.vd());
      },
    },
    avoidable: {
      get: function() {
        return 0 !== (this.U & 8);
      },
      set: function(a) {
        var b = 0 !== (this.U & 8);
        if (b !== a) {
          this.U ^= 8;
          var c = this.diagram;
          null !== c && lk(c, this);
          this.g('avoidable', b, a);
        }
      },
    },
    avoidableMargin: {
      get: function() {
        return null !== this.ya ? this.ya.ap : rc;
      },
      set: function(a) {
        'number' === typeof a && (a = new ec(a));
        var b = this.avoidableMargin;
        if (!b.C(a)) {
          a = a.J();
          Wo(this);
          this.ya.ap = a;
          var c = this.diagram;
          null !== c && lk(c, this);
          this.g('avoidableMargin', b, a);
        }
      },
    },
    linksConnected: {
      get: function() {
        return this.jb.iterator;
      },
    },
    linkConnected: {
      get: function() {
        return null !== this.ya ? this.ya.cq : null;
      },
      set: function(a) {
        var b = this.linkConnected;
        b !== a && (Wo(this), (this.ya.cq = a), this.g('linkConnected', b, a));
      },
    },
    linkDisconnected: {
      get: function() {
        return null !== this.ya ? this.ya.eq : null;
      },
      set: function(a) {
        var b = this.linkDisconnected;
        b !== a &&
          (Wo(this), (this.ya.eq = a), this.g('linkDisconnected', b, a));
      },
    },
    linkValidation: {
      get: function() {
        return null !== this.ya ? this.ya.bj : null;
      },
      set: function(a) {
        var b = this.linkValidation;
        b !== a && (Wo(this), (this.ya.bj = a), this.g('linkValidation', b, a));
      },
    },
    isLinkLabel: {
      get: function() {
        return null !== this.Nk;
      },
    },
    labeledLink: {
      get: function() {
        return this.Nk;
      },
      set: function(a) {
        var b = this.Nk;
        if (b !== a) {
          var c = this.diagram,
            d = this.data;
          if (null !== b) {
            null !== b.rd && (b.rd.remove(this), b.w());
            if (null !== c && null !== d && !c.undoManager.isUndoingRedoing) {
              var e = b.data,
                f = c.model;
              if (null !== e && f.ki()) {
                var g = f.ua(d);
                void 0 !== g && f.xx(e, g);
              }
            }
            this.containingGroup = null;
          }
          this.Nk = a;
          null !== a &&
            (cp(a, this),
            null === c ||
              null === d ||
              c.undoManager.isUndoingRedoing ||
              ((e = a.data),
              (c = c.model),
              null !== e &&
                c.ki() &&
                ((d = c.ua(d)), void 0 !== d && c.hu(e, d))),
            (this.containingGroup = a.containingGroup));
          Al(this);
          this.g('labeledLink', b, a);
        }
      },
    },
    port: {
      get: function() {
        return this.Kr('');
      },
    },
    ports: {
      get: function() {
        null === this.sc && dp(this);
        return this.sc.iteratorValues;
      },
    },
    isTreeExpanded: {
      get: function() {
        return 0 !== (this.U & 1);
      },
      set: function(a) {
        var b = 0 !== (this.U & 1);
        if (b !== a) {
          this.U ^= 1;
          var c = this.diagram;
          this.g('isTreeExpanded', b, a);
          b = this.treeExpandedChanged;
          if (null !== b) {
            var d = !0;
            null !== c && ((d = c.$), (c.$ = !0));
            b(this);
            null !== c && (c.$ = d);
          }
          null !== c && c.undoManager.isUndoingRedoing
            ? this.Ub(a)
            : a
            ? this.expandTree()
            : this.collapseTree();
        }
      },
    },
    wasTreeExpanded: {
      get: function() {
        return 0 !== (this.U & 2);
      },
      set: function(a) {
        var b = 0 !== (this.U & 2);
        b !== a && ((this.U ^= 2), this.g('wasTreeExpanded', b, a));
      },
    },
    treeExpandedChanged: {
      get: function() {
        return null !== this.ya ? this.ya.ur : null;
      },
      set: function(a) {
        var b = this.treeExpandedChanged;
        b !== a &&
          (Wo(this), (this.ya.ur = a), this.g('treeExpandedChanged', b, a));
      },
    },
    isTreeLeaf: {
      get: function() {
        return 0 !== (this.U & 4);
      },
      set: function(a) {
        var b = 0 !== (this.U & 4);
        b !== a && ((this.U ^= 4), this.g('isTreeLeaf', b, a));
      },
    },
  });
  V.prototype.expandTree = V.prototype.expandTree;
  V.prototype.collapseTree = V.prototype.collapseTree;
  V.prototype.findTreeParts = V.prototype.dz;
  V.prototype.findTreeChildrenNodes = V.prototype.Au;
  V.prototype.findTreeChildrenLinks = V.prototype.to;
  V.prototype.findTreeLevel = V.prototype.bz;
  V.prototype.findTreeParentChain = V.prototype.cz;
  V.prototype.findTreeParentNode = V.prototype.ig;
  V.prototype.findTreeParentLink = V.prototype.$g;
  V.prototype.findCommonTreeParent = V.prototype.Py;
  V.prototype.findTreeRoot = V.prototype.ez;
  V.prototype.isInTreeOf = V.prototype.wz;
  V.prototype.findPort = V.prototype.Kr;
  V.prototype.findLinksTo = V.prototype.Ty;
  V.prototype.findLinksBetween = V.prototype.Sy;
  V.prototype.findNodesInto = V.prototype.xu;
  V.prototype.findNodesOutOf = V.prototype.yu;
  V.prototype.findNodesConnected = V.prototype.wu;
  V.prototype.findLinksInto = V.prototype.Kd;
  V.prototype.findLinksOutOf = V.prototype.ro;
  V.prototype.findExternalTreeLinksConnected = V.prototype.Tw;
  V.prototype.invalidateConnectedLinks = V.prototype.vd;
  V.prototype.invalidateLinkBundle = V.prototype.uz;
  var ip = new D(V, 'SpreadingNone', 10),
    Vo = new D(V, 'SpreadingEvenly', 11),
    jp = new D(V, 'SpreadingPacked', 12);
  V.className = 'Node';
  V.SpreadingNone = ip;
  V.SpreadingEvenly = Vo;
  V.SpreadingPacked = jp;

  function qf(a, b) {
    void 0 === a || a instanceof Ll || 'string' === typeof a
      ? V.call(this, a)
      : (V.call(this), a && (b = a));
    this.U |= 4608;
    this.on = new G();
    this.Xa = null;
    this.Kc = new qi();
    this.Kc.group = this;
    this.Vk = new G();
    this.ib = this.Dp = null;
    b && Object.assign(this, b);
  }
  la(qf, V);
  qf.prototype.cloneProtected = function(a) {
    V.prototype.cloneProtected.call(this, a);
    this.U = this.U & -32769;
    var b = a.vl(function(a) {
      return a instanceof jg;
    });
    b instanceof jg ? (a.Xa = b) : (a.Xa = null);
    null !== this.Kc
      ? ((a.Kc = this.Kc.copy()), (a.Kc.group = a))
      : (null !== a.Kc && (a.Kc.group = null), (a.Kc = null));
    null !== this.ib && (a.ib = this.ib.copy());
  };
  t = qf.prototype;
  t.qf = function(a) {
    V.prototype.qf.call(this, a);
    var b = a.Jj();
    for (a = a.memberParts; a.next(); ) {
      var c = a.value;
      c.w();
      c.D(8);
      c.zj();
      if (c instanceof V) c.vd(b);
      else if (c instanceof T) for (c = c.labelNodes; c.next(); ) c.value.vd(b);
    }
  };
  t.$j = function(a, b, c, d, e, f, g) {
    if (a === fe && 'elements' === b)
      if (e instanceof jg)
        null === this.Xa
          ? (this.Xa = e)
          : this.Xa !== e &&
            C(
              'Cannot insert a second Placeholder into the visual tree of a Group.',
            );
      else {
        if (e instanceof W) {
          var h = e.vl(function(a) {
            return a instanceof jg;
          });
          h instanceof jg &&
            (null === this.Xa
              ? (this.Xa = h)
              : this.Xa !== h &&
                C(
                  'Cannot insert a second Placeholder into the visual tree of a Group.',
                ));
        }
      }
    else
      a === ge &&
        'elements' === b &&
        null !== this.Xa &&
        (d === this.Xa
          ? (this.Xa = null)
          : d instanceof W && this.Xa.jg(d) && (this.Xa = null));
    V.prototype.$j.call(this, a, b, c, d, e, f, g);
  };
  t.Fl = function(a, b) {
    V.prototype.Fl.call(this, a, b);
    this.isClipping &&
      this.type !== W.Spot &&
      this.isSubGraphExpanded &&
      ((a = this.resizeObject),
      a instanceof W && (a = a.vb()),
      null === this.ib && (this.ib = new M()),
      a.gi(this.ib),
      a instanceof Cf && this.ib.vc(-a.strokeWidth, -a.strokeWidth));
  };
  t.Vg = function(a, b, c, d) {
    this.af = this.Xa;
    V.prototype.Vg.call(this, a, b, c, d);
  };
  t.Za = function() {
    var a = this;
    a.isSubGraphExpanded &&
      this.memberParts.each(function(b) {
        (!a.computesBoundsIncludingLinks && b instanceof T) || b.Za();
      });
    V.prototype.Za.call(this);
  };
  t.mi = function() {
    if (!V.prototype.mi.call(this)) return !1;
    for (var a = this.memberParts; a.next(); ) {
      var b = a.value;
      if (b instanceof V) {
        if (b.isVisible() && oj(b)) return !1;
      } else if (
        b instanceof T &&
        b.isVisible() &&
        oj(b) &&
        b.fromNode !== this &&
        b.toNode !== this
      )
        return !1;
    }
    return !0;
  };

  function No(a, b) {
    if (a.on.add(b)) {
      b instanceof qf && a.Vk.add(b);
      var c = a.memberAdded;
      if (null !== c) {
        var d = !0,
          e = a.diagram;
        null !== e && ((d = e.$), (e.$ = !0));
        c(a, b);
        null !== e && (e.$ = d);
      }
      (a.isVisible() && a.isSubGraphExpanded) || b.Ub(!1);
    }
    (b instanceof T && !a.computesBoundsIncludingLinks) ||
      ((b = a.Xa), null === b && (b = a), b.w());
  }

  function Oo(a, b) {
    if (a.on.remove(b)) {
      b instanceof qf && a.Vk.remove(b);
      var c = a.memberRemoved;
      if (null !== c) {
        var d = !0,
          e = a.diagram;
        null !== e && ((d = e.$), (e.$ = !0));
        c(a, b);
        null !== e && (e.$ = d);
      }
      (a.isVisible() && a.isSubGraphExpanded) || b.Ub(!0);
    }
    (b instanceof T && !a.computesBoundsIncludingLinks) ||
      ((b = a.Xa), null === b && (b = a), b.w());
  }
  t.Fj = function() {
    if (0 < this.on.count) {
      var a = this.diagram;
      if (null !== a)
        for (var b = this.on.copy().iterator; b.next(); ) a.remove(b.value);
    }
    V.prototype.Fj.call(this);
  };
  qf.prototype.canAddMembers = function(a) {
    var b = this.diagram;
    if (null === b) return !1;
    b = b.commandHandler;
    for (a = Uk(a).iterator; a.next(); )
      if (!b.isValidMember(this, a.value)) return !1;
    return !0;
  };
  qf.prototype.addMembers = function(a, b) {
    var c = this.diagram;
    if (null === c) return !1;
    c = c.commandHandler;
    var d = !0;
    for (a = Uk(a).iterator; a.next(); ) {
      var e = a.value;
      !b || c.isValidMember(this, e) ? (e.containingGroup = this) : (d = !1);
    }
    return d;
  };
  qf.prototype.canUngroup = function() {
    if (!this.ungroupable) return !1;
    var a = this.layer;
    if (null === a || !a.allowUngroup) return !1;
    a = a.diagram;
    return null === a || a.allowUngroup ? !0 : !1;
  };
  t = qf.prototype;
  t.vd = function(a) {
    var b = 0 !== (this.U & 65536);
    V.prototype.vd.call(this, a);
    if (!b)
      for (
        (0 !== (this.U & 65536)) !== !0 && (this.U = this.U ^ 65536),
          b = this.vu();
        b.next();

      ) {
        var c = b.value;
        if (void 0 === a || !a.contains(c)) {
          var d = c.fromNode;
          null !== d && d !== this && d.Md(this) && !d.isVisible()
            ? (Zo(c.fromPort), Zo(c.toPort), c.ab())
            : ((d = c.toNode),
              null !== d &&
                d !== this &&
                d.Md(this) &&
                !d.isVisible() &&
                (Zo(c.fromPort), Zo(c.toPort), c.ab()));
        }
      }
  };
  t.vu = function() {
    var a = null !== this.diagram && this.diagram.tw;
    if (a && null !== this.Dp) return this.Dp.iterator;
    var b = this.Jj();
    b.add(this);
    for (var c = new G(), d = b.iterator; d.next(); ) {
      var e = d.value;
      if (e instanceof V)
        for (e = e.linksConnected; e.next(); ) {
          var f = e.value;
          b.contains(f) || c.add(f);
        }
    }
    a && (this.Dp = c);
    return c.iterator;
  };
  t.Ry = function() {
    var a = this.Jj();
    a.add(this);
    for (var b = new G(), c = a.iterator; c.next(); ) {
      var d = c.value;
      if (d instanceof V)
        for (d = d.linksConnected; d.next(); ) {
          var e = d.value,
            f = e.fromNode;
          null === f || (a.contains(f) && f !== this) || b.add(f);
          e = e.toNode;
          null === e || (a.contains(e) && e !== this) || b.add(e);
        }
    }
    return b.iterator;
  };
  t.Qy = function() {
    function a(b, d) {
      null !== b && (d.add(b), a(b.containingGroup, d));
    }
    var b = new G();
    a(this, b);
    return b;
  };
  t.Jj = function() {
    var a = new G();
    Sk(a, this, !0, 0, !0);
    a.remove(this);
    return a;
  };
  t.Ub = function(a) {
    V.prototype.Ub.call(this, a);
    for (var b = this.memberParts; b.next(); ) b.value.Ub(a);
  };
  qf.prototype.collapseSubGraph = function() {
    var a = this.diagram;
    if (null !== a && !a.Ie) {
      a.Ie = !0;
      var b = this.Jj();
      kp(this, b, a, this);
      a.Ie = !1;
    }
  };

  function kp(a, b, c, d) {
    for (var e = a.memberParts; e.next(); ) {
      var f = e.value;
      f.Ub(!1);
      f instanceof qf &&
        f.isSubGraphExpanded &&
        ((f.wasSubGraphExpanded = f.isSubGraphExpanded), kp(f, b, c, d));
      if (f instanceof V) f.vd(b), c.vj(f, d);
      else if (f instanceof T) for (f = f.labelNodes; f.next(); ) f.value.vd(b);
    }
    a.isSubGraphExpanded = !1;
  }
  qf.prototype.expandSubGraph = function() {
    var a = this.diagram;
    if (null !== a && !a.Ie) {
      a.Ie = !0;
      var b = this.Jj();
      lp(this, b, a, this);
      a.Ie = !1;
    }
  };

  function lp(a, b, c, d) {
    for (var e = a.memberParts; e.next(); ) {
      var f = e.value;
      f.Ub(!0);
      f instanceof qf &&
        f.wasSubGraphExpanded &&
        ((f.wasSubGraphExpanded = !1), lp(f, b, c, d));
      if (f instanceof V) f.vd(b), c.xj(f, d);
      else if (f instanceof T) for (f = f.labelNodes; f.next(); ) f.value.vd(b);
    }
    a.isSubGraphExpanded = !0;
  }
  qf.prototype.move = function(a, b) {
    void 0 === b && (b = !1);
    var c = b ? this.location : this.position,
      d = c.x;
    c = c.y;
    var e = a.x,
      f = a.y;
    if (
      !(d === e || (isNaN(d) && isNaN(e))) ||
      !(c === f || (isNaN(c) && isNaN(f)))
    ) {
      d = e - (isNaN(d) ? 0 : d);
      c = f - (isNaN(c) ? 0 : c);
      f = I.alloc();
      V.prototype.move.call(this, a, b);
      a = new G();
      for (b = this.Jj().iterator; b.next(); )
        if (
          ((e = b.value),
          e instanceof T &&
            (e.suspendsRouting && a.add(e),
            e.xd || (e.fromNode !== this && e.toNode !== this)))
        )
          e.suspendsRouting = !0;
      for (b.reset(); b.next(); )
        if (((e = b.value), !(e.eh() || (e instanceof V && e.isLinkLabel)))) {
          var g = e.position,
            h = e.location;
          g.v()
            ? ((f.x = g.x + d), (f.y = g.y + c), (e.position = f))
            : h.v() && ((f.x = h.x + d), (f.y = h.y + c), (e.location = f));
        }
      for (b.reset(); b.next(); )
        if (
          ((e = b.value),
          e instanceof T &&
            ((e.suspendsRouting = a.contains(e)),
            e.xd || (e.fromNode !== this && e.toNode !== this)))
        )
          (g = e.position),
            (f.x = g.x + d),
            (f.y = g.y + c),
            f.v() ? e.move(f) : e.ab(),
            Lj(e) && e.ab();
      I.free(f);
    }
  };
  ma.Object.defineProperties(qf.prototype, {
    placeholder: {
      get: function() {
        return this.Xa;
      },
    },
    computesBoundsAfterDrag: {
      get: function() {
        return 0 !== (this.U & 2048);
      },
      set: function(a) {
        var b = 0 !== (this.U & 2048);
        b !== a && ((this.U ^= 2048), this.g('computesBoundsAfterDrag', b, a));
      },
    },
    computesBoundsIncludingLinks: {
      get: function() {
        return 0 !== (this.U & 4096);
      },
      set: function(a) {
        var b = 0 !== (this.U & 4096);
        b !== a &&
          ((this.U ^= 4096), this.g('computesBoundsIncludingLinks', b, a));
      },
    },
    computesBoundsIncludingLocation: {
      get: function() {
        return 0 !== (this.U & 8192);
      },
      set: function(a) {
        var b = 0 !== (this.U & 8192);
        b !== a &&
          ((this.U ^= 8192), this.g('computesBoundsIncludingLocation', b, a));
      },
    },
    handlesDragDropForMembers: {
      get: function() {
        return 0 !== (this.U & 16384);
      },
      set: function(a) {
        var b = 0 !== (this.U & 16384);
        b !== a &&
          ((this.U ^= 16384), this.g('handlesDragDropForMembers', b, a));
      },
    },
    memberParts: {
      get: function() {
        return this.on.iterator;
      },
    },
    layout: {
      get: function() {
        return this.Kc;
      },
      set: function(a) {
        var b = this.Kc;
        if (b !== a) {
          null !== a &&
            null !== a.diagram &&
            a.diagram.layout === a &&
            C(
              'A layout cannot be both the Diagram.layout and a Group.layout: ' +
                a,
            );
          null !== b && ((b.diagram = null), (b.group = null));
          this.Kc = a;
          var c = this.diagram;
          null !== a && ((a.diagram = c), (a.group = this));
          null !== c && (c.mh = !0);
          this.g('layout', b, a);
          null !== c && c.Mb();
        }
      },
    },
    memberAdded: {
      get: function() {
        return null !== this.ya ? this.ya.lq : null;
      },
      set: function(a) {
        var b = this.memberAdded;
        b !== a && (Wo(this), (this.ya.lq = a), this.g('memberAdded', b, a));
      },
    },
    memberRemoved: {
      get: function() {
        return null !== this.ya ? this.ya.mq : null;
      },
      set: function(a) {
        var b = this.memberRemoved;
        b !== a && (Wo(this), (this.ya.mq = a), this.g('memberRemoved', b, a));
      },
    },
    memberValidation: {
      get: function() {
        return null !== this.ya ? this.ya.dj : null;
      },
      set: function(a) {
        var b = this.memberValidation;
        b !== a &&
          (Wo(this), (this.ya.dj = a), this.g('memberValidation', b, a));
      },
    },
    ungroupable: {
      get: function() {
        return 0 !== (this.U & 256);
      },
      set: function(a) {
        var b = 0 !== (this.U & 256);
        b !== a && ((this.U ^= 256), this.g('ungroupable', b, a));
      },
    },
    isSubGraphExpanded: {
      get: function() {
        return 0 !== (this.U & 512);
      },
      set: function(a) {
        var b = 0 !== (this.U & 512);
        if (b !== a) {
          this.U ^= 512;
          var c = this.diagram;
          this.g('isSubGraphExpanded', b, a);
          b = this.subGraphExpandedChanged;
          if (null !== b) {
            var d = !0;
            null !== c && ((d = c.$), (c.$ = !0));
            b(this);
            null !== c && (c.$ = d);
          }
          null !== c && c.undoManager.isUndoingRedoing
            ? (null !== this.Xa && this.Xa.w(),
              this.memberParts.each(function(a) {
                a.updateAdornments();
              }))
            : a
            ? this.expandSubGraph()
            : this.collapseSubGraph();
        }
      },
    },
    wasSubGraphExpanded: {
      get: function() {
        return 0 !== (this.U & 1024);
      },
      set: function(a) {
        var b = 0 !== (this.U & 1024);
        b !== a && ((this.U ^= 1024), this.g('wasSubGraphExpanded', b, a));
      },
    },
    subGraphExpandedChanged: {
      get: function() {
        return null !== this.ya ? this.ya.gr : null;
      },
      set: function(a) {
        var b = this.subGraphExpandedChanged;
        b !== a &&
          (Wo(this), (this.ya.gr = a), this.g('subGraphExpandedChanged', b, a));
      },
    },
    gh: {
      get: function() {
        return 0 !== (this.U & 32768);
      },
      set: function(a) {
        (0 !== (this.U & 32768)) !== a && (this.U ^= 32768);
      },
    },
  });
  qf.prototype.expandSubGraph = qf.prototype.expandSubGraph;
  qf.prototype.collapseSubGraph = qf.prototype.collapseSubGraph;
  qf.prototype.findSubGraphParts = qf.prototype.Jj;
  qf.prototype.findContainingGroupChain = qf.prototype.Qy;
  qf.prototype.findExternalNodesConnected = qf.prototype.Ry;
  qf.prototype.findExternalLinksConnected = qf.prototype.vu;
  qf.prototype.ensureBounds = qf.prototype.Za;
  qf.className = 'Group';

  function jg(a) {
    Y.call(this);
    this.ub = qc;
    this.Nn = new M(NaN, NaN, NaN, NaN);
    a && Object.assign(this, a);
  }
  la(jg, Y);
  jg.prototype.cloneProtected = function(a) {
    Y.prototype.cloneProtected.call(this, a);
    a.ub = this.ub.J();
    a.Nn = this.Nn.copy();
  };
  jg.prototype.Xg = function(a) {
    if (null === this.background && null === this.areaBackground) return !1;
    var b = this.naturalBounds;
    return $b(0, 0, b.width, b.height, a.x, a.y);
  };
  jg.prototype.El = function() {
    var a = this.part;
    (null !== a && (a instanceof qf || a instanceof ue)) ||
      C('Placeholder is not inside a Group or Adornment.');
    if (a instanceof qf) {
      var b = this.computeBorder(this.Nn),
        c = this.minSize,
        d = this.bc;
      Qb(
        d,
        (isFinite(c.width) ? Math.max(c.width, b.width) : b.width) || 0,
        (isFinite(c.height) ? Math.max(c.height, b.height) : b.height) || 0,
      );
      this.ve(0, 0, d.width, d.height);
      d = a.memberParts;
      for (c = !1; d.next(); )
        if (d.value.isVisible()) {
          c = !0;
          break;
        }
      d = a.diagram;
      !c ||
        null === d ||
        d.animationManager.Ju(a) ||
        isNaN(b.x) ||
        isNaN(b.y) ||
        ((c = I.alloc()),
        c.oi(b, a.locationSpot),
        c.C(a.location) || (a.location = c),
        I.free(c));
    } else {
      b = this.bc;
      c = this.ub;
      d = c.left + c.right;
      var e = c.top + c.bottom,
        f = a.adornedObject;
      a.angle = f.fi();
      var g = 0;
      f instanceof Cf && (g = f.strokeWidth);
      var h = f.uf(),
        k = f.naturalBounds,
        l = (k.width + g) * h;
      g = (k.height + g) * h;
      a.type !== W.Link &&
        ((h = f.ia(
          'Selection' === a.category ? tc : a.locationSpot,
          I.alloc(),
        )),
        (a.location = h),
        I.free(h));
      isNaN(l) || isNaN(g)
        ? ((a = f.ia(tc, I.alloc())),
          (l = M.allocAt(a.x, a.y, 0, 0)),
          l.Me(f.ia(Cc, a)),
          l.Me(f.ia(vc, a)),
          l.Me(f.ia(Ac, a)),
          Qb(b, l.width + d || 0, l.height + e || 0),
          this.ve(-c.left, -c.top, b.width, b.height),
          I.free(a),
          M.free(l))
        : (Qb(b, l + d || 0, g + e || 0),
          this.ve(-c.left, -c.top, b.width, b.height));
    }
  };
  jg.prototype.Vg = function(a, b, c, d) {
    this.actualBounds.h(a, b, c, d);
  };
  jg.prototype.computeBorder = function(a) {
    var b = this.part,
      c = b.diagram;
    if (
      null !== c &&
      b instanceof qf &&
      !b.layer.isTemporary &&
      b.computesBoundsAfterDrag &&
      this.Nn.v()
    ) {
      var d = c.toolManager.findTool('Dragging');
      if (
        d === c.currentTool &&
        ((c = d.computeBorder(b, this.Nn, a)), null !== c)
      )
        return c;
    }
    c = M.alloc();
    d = this.computeMemberBounds(c);
    var e = this.ub;
    b instanceof qf && !b.isSubGraphExpanded
      ? a.h(d.x - e.left, d.y - e.top, 0, 0)
      : a.h(
          d.x - e.left,
          d.y - e.top,
          Math.max(d.width + e.left + e.right, 0),
          Math.max(d.height + e.top + e.bottom, 0),
        );
    M.free(c);
    b instanceof qf &&
      b.computesBoundsIncludingLocation &&
      b.location.v() &&
      a.Me(b.location);
    return a;
  };
  jg.prototype.computeMemberBounds = function(a) {
    if (!(this.part instanceof qf)) return a.h(0, 0, 0, 0), a;
    for (
      var b = this.part,
        c = Infinity,
        d = Infinity,
        e = -Infinity,
        f = -Infinity,
        g = b.memberParts;
      g.next();

    ) {
      var h = g.value;
      if (h.isVisible()) {
        if (h instanceof T) {
          if (!b.computesBoundsIncludingLinks) continue;
          if (nj(h)) continue;
          if (h.fromNode === b || h.toNode === b) continue;
        }
        h = h.actualBounds;
        h.left < c && (c = h.left);
        h.top < d && (d = h.top);
        h.right > e && (e = h.right);
        h.bottom > f && (f = h.bottom);
      }
    }
    isFinite(c) && isFinite(d)
      ? a.h(c, d, e - c, f - d)
      : ((b = b.location), a.h(b.x, b.y, 0, 0));
    return a;
  };
  ma.Object.defineProperties(jg.prototype, {
    padding: {
      get: function() {
        return this.ub;
      },
      set: function(a) {
        'number' === typeof a && (a = new ec(a));
        var b = this.ub;
        b.C(a) || ((this.ub = a = a.J()), this.g('padding', b, a), this.w());
      },
    },
  });
  jg.className = 'Placeholder';

  function T(a) {
    U.call(this, W.Link);
    this.Oa = 8;
    this.Ue = null;
    this.Ve = '';
    this.hf = this.Om = null;
    this.jf = '';
    this.Xn = null;
    this.dk = $f;
    this.wm = 0;
    this.ym = $f;
    this.zm = NaN;
    this.kj = mp;
    this.Sn = 0.5;
    this.rd = null;
    this.Jb = new E().freeze();
    this.ef = this.Eg = null;
    this.bl = new M();
    this.sa = new O();
    this.u = this.m = this.If = this.Mf = null;
    this.Yt = new I();
    this.Gp = this.qw = this.pw = null;
    this.Ys = NaN;
    this.aa = null;
    this.j = [];
    a && Object.assign(this, a);
  }
  la(T, U);
  T.prototype.cloneProtected = function(a) {
    U.prototype.cloneProtected.call(this, a);
    a.Oa = this.Oa & -113;
    a.Ve = this.Ve;
    a.Om = this.Om;
    a.jf = this.jf;
    a.Xn = this.Xn;
    a.dk = this.dk;
    a.wm = this.wm;
    a.ym = this.ym;
    a.zm = this.zm;
    a.kj = this.kj;
    a.Sn = this.Sn;
    null !== this.aa && (a.aa = this.aa.copy());
  };
  t = T.prototype;
  t.qf = function(a) {
    U.prototype.qf.call(this, a);
    this.Ve = a.Ve;
    this.jf = a.jf;
    a.Eg = null;
    a.ab();
    a.If = this.If;
    var b = a.fromPort;
    null !== b && Zo(b);
    a = a.toPort;
    null !== a && Zo(a);
  };
  t.ob = function(a) {
    a.classType === T
      ? 2 === (a.value & 2)
        ? (this.routing = a)
        : a === cg || a === Zf || a === Yf
        ? (this.curve = a)
        : a === np || a === op || a === pp
        ? (this.adjusting = a)
        : a !== mp &&
          a !== $f &&
          C('Unknown Link enum value for a Link property: ' + a)
      : U.prototype.ob.call(this, a);
  };
  t.Rc = function() {
    null === this.aa && (this.aa = new dl());
  };
  t.mi = function() {
    var a = this.fromNode;
    if (null !== a) {
      var b = a.findVisibleNode();
      null !== b && (a = b);
      if (oj(a) || pj(a)) return !1;
    }
    a = this.toNode;
    return null !== a &&
      ((b = a.findVisibleNode()), null !== b && (a = b), oj(a) || pj(a))
      ? !1
      : !0;
  };
  t.fv = function() {
    return !1;
  };
  t.ns = function() {};
  t.Tc = function() {
    return !1;
  };
  T.prototype.computeAngle = function(a, b, c) {
    return T.computeAngle(b, c);
  };
  T.computeAngle = function(a, b) {
    switch (a) {
      default:
      case $f:
        a = 0;
        break;
      case Tm:
        a = b;
        break;
      case Mm:
        a = b + 90;
        break;
      case Om:
        a = b - 90;
        break;
      case qp:
        a = b + 180;
        break;
      case Um:
        a = J.Eo(b);
        90 < a && 270 > a && (a -= 180);
        break;
      case Nm:
        a = J.Eo(b + 90);
        90 < a && 270 > a && (a -= 180);
        break;
      case Pm:
        a = J.Eo(b - 90);
        90 < a && 270 > a && (a -= 180);
        break;
      case Qm:
        a = J.Eo(b);
        if ((45 < a && 135 > a) || (225 < a && 315 > a)) return 0;
        90 < a && 270 > a && (a -= 180);
    }
    return J.Eo(a);
  };

  function To(a) {
    var b = a.fromNode,
      c = a.toNode,
      d = null;
    null !== b
      ? (d = null !== c ? b.Sw(c) : b.containingGroup)
      : null !== c
      ? (d = c.containingGroup)
      : (d = null);
    b = d;
    c = a.ph;
    if (c !== b) {
      null !== c && Oo(c, a);
      a.ph = b;
      null !== b && No(b, a);
      var e = a.containingGroupChanged;
      if (null !== e) {
        var f = !0,
          g = a.diagram;
        null !== g && ((f = g.$), (g.$ = !0));
        e(a, c, b);
        null !== g && (g.$ = f);
      }
      !a.xd || (a.pw !== c && a.qw !== c) || a.ab();
    }
    if (a.isLabeledLink)
      for (a = a.labelNodes; a.next(); ) a.value.containingGroup = d;
  }
  t = T.prototype;
  t.dh = function() {
    var a = this.containingGroup;
    null !== a &&
      this.fromNode !== a &&
      this.toNode !== a &&
      a.computesBoundsIncludingLinks &&
      U.prototype.dh.call(this);
  };
  t.wo = function(a) {
    var b = this.fromNode;
    return a === b ? this.toNode : b;
  };
  t.jz = function(a) {
    var b = this.fromPort;
    return a === b ? this.toPort : b;
  };

  function cp(a, b) {
    null === a.rd && (a.rd = new G());
    a.rd.add(b);
    a.w();
  }
  t.yo = function(a) {
    U.prototype.yo.call(this, a);
    rp(this) && this.Ao(this.actualBounds);
    if (!a) {
      a = this.Ue;
      var b = null;
      null !== a && ((b = this.fromPort), ap(a, this, b));
      var c = this.hf;
      if (null !== c) {
        var d = this.toPort;
        (c === a && d === b) || ap(c, this, d);
      }
      sp(this);
    }
  };
  t.zo = function(a) {
    U.prototype.zo.call(this, a);
    rp(this) && this.Ao(this.actualBounds);
    if (!a) {
      a = this.Ue;
      var b = null;
      null !== a && ((b = this.fromPort), bp(a, this, b));
      var c = this.hf;
      if (null !== c) {
        var d = this.toPort;
        (c === a && d === b) || bp(c, this, d);
      }
      tp(this);
    }
  };
  t.Fj = function() {
    this.xd = !0;
    if (null !== this.rd) {
      var a = this.diagram;
      if (null !== a)
        for (var b = this.rd.copy().iterator; b.next(); ) a.remove(b.value);
    }
    null !== this.data &&
      ((a = this.diagram), null !== a && a.partManager.removeDataForLink(this));
  };
  T.prototype.updateRelationshipsFromData = function() {
    if (null !== this.data) {
      var a = this.diagram;
      null !== a && a.partManager.updateRelationshipsFromData(this);
    }
  };
  T.prototype.move = function(a, b) {
    var c = b ? this.location : this.position,
      d = c.x;
    isNaN(d) && (d = 0);
    var e = c.y;
    isNaN(e) && (e = 0);
    d = a.x - d;
    e = a.y - e;
    !0 === b
      ? U.prototype.move.call(this, a, !1)
      : ((a = I.allocAt(c.x + d, c.y + e)),
        U.prototype.move.call(this, a, !1),
        I.free(a));
    cf(this, d, e);
    for (a = this.labelNodes; a.next(); )
      (b = a.value), (c = b.position), b.moveTo(c.x + d, c.y + e);
  };
  T.prototype.canRelinkFrom = function() {
    if (!this.relinkableFrom) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowRelink) return !1;
    a = a.diagram;
    return null === a || a.allowRelink ? !0 : !1;
  };
  T.prototype.canRelinkTo = function() {
    if (!this.relinkableTo) return !1;
    var a = this.layer;
    if (null === a) return !0;
    if (!a.allowRelink) return !1;
    a = a.diagram;
    return null === a || a.allowRelink ? !0 : !1;
  };
  T.prototype.computeMidPoint = function(a) {
    var b = this.pointsCount;
    if (0 === b) return a.assign(ub), a;
    if (1 === b) return a.assign(this.i(0)), a;
    if (2 === b) {
      var c = this.i(0),
        d = this.i(1);
      a.h((c.x + d.x) / 2, (c.y + d.y) / 2);
      return a;
    }
    if (
      this.isOrthogonal &&
      (15 <= this.computeCorner() || this.computeCurve() === cg)
    )
      return (
        this.sa.Bu(0.5, a),
        a.add(this.i(0)),
        (c = this.sa.figures.first()),
        a.offset(-c.startX, -c.startY),
        a
      );
    if (this.computeCurve() === cg) {
      if (3 === b) {
        c = this.i(0);
        d = this.i(1);
        var e = this.i(2);
        J.Gw(c.x, c.y, d.x, d.y, d.x, d.y, e.x, e.y, a);
        return a;
      }
      d = ((b - 1) / 3) | 0;
      c = 3 * ((d / 2) | 0);
      if (1 === d % 2) {
        d = this.i(c);
        e = this.i(c + 1);
        var f = this.i(c + 2);
        c = this.i(c + 3);
        J.Gw(d.x, d.y, e.x, e.y, f.x, f.y, c.x, c.y, a);
      } else a.assign(this.i(c));
      return a;
    }
    var g = this.flattenedLengths;
    c = this.flattenedTotalLength;
    for (e = f = d = 0; d < c / 2 && f < b; ) {
      e = g[f];
      if (d + e > c / 2) break;
      d += e;
      f++;
    }
    b = this.i(f);
    f = this.i(f + 1);
    1 > Math.abs(b.x - f.x)
      ? b.y > f.y
        ? a.h(b.x, b.y - (c / 2 - d))
        : a.h(b.x, b.y + (c / 2 - d))
      : 1 > Math.abs(b.y - f.y)
      ? b.x > f.x
        ? a.h(b.x - (c / 2 - d), b.y)
        : a.h(b.x + (c / 2 - d), b.y)
      : ((c = (c / 2 - d) / e),
        a.h(b.x + c * (f.x - b.x), b.y + c * (f.y - b.y)));
    return a;
  };
  T.prototype.computeMidAngle = function() {
    var a = this.pointsCount;
    if (2 > a) return NaN;
    if (2 === a) return this.i(0).Ya(this.i(1));
    if (
      this.isOrthogonal &&
      (15 <= this.computeCorner() || this.computeCurve() === cg)
    )
      return this.sa.Yw(0.5);
    if (this.computeCurve() === cg && 4 <= a) {
      var b = ((a - 1) / 3) | 0,
        c = 3 * ((b / 2) | 0);
      if (1 === b % 2) {
        c = Math.floor(c);
        a = this.i(c);
        b = this.i(c + 1);
        var d = this.i(c + 2);
        c = this.i(c + 3);
        return J.ty(a.x, a.y, b.x, b.y, d.x, d.y, c.x, c.y);
      }
      if (0 < c && c + 1 < a) return this.i(c - 1).Ya(this.i(c + 1));
    }
    b = this.flattenedLengths;
    d = this.flattenedTotalLength;
    var e = 0;
    c = 0;
    for (var f; e < d / 2 && c < a; ) {
      f = b[c];
      if (e + f > d / 2) break;
      e += f;
      c++;
    }
    b = this.i(c);
    d = this.i(c + 1);
    if (1 > Math.abs(b.x - d.x) && 1 > Math.abs(b.y - d.y)) {
      if (0 < c && c + 2 < a) return this.i(c - 1).Ya(this.i(c + 2));
    } else {
      if (1 > Math.abs(b.x - d.x)) return b.y > d.y ? 270 : 90;
      if (1 > Math.abs(b.y - d.y)) return b.x > d.x ? 180 : 0;
    }
    return b.Ya(d);
  };
  t = T.prototype;
  t.i = function(a) {
    return this.Jb.s[a];
  };
  t.Wc = function(a, b) {
    this.Jb.Vc(a, b);
  };
  t.M = function(a, b, c) {
    this.Jb.Vc(a, new I(b, c));
  };
  t.sz = function(a, b) {
    this.Jb.Cb(a, b);
  };
  t.l = function(a, b, c) {
    this.Jb.Cb(a, new I(b, c));
  };
  t.fe = function(a) {
    this.Jb.add(a);
  };
  t.mf = function(a, b) {
    this.Jb.add(new I(a, b));
  };
  t.Yu = function(a) {
    this.Jb.mb(a);
  };
  t.Aj = function() {
    this.Jb.clear();
  };

  function cf(a, b, c) {
    if (0 !== b || 0 !== c)
      if (0 === a.pointsCount)
        a.defaultFromPoint && a.defaultFromPoint.offset(b, c),
          a.defaultToPoint && a.defaultToPoint.offset(b, c);
      else {
        for (var d = a.xd, e = new E(), f = a.Jb.iterator; f.next(); ) {
          var g = f.value;
          e.add(new I(g.x + b, g.y + c).freeze());
        }
        e.freeze();
        f = a.Jb;
        a.Jb = e;
        g = a.diagram;
        isNaN(b) || isNaN(c) || (null !== g && g.animationManager.zb)
          ? a.w()
          : (a.de.h(a.de.x + b, a.de.y + c),
            a.pa.h(a.pa.x + b, a.pa.y + c),
            Al(a));
        d
          ? up(a)
          : (a.defaultFromPoint && (a.defaultFromPoint = a.i(0)),
            a.defaultToPoint && (a.defaultToPoint = a.i(a.pointsCount - 1)));
        null !== g &&
          g.animationManager.zb &&
          ((b = g.animationManager), (a.ef = e), b.dl.add(a));
        a.g('points', f, e);
      }
  }
  t.jh = function() {
    null === this.Eg && ((this.Eg = this.Jb), (this.Jb = this.Jb.copy()));
  };
  t.pf = function() {
    if (null !== this.Eg) {
      for (
        var a = this.Eg,
          b = this.Jb,
          c = Infinity,
          d = Infinity,
          e = a.s,
          f = e.length,
          g = 0;
        g < f;
        g++
      ) {
        var h = e[g];
        c = Math.min(h.x, c);
        d = Math.min(h.y, d);
      }
      h = g = Infinity;
      for (var k = b.s, l = k.length, m = 0; m < l; m++) {
        var n = k[m];
        g = Math.min(n.x, g);
        h = Math.min(n.y, h);
        n.freeze();
      }
      b.freeze();
      if (l === f)
        for (f = 0; f < l; f++) {
          if (
            ((m = e[f]), (n = k[f]), m.x - c !== n.x - g || m.y - d !== n.y - h)
          ) {
            this.mc(!0);
            break;
          }
        }
      else this.mc(!0);
      this.Eg = null;
      c = this.diagram;
      null !== c &&
        c.animationManager.zb &&
        ((c = c.animationManager), (this.ef = b), c.dl.add(this));
      up(this);
      this.g('points', a, b);
    }
  };
  t.$u = function() {
    null !== this.Eg && ((this.Jb = this.Eg), (this.Eg = null));
  };

  function up(a) {
    0 === a.Jb.count
      ? (a.xd = !1)
      : ((a.xd = !0),
        (a.Gp = null),
        (a.Ys = NaN),
        (a.defaultFromPoint = a.i(0)),
        (a.defaultToPoint = a.i(a.pointsCount - 1)),
        vp(a, !1));
  }
  t.ab = function() {
    if (!this.suspendsRouting) {
      var a = this.diagram;
      if (a) {
        if (a.Zr.contains(this) || a.undoManager.isUndoingRedoing) return;
        a = a.animationManager;
        if (a.isTicking && !a.isAnimating) return;
        null !== this.ef && !a.isTicking && a.isAnimating && (this.ef = null);
      }
      a = this.path;
      null !== a && ((this.xd = !1), this.w(), a.w());
    }
  };
  t.mg = function() {
    if (!this.xd && !this.computingPoints) {
      var a = !0;
      try {
        (this.computingPoints = !0), this.jh(), (a = this.computePoints());
      } catch (b) {
        (this.computingPoints = !1), this.$u();
      } finally {
        (this.computingPoints = !1), a ? this.pf() : this.$u();
      }
    }
  };
  T.prototype.computePoints = function() {
    if (null === this.diagram) return !1;
    var a = this.fromNode,
      b = null;
    null === a
      ? (wp || ((wp = new V()), (wp.desiredSize = Db), wp.Za()),
        this.defaultFromPoint &&
          ((wp.location = this.defaultFromPoint), wp.Za(), (b = a = wp)))
      : (b = this.fromPort);
    if (null !== b && !a.isVisible()) {
      var c = a.findVisibleNode();
      null !== c && c !== a ? ((a = c), (b = c.port)) : (a = c);
    }
    this.pw = a;
    if (null === a || !a.location.v()) return !1;
    for (; !(null === b || (b.actualBounds.v() && b.zf())); ) b = b.panel;
    if (null === b) return !1;
    var d = this.toNode,
      e = null;
    null === d
      ? (xp || ((xp = new V()), (xp.desiredSize = Db), xp.Za()),
        this.defaultToPoint &&
          ((xp.location = this.defaultToPoint), xp.Za(), (e = d = xp)))
      : (e = this.toPort);
    null === e ||
      d.isVisible() ||
      ((c = d.findVisibleNode()),
      null !== c && c !== d ? ((d = c), (e = c.port)) : (d = c));
    this.qw = d;
    if (null === d || !d.location.v()) return !1;
    for (; !(null === e || (e.actualBounds.v() && e.zf())); ) e = e.panel;
    if (null === e) return !1;
    var f = this.pointsCount,
      g = this.computeSpot(!0, b);
    c = this.computeSpot(!1, e);
    var h = yp(g),
      k = yp(c),
      l = b === e && null !== b,
      m = this.isOrthogonal,
      n = this.curve === cg;
    this.Mf = l && !m ? (n = !0) : !1;
    var p = this.computeAdjusting() === $f || l;
    if (!m && !l && h && k) {
      if (
        ((h = !1),
        !p &&
          3 <= f &&
          ((p = this.getLinkPoint(a, b, g, !0, !1, d, e)),
          (k = this.getLinkPoint(d, e, c, !1, !1, a, b)),
          (h = this.adjustPoints(0, p, f - 1, k))) &&
          ((p = this.getLinkPoint(a, b, g, !0, !1, d, e)),
          (k = this.getLinkPoint(d, e, c, !1, !1, a, b)),
          this.adjustPoints(0, p, f - 1, k)),
        !h)
      )
        if ((this.Aj(), n)) {
          f = this.getLinkPoint(a, b, g, !0, !1, d, e);
          p = this.getLinkPoint(d, e, c, !1, !1, a, b);
          h = p.x - f.x;
          k = p.y - f.y;
          l = this.computeCurviness();
          n = m = 0;
          var r = f.x + h / 3,
            q = f.y + k / 3,
            u = r,
            w = q;
          J.B(k, 0)
            ? (w = 0 < h ? w - l : w + l)
            : ((m = -h / k),
              (n = Math.sqrt((l * l) / (m * m + 1))),
              0 > l && (n = -n),
              (u = (0 > k ? -1 : 1) * n + r),
              (w = m * (u - r) + q));
          r = f.x + (2 * h) / 3;
          q = f.y + (2 * k) / 3;
          var v = r,
            z = q;
          J.B(k, 0)
            ? (z = 0 < h ? z - l : z + l)
            : ((v = (0 > k ? -1 : 1) * n + r), (z = m * (v - r) + q));
          this.Aj();
          this.fe(f);
          this.mf(u, w);
          this.mf(v, z);
          this.fe(p);
          this.Wc(0, this.getLinkPoint(a, b, g, !0, !1, d, e));
          this.Wc(3, this.getLinkPoint(d, e, c, !1, !1, a, b));
        } else if (
          ((f = d),
          (p = e),
          (d = this.getLinkPoint(a, b, g, !0, !1, f, p)),
          (e = this.getLinkPoint(f, p, c, !1, !1, a, b)),
          this.hasCurviness())
        )
          (p = e.x - d.x),
            (c = e.y - d.y),
            (g = this.computeCurviness()),
            (a = d.x + p / 2),
            (b = d.y + c / 2),
            (f = a),
            (h = b),
            J.B(c, 0)
              ? (h = 0 < p ? h - g : h + g)
              : ((p = -p / c),
                (f = Math.sqrt((g * g) / (p * p + 1))),
                0 > g && (f = -f),
                (f = (0 > c ? -1 : 1) * f + a),
                (h = p * (f - a) + b)),
            this.fe(d),
            this.mf(f, h),
            this.fe(e);
        else {
          this.fe(d);
          this.fe(e);
          h = M.alloc();
          b.gi(h);
          k = h.ba(e);
          p.gi(h);
          l = h.ba(d);
          if (k || l)
            (g = b.ia(zp(g), new I())),
              this.Wc(0, this.getLinkPointFromPoint(a, b, g, e, !0, g)),
              (c = p.ia(zp(c), new I())),
              this.Wc(1, this.getLinkPointFromPoint(f, p, c, d, !1, c));
          M.free(h);
        }
    } else {
      n = this.isAvoiding;
      p && ((m && n) || l) && this.Aj();
      var y = l ? this.computeCurviness() : 0;
      n = this.getLinkPoint(a, b, g, !0, m, d, e);
      r = u = q = 0;
      if (m || !h || l)
        (w = this.computeEndSegmentLength(a, b, g, !0)),
          (r = this.getLinkDirection(a, b, n, g, !0, m, d, e)),
          l &&
            (h || g.C(c) || (!m && 1 === g.x + c.x && 1 === g.y + c.y)) &&
            ((r -= m ? 90 : 30), 0 > y && (r -= 180)),
          0 > r ? (r += 360) : 360 <= r && (r -= 360),
          l && (w += Math.abs(y) * (m ? 1 : 2)),
          0 === r
            ? (q = w)
            : 90 === r
            ? (u = w)
            : 180 === r
            ? (q = -w)
            : 270 === r
            ? (u = -w)
            : ((q = w * Math.cos((r * Math.PI) / 180)),
              (u = w * Math.sin((r * Math.PI) / 180))),
          g.Fc() &&
            l &&
            ((w = b.ia(yc, I.alloc())),
            (v = I.allocAt(w.x + 1e3 * q, w.y + 1e3 * u)),
            this.getLinkPointFromPoint(a, b, w, v, !0, n),
            I.free(w),
            I.free(v));
      w = this.getLinkPoint(d, e, c, !1, m, a, b);
      var A = (z = v = 0);
      if (m || !k || l) {
        var B = this.computeEndSegmentLength(d, e, c, !1);
        A = this.getLinkDirection(d, e, w, c, !1, m, a, b);
        l &&
          (k || g.C(c) || (!m && 1 === g.x + c.x && 1 === g.y + c.y)) &&
          ((A += m ? 0 : 30), 0 > y && (A += 180));
        0 > A ? (A += 360) : 360 <= A && (A -= 360);
        l && (B += Math.abs(y) * (m ? 1 : 2));
        0 === A
          ? (v = B)
          : 90 === A
          ? (z = B)
          : 180 === A
          ? (v = -B)
          : 270 === A
          ? (z = -B)
          : ((v = B * Math.cos((A * Math.PI) / 180)),
            (z = B * Math.sin((A * Math.PI) / 180)));
        c.Fc() &&
          l &&
          ((c = e.ia(yc, I.alloc())),
          (g = I.allocAt(c.x + 1e3 * v, c.y + 1e3 * z)),
          this.getLinkPointFromPoint(d, e, c, g, !1, w),
          I.free(c),
          I.free(g));
      }
      c = n;
      if (m || !h || l) c = new I(n.x + q, n.y + u);
      g = w;
      if (m || !k || l) g = new I(w.x + v, w.y + z);
      !p && !m && h && 3 < f && this.adjustPoints(0, n, f - 2, g)
        ? this.Wc(f - 1, w)
        : !p && !m && k && 3 < f && this.adjustPoints(1, c, f - 1, w)
        ? this.Wc(0, n)
        : !p && (m ? 6 <= f : 4 < f) && this.adjustPoints(1, c, f - 2, g)
        ? (this.Wc(0, n), this.Wc(f - 1, w))
        : (this.Aj(),
          this.fe(n),
          (m || !h || l) && this.fe(c),
          m && this.addOrthoPoints(c, r, g, A, a, d),
          (m || !k || l) && this.fe(g),
          this.fe(w));
    }
    return !0;
  };

  function Ap(a, b) {
    Math.abs(b.x - a.x) > Math.abs(b.y - a.y)
      ? (b.x >= a.x ? (b.x = a.x + 9e9) : (b.x = a.x - 9e9), (b.y = a.y))
      : (b.y >= a.y ? (b.y = a.y + 9e9) : (b.y = a.y - 9e9), (b.x = a.x));
    return b;
  }
  T.prototype.getLinkPointFromPoint = function(a, b, c, d, e, f) {
    void 0 === f && (f = new I());
    if (null === a || null === b) return f.assign(c), f;
    a.isVisible() ||
      ((e = a.findVisibleNode()), null !== e && e !== a && (b = e.port));
    a = null;
    e = b.panel;
    null === e || e.ke() || (e = e.panel);
    if (null === e) {
      e = d.x;
      d = d.y;
      var g = c.x;
      c = c.y;
    } else {
      a = e.ge;
      e = 1 / (a.m11 * a.m22 - a.m12 * a.m21);
      g = a.m22 * e;
      var h = -a.m12 * e,
        k = -a.m21 * e,
        l = a.m11 * e,
        m = e * (a.m21 * a.dy - a.m22 * a.dx),
        n = e * (a.m12 * a.dx - a.m11 * a.dy);
      e = d.x * g + d.y * k + m;
      d = d.x * h + d.y * l + n;
      g = c.x * g + c.y * k + m;
      c = c.x * h + c.y * l + n;
    }
    b.Kj(e, d, g, c, f);
    null !== a && f.transform(a);
    return f;
  };

  function Bp(a, b) {
    var c = b.Hn;
    null === c && ((c = new Cp()), (c.port = b), (c.node = b.part), (b.Hn = c));
    return Dp(c, a);
  }
  T.prototype.getLinkPoint = function(a, b, c, d, e, f, g, h) {
    void 0 === h && (h = new I());
    if (c.pb() && !yp(c)) return b.ia(c, h), h;
    if (c.Uc()) {
      var k = Bp(this, b);
      if (null !== k) {
        h.assign(k.Co);
        if (e && this.routing === Ep) {
          var l = Bp(this, g);
          if (null !== l && k.tl < l.tl) {
            k = I.alloc();
            l = I.alloc();
            var m = new M(b.ia(tc, k), b.ia(Cc, l)),
              n = this.computeSpot(!d, g);
            a = this.getLinkPoint(f, g, n, !d, e, a, b, l);
            (c.xf(Ec) || c.xf(Gc)) && a.y >= m.y && a.y <= m.y + m.height
              ? (h.y = a.y)
              : (c.xf(Dc) || c.xf(Hc)) &&
                a.x >= m.x &&
                a.x <= m.x + m.width &&
                (h.x = a.x);
            I.free(k);
            I.free(l);
          }
        }
        return h;
      }
    }
    c = b.ia(zp(c), I.alloc());
    this.pointsCount > (e ? 6 : 2)
      ? ((g = d ? this.i(1) : this.i(this.pointsCount - 2)),
        e && (g = Ap(c, g.copy())))
      : ((k = this.computeSpot(!d, g)),
        (f = I.alloc()),
        (g = g.ia(zp(k), f)),
        e && (g = Ap(c, g)),
        I.free(f));
    this.getLinkPointFromPoint(a, b, c, g, d, h);
    I.free(c);
    return h;
  };
  T.prototype.getLinkDirection = function(a, b, c, d, e, f, g, h) {
    a: if (d.pb())
      var k =
        d.x > d.y
          ? d.x > 1 - d.y
            ? 0
            : d.x < 1 - d.y
            ? 270
            : 315
          : d.x < d.y
          ? d.x > 1 - d.y
            ? 90
            : d.x < 1 - d.y
            ? 180
            : 135
          : 0.5 > d.x
          ? 225
          : 0.5 < d.x
          ? 45
          : 0;
    else {
      if (d.Uc() && ((k = Bp(this, b)), null !== k))
        switch (k.Gc) {
          case 1:
            k = 270;
            break a;
          case 2:
            k = 180;
            break a;
          default:
          case 4:
            k = 0;
            break a;
          case 8:
            k = 90;
            break a;
        }
      k = b.ia(yc, I.alloc());
      this.pointsCount > (f ? 6 : 2)
        ? ((h = e ? this.i(1) : this.i(this.pointsCount - 2)),
          (h = f ? Ap(k, h.copy()) : c))
        : ((c = I.alloc()), (h = h.ia(yc, c)), I.free(c));
      c =
        Math.abs(h.x - k.x) > Math.abs(h.y - k.y)
          ? h.x >= k.x
            ? 0
            : 180
          : h.y >= k.y
          ? 90
          : 270;
      I.free(k);
      k = c;
    }
    d.Fc() && g.Md(a) && ((k += 180), 360 <= k && (k -= 360));
    if (yp(d)) return k;
    a = b.fi();
    if (0 === a) return k;
    45 <= a && 135 > a
      ? (k += 90)
      : 135 <= a && 225 > a
      ? (k += 180)
      : 225 <= a && 315 > a && (k += 270);
    360 <= k && (k -= 360);
    return k;
  };
  T.prototype.computeEndSegmentLength = function(a, b, c, d) {
    if (null !== b && c.Uc() && ((a = Bp(this, b)), null !== a)) return a.tu;
    a = d ? this.fromEndSegmentLength : this.toEndSegmentLength;
    null !== b &&
      isNaN(a) &&
      (a = d ? b.fromEndSegmentLength : b.toEndSegmentLength);
    isNaN(a) && (a = 10);
    return a;
  };
  T.prototype.computeSpot = function(a, b) {
    void 0 === b && (b = null);
    a
      ? ((a = b ? b : this.fromPort),
        null === a
          ? (a = yc)
          : ((b = this.fromSpot),
            b.Sb() && (b = a.fromSpot),
            (a = b === Wc ? sc : b)))
      : ((a = b ? b : this.toPort),
        null === a
          ? (a = yc)
          : ((b = this.toSpot),
            b.Sb() && (b = a.toSpot),
            (a = b === Wc ? sc : b)));
    return a;
  };

  function yp(a) {
    return a === sc || (0.5 === a.x && 0.5 === a.y);
  }

  function zp(a) {
    return 0.5 === a.x && 0.5 === a.y ? a : yc;
  }
  T.prototype.computeOtherPoint = function(a, b) {
    if (this.computeAdjusting() !== $f && 4 < this.pointsCount)
      return this.computeMidPoint(new I());
    a = b.Hn;
    a = null !== a ? Dp(a, this) : null;
    return null !== a ? a.Co : b.ia(yc);
  };
  T.prototype.computeShortLength = function(a) {
    if (a) {
      a = this.fromShortLength;
      if (isNaN(a)) {
        var b = this.fromPort;
        null !== b && (a = b.fromShortLength);
      }
      return isNaN(a) ? 0 : a;
    }
    a = this.toShortLength;
    isNaN(a) && ((b = this.toPort), null !== b && (a = b.toShortLength));
    return isNaN(a) ? 0 : a;
  };
  T.prototype.tf = function(a, b, c, d, e, f) {
    if (!1 === this.pickable) return !1;
    void 0 === b && (b = null);
    void 0 === c && (c = null);
    var g = f;
    void 0 === f && ((g = md.alloc()), g.reset());
    g.multiply(this.transform);
    if (this.Wg(a, g)) return dn(this, b, c, e), void 0 === f && md.free(g), !0;
    if (this.Sc(a, g)) {
      var h = !1;
      if (!this.isAtomic)
        for (var k = this.R.s, l = k.length; l--; ) {
          var m = k[l];
          if (m.visible || m === this.locationObject) {
            var n = m.actualBounds,
              p = this.naturalBounds;
            if (
              !(
                n.x > p.width ||
                n.y > p.height ||
                0 > n.x + n.width ||
                0 > n.y + n.height
              )
            ) {
              n = md.alloc();
              n.set(g);
              if (m instanceof W) h = m.tf(a, b, c, d, e, n);
              else if (this.path === m) {
                if (m instanceof Cf)
                  if (((h = a), (p = d), !1 === m.pickable)) h = !1;
                  else if ((n.multiply(m.transform), p))
                    b: {
                      var r = h,
                        q = n;
                      if (m.Wg(r, q)) h = !0;
                      else {
                        if (
                          void 0 === q &&
                          ((q = m.transform), r.Ee(m.actualBounds))
                        ) {
                          h = !0;
                          break b;
                        }
                        h = r.left;
                        p = r.right;
                        var u = r.top;
                        r = r.bottom;
                        var w = I.alloc(),
                          v = I.alloc(),
                          z = I.alloc(),
                          y = md.alloc();
                        y.set(q);
                        y.Ou(m.transform);
                        y.Tr();
                        v.x = p;
                        v.y = u;
                        v.transform(y);
                        w.x = h;
                        w.y = u;
                        w.transform(y);
                        q = !1;
                        Cn(m, w, v, z)
                          ? (q = !0)
                          : ((w.x = p),
                            (w.y = r),
                            w.transform(y),
                            Cn(m, w, v, z)
                              ? (q = !0)
                              : ((v.x = h),
                                (v.y = r),
                                v.transform(y),
                                Cn(m, w, v, z)
                                  ? (q = !0)
                                  : ((w.x = h),
                                    (w.y = u),
                                    w.transform(y),
                                    Cn(m, w, v, z) && (q = !0))));
                        md.free(y);
                        I.free(w);
                        I.free(v);
                        I.free(z);
                        h = q;
                      }
                    }
                  else h = m.Wg(h, n);
              } else h = hl(m, a, d, n);
              h &&
                ((p = m),
                null !== b && (p = b(m)),
                p && (null === c || c(p)) && e.add(p));
              md.free(n);
            }
          }
        }
      void 0 === f && md.free(g);
      return h || null !== this.background || null !== this.areaBackground;
    }
    void 0 === f && md.free(g);
    return !1;
  };
  T.prototype.computeCurve = function() {
    if (null === this.Mf) {
      var a = this.fromPort,
        b = this.isOrthogonal;
      this.Mf = null !== a && a === this.toPort && !b;
    }
    return this.Mf ? cg : this.curve;
  };
  T.prototype.computeCorner = function() {
    if (this.curve === cg) return 0;
    var a = this.corner;
    if (isNaN(a) || 0 > a) a = 10;
    return a;
  };
  T.prototype.findMidLabel = function() {
    for (var a = this.path, b = this.R.s, c = b.length, d = 0; d < c; d++) {
      var e = b[d];
      if (
        e !== a &&
        !e.isPanelMain &&
        (-Infinity === e.segmentIndex || isNaN(e.segmentIndex))
      )
        return e;
    }
    for (a = this.labelNodes; a.next(); )
      if (
        ((b = a.value), -Infinity === b.segmentIndex || isNaN(b.segmentIndex))
      )
        return b;
    return null;
  };
  T.prototype.computeSpacing = function() {
    if (!this.isVisible()) return 0;
    var a = Fp;
    a = Math.max(a, this.computeThickness());
    var b = this.fromPort,
      c = this.toPort;
    if (null !== b && null !== c) {
      var d = this.findMidLabel();
      if (null !== d) {
        var e = d.naturalBounds,
          f = d.margin,
          g = isNaN(e.width) ? 30 : e.width * d.scale + f.left + f.right;
        e = isNaN(e.height) ? 14 : e.height * d.scale + f.top + f.bottom;
        d = d.segmentOrientation;
        d === Tm || d === Um || d === qp
          ? (a = Math.max(a, e))
          : d === Om || d === Pm || d === Mm || d === Nm
          ? (a = Math.max(a, g))
          : ((b = (b.ia(yc).Ya(c.ia(yc)) / 180) * Math.PI),
            (a = Math.max(
              a,
              Math.abs(Math.sin(b) * g) + Math.abs(Math.cos(b) * e) + 1,
            )));
        this.curve === cg && (a *= 1.333);
      }
    }
    return a;
  };
  T.prototype.arrangeBundledLinks = function(a, b) {
    if (b)
      for (b = 0; b < a.length; b++) {
        var c = a[b];
        c.computeAdjusting() === $f && c.ab();
      }
  };
  T.prototype.computeCurviness = function() {
    var a = this.curviness;
    if (isNaN(a)) {
      a = Gp;
      var b = this.If;
      if (null !== b) {
        for (var c = Ea(), d = 0, e = b.links, f = 0; f < e.length; f++) {
          var g = e[f].computeSpacing();
          c.push(g);
          d += g;
        }
        d = -d / 2;
        for (f = 0; f < e.length; f++) {
          if (e[f] === this) {
            a = d + c[f] / 2;
            break;
          }
          d += c[f];
        }
        b.cs === this.fromNode && (a = -a);
        Ga(c);
      }
    }
    return a;
  };
  T.prototype.computeThickness = function() {
    if (!this.isVisible()) return 0;
    var a = this.path;
    return null !== a ? Math.max(a.strokeWidth, 1) : 1;
  };
  T.prototype.hasCurviness = function() {
    return !isNaN(this.curviness) || null !== this.If;
  };
  T.prototype.adjustPoints = function(a, b, c, d) {
    var e = this.computeAdjusting();
    if (this.isOrthogonal) {
      if (e === op) return !1;
      e === pp && (e = np);
    }
    switch (e) {
      case op:
        var f = this.i(a),
          g = this.i(c);
        if (!f.$a(b) || !g.$a(d)) {
          e = f.x;
          f = f.y;
          var h = g.x - e,
            k = g.y - f,
            l = Math.sqrt(h * h + k * k);
          if (!J.ca(l, 0)) {
            if (J.ca(h, 0)) var m = 0 > k ? -Math.PI / 2 : Math.PI / 2;
            else (m = Math.atan(k / Math.abs(h))), 0 > h && (m = Math.PI - m);
            g = b.x;
            var n = b.y;
            h = d.x - g;
            var p = d.y - n;
            k = Math.sqrt(h * h + p * p);
            J.ca(h, 0)
              ? (p = 0 > p ? -Math.PI / 2 : Math.PI / 2)
              : ((p = Math.atan(p / Math.abs(h))), 0 > h && (p = Math.PI - p));
            l = k / l;
            m = p - m;
            this.Wc(a, b);
            for (a += 1; a < c; a++)
              (b = this.i(a)),
                (h = b.x - e),
                (k = b.y - f),
                (b = Math.sqrt(h * h + k * k)),
                J.ca(b, 0) ||
                  (J.ca(h, 0)
                    ? (k = 0 > k ? -Math.PI / 2 : Math.PI / 2)
                    : ((k = Math.atan(k / Math.abs(h))),
                      0 > h && (k = Math.PI - k)),
                  (h = k + m),
                  (b *= l),
                  this.M(a, g + b * Math.cos(h), n + b * Math.sin(h)));
            this.Wc(c, d);
          }
        }
        return !0;
      case pp:
        f = this.i(a);
        n = this.i(c);
        if (!f.$a(b) || !n.$a(d)) {
          e = f.x;
          f = f.y;
          g = n.x;
          n = n.y;
          l = (g - e) * (g - e) + (n - f) * (n - f);
          h = b.x;
          m = b.y;
          k = d.x;
          p = d.y;
          var r = 1;
          if (0 !== k - h) {
            var q = (p - m) / (k - h);
            r = Math.sqrt(1 + 1 / (q * q));
          } else q = 9e9;
          this.Wc(a, b);
          for (a += 1; a < c; a++) {
            b = this.i(a);
            var u = b.x,
              w = b.y,
              v = 0.5;
            0 !== l && (v = ((e - u) * (e - g) + (f - w) * (f - n)) / l);
            var z = e + v * (g - e),
              y = f + v * (n - f);
            b = Math.sqrt((u - z) * (u - z) + (w - y) * (w - y));
            w < q * (u - z) + y && (b = -b);
            0 < q && (b = -b);
            u = h + v * (k - h);
            v = m + v * (p - m);
            0 !== q
              ? ((b = u + b / r), this.M(a, b, v - (b - u) / q))
              : this.M(a, u, v + b);
          }
          this.Wc(c, d);
        }
        return !0;
      case np:
        a: {
          if (
            this.isOrthogonal &&
            ((e = this.i(a)),
            (f = this.i(a + 1)),
            (g = this.i(a + 2)),
            (h = f.x),
            (m = f.y),
            (n = h),
            (l = m),
            J.B(e.y, f.y)
              ? J.B(f.x, g.x)
                ? (m = b.y)
                : J.B(f.y, g.y) && (h = b.x)
              : J.B(e.x, f.x) &&
                (J.B(f.y, g.y) ? (h = b.x) : J.B(f.x, g.x) && (m = b.y)),
            this.M(a + 1, h, m),
            (e = this.i(c)),
            (f = this.i(c - 1)),
            (g = this.i(c - 2)),
            (h = f.x),
            (m = f.y),
            (k = h),
            (p = m),
            J.B(e.y, f.y)
              ? J.B(f.x, g.x)
                ? (m = d.y)
                : J.B(f.y, g.y) && (h = d.x)
              : J.B(e.x, f.x) &&
                (J.B(f.y, g.y) ? (h = d.x) : J.B(f.x, g.x) && (m = d.y)),
            this.M(c - 1, h, m),
            Lj(this))
          ) {
            this.M(a + 1, n, l);
            this.M(c - 1, k, p);
            c = !1;
            break a;
          }
          this.Wc(a, b);
          this.Wc(c, d);
          c = !0;
        }
        return c;
      default:
        return !1;
    }
  };
  T.prototype.addOrthoPoints = function(a, b, c, d, e, f) {
    0 > b ? (b += 360) : 360 <= b && (b -= 360);
    0 > d ? (d += 360) : 360 <= d && (d -= 360);
    var g = d;
    b =
      315 <= b || 45 > b
        ? 0
        : 45 <= b && 135 > b
        ? 90
        : 135 <= b && 225 > b
        ? 180
        : 270;
    d =
      315 <= d || 45 > d
        ? 0
        : 45 <= d && 135 > d
        ? 90
        : 135 <= d && 225 > d
        ? 180
        : 270;
    var h = e.actualBounds.copy(),
      k = f.actualBounds.copy();
    if (h.v() && k.v()) {
      h.vc(Hp, Hp);
      k.vc(Hp, Hp);
      h.Me(a);
      k.Me(c);
      var l = I.alloc(),
        m = I.alloc();
      if (0 === b)
        if (
          c.x > a.x ||
          (270 === d && c.y < a.y && k.right > a.x) ||
          (90 === d && c.y > a.y && k.right > a.x)
        )
          l.h(c.x, a.y),
            m.h(c.x, (a.y + c.y) / 2),
            180 === d
              ? ((l.x = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1)),
                (m.x = l.x),
                (m.y = c.y))
              : (270 === d && c.y < a.y) || (90 === d && c.y > a.y)
              ? ((l.x =
                  a.x < k.left
                    ? this.computeMidOrthoPosition(a.x, a.y, k.left, c.y, !1)
                    : a.x < k.right &&
                      ((270 === d && a.y < k.top) ||
                        (90 === d && a.y > k.bottom))
                    ? this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1)
                    : k.right),
                (m.x = l.x),
                (m.y = c.y))
              : 0 === d &&
                a.x < k.left &&
                a.y > k.top &&
                a.y < k.bottom &&
                ((l.x = a.x),
                (l.y =
                  a.y < c.y ? Math.min(c.y, k.top) : Math.max(c.y, k.bottom)),
                (m.y = l.y));
        else {
          l.h(a.x, c.y);
          m.h((a.x + c.x) / 2, c.y);
          if (
            180 === d ||
            (90 === d && c.y < h.top) ||
            (270 === d && c.y > h.bottom)
          )
            180 === d && (k.ba(a) || h.ba(c))
              ? (l.y = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0))
              : c.y < a.y && (180 === d || 90 === d)
              ? (l.y = this.computeMidOrthoPosition(
                  a.x,
                  h.top,
                  c.x,
                  Math.max(c.y, k.bottom),
                  !0,
                ))
              : c.y > a.y &&
                (180 === d || 270 === d) &&
                (l.y = this.computeMidOrthoPosition(
                  a.x,
                  h.bottom,
                  c.x,
                  Math.min(c.y, k.top),
                  !0,
                )),
              (m.x = c.x),
              (m.y = l.y);
          if (l.y > h.top && l.y < h.bottom)
            if (
              (c.x >= h.left && c.x <= a.x) ||
              (a.x <= k.right && a.x >= c.x)
            ) {
              if (90 === d || 270 === d)
                l.h(Math.max((a.x + c.x) / 2, a.x), a.y), m.h(l.x, c.y);
            } else
              (l.y =
                270 === d || ((0 === d || 180 === d) && c.y < a.y)
                  ? Math.min(c.y, 0 === d ? h.top : Math.min(h.top, k.top))
                  : Math.max(
                      c.y,
                      0 === d ? h.bottom : Math.max(h.bottom, k.bottom),
                    )),
                (m.x = c.x),
                (m.y = l.y);
        }
      else if (180 === b)
        if (
          c.x < a.x ||
          (270 === d && c.y < a.y && k.left < a.x) ||
          (90 === d && c.y > a.y && k.left < a.x)
        )
          l.h(c.x, a.y),
            m.h(c.x, (a.y + c.y) / 2),
            0 === d
              ? ((l.x = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1)),
                (m.x = l.x),
                (m.y = c.y))
              : (270 === d && c.y < a.y) || (90 === d && c.y > a.y)
              ? ((l.x =
                  a.x > k.right
                    ? this.computeMidOrthoPosition(a.x, a.y, k.right, c.y, !1)
                    : a.x > k.left &&
                      ((270 === d && a.y < k.top) ||
                        (90 === d && a.y > k.bottom))
                    ? this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1)
                    : k.left),
                (m.x = l.x),
                (m.y = c.y))
              : 180 === d &&
                a.x > k.right &&
                a.y > k.top &&
                a.y < k.bottom &&
                ((l.x = a.x),
                (l.y =
                  a.y < c.y ? Math.min(c.y, k.top) : Math.max(c.y, k.bottom)),
                (m.y = l.y));
        else {
          l.h(a.x, c.y);
          m.h((a.x + c.x) / 2, c.y);
          if (
            0 === d ||
            (90 === d && c.y < h.top) ||
            (270 === d && c.y > h.bottom)
          )
            0 === d && (k.ba(a) || h.ba(c))
              ? (l.y = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0))
              : c.y < a.y && (0 === d || 90 === d)
              ? (l.y = this.computeMidOrthoPosition(
                  a.x,
                  h.top,
                  c.x,
                  Math.max(c.y, k.bottom),
                  !0,
                ))
              : c.y > a.y &&
                (0 === d || 270 === d) &&
                (l.y = this.computeMidOrthoPosition(
                  a.x,
                  h.bottom,
                  c.x,
                  Math.min(c.y, k.top),
                  !0,
                )),
              (m.x = c.x),
              (m.y = l.y);
          if (l.y > h.top && l.y < h.bottom)
            if (
              (c.x <= h.right && c.x >= a.x) ||
              (a.x >= k.left && a.x <= c.x)
            ) {
              if (90 === d || 270 === d)
                l.h(Math.min((a.x + c.x) / 2, a.x), a.y), m.h(l.x, c.y);
            } else
              (l.y =
                270 === d || ((0 === d || 180 === d) && c.y < a.y)
                  ? Math.min(c.y, 180 === d ? h.top : Math.min(h.top, k.top))
                  : Math.max(
                      c.y,
                      180 === d ? h.bottom : Math.max(h.bottom, k.bottom),
                    )),
                (m.x = c.x),
                (m.y = l.y);
        }
      else if (90 === b)
        if (
          c.y > a.y ||
          (180 === d && c.x < a.x && k.bottom > a.y) ||
          (0 === d && c.x > a.x && k.bottom > a.y)
        )
          l.h(a.x, c.y),
            m.h((a.x + c.x) / 2, c.y),
            270 === d
              ? ((l.y = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0)),
                (m.x = c.x),
                (m.y = l.y))
              : (180 === d && c.x < a.x) || (0 === d && c.x > a.x)
              ? ((l.y =
                  a.y < k.top
                    ? this.computeMidOrthoPosition(a.x, a.y, c.x, k.top, !0)
                    : a.y < k.bottom &&
                      ((180 === d && a.x < k.left) ||
                        (0 === d && a.x > k.right))
                    ? this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0)
                    : k.bottom),
                (m.x = c.x),
                (m.y = l.y))
              : 90 === d &&
                a.y < k.top &&
                a.x > k.left &&
                a.x < k.right &&
                ((l.x =
                  a.x < c.x ? Math.min(c.x, k.left) : Math.max(c.x, k.right)),
                (l.y = a.y),
                (m.x = l.x));
        else {
          l.h(c.x, a.y);
          m.h(c.x, (a.y + c.y) / 2);
          if (
            270 === d ||
            (0 === d && c.x < h.left) ||
            (180 === d && c.x > h.right)
          )
            270 === d && (k.ba(a) || h.ba(c))
              ? (l.x = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1))
              : c.x < a.x && (270 === d || 0 === d)
              ? (l.x = this.computeMidOrthoPosition(
                  h.left,
                  a.y,
                  Math.max(c.x, k.right),
                  c.y,
                  !1,
                ))
              : c.x > a.x &&
                (270 === d || 180 === d) &&
                (l.x = this.computeMidOrthoPosition(
                  h.right,
                  a.y,
                  Math.min(c.x, k.left),
                  c.y,
                  !1,
                )),
              (m.x = l.x),
              (m.y = c.y);
          if (l.x > h.left && l.x < h.right)
            if (
              (c.y >= h.top && c.y <= a.y) ||
              (a.y <= k.bottom && a.y >= c.y)
            ) {
              if (0 === d || 180 === d)
                l.h(a.x, Math.max((a.y + c.y) / 2, a.y)), m.h(c.x, l.y);
            } else
              (l.x =
                180 === d || ((90 === d || 270 === d) && c.x < a.x)
                  ? Math.min(c.x, 90 === d ? h.left : Math.min(h.left, k.left))
                  : Math.max(
                      c.x,
                      90 === d ? h.right : Math.max(h.right, k.right),
                    )),
                (m.x = l.x),
                (m.y = c.y);
        }
      else if (
        c.y < a.y ||
        (180 === d && c.x < a.x && k.top < a.y) ||
        (0 === d && c.x > a.x && k.top < a.y)
      )
        l.h(a.x, c.y),
          m.h((a.x + c.x) / 2, c.y),
          90 === d
            ? ((l.y = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0)),
              (m.x = c.x),
              (m.y = l.y))
            : (180 === d && c.x < a.x) || (0 === d && c.x >= a.x)
            ? ((l.y =
                a.y > k.bottom
                  ? this.computeMidOrthoPosition(a.x, a.y, c.x, k.bottom, !0)
                  : a.y > k.top &&
                    ((180 === d && a.x < k.left) || (0 === d && a.x > k.right))
                  ? this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0)
                  : k.top),
              (m.x = c.x),
              (m.y = l.y))
            : 270 === d &&
              a.y > k.bottom &&
              a.x > k.left &&
              a.x < k.right &&
              ((l.x =
                a.x < c.x ? Math.min(c.x, k.left) : Math.max(c.x, k.right)),
              (l.y = a.y),
              (m.x = l.x));
      else {
        l.h(c.x, a.y);
        m.h(c.x, (a.y + c.y) / 2);
        if (
          90 === d ||
          (0 === d && c.x < h.left) ||
          (180 === d && c.x > h.right)
        )
          90 === d && (k.ba(a) || h.ba(c))
            ? (l.x = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1))
            : c.x < a.x && (90 === d || 0 === d)
            ? (l.x = this.computeMidOrthoPosition(
                h.left,
                a.y,
                Math.max(c.x, k.right),
                c.y,
                !1,
              ))
            : c.x > a.x &&
              (90 === d || 180 === d) &&
              (l.x = this.computeMidOrthoPosition(
                h.right,
                a.y,
                Math.min(c.x, k.left),
                c.y,
                !1,
              )),
            (m.x = l.x),
            (m.y = c.y);
        if (l.x > h.left && l.x < h.right)
          if ((c.y <= h.bottom && c.y >= a.y) || (a.y >= k.top && a.y <= c.y)) {
            if (0 === d || 180 === d)
              l.h(a.x, Math.min((a.y + c.y) / 2, a.y)), m.h(c.x, l.y);
          } else
            (l.x =
              180 === d || ((90 === d || 270 === d) && c.x < a.x)
                ? Math.min(c.x, 270 === d ? h.left : Math.min(h.left, k.left))
                : Math.max(
                    c.x,
                    270 === d ? h.right : Math.max(h.right, k.right),
                  )),
              (m.x = l.x),
              (m.y = c.y);
      }
      var n = c;
      if (this.isAvoiding) {
        var p = this.diagram;
        if (
          null === p ||
          e === f ||
          this.layer.isTemporary ||
          !dk(p) ||
          (h.ba(n) && !f.Md(e)) ||
          (k.ba(a) && !e.Md(f))
        )
          b = !1;
        else {
          var r = ek(p, !0, this.containingGroup, null);
          if (
            17 !== this.segmentIndex &&
            r.Pj(
              Math.min(a.x, l.x),
              Math.min(a.y, l.y),
              Math.abs(a.x - l.x),
              Math.abs(a.y - l.y),
            ) &&
            r.Pj(
              Math.min(l.x, m.x),
              Math.min(l.y, m.y),
              Math.abs(l.x - m.x),
              Math.abs(l.y - m.y),
            ) &&
            r.Pj(
              Math.min(m.x, n.x),
              Math.min(m.y, n.y),
              Math.abs(m.x - n.x),
              Math.abs(m.y - n.y),
            )
          )
            b = !1;
          else {
            e = a;
            f = n;
            var q = (c = null);
            if (p.isVirtualized) {
              p = r.bounds.copy();
              p.vc(-r.lo, -r.ko);
              var u = I.alloc();
              jk(r, a.x, a.y) ||
                (J.wf(
                  p.x,
                  p.y,
                  p.x + p.width,
                  p.y + p.height,
                  a.x,
                  a.y,
                  l.x,
                  l.y,
                  u,
                )
                  ? ((c = a = u.copy()), (b = u.Ya(l)))
                  : J.wf(
                      p.x,
                      p.y,
                      p.x + p.width,
                      p.y + p.height,
                      l.x,
                      l.y,
                      m.x,
                      m.y,
                      u,
                    )
                  ? ((c = a = u.copy()), (b = u.Ya(m)))
                  : J.wf(
                      p.x,
                      p.y,
                      p.x + p.width,
                      p.y + p.height,
                      m.x,
                      m.y,
                      n.x,
                      n.y,
                      u,
                    ) && ((c = a = u.copy()), (b = u.Ya(n))));
              jk(r, n.x, n.y) ||
                (J.wf(
                  p.x,
                  p.y,
                  p.x + p.width,
                  p.y + p.height,
                  n.x,
                  n.y,
                  m.x,
                  m.y,
                  u,
                )
                  ? ((q = n = u.copy()), (d = m.Ya(u)))
                  : J.wf(
                      p.x,
                      p.y,
                      p.x + p.width,
                      p.y + p.height,
                      m.x,
                      m.y,
                      l.x,
                      l.y,
                      u,
                    )
                  ? ((q = n = u.copy()), (d = l.Ya(u)))
                  : J.wf(
                      p.x,
                      p.y,
                      p.x + p.width,
                      p.y + p.height,
                      l.x,
                      l.y,
                      a.x,
                      a.y,
                      u,
                    ) && ((q = n = u.copy()), (d = a.Ya(u))));
              I.free(u);
            }
            h = h.copy().Xc(k);
            h.vc(r.lo * r.ps, r.ko * r.ps);
            Ip(r, a, b, n, d, h, !0);
            k = Jp(r, n.x, n.y);
            !r.abort &&
              k >= Kp &&
              (ik(r),
              h.vc(r.lo * r.mx, r.ko * r.nx),
              Ip(r, a, b, n, d, h, !1),
              (k = Jp(r, n.x, n.y)));
            if (!r.abort && k < Kp && Jp(r, n.x, n.y) !== kk) {
              Lp(this, r, n.x, n.y, d, !0, g);
              h = this.i(2);
              if (4 > this.pointsCount)
                0 === b || 180 === b
                  ? ((h.x = a.x), (h.y = n.y))
                  : ((h.x = n.x), (h.y = a.y)),
                  this.M(2, h.x, h.y),
                  this.l(3, h.x, h.y);
              else if (((g = this.i(3)), 0 === b || 180 === b))
                J.B(h.x, g.x)
                  ? ((h = 0 === b ? Math.max(h.x, a.x) : Math.min(h.x, a.x)),
                    this.M(2, h, a.y),
                    this.M(3, h, g.y))
                  : J.B(h.y, g.y)
                  ? (Math.abs(a.y - h.y) <= r.ko / 2 &&
                      (this.M(2, h.x, a.y), this.M(3, g.x, a.y)),
                    this.l(2, h.x, a.y))
                  : this.M(2, a.x, h.y);
              else if (90 === b || 270 === b)
                J.B(h.y, g.y)
                  ? ((h = 90 === b ? Math.max(h.y, a.y) : Math.min(h.y, a.y)),
                    this.M(2, a.x, h),
                    this.M(3, g.x, h))
                  : J.B(h.x, g.x)
                  ? (Math.abs(a.x - h.x) <= r.lo / 2 &&
                      (this.M(2, a.x, h.y), this.M(3, a.x, g.y)),
                    this.l(2, a.x, h.y))
                  : this.M(2, h.x, a.y);
              null !== c &&
                ((a = this.i(1)),
                (g = this.i(2)),
                a.x !== g.x && a.y !== g.y
                  ? 0 === b || 180 === b
                    ? this.l(2, a.x, g.y)
                    : this.l(2, g.x, a.y)
                  : 0 === b || 180 === b
                  ? this.l(2, e.x, c.y)
                  : this.l(2, c.x, e.y));
              null !== q &&
                (0 === d || 180 === d ? this.mf(f.x, q.y) : this.mf(q.x, f.y));
              b = !0;
            } else b = !1;
          }
        }
      } else b = !1;
      b || (this.fe(l.copy()), this.fe(m.copy()));
      I.free(l);
      I.free(m);
    }
  };
  T.prototype.computeMidOrthoPosition = function(a, b, c, d, e) {
    var f = 0;
    !this.hasCurviness() ||
      this.computeSpot(!0, this.fromPort).Uc() ||
      this.computeSpot(!1, this.toPort).Uc() ||
      (f = this.computeCurviness());
    return e ? (b + d) / 2 + f : (a + c) / 2 + f;
  };

  function Lj(a) {
    if (null === a.diagram || !a.isAvoiding || !dk(a.diagram)) return !1;
    var b = a.points.s,
      c = b.length;
    if (4 > c) return !1;
    a = ek(a.diagram, !0, a.containingGroup, null);
    for (var d = 1; d < c - 2; d++) {
      var e = b[d],
        f = b[d + 1];
      if (
        !a.Pj(
          Math.min(e.x, f.x),
          Math.min(e.y, f.y),
          Math.abs(e.x - f.x),
          Math.abs(e.y - f.y),
        )
      )
        return !0;
    }
    return !1;
  }

  function Lp(a, b, c, d, e, f, g) {
    var h = b.lo,
      k = b.ko,
      l = Jp(b, c, d),
      m = c,
      n = d;
    0 === e ? (m += h) : 90 === e ? (n += k) : 180 === e ? (m -= h) : (n -= k);
    e !== g &&
      l > Mp &&
      Jp(b, m, n) !== l - 1 &&
      (Jp(b, c - h, d) === l - 1
        ? ((e = 180), (m = c - h), (n = d))
        : Jp(b, c + h, d) === l - 1
        ? ((e = 0), (m = c + h), (n = d))
        : Jp(b, c, d - k) === l - 1
        ? ((e = 270), (m = c), (n = d - k))
        : Jp(b, c, d + k) === l - 1 && ((e = 90), (m = c), (n = d + k)));
    for (; l > Mp && Jp(b, m, n) === l - 1; )
      (c = m),
        (d = n),
        0 === e
          ? (m += h)
          : 90 === e
          ? (n += k)
          : 180 === e
          ? (m -= h)
          : (n -= k),
        --l;
    if (f) {
      if (l > Mp)
        if (180 === e || 0 === e) c = Math.floor(c / h) * h + h / 2;
        else if (90 === e || 270 === e) d = Math.floor(d / k) * k + k / 2;
    } else
      (c = Math.floor(c / h) * h + h / 2), (d = Math.floor(d / k) * k + k / 2);
    l > Mp &&
      ((f = e),
      (g = c),
      (m = d),
      0 === e
        ? ((f = 90), (m += k))
        : 90 === e
        ? ((f = 180), (g -= h))
        : 180 === e
        ? ((f = 270), (m -= k))
        : 270 === e && ((f = 0), (g += h)),
      Jp(b, g, m) === l - 1
        ? Lp(a, b, g, m, f, !1, f)
        : ((g = c),
          (m = d),
          0 === e
            ? ((f = 270), (m -= k))
            : 90 === e
            ? ((f = 0), (g += h))
            : 180 === e
            ? ((f = 90), (m += k))
            : 270 === e && ((f = 180), (g -= h)),
          Jp(b, g, m) === l - 1 && Lp(a, b, g, m, f, !1, f)));
    a.mf(c, d);
  }
  T.prototype.Ny = function(a) {
    var b = a.x;
    a = a.y;
    for (
      var c = this.i(0),
        d = this.i(1),
        e = zb(b, a, c.x, c.y, d.x, d.y),
        f = 0,
        g = 1;
      g < this.pointsCount - 1;
      g++
    ) {
      c = this.i(g + 1);
      var h = zb(b, a, d.x, d.y, c.x, c.y);
      d = c;
      h < e && ((f = g), (e = h));
    }
    return f;
  };
  T.prototype.mc = function(a) {
    this.Zl = !1;
    a && this.w();
  };
  T.prototype.Rj = function(a) {
    if (!a) {
      if (!1 === this.xd) return;
      a = this.vb();
      if (this.Zl && (null === a || null !== a.geometry)) return;
    }
    this.sa = this.makeGeometry();
    a = this.path;
    if (null !== a) {
      a.sa = this.sa;
      for (var b = this.R.s, c = b.length, d = 0; d < c; d++) {
        var e = b[d];
        e !== a && e.isPanelMain && e instanceof Cf && (e.sa = this.sa);
      }
    }
  };
  T.prototype.makeGeometry = function() {
    var a = this.sa,
      b = this.pointsCount;
    if (2 > b) return (a.type = O.j), (this.Zl = !0), a;
    var c = !1,
      d = this.diagram;
    null !== d &&
      rp(this) &&
      d.th.contains(this) &&
      (0 !== this.bl.width || 0 !== this.bl.height) &&
      (c = !0);
    var e = this.i(0).copy(),
      f = e.copy();
    d = this.Jb.s;
    var g = this.computeCurve();
    if (g === cg && 3 <= b && !J.ca(this.smoothness, 0))
      if (3 === b) {
        var h = this.i(1);
        d = Math.min(e.x, h.x);
        var k = Math.min(e.y, h.y);
        h = this.i(2);
        d = Math.min(d, h.x);
        k = Math.min(k, h.y);
      } else {
        if (this.isOrthogonal)
          for (k = 0; k < b; k++)
            (h = d[k]), (f.x = Math.min(h.x, f.x)), (f.y = Math.min(h.y, f.y));
        else
          for (d = 3; d < b; d += 3)
            d + 3 >= b && (d = b - 1),
              (k = this.i(d)),
              (f.x = Math.min(k.x, f.x)),
              (f.y = Math.min(k.y, f.y));
        d = f.x;
        k = f.y;
      }
    else {
      for (k = 0; k < b; k++)
        (h = d[k]), (f.x = Math.min(h.x, f.x)), (f.y = Math.min(h.y, f.y));
      d = f.x;
      k = f.y;
    }
    d -= this.Yt.x;
    k -= this.Yt.y;
    e.x -= d;
    e.y -= k;
    if (2 !== b || rp(this)) {
      a.type = O.m;
      h = wd(a);
      0 !== this.computeShortLength(!0) && (e = Np(this, e, !0, f));
      xd(h, e.x, e.y, !1);
      if (g === cg && 3 <= b && !J.ca(this.smoothness, 0))
        if (3 === b)
          (c = this.i(1)),
            (b = c.x - d),
            (c = c.y - k),
            (e = this.i(2).copy()),
            (e.x -= d),
            (e.y -= k),
            0 !== this.computeShortLength(!1) && (e = Np(this, e, !1, f)),
            yd(h, b, c, b, c, e.x, e.y);
        else if (this.isOrthogonal) {
          b = I.allocAt(d, k);
          c = I.alloc();
          c.assign(this.i(1));
          f = I.allocAt(d, k);
          e = I.allocAt(d, k);
          g = this.i(0);
          for (
            var l, m = this.smoothness / 3, n = 1;
            n < this.pointsCount - 1;
            n++
          ) {
            l = this.i(n);
            var p = g,
              r = l,
              q = this.i(Op(this, l, n, !1));
            if (!J.ca(p.x, r.x) || !J.ca(r.x, q.x))
              if (!J.ca(p.y, r.y) || !J.ca(r.y, q.y)) {
                var u = m;
                isNaN(u) && (u = this.smoothness / 3);
                var w = p.x;
                p = p.y;
                var v = r.x;
                r = r.y;
                var z = q.x;
                q = q.y;
                var y = u * Pp(w, p, v, r);
                u *= Pp(v, r, z, q);
                J.ca(p, r) &&
                  J.ca(v, z) &&
                  (v > w
                    ? q > r
                      ? ((f.x = v - y),
                        (f.y = r - y),
                        (e.x = v + u),
                        (e.y = r + u))
                      : ((f.x = v - y),
                        (f.y = r + y),
                        (e.x = v + u),
                        (e.y = r - u))
                    : q > r
                    ? ((f.x = v + y),
                      (f.y = r - y),
                      (e.x = v - u),
                      (e.y = r + u))
                    : ((f.x = v + y),
                      (f.y = r + y),
                      (e.x = v - u),
                      (e.y = r - u)));
                J.ca(w, v) &&
                  J.ca(r, q) &&
                  (r > p
                    ? (z > v
                        ? ((f.x = v - y), (f.y = r - y), (e.x = v + u))
                        : ((f.x = v + y), (f.y = r - y), (e.x = v - u)),
                      (e.y = r + u))
                    : (z > v
                        ? ((f.x = v - y), (f.y = r + y), (e.x = v + u))
                        : ((f.x = v + y), (f.y = r + y), (e.x = v - u)),
                      (e.y = r - u)));
                if ((J.ca(w, v) && J.ca(v, z)) || (J.ca(p, r) && J.ca(r, q)))
                  (w = 0.5 * (w + z)),
                    (p = 0.5 * (p + q)),
                    (f.x = w),
                    (f.y = p),
                    (e.x = w),
                    (e.y = p);
                1 === n
                  ? ((c.x = 0.5 * (g.x + l.x)), (c.y = 0.5 * (g.y + l.y)))
                  : 2 === n &&
                    J.ca(g.x, this.i(0).x) &&
                    J.ca(g.y, this.i(0).y) &&
                    ((c.x = 0.5 * (g.x + l.x)), (c.y = 0.5 * (g.y + l.y)));
                yd(h, c.x - d, c.y - k, f.x - d, f.y - k, l.x - d, l.y - k);
                b.set(f);
                c.set(e);
                g = l;
              }
          }
          l = g.x;
          g = g.y;
          m = this.i(this.pointsCount - 1);
          0 !== this.computeShortLength(!1) && (m = Np(this, m.copy(), !1, qb));
          l = 0.5 * (l + m.x);
          g = 0.5 * (g + m.y);
          yd(h, e.x - d, e.y - k, l - d, g - k, m.x - d, m.y - k);
          I.free(b);
          I.free(c);
          I.free(f);
          I.free(e);
        } else
          for (c = 3; c < b; c += 3)
            (f = this.i(c - 2)),
              c + 3 >= b && (c = b - 1),
              (e = this.i(c - 1)),
              (g = this.i(c)),
              c === b - 1 &&
                0 !== this.computeShortLength(!1) &&
                (g = Np(this, g.copy(), !1, qb)),
              yd(h, f.x - d, f.y - k, e.x - d, e.y - k, g.x - d, g.y - k);
      else {
        f = I.alloc();
        f.assign(this.i(0));
        e = I.alloc();
        e.assign(f);
        g = this.computeCorner();
        n = 1;
        for (l = 0; n < b; ) {
          n = Op(this, f, n, 1 < n);
          m = this.i(n);
          if (n >= b - 1) {
            if (!f.C(m))
              0 !== this.computeShortLength(!1) &&
                (m = Np(this, m.copy(), !1, qb)),
                Qp(this, h, -d, -k, f, m, c);
            else if (0 === l)
              for (n = 1; n < b; )
                e.assign(f),
                  (m = this.i(n++)),
                  Qp(this, h, -d, -k, f, m, c),
                  f.assign(m);
            break;
          }
          l = Op(this, m, n + 1, n < b - 3);
          n = -d;
          w = -k;
          p = m;
          v = this.i(l);
          u = c;
          if (J.B(f.y, p.y) && J.B(p.x, v.x))
            if (
              ((q = Math.min(g, Math.abs(p.x - e.x) / 2)),
              (q = y = Math.min(q, Math.abs(v.y - p.y) / 2)),
              J.B(q, 0))
            )
              Qp(this, h, n, w, f, p, u), f.assign(p);
            else {
              var A = p.x,
                B = p.y;
              r = A;
              z = B;
              p.x > f.x ? (A = p.x - q) : (A = p.x + q);
              v.y > p.y ? (z = p.y + y) : (z = p.y - y);
              v = I.allocAt(A, B);
              Qp(this, h, n, w, f, v, u);
              I.free(v);
              zd(h, p.x + n, p.y + w, r + n, z + w);
              f.h(r, z);
            }
          else
            J.B(f.x, p.x) && J.B(p.y, v.y)
              ? ((q = Math.min(g, Math.abs(p.y - e.y) / 2)),
                (q = y = Math.min(q, Math.abs(v.x - p.x) / 2)),
                J.B(y, 0)
                  ? (Qp(this, h, n, w, f, p, u), f.assign(p))
                  : ((A = p.x),
                    (B = p.y),
                    (r = A),
                    (z = B),
                    p.y > f.y ? (B = p.y - q) : (B = p.y + q),
                    v.x > p.x ? (r = p.x + y) : (r = p.x - y),
                    (v = I.allocAt(A, B)),
                    Qp(this, h, n, w, f, v, u),
                    I.free(v),
                    zd(h, p.x + n, p.y + w, r + n, z + w),
                    f.h(r, z)))
              : (Qp(this, h, n, w, f, p, u), f.assign(p));
          e.assign(m);
          n = l;
        }
        I.free(f);
      }
      Hd = h;
    } else
      (h = this.i(1).copy()),
        (h.x -= d),
        (h.y -= k),
        0 !== this.computeShortLength(!0) && (e = Np(this, e, !0, f)),
        0 !== this.computeShortLength(!1) && (h = Np(this, h, !1, f)),
        (a.type = O.j),
        (a.startX = e.x),
        (a.startY = e.y),
        (a.endX = h.x),
        (a.endY = h.y);
    this.Zl = !0;
    return a;
  };

  function Pp(a, b, c, d) {
    a = c - a;
    if (isNaN(a) || Infinity === a || -Infinity === a) return NaN;
    0 > a && (a = -a);
    b = d - b;
    if (isNaN(b) || Infinity === b || -Infinity === b) return NaN;
    0 > b && (b = -b);
    return J.ca(a, 0) ? b : J.ca(b, 0) ? a : Math.sqrt(a * a + b * b);
  }

  function Np(a, b, c, d) {
    var e = a.pointsCount;
    if (2 > e) return b;
    if (c) {
      var f = a.i(1);
      c = f.x - d.x;
      f = f.y - d.y;
      d = Pp(b.x, b.y, c, f);
      if (0 === d) return b;
      e = 2 === e ? 0.5 * d : d;
      a = a.computeShortLength(!0);
      a > e && (a = e);
      e = (a * (f - b.y)) / d;
      b.x += (a * (c - b.x)) / d;
      b.y += e;
    } else {
      f = a.i(e - 2);
      c = f.x - d.x;
      f = f.y - d.y;
      d = Pp(b.x, b.y, c, f);
      if (0 === d) return b;
      e = 2 === e ? 0.5 * d : d;
      a = a.computeShortLength(!1);
      a > e && (a = e);
      e = (a * (b.y - f)) / d;
      b.x -= (a * (b.x - c)) / d;
      b.y -= e;
    }
    return b;
  }

  function Op(a, b, c, d) {
    for (var e = a.pointsCount, f = b; J.ca(b.x, f.x) && J.ca(b.y, f.y); ) {
      if (c >= e) return e - 1;
      f = a.i(c++);
    }
    if (!J.ca(b.x, f.x) && !J.ca(b.y, f.y)) return c - 1;
    for (
      var g = f;
      (J.ca(b.x, f.x) &&
        J.ca(f.x, g.x) &&
        (!d || (b.y >= f.y ? f.y >= g.y : f.y <= g.y))) ||
      (J.ca(b.y, f.y) &&
        J.ca(f.y, g.y) &&
        (!d || (b.x >= f.x ? f.x >= g.x : f.x <= g.x)));

    ) {
      if (c >= e) return e - 1;
      g = a.i(c++);
    }
    return c - 2;
  }
  T.prototype.computeJumpLength = function() {
    return 10;
  };

  function Qp(a, b, c, d, e, f, g) {
    if (!g && rp(a)) {
      g = a.computeJumpLength();
      var h = g / 2,
        k = [],
        l = 0;
      a.isVisible() && (l = Rp(a, e, f, k));
      if (0 < l)
        if (J.B(e.y, f.y))
          if (e.x < f.x)
            for (var m = 0; m < l; ) {
              var n = Math.max(e.x, Math.min(k[m++] - h, f.x - g));
              b.lineTo(n + c, f.y + d);
              var p = n + c;
              for (var r = Math.min(n + g, f.x); m < l; )
                if (((n = k[m]), n < r + g)) m++, (r = Math.min(n + h, f.x));
                else break;
              n = f.y - g + d;
              r += c;
              var q = f.y + d;
              a.curve === Zf ? xd(b, r, q, !1) : yd(b, p, n, r, n, r, q);
            }
          else
            for (--l; 0 <= l; ) {
              m = Math.min(e.x, Math.max(k[l--] + h, f.x + g));
              b.lineTo(m + c, f.y + d);
              p = m + c;
              for (n = Math.max(m - g, f.x); 0 <= l; )
                if (((m = k[l]), m > n - g)) l--, (n = Math.max(m - h, f.x));
                else break;
              m = f.y - g + d;
              n += c;
              r = f.y + d;
              a.curve === Zf ? xd(b, n, r, !1) : yd(b, p, m, n, m, n, r);
            }
        else if (J.B(e.x, f.x))
          if (e.y < f.y)
            for (m = 0; m < l; ) {
              n = Math.max(e.y, Math.min(k[m++] - h, f.y - g));
              b.lineTo(f.x + c, n + d);
              p = n + d;
              for (n = Math.min(n + g, f.y); m < l; )
                if (((r = k[m]), r < n + g)) m++, (n = Math.min(r + h, f.y));
                else break;
              r = f.x - g + c;
              q = f.x + c;
              n += d;
              a.curve === Zf ? xd(b, q, n, !1) : yd(b, r, p, r, n, q, n);
            }
          else
            for (--l; 0 <= l; ) {
              m = Math.min(e.y, Math.max(k[l--] + h, f.y + g));
              b.lineTo(f.x + c, m + d);
              p = m + d;
              for (m = Math.max(m - g, f.y); 0 <= l; )
                if (((n = k[l]), n > m - g)) l--, (m = Math.max(n - h, f.y));
                else break;
              n = f.x - g + c;
              r = f.x + c;
              m += d;
              a.curve === Zf ? xd(b, r, m, !1) : yd(b, n, p, n, m, r, m);
            }
    }
    b.lineTo(f.x + c, f.y + d);
  }

  function Rp(a, b, c, d) {
    var e = a.diagram;
    if (null === e || b.C(c)) return 0;
    for (e = e.layers; e.next(); ) {
      var f = e.value;
      if (null !== f && f.visible) {
        f = f.Ma.s;
        for (var g = f.length, h = 0; h < g; h++) {
          var k = f[h];
          if (k instanceof T) {
            if (k === a)
              return (
                0 < d.length &&
                  d.sort(function(a, b) {
                    return a - b;
                  }),
                d.length
              );
            if (k.isVisible() && rp(k)) {
              var l = k.routeBounds;
              l.v() &&
                a.routeBounds.Sc(l) &&
                !a.usesSamePort(k) &&
                ((l = k.path), null !== l && l.zf() && Sp(b, c, d, k));
            }
          }
        }
      }
    }
    0 < d.length &&
      d.sort(function(a, b) {
        return a - b;
      });
    return d.length;
  }

  function Sp(a, b, c, d) {
    for (
      var e = J.B(a.y, b.y),
        f = d.pointsCount,
        g = d.i(0),
        h = I.alloc(),
        k = 1;
      k < f;
      k++
    ) {
      var l = d.i(k);
      if (k < f - 1) {
        var m = d.i(k + 1);
        if (g.y === l.y && l.y === m.y) {
          if ((l.x > g.x && m.x >= l.x) || (l.x < g.x && m.x <= l.x)) continue;
        } else if (
          g.x === l.x &&
          l.x === m.x &&
          ((l.y > g.y && m.y >= l.y) || (l.y < g.y && m.y <= l.y))
        )
          continue;
      }
      a: {
        m = a.x;
        var n = a.y,
          p = b.x,
          r = b.y,
          q = g.x;
        g = g.y;
        var u = l.x,
          w = l.y;
        if (!J.B(m, p)) {
          if (
            J.B(n, r) &&
            J.B(q, u) &&
            Math.min(m, p) < q &&
            Math.max(m, p) > q &&
            Math.min(g, w) < n &&
            Math.max(g, w) > n &&
            !J.B(g, w)
          ) {
            h.x = q;
            h.y = n;
            m = !0;
            break a;
          }
        } else if (
          !J.B(n, r) &&
          J.B(g, w) &&
          Math.min(n, r) < g &&
          Math.max(n, r) > g &&
          Math.min(q, u) < m &&
          Math.max(q, u) > m &&
          !J.B(q, u)
        ) {
          h.x = m;
          h.y = g;
          m = !0;
          break a;
        }
        h.x = 0;
        h.y = 0;
        m = !1;
      }
      m && (e ? c.push(h.x) : c.push(h.y));
      g = l;
    }
    I.free(h);
  }

  function rp(a) {
    a = a.curve;
    return a === Yf || a === Zf;
  }

  function vp(a, b) {
    if (b || rp(a))
      (b = a.diagram),
        null === b ||
          b.animationManager.isTicking ||
          b.th.contains(a) ||
          (0 === a.bl.width && 0 === a.bl.height) ||
          b.th.add(a, a.bl.copy());
  }
  T.prototype.Ao = function(a) {
    var b = this.layer;
    if (null !== b && b.visible && !b.isTemporary) {
      var c = b.diagram;
      if (null !== c && !c.animationManager.isTicking) {
        var d = !1;
        for (c = c.layers; c.next(); ) {
          var e = c.value;
          if (e.visible)
            if (e === b) {
              d = !0;
              var f = !1;
              e = e.Ma.s;
              for (var g = e.length, h = 0; h < g; h++) {
                var k = e[h];
                k instanceof T && (k === this ? (f = !0) : f && Tp(this, k, a));
              }
            } else if (d)
              for (f = e.Ma.s, e = f.length, g = 0; g < e; g++)
                (h = f[g]), h instanceof T && Tp(this, h, a);
        }
      }
    }
  };

  function Tp(a, b, c) {
    if (null !== b && b.Zl && b.xd && rp(b)) {
      var d = b.routeBounds;
      d.v() &&
        (a.routeBounds.Sc(d) || c.Sc(d)) &&
        (a.usesSamePort(b) || b.mc(!1));
    }
  }
  T.prototype.usesSamePort = function(a) {
    var b = this.pointsCount,
      c = a.pointsCount;
    if (0 < b && 0 < c) {
      var d = this.i(0),
        e = a.i(0);
      if (d.$a(e)) return !0;
      b = this.i(b - 1);
      a = a.i(c - 1);
      if (b.$a(a) || d.$a(a) || b.$a(e)) return !0;
    } else if (
      this.fromNode === a.fromNode ||
      this.toNode === a.toNode ||
      this.fromNode === a.toNode ||
      this.toNode === a.fromNode
    )
      return !0;
    return !1;
  };
  T.prototype.isVisible = function() {
    if (!U.prototype.isVisible.call(this)) return !1;
    var a = this.containingGroup,
      b = !0,
      c = this.diagram;
    null !== c && (b = c.isTreePathToChildren);
    c = this.fromNode;
    if (null !== c) {
      if (this.isTreeLink && b && !c.isTreeExpanded) return !1;
      if (c === a) return !0;
      for (var d = c; null !== d; ) {
        if (d.labeledLink === this) return !0;
        d = d.containingGroup;
      }
      c = c.findVisibleNode();
      if (null === c || c === a) return !1;
    }
    c = this.toNode;
    if (null !== c) {
      if (this.isTreeLink && !b && !c.isTreeExpanded) return !1;
      if (c === a) return !0;
      for (b = c; null !== b; ) {
        if (b.labeledLink === this) return !0;
        b = b.containingGroup;
      }
      b = c.findVisibleNode();
      if (null === b || b === a) return !1;
    }
    return !0;
  };
  T.prototype.Ub = function(a) {
    U.prototype.Ub.call(this, a);
    null !== this.If && this.If.Al();
    if (null !== this.rd)
      for (var b = this.rd.iterator; b.next(); ) b.value.Ub(a);
  };
  T.prototype.computeAdjusting = function() {
    return this.isAvoiding &&
      null !== this.diagram &&
      this.diagram.animationManager.defaultAnimation.isAnimating
      ? np
      : this.dk;
  };

  function sp(a) {
    var b = a.Ue;
    if (null !== b) {
      var c = a.hf;
      if (null !== c && isNaN(a.curviness)) {
        for (
          var d = a.Ve,
            e = a.jf,
            f = (a = null),
            g = b.jb.s,
            h = g.length,
            k = 0;
          k < h;
          k++
        ) {
          var l = g[k];
          if (
            (l.Ue === b && l.Ve === d && l.hf === c && l.jf === e) ||
            (l.Ue === c && l.Ve === e && l.hf === b && l.jf === d)
          )
            null === f
              ? (f = l)
              : (null === a && ((a = []), a.push(f)), a.push(l));
        }
        if (null !== a) {
          f = Yo(b, c, d, e);
          null === f && ((f = new Up(b, d, c, e)), Xo(b, f), Xo(c, f));
          f.links = a;
          for (b = 0; b < a.length; b++) a[b].If = f;
          f.Al();
        }
      }
    }
  }

  function tp(a) {
    var b = a.If;
    null !== b &&
      isNaN(a.curviness) &&
      ((a.If = null),
      (a = b.links.indexOf(a)),
      0 <= a && (Da(b.links, a), b.Al()));
  }
  T.prototype.eh = function() {
    return !0;
  };
  ma.Object.defineProperties(T.prototype, {
    fromNode: {
      get: function() {
        return this.Ue;
      },
      set: function(a) {
        var b = this.Ue;
        if (b !== a) {
          var c = this.fromPort;
          null !== b && (this.hf !== b && bp(b, this, c), tp(this), this.D(2));
          this.Ue = a;
          null !== a && this.Ub(a.isVisible());
          this.Mf = null;
          this.ab();
          var d = this.diagram;
          null !== d && d.$ && d.partManager.setFromNodeForLink(this, a, b);
          var e = this.fromPort,
            f = this.fromPortChanged;
          if (null !== f) {
            var g = !0;
            null !== d && ((g = d.$), (d.$ = !0));
            f(this, c, e);
            null !== d && (d.$ = g);
          }
          null !== a && (this.hf !== a && ap(a, this, e), sp(this), this.D(1));
          this.g('fromNode', b, a);
          To(this);
        }
      },
    },
    fromPortId: {
      get: function() {
        return this.Ve;
      },
      set: function(a) {
        var b = this.Ve;
        if (b !== a) {
          var c = this.fromPort;
          null !== c && Zo(c);
          tp(this);
          this.Ve = a;
          var d = this.fromPort;
          null !== d && Zo(d);
          var e = this.diagram;
          if (null !== e) {
            var f = this.data,
              g = e.model;
            null !== f && g.ki() && g.dv(f, a);
          }
          c !== d &&
            ((this.Mf = null),
            this.ab(),
            (f = this.fromPortChanged),
            null !== f &&
              ((g = !0),
              null !== e && ((g = e.$), (e.$ = !0)),
              f(this, c, d),
              null !== e && (e.$ = g)));
          sp(this);
          this.g('fromPortId', b, a);
        }
      },
    },
    fromPort: {
      get: function() {
        var a = this.Ue;
        return null === a ? null : a.Kr(this.Ve);
      },
    },
    fromPortChanged: {
      get: function() {
        return this.Om;
      },
      set: function(a) {
        var b = this.Om;
        b !== a && ((this.Om = a), this.g('fromPortChanged', b, a));
      },
    },
    toNode: {
      get: function() {
        return this.hf;
      },
      set: function(a) {
        var b = this.hf;
        if (b !== a) {
          var c = this.toPort;
          null !== b && (this.Ue !== b && bp(b, this, c), tp(this), this.D(2));
          this.hf = a;
          null !== a && this.Ub(a.isVisible());
          this.Mf = null;
          this.ab();
          var d = this.diagram;
          null !== d && d.$ && d.partManager.setToNodeForLink(this, a, b);
          var e = this.toPort,
            f = this.toPortChanged;
          if (null !== f) {
            var g = !0;
            null !== d && ((g = d.$), (d.$ = !0));
            f(this, c, e);
            null !== d && (d.$ = g);
          }
          null !== a && (this.Ue !== a && ap(a, this, e), sp(this), this.D(1));
          this.g('toNode', b, a);
          To(this);
        }
      },
    },
    toPortId: {
      get: function() {
        return this.jf;
      },
      set: function(a) {
        var b = this.jf;
        if (b !== a) {
          var c = this.toPort;
          null !== c && Zo(c);
          tp(this);
          this.jf = a;
          var d = this.toPort;
          null !== d && Zo(d);
          var e = this.diagram;
          if (null !== e) {
            var f = this.data,
              g = e.model;
            null !== f && g.ki() && g.hv(f, a);
          }
          c !== d &&
            ((this.Mf = null),
            this.ab(),
            (f = this.toPortChanged),
            null !== f &&
              ((g = !0),
              null !== e && ((g = e.$), (e.$ = !0)),
              f(this, c, d),
              null !== e && (e.$ = g)));
          sp(this);
          this.g('toPortId', b, a);
        }
      },
    },
    toPort: {
      get: function() {
        var a = this.hf;
        return null === a ? null : a.Kr(this.jf);
      },
    },
    toPortChanged: {
      get: function() {
        return this.Xn;
      },
      set: function(a) {
        var b = this.Xn;
        b !== a && ((this.Xn = a), this.g('toPortChanged', b, a));
      },
    },
    fromSpot: {
      get: function() {
        return null !== this.aa ? this.aa.Qi : Wc;
      },
      set: function(a) {
        var b = this.fromSpot;
        b.C(a) ||
          ((a = a.J()),
          this.Rc(),
          (this.aa.Qi = a),
          this.g('fromSpot', b, a),
          (b.Uc() || a.Uc()) && null !== this.fromNode && Zo(this.fromPort),
          this.ab());
      },
    },
    fromEndSegmentLength: {
      get: function() {
        return null !== this.aa ? this.aa.Oi : NaN;
      },
      set: function(a) {
        var b = this.fromEndSegmentLength;
        b !== a &&
          (0 > a && wa(a, '>= 0', T, 'fromEndSegmentLength'),
          this.Rc(),
          (this.aa.Oi = a),
          this.g('fromEndSegmentLength', b, a),
          this.ab());
      },
    },
    fromShortLength: {
      get: function() {
        return null !== this.aa ? this.aa.Pi : NaN;
      },
      set: function(a) {
        var b = this.fromShortLength;
        b !== a &&
          (this.Rc(),
          (this.aa.Pi = a),
          this.mc(!0),
          this.g('fromShortLength', b, a));
      },
    },
    toSpot: {
      get: function() {
        return null !== this.aa ? this.aa.tj : Wc;
      },
      set: function(a) {
        var b = this.toSpot;
        b.C(a) ||
          ((a = a.J()),
          this.Rc(),
          (this.aa.tj = a),
          this.g('toSpot', b, a),
          (b.Uc() || a.Uc()) && null !== this.toNode && Zo(this.toPort),
          this.ab());
      },
    },
    toEndSegmentLength: {
      get: function() {
        return null !== this.aa ? this.aa.rj : NaN;
      },
      set: function(a) {
        var b = this.toEndSegmentLength;
        b !== a &&
          (0 > a && wa(a, '>= 0', T, 'toEndSegmentLength'),
          this.Rc(),
          (this.aa.rj = a),
          this.g('toEndSegmentLength', b, a),
          this.ab());
      },
    },
    toShortLength: {
      get: function() {
        return null !== this.aa ? this.aa.sj : NaN;
      },
      set: function(a) {
        var b = this.toShortLength;
        b !== a &&
          (this.Rc(),
          (this.aa.sj = a),
          this.mc(!0),
          this.g('toShortLength', b, a));
      },
    },
    isLabeledLink: {
      get: function() {
        return null === this.rd ? !1 : 0 < this.rd.count;
      },
    },
    labelNodes: {
      get: function() {
        return null === this.rd ? Za : this.rd.iterator;
      },
    },
    relinkableFrom: {
      get: function() {
        return 0 !== (this.Oa & 1);
      },
      set: function(a) {
        var b = 0 !== (this.Oa & 1);
        b !== a && ((this.Oa ^= 1), this.g('relinkableFrom', b, a), this.Rb());
      },
    },
    relinkableTo: {
      get: function() {
        return 0 !== (this.Oa & 2);
      },
      set: function(a) {
        var b = 0 !== (this.Oa & 2);
        b !== a && ((this.Oa ^= 2), this.g('relinkableTo', b, a), this.Rb());
      },
    },
    resegmentable: {
      get: function() {
        return 0 !== (this.Oa & 4);
      },
      set: function(a) {
        var b = 0 !== (this.Oa & 4);
        b !== a && ((this.Oa ^= 4), this.g('resegmentable', b, a), this.Rb());
      },
    },
    isTreeLink: {
      get: function() {
        return 0 !== (this.Oa & 8);
      },
      set: function(a) {
        var b = 0 !== (this.Oa & 8);
        b !== a &&
          ((this.Oa ^= 8),
          this.g('isTreeLink', b, a),
          null !== this.fromNode && Ck(this.fromNode),
          null !== this.toNode && Ck(this.toNode));
      },
    },
    path: {
      get: function() {
        var a = this.vb();
        return a instanceof Cf ? a : null;
      },
    },
    routeBounds: {
      get: function() {
        this.mg();
        var a = this.bl,
          b = Infinity,
          c = Infinity,
          d = this.pointsCount;
        if (0 === d) a.h(NaN, NaN, 0, 0);
        else {
          if (1 === d)
            (d = this.i(0)),
              (b = Math.min(d.x, b)),
              (c = Math.min(d.y, c)),
              a.h(d.x, d.y, 0, 0);
          else if (2 === d) {
            d = this.i(0);
            var e = this.i(1);
            b = Math.min(d.x, e.x);
            c = Math.min(d.y, e.y);
            a.h(d.x, d.y, 0, 0);
            a.Me(e);
          } else if (this.computeCurve() === cg && 3 <= d && !this.isOrthogonal)
            if (
              ((e = this.i(0)), (b = e.x), (c = e.y), a.h(b, c, 0, 0), 3 === d)
            ) {
              d = this.i(1);
              b = Math.min(d.x, b);
              c = Math.min(d.y, c);
              var f = this.i(2);
              b = Math.min(f.x, b);
              c = Math.min(f.y, c);
              J.ql(e.x, e.y, d.x, d.y, d.x, d.y, f.x, f.y, 0.5, a);
            } else
              for (f = 3; f < d; f += 3) {
                var g = this.i(f - 2);
                f + 3 >= d && (f = d - 1);
                var h = this.i(f - 1),
                  k = this.i(f);
                J.ql(e.x, e.y, g.x, g.y, h.x, h.y, k.x, k.y, 0.5, a);
                b = Math.min(k.x, b);
                c = Math.min(k.y, c);
                e = k;
              }
          else
            for (
              e = this.i(0),
                f = this.i(1),
                b = Math.min(e.x, f.x),
                c = Math.min(e.y, f.y),
                a.h(e.x, e.y, 0, 0),
                a.Me(f),
                e = 2;
              e < d;
              e++
            )
              (f = this.i(e)),
                (b = Math.min(f.x, b)),
                (c = Math.min(f.y, c)),
                a.Me(f);
          this.Yt.h(b - a.x, c - a.y);
        }
        return a;
      },
    },
    midPoint: {
      get: function() {
        this.mg();
        return this.computeMidPoint(new I());
      },
    },
    midAngle: {
      get: function() {
        this.mg();
        return this.computeMidAngle();
      },
    },
    flattenedLengths: {
      get: function() {
        if (null === this.Gp) {
          this.xd || up(this);
          for (
            var a = (this.Gp = []), b = this.pointsCount, c = 0;
            c < b - 1;
            c++
          ) {
            var d = this.i(c);
            var e = this.i(c + 1);
            J.ca(d.x, e.x)
              ? ((d = e.y - d.y), 0 > d && (d = -d))
              : J.ca(d.y, e.y)
              ? ((d = e.x - d.x), 0 > d && (d = -d))
              : (d = Math.sqrt(d.rf(e)));
            a.push(d);
          }
        }
        return this.Gp;
      },
    },
    flattenedTotalLength: {
      get: function() {
        var a = this.Ys;
        if (isNaN(a)) {
          for (
            var b = this.flattenedLengths, c = b.length, d = (a = 0);
            d < c;
            d++
          )
            a += b[d];
          this.Ys = a;
        }
        return a;
      },
    },
    points: {
      get: function() {
        return this.Jb;
      },
      set: function(a) {
        var b = this.Jb;
        if (b !== a) {
          var c = null;
          if (Array.isArray(a)) {
            var d = 0 === a.length % 2;
            if (d)
              for (var e = 0; e < a.length; e++)
                if ('number' !== typeof a[e] || isNaN(a[e])) {
                  d = !1;
                  break;
                }
            if (d)
              for (c = new E(), d = 0; d < a.length / 2; d++)
                (e = new I(a[2 * d], a[2 * d + 1]).freeze()), c.add(e);
            else {
              d = !0;
              for (e = 0; e < a.length; e++) {
                var f = a[e];
                if (
                  !ya(f) ||
                  'number' !== typeof f.x ||
                  isNaN(f.x) ||
                  'number' !== typeof f.y ||
                  isNaN(f.y)
                ) {
                  d = !1;
                  break;
                }
              }
              if (d)
                for (c = new E(), d = 0; d < a.length; d++)
                  (e = a[d]), c.add(new I(e.x, e.y).freeze());
            }
          } else if (a instanceof E)
            for (c = a.copy(), a = c.iterator; a.next(); ) a.value.freeze();
          else C('Link.points value is not an instance of List or Array: ' + a);
          c.freeze();
          this.Jb = c;
          this.mc(!0);
          up(this);
          a = this.diagram;
          null !== a &&
            (a.ji || a.undoManager.isUndoingRedoing || a.Zr.add(this),
            a.animationManager.zb &&
              ((a = a.animationManager), (this.ef = c), a.dl.add(this)));
          this.g('points', b, c);
        }
      },
    },
    pointsCount: {
      get: function() {
        return this.Jb.count;
      },
    },
    xd: {
      get: function() {
        return 0 !== (this.Oa & 16);
      },
      set: function(a) {
        (0 !== (this.Oa & 16)) !== a && (this.Oa ^= 16);
      },
    },
    suspendsRouting: {
      get: function() {
        return 0 !== (this.Oa & 32);
      },
      set: function(a) {
        (0 !== (this.Oa & 32)) !== a && (this.Oa ^= 32);
      },
    },
    computingPoints: {
      get: function() {
        return 0 !== (this.Oa & 64);
      },
      set: function(a) {
        (0 !== (this.Oa & 64)) !== a && (this.Oa ^= 64);
      },
    },
    defaultFromPoint: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m = a.copy();
      },
    },
    defaultToPoint: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u = a.copy();
      },
    },
    isOrthogonal: {
      get: function() {
        return 2 === (this.kj.value & 2);
      },
    },
    isAvoiding: {
      get: function() {
        return 4 === (this.kj.value & 4);
      },
    },
    Zl: {
      get: function() {
        return 0 !== (this.Oa & 128);
      },
      set: function(a) {
        (0 !== (this.Oa & 128)) !== a && (this.Oa ^= 128);
      },
    },
    geometry: {
      get: function() {
        this.Zl || (this.mg(), (this.sa = this.makeGeometry()));
        return this.sa;
      },
    },
    firstPickIndex: {
      get: function() {
        return 2 >= this.pointsCount
          ? 0
          : this.isOrthogonal || !yp(this.computeSpot(!0))
          ? 1
          : 0;
      },
    },
    lastPickIndex: {
      get: function() {
        var a = this.pointsCount;
        return 0 === a
          ? 0
          : 2 >= a
          ? a - 1
          : this.isOrthogonal || !yp(this.computeSpot(!1))
          ? a - 2
          : a - 1;
      },
    },
    adjusting: {
      get: function() {
        return this.dk;
      },
      set: function(a) {
        var b = this.dk;
        b !== a && ((this.dk = a), this.g('adjusting', b, a));
      },
    },
    corner: {
      get: function() {
        return this.wm;
      },
      set: function(a) {
        var b = this.wm;
        b !== a && ((this.wm = a), this.mc(!0), this.g('corner', b, a));
      },
    },
    curve: {
      get: function() {
        return this.ym;
      },
      set: function(a) {
        var b = this.ym;
        b !== a &&
          ((this.ym = a),
          this.ab(),
          this.mc(!0),
          vp(this, b === Zf || b === Yf || a === Zf || a === Yf),
          this.g('curve', b, a));
      },
    },
    curviness: {
      get: function() {
        return this.zm;
      },
      set: function(a) {
        var b = this.zm;
        b !== a &&
          ((this.zm = a), this.ab(), this.mc(!1), this.g('curviness', b, a));
      },
    },
    routing: {
      get: function() {
        return this.kj;
      },
      set: function(a) {
        var b = this.kj;
        b !== a &&
          ((this.kj = a),
          (this.Mf = null),
          this.ab(),
          vp(this, 2 === (b.value & 2) || 2 === (a.value & 2)),
          this.g('routing', b, a));
      },
    },
    smoothness: {
      get: function() {
        return this.Sn;
      },
      set: function(a) {
        var b = this.Sn;
        b !== a && ((this.Sn = a), this.mc(!0), this.g('smoothness', b, a));
      },
    },
    key: {
      get: function() {
        var a = this.diagram;
        if (null !== a && a.model.ki()) return a.model.uc(this.data);
      },
    },
  });
  T.prototype.invalidateOtherJumpOvers = T.prototype.Ao;
  T.prototype.findClosestSegment = T.prototype.Ny;
  T.prototype.updateRoute = T.prototype.mg;
  T.prototype.invalidateRoute = T.prototype.ab;
  T.prototype.rollbackRoute = T.prototype.$u;
  T.prototype.commitRoute = T.prototype.pf;
  T.prototype.startRoute = T.prototype.jh;
  T.prototype.clearPoints = T.prototype.Aj;
  T.prototype.removePoint = T.prototype.Yu;
  T.prototype.addPointAt = T.prototype.mf;
  T.prototype.addPoint = T.prototype.fe;
  T.prototype.insertPointAt = T.prototype.l;
  T.prototype.insertPoint = T.prototype.sz;
  T.prototype.setPointAt = T.prototype.M;
  T.prototype.setPoint = T.prototype.Wc;
  T.prototype.getPoint = T.prototype.i;
  T.prototype.getOtherPort = T.prototype.jz;
  T.prototype.getOtherNode = T.prototype.wo;
  var wp = null,
    xp = null,
    mp = new D(T, 'Normal', 1),
    Vp = new D(T, 'Orthogonal', 2),
    Wp = new D(T, 'AvoidsNodes', 6),
    Ep = new D(T, 'AvoidsNodesStraight', 7),
    $f = new D(T, 'None', 0),
    cg = new D(T, 'Bezier', 9),
    Zf = new D(T, 'JumpGap', 10),
    Yf = new D(T, 'JumpOver', 11),
    np = new D(T, 'End', 17),
    op = new D(T, 'Scale', 18),
    pp = new D(T, 'Stretch', 19),
    Tm = new D(T, 'OrientAlong', 21),
    Mm = new D(T, 'OrientPlus90', 22),
    Om = new D(T, 'OrientMinus90', 23),
    qp = new D(T, 'OrientOpposite', 24),
    Um = new D(T, 'OrientUpright', 25),
    Nm = new D(T, 'OrientPlus90Upright', 26),
    Pm = new D(T, 'OrientMinus90Upright', 27),
    Qm = new D(T, 'OrientUpright45', 28),
    Gp = 16,
    Fp = 14,
    Hp = 8;
  T.className = 'Link';
  T.Normal = mp;
  T.Orthogonal = Vp;
  T.AvoidsNodes = Wp;
  T.AvoidsNodesStraight = Ep;
  T.None = $f;
  T.Bezier = cg;
  T.JumpGap = Zf;
  T.JumpOver = Yf;
  T.End = np;
  T.Scale = op;
  T.Stretch = pp;
  T.OrientAlong = Tm;
  T.OrientPlus90 = Mm;
  T.OrientMinus90 = Om;
  T.OrientOpposite = qp;
  T.OrientUpright = Um;
  T.OrientPlus90Upright = Nm;
  T.OrientMinus90Upright = Pm;
  T.OrientUpright45 = Qm;
  T.EndSegmentStep = 8;
  T.CurvinessStart = Gp;
  T.SpacingMin = Fp;
  T.OrthoShortCut = Hp;

  function Up(a, b, c, d) {
    Ra(this);
    this.ue = this.Sp = !1;
    this.cs = a;
    this.vx = b;
    this.Pu = c;
    this.wx = d;
    this.links = [];
  }
  Up.prototype.Al = function() {
    if (!this.Sp) {
      var a = this.links;
      0 < a.length &&
        ((a = a[0].diagram),
        null !== a &&
          (a.Uv.add(this), (this.ue = a.undoManager.isUndoingRedoing)));
    }
    this.Sp = !0;
  };
  Up.prototype.rv = function() {
    if (this.Sp) {
      this.Sp = !1;
      var a = this.links;
      if (0 < a.length) {
        var b = a[0],
          c = b.diagram;
        c = null === c || (c.ji && !this.ue);
        this.ue = !1;
        b.arrangeBundledLinks(a, c);
        1 === a.length && ((b.If = null), (a.length = 0));
      }
      0 === a.length &&
        ((a = this.cs),
        null !== this && null !== a.Qe && a.Qe.remove(this),
        (a = this.Pu),
        null !== this && null !== a.Qe && a.Qe.remove(this));
    }
  };
  Up.className = 'LinkBundle';

  function fk(a) {
    Ra(this);
    this.Hx = this.group = null;
    this.Sr = !0;
    this.abort = !1;
    this.Ed = this.Dd = 1;
    this.mn = this.ln = -1;
    this.nc = a.width;
    this.oc = a.height;
    this.Xb = null;
    this.Xh = this.Wh = 0;
    this.ps = 11;
    this.nx = this.mx = 22;
  }
  fk.prototype.initialize = function(a) {
    if (!(0 >= a.width || 0 >= a.height)) {
      var b = a.y,
        c = a.x + a.width,
        d = a.y + a.height;
      this.Dd = Math.floor((a.x - this.nc) / this.nc) * this.nc;
      this.Ed = Math.floor((b - this.oc) / this.oc) * this.oc;
      this.ln = Math.ceil((c + 2 * this.nc) / this.nc) * this.nc;
      this.mn = Math.ceil((d + 2 * this.oc) / this.oc) * this.oc;
      a = 1 + (Math.ceil((this.ln - this.Dd) / this.nc) | 0);
      b = 1 + (Math.ceil((this.mn - this.Ed) / this.oc) | 0);
      if (null === this.Xb || this.Wh < a - 1 || this.Xh < b - 1) {
        c = [];
        for (d = 0; d <= a; d++) c[d] = new Uint32Array(b);
        this.Xb = c;
        this.Wh = a - 1;
        this.Xh = b - 1;
      }
      a = Xp;
      if (null !== this.Xb)
        for (b = 0; b <= this.Wh; b++)
          if (((c = this.Xb[b]), c.fill)) c.fill(a);
          else for (d = 0; d <= this.Xh; d++) c[d] = a;
    }
  };

  function jk(a, b, c) {
    return a.Dd <= b && b <= a.ln && a.Ed <= c && c <= a.mn;
  }

  function Jp(a, b, c) {
    if (!jk(a, b, c)) return Xp;
    b -= a.Dd;
    b /= a.nc;
    c -= a.Ed;
    c /= a.oc;
    return a.Xb[b | 0][c | 0];
  }

  function ik(a) {
    if (null !== a.Xb)
      for (var b = 0; b <= a.Wh; b++)
        for (var c = a.Xb[b], d = 0; d <= a.Xh; d++) c[d] >= Mp && (c[d] = Xp);
  }
  fk.prototype.Pj = function(a, b, c, d) {
    if (a > this.ln || a + c < this.Dd || b > this.mn || b + d < this.Ed)
      return !0;
    a = ((a - this.Dd) / this.nc) | 0;
    b = ((b - this.Ed) / this.oc) | 0;
    c = (Math.max(0, c) / this.nc + 1) | 0;
    var e = (Math.max(0, d) / this.oc + 1) | 0;
    0 > a && ((c += a), (a = 0));
    0 > b && ((e += b), (b = 0));
    if (0 > c || 0 > e) return !0;
    d = Math.min(a + c - 1, this.Wh) | 0;
    for (c = Math.min(b + e - 1, this.Xh) | 0; a <= d; a++) {
      e = this.Xb[a];
      for (var f = b; f <= c; f++) if (e[f] === kk) return !1;
    }
    return !0;
  };

  function Yp(a, b, c, d, e, f, g, h, k) {
    if (!(b < f || b > g || c < h || c > k)) {
      var l = b | 0;
      var m = c | 0;
      var n = a.Xb[l][m];
      if (n >= Mp && n < Kp)
        for (
          e ? (m += d) : (l += d), n += 1;
          f <= l && l <= g && h <= m && m <= k && !(n >= a.Xb[l][m]);

        )
          (a.Xb[l][m] = n), (n += 1), e ? (m += d) : (l += d);
      l = e ? m : l;
      if (e)
        if (0 < d)
          for (c += d; c < l; c += d)
            Yp(a, b, c, 1, !e, f, g, h, k), Yp(a, b, c, -1, !e, f, g, h, k);
        else
          for (c += d; c > l; c += d)
            Yp(a, b, c, 1, !e, f, g, h, k), Yp(a, b, c, -1, !e, f, g, h, k);
      else if (0 < d)
        for (b += d; b < l; b += d)
          Yp(a, b, c, 1, !e, f, g, h, k), Yp(a, b, c, -1, !e, f, g, h, k);
      else
        for (b += d; b > l; b += d)
          Yp(a, b, c, 1, !e, f, g, h, k), Yp(a, b, c, -1, !e, f, g, h, k);
    }
  }

  function Zp(a, b, c, d, e, f, g, h, k) {
    b |= 0;
    c |= 0;
    var l = kk,
      m = Mp;
    for (a.Xb[b][c] = m; l === kk && b > f && b < g && c > h && c < k; )
      (m += 1), (a.Xb[b][c] = m), e ? (c += d) : (b += d), (l = a.Xb[b][c]);
  }

  function $p(a, b, c, d, e, f, g, h, k) {
    b |= 0;
    c |= 0;
    var l = kk,
      m = Kp;
    for (a.Xb[b][c] = m; l === kk && b > f && b < g && c > h && c < k; )
      (a.Xb[b][c] = m), e ? (c += d) : (b += d), (l = a.Xb[b][c]);
  }

  function Ip(a, b, c, d, e, f, g) {
    if (null !== a.Xb) {
      a.abort = !1;
      var h = b.x,
        k = b.y;
      if (jk(a, h, k)) {
        h -= a.Dd;
        h /= a.nc;
        k -= a.Ed;
        k /= a.oc;
        var l = d.x,
          m = d.y;
        if (jk(a, l, m))
          if (
            ((l -= a.Dd),
            (l /= a.nc),
            (m -= a.Ed),
            (m /= a.oc),
            1 >= Math.abs(h - l) && 1 >= Math.abs(k - m))
          )
            a.abort = !0;
          else {
            var n = f.x;
            d = f.y;
            b = f.x + f.width;
            var p = f.y + f.height;
            n -= a.Dd;
            n /= a.nc;
            d -= a.Ed;
            d /= a.oc;
            b -= a.Dd;
            b /= a.nc;
            p -= a.Ed;
            p /= a.oc;
            f = Math.max(0, Math.min(a.Wh, n | 0));
            b = Math.min(a.Wh, Math.max(0, b | 0));
            n = Math.max(0, Math.min(a.Xh, d | 0));
            p = Math.min(a.Xh, Math.max(0, p | 0));
            d = a.Xb;
            h |= 0;
            k |= 0;
            l |= 0;
            m |= 0;
            var r = 0 === c || 90 === c ? 1 : -1;
            c = 90 === c || 270 === c;
            d[h][k] === kk
              ? (Zp(a, h, k, r, c, f, b, n, p),
                Zp(a, h, k, 1, !c, f, b, n, p),
                Zp(a, h, k, -1, !c, f, b, n, p))
              : Zp(a, h, k, r, c, h, k, h, k);
            d[l][m] === kk
              ? ($p(
                  a,
                  l,
                  m,
                  0 === e || 90 === e ? 1 : -1,
                  90 === e || 270 === e,
                  f,
                  b,
                  n,
                  p,
                ),
                $p(a, l, m, 1, !(90 === e || 270 === e), f, b, n, p),
                $p(a, l, m, -1, !(90 === e || 270 === e), f, b, n, p))
              : $p(a, l, m, r, c, l, m, l, m);
            c = Ea();
            if (g && aq(a, l, m, e, h, k, c)) {
              if (c[0] !== l || c[1] !== m) c.unshift(m), c.unshift(l);
              if (c[c.length - 2] !== h || c[c.length - 1] !== k)
                c.push(h), c.push(k);
              a = Mp;
              e = c[c.length - 2];
              g = c[c.length - 1];
              d[e][g] = a++;
              for (f = c.length - 4; 0 <= f; f -= 2)
                for (
                  e = c[f + 2], g = c[f + 3], b = c[f], l = c[f + 1];
                  b > e ? e++ : b < e ? e-- : l > g ? g++ : l < g && g--,
                    (d[e][g] = a++),
                    e !== b || g !== l;

                );
            } else
              Yp(a, h, k, 1, !1, f, b, n, p),
                Yp(a, h, k, -1, !1, f, b, n, p),
                Yp(a, h, k, 1, !0, f, b, n, p),
                Yp(a, h, k, -1, !0, f, b, n, p);
            Ga(c);
          }
      }
    }
  }

  function aq(a, b, c, d, e, f, g) {
    for (var h = a.Xb, k = b, l = c; ; ) {
      if (k === e && l === f) return !0;
      var m = k,
        n = l;
      if (0 === d)
        if (m < e) m++;
        else break;
      else if (90 === d)
        if (n < f) n++;
        else break;
      else if (180 === d)
        if (m > e) m--;
        else break;
      else if (n > f) n--;
      else break;
      var p = h[m][n];
      if (0 === p || p === bq) break;
      k = m;
      l = n;
    }
    for (;;) {
      m = d;
      n = k;
      p = l;
      0 === d
        ? p < f
          ? ((m = 90), p++)
          : p > f && ((m = 270), p--)
        : 90 === d
        ? n < e
          ? ((m = 0), n++)
          : n > e && ((m = 180), n--)
        : 180 === d
        ? p < f
          ? ((m = 90), p++)
          : p > f && ((m = 270), p--)
        : n < e
        ? ((m = 0), n++)
        : n > e && ((m = 180), n--);
      n = h[n][p];
      if (m !== d && 0 !== n && n !== bq) {
        g.push(k);
        g.push(l);
        if (aq(a, k, l, m, e, f, g)) return !0;
        g.pop();
        g.pop();
      }
      h[k][l] = bq;
      if (0 === d) {
        if (k === b) return !1;
        k--;
      } else if (90 === d) {
        if (l === c) return !1;
        l--;
      } else if (180 === d) {
        if (k === b) return !1;
        k++;
      } else {
        if (l === c) return !1;
        l++;
      }
    }
  }
  ma.Object.defineProperties(fk.prototype, {
    bounds: {
      get: function() {
        return new M(this.Dd, this.Ed, this.ln - this.Dd, this.mn - this.Ed);
      },
    },
    lo: {
      get: function() {
        return this.nc;
      },
      set: function(a) {
        0 < a && a !== this.nc && ((this.nc = a), this.initialize(this.bounds));
      },
    },
    ko: {
      get: function() {
        return this.oc;
      },
      set: function(a) {
        0 < a && a !== this.oc && ((this.oc = a), this.initialize(this.bounds));
      },
    },
  });
  var kk = 0,
    Mp = 1,
    Kp = 999999,
    Xp = Kp + 1,
    bq = Kp + 2;
  fk.className = 'PositionArray';

  function Cp() {
    Ra(this);
    this.port = this.node = null;
    this.he = [];
    this.Do = !1;
  }
  Cp.prototype.toString = function() {
    for (
      var a = this.he,
        b = this.node.toString() + ' ' + a.length.toString() + ':',
        c = 0;
      c < a.length;
      c++
    ) {
      var d = a[c];
      null !== d && (b += '\n  ' + d.toString());
    }
    return b;
  };

  function cq(a, b, c, d) {
    b = b.offsetY;
    switch (b) {
      case 8:
        return 90;
      case 2:
        return 180;
      case 1:
        return 270;
      case 4:
        return 0;
    }
    switch (b) {
      case 9:
        return 180 < c ? 270 : 90;
      case 6:
        return 90 < c && 270 >= c ? 180 : 0;
    }
    a = (180 * Math.atan2(a.height, a.width)) / Math.PI;
    switch (b) {
      case 3:
        return c > a && c <= 180 + a ? 180 : 270;
      case 5:
        return c > 180 - a && c <= 360 - a ? 270 : 0;
      case 12:
        return c > a && c <= 180 + a ? 90 : 0;
      case 10:
        return c > 180 - a && c <= 360 - a ? 180 : 90;
      case 7:
        return 90 < c && c <= 180 + a
          ? 180
          : c > 180 + a && c <= 360 - a
          ? 270
          : 0;
      case 13:
        return 180 < c && c <= 360 - a ? 270 : c > a && 180 >= c ? 90 : 0;
      case 14:
        return c > a && c <= 180 - a ? 90 : c > 180 - a && 270 >= c ? 180 : 0;
      case 11:
        return c > 180 - a && c <= 180 + a ? 180 : c > 180 + a ? 270 : 90;
    }
    d && 15 !== b && ((c -= 15), 0 > c && (c += 360));
    return c > a && c < 180 - a
      ? 90
      : c >= 180 - a && c <= 180 + a
      ? 180
      : c > 180 + a && c < 360 - a
      ? 270
      : 0;
  }
  Cp.prototype.Al = function() {
    this.he.length = 0;
  };

  function Dp(a, b) {
    var c = a.he;
    if (0 === c.length) {
      a: if (!a.Do) {
        c = a.Do;
        a.Do = !0;
        var d = null,
          e = a.node,
          f = e instanceof qf ? e : null;
        if (null === f || f.isSubGraphExpanded)
          var g = e.isTreeExpanded
            ? e.findLinksConnected(a.port.portId)
            : e.Tw();
        else {
          if (!f.actualBounds.v()) {
            a.Do = c;
            break a;
          }
          d = f;
          g = d.vu();
        }
        f = a.he.length = 0;
        var h = a.port.ia(tc, I.alloc()),
          k = a.port.ia(Cc, I.alloc());
        e = M.allocAt(h.x, h.y, 0, 0);
        e.Me(k);
        I.free(h);
        I.free(k);
        h = I.allocAt(e.x + e.width / 2, e.y + e.height / 2);
        k = a.port.fi();
        for (g = g.iterator; g.next(); ) {
          var l = g.value;
          if (l.isVisible() && l.fromPort !== l.toPort) {
            var m =
                l.fromPort === a.port ||
                (null !== l.fromNode && l.fromNode.Md(d)),
              n = l.computeSpot(m, a.port);
            if (n.Uc() && ((m = m ? l.toPort : l.fromPort), null !== m)) {
              var p = m.part;
              if (null !== p) {
                var r = p.findVisibleNode();
                null !== r && r !== p && ((p = r), (m = p.port));
                m = l.computeOtherPoint(p, m);
                p = h.Ya(m);
                p -= k;
                0 > p ? (p += 360) : 360 <= p && (p -= 360);
                n = cq(e, n, p, l.isOrthogonal);
                0 === n
                  ? ((n = 4), 180 < p && (p -= 360))
                  : 90 === n
                  ? ((n = 8), 270 < p && (p -= 360))
                  : 180 === n
                  ? (n = 2)
                  : ((n = 1), 90 > p && (p += 360));
                r = a.he[f];
                void 0 === r
                  ? ((r = new dq(l, p, n)), (a.he[f] = r))
                  : ((r.link = l), (r.angle = p), (r.Gc = n));
                r.Ru.set(m);
                f++;
              }
            }
          }
        }
        I.free(h);
        a.he.sort(Cp.prototype.j);
        k = a.he.length;
        d = -1;
        for (f = h = 0; f < k; f++)
          (g = a.he[f]),
            void 0 !== g &&
              (g.Gc !== d && ((d = g.Gc), (h = 0)), (g.xo = h), h++);
        d = -1;
        h = 0;
        for (f = k - 1; 0 <= f; f--)
          (k = a.he[f]),
            void 0 !== k &&
              (k.Gc !== d && ((d = k.Gc), (h = k.xo + 1)), (k.tl = h));
        f = a.he;
        n = a.port;
        d = a.node.portSpreading;
        h = I.alloc();
        k = I.alloc();
        g = I.alloc();
        l = I.alloc();
        n.ia(tc, h);
        n.ia(vc, k);
        n.ia(Cc, g);
        n.ia(Ac, l);
        r = p = m = n = 0;
        if (d === jp)
          for (var q = 0; q < f.length; q++) {
            var u = f[q];
            if (null !== u) {
              var w = u.link.computeThickness();
              switch (u.Gc) {
                case 8:
                  p += w;
                  break;
                case 2:
                  r += w;
                  break;
                case 1:
                  n += w;
                  break;
                default:
                case 4:
                  m += w;
              }
            }
          }
        var v = (q = 0),
          z = 1,
          y = (u = 0);
        for (w = 0; w < f.length; w++) {
          var A = f[w];
          if (null !== A) {
            if (q !== A.Gc) {
              q = A.Gc;
              switch (q) {
                case 8:
                  var B = g;
                  v = l;
                  break;
                case 2:
                  B = l;
                  v = h;
                  break;
                case 1:
                  B = h;
                  v = k;
                  break;
                default:
                case 4:
                  (B = k), (v = g);
              }
              u = v.x - B.x;
              y = v.y - B.y;
              switch (q) {
                case 8:
                  p > Math.abs(u)
                    ? ((z = Math.abs(u) / p), (p = Math.abs(u)))
                    : (z = 1);
                  break;
                case 2:
                  r > Math.abs(y)
                    ? ((z = Math.abs(y) / r), (r = Math.abs(y)))
                    : (z = 1);
                  break;
                case 1:
                  n > Math.abs(u)
                    ? ((z = Math.abs(u) / n), (n = Math.abs(u)))
                    : (z = 1);
                  break;
                default:
                case 4:
                  m > Math.abs(y)
                    ? ((z = Math.abs(y) / m), (m = Math.abs(y)))
                    : (z = 1);
              }
              v = 0;
            }
            var F = A.Co;
            if (d === jp) {
              A = A.link.computeThickness();
              A *= z;
              F.set(B);
              switch (q) {
                case 8:
                  F.x = B.x + u / 2 + p / 2 - v - A / 2;
                  break;
                case 2:
                  F.y = B.y + y / 2 + r / 2 - v - A / 2;
                  break;
                case 1:
                  F.x = B.x + u / 2 - n / 2 + v + A / 2;
                  break;
                default:
                case 4:
                  F.y = B.y + y / 2 - m / 2 + v + A / 2;
              }
              v += A;
            } else {
              var L = 0.5;
              d === Vo && (L = (A.xo + 1) / (A.tl + 1));
              F.x = B.x + u * L;
              F.y = B.y + y * L;
            }
          }
        }
        I.free(h);
        I.free(k);
        I.free(g);
        I.free(l);
        B = a.he;
        for (f = 0; f < B.length; f++)
          (d = B[f]), null !== d && (d.tu = a.computeEndSegmentLength(d));
        a.Do = c;
        M.free(e);
      }
      c = a.he;
    }
    for (a = 0; a < c.length; a++)
      if (((e = c[a]), null !== e && e.link === b)) return e;
    return null;
  }
  Cp.prototype.j = function(a, b) {
    return a === b
      ? 0
      : null === a
      ? -1
      : null === b
      ? 1
      : a.Gc < b.Gc
      ? -1
      : a.Gc > b.Gc
      ? 1
      : a.angle < b.angle
      ? -1
      : a.angle > b.angle
      ? 1
      : 0;
  };
  Cp.prototype.computeEndSegmentLength = function(a) {
    var b = a.link,
      c = b.computeEndSegmentLength(
        this.node,
        this.port,
        sc,
        b.fromPort === this.port,
      ),
      d = a.xo;
    if (0 > d) return c;
    var e = a.tl;
    if (1 >= e || !b.isOrthogonal) return c;
    b = a.Ru;
    var f = a.Co;
    if (2 === a.Gc || 8 === a.Gc) d = e - 1 - d;
    return ((a = 2 === a.Gc || 4 === a.Gc)
    ? b.y < f.y
    : b.x < f.x)
      ? c + 8 * d
      : (a
        ? b.y === f.y
        : b.x === f.x)
      ? c
      : c + 8 * (e - 1 - d);
  };
  Cp.className = 'Knot';

  function dq(a, b, c) {
    this.link = a;
    this.angle = b;
    this.Gc = c;
    this.Ru = new I();
    this.tl = this.xo = 0;
    this.Co = new I();
    this.tu = 0;
  }
  dq.prototype.toString = function() {
    return (
      this.link.toString() +
      ' ' +
      this.angle.toString() +
      ' ' +
      this.Gc.toString() +
      ':' +
      this.xo.toString() +
      '/' +
      this.tl.toString() +
      ' ' +
      this.Co.toString() +
      ' ' +
      this.tu.toString() +
      ' ' +
      this.Ru.toString()
    );
  };
  dq.className = 'LinkInfo';

  function qi(a) {
    Ra(this);
    this.m = this.H = null;
    this.wh = this.Zm = !0;
    this.en = !1;
    this.im = new I(0, 0).freeze();
    this.bn = !0;
    this.mm = this.an = null;
    this.dn = !1;
    this.j = null;
    this.u = 0;
    this.nn = this.ao = null;
    this.zr = !1;
    this.dg = this.lj = null;
    this.ir = !1;
    a && Object.assign(this, a);
  }
  qi.prototype.cloneProtected = function(a) {
    a.Zm = this.Zm;
    a.wh = this.wh;
    a.en = this.en;
    a.im.assign(this.im);
    a.bn = this.bn;
    a.an = this.an;
    a.mm = this.mm;
    a.dn = !0;
    a.nn = this.nn;
    a.ao = this.ao;
  };
  qi.prototype.copy = function() {
    var a = new this.constructor();
    this.cloneProtected(a);
    return a;
  };
  qi.prototype.serializeLayoutProperties = function(a) {
    a.arrangementOrigin = {
      x: this.arrangementOrigin.x,
      y: this.arrangementOrigin.y,
    };
    a.isRouting = this.isRouting;
  };
  qi.prototype.deserializeLayoutProperties = function(a) {
    null !== a &&
      ((this.arrangementOrigin = new I(
        a.arrangementOrigin.x,
        a.arrangementOrigin.y,
      )),
      (this.isRouting = a.isRouting));
  };
  qi.prototype.ob = function() {};
  qi.prototype.toString = function() {
    var a = Ha(this.constructor);
    a += '(';
    null !== this.group && (a += ' in ' + this.group);
    null !== this.diagram && (a += ' for ' + this.diagram);
    return a + ')';
  };
  qi.prototype.D = function() {
    if (this.isValidLayout) {
      var a = this.diagram;
      if (null !== a && !a.undoManager.isUndoingRedoing) {
        var b = a.animationManager;
        !b.isTicking &&
          (b.defaultAnimation.isAnimating && b.wc(),
          (this.isOngoing && a.ji) || (this.isInitial && !a.ji)) &&
          ((this.isValidLayout = !1), a.Mb());
      }
    }
  };
  qi.prototype.createNetwork = function() {
    return new eq(this);
  };
  qi.prototype.makeNetwork = function(a) {
    var b = this.createNetwork();
    a instanceof Q
      ? (b.eg(a.nodes, !0), b.eg(a.links, !0))
      : a instanceof qf
      ? b.eg(a.memberParts)
      : b.eg(a.iterator);
    return b;
  };
  qi.prototype.updateParts = function() {
    this.isValidLayout = !0;
    if (!this.workerLayout()) {
      var a = this.diagram;
      if (null === a && null !== this.network)
        for (var b = this.network.vertexes.iterator; b.next(); ) {
          var c = b.value.node;
          if (null !== c && ((a = c.diagram), null !== a)) break;
        }
      try {
        null !== a && a.Da('Layout'), this.commitLayout();
      } finally {
        null !== a && a.eb('Layout');
      }
    }
  };
  qi.prototype.commitLayout = function() {
    if (null !== this.network) {
      for (var a = this.network.vertexes.iterator; a.next(); ) a.value.commit();
      if (this.isRouting)
        for (a = this.network.edges.iterator; a.next(); ) a.value.commit();
    }
  };
  qi.prototype.doLayout = function(a) {
    var b = new G();
    a instanceof Q
      ? (fq(this, b, a.nodes, !0, this.gh, !0, !1, !0),
        fq(this, b, a.parts, !0, this.gh, !0, !1, !0))
      : a instanceof qf
      ? fq(this, b, a.memberParts, !1, this.gh, !0, !1, !0)
      : b.addAll(a.iterator);
    0 < b.count &&
      ((a = this.diagram),
      null !== a && a.Da('Layout'),
      this.doMinimalNoNetworkLayout(b),
      null !== a && a.eb('Layout'));
    this.isValidLayout = !0;
  };
  qi.prototype.doMinimalNoNetworkLayout = function(a) {
    var b = Math.ceil(Math.sqrt(a.count));
    this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin);
    var c = this.arrangementOrigin.x,
      d = c,
      e = this.arrangementOrigin.y,
      f = 0,
      g = 0;
    for (a = a.iterator; a.next(); ) {
      var h = a.value;
      gq(h);
      var k = h.measuredBounds,
        l = k.width;
      k = k.height;
      h.moveTo(d, e);
      h instanceof qf && (h.gh = !1);
      d += Math.max(l, 50) + 20;
      g = Math.max(g, Math.max(k, 50));
      f >= b - 1 ? ((f = 0), (d = c), (e += g + 20), (g = 0)) : f++;
    }
  };
  qi.prototype.doMinimalNetworkLayout = function() {
    var a = Math.ceil(Math.sqrt(this.network.vertexes.count));
    this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin);
    for (
      var b = this.arrangementOrigin.x,
        c = b,
        d = this.arrangementOrigin.y,
        e = 0,
        f = 0,
        g = this.network.vertexes.iterator;
      g.next();

    ) {
      var h = g.value.node;
      if (!(null === h || h instanceof T) && (gq(h), this.gh(h))) {
        var k = h.measuredBounds,
          l = k.width;
        k = k.height;
        h.moveTo(c, d);
        h instanceof qf && (h.gh = !1);
        c += Math.max(l, 50) + 20;
        f = Math.max(f, Math.max(k, 50));
        e >= a - 1 ? ((e = 0), (c = b), (d += f + 20), (f = 0)) : e++;
      }
    }
  };
  qi.prototype.gh = function(a) {
    return !a.location.v() || (a instanceof qf && a.gh) ? !0 : !1;
  };

  function fq(a, b, c, d, e, f, g, h) {
    for (c = c.iterator; c.next(); ) {
      var k = c.value;
      (d && !k.isTopLevel) ||
        (null !== e && !e(k)) ||
        !k.canLayout() ||
        (f && k instanceof V
          ? k.isLinkLabel ||
            (k instanceof qf
              ? null === k.layout
                ? fq(a, b, k.memberParts, !1, e, f, g, h)
                : (gq(k), b.add(k))
              : (gq(k), b.add(k)))
          : g && k instanceof T
          ? b.add(k)
          : !h || !k.Tc() || k instanceof V || (gq(k), b.add(k)));
    }
  }

  function gq(a) {
    var b = a.actualBounds;
    (0 === b.width || 0 === b.height || isNaN(b.width) || isNaN(b.height)) &&
      a.Za();
  }
  qi.prototype.hi = function(a, b) {
    var c = this.boundsComputation;
    if (null !== c) return b || (b = new M()), c(a, this, b);
    if (!b) return a.actualBounds;
    b.set(a.actualBounds);
    return b;
  };
  qi.prototype.Iw = function(a) {
    var b = new G();
    a instanceof Q
      ? (fq(this, b, a.nodes, !0, null, !0, !0, !0),
        fq(this, b, a.links, !0, null, !0, !0, !0),
        fq(this, b, a.parts, !0, null, !0, !0, !0))
      : a instanceof qf
      ? fq(this, b, a.memberParts, !1, null, !0, !0, !0)
      : fq(this, b, a.iterator, !1, null, !0, !0, !0);
    return b;
  };
  qi.prototype.initialOrigin = function(a) {
    var b = this.group;
    if (null !== b) {
      var c = b.position.copy();
      (isNaN(c.x) || isNaN(c.y)) && c.set(a);
      b = b.placeholder;
      null !== b &&
        ((c = b.ia(tc)),
        (isNaN(c.x) || isNaN(c.y)) && c.set(a),
        (a = b.padding),
        (c.x += a.left),
        (c.y += a.top));
      return c;
    }
    return a;
  };
  qi.prototype.mayUseWorker = function() {
    return this.mayUseWorkerFunction ? this.mayUseWorkerFunction(this) : !1;
  };
  qi.prototype.workerLayout = function() {
    return !1;
  };

  function hq(a, b) {
    if (null !== a.workerStateChanged) {
      var c = {
        key: a.group ? a.group.key : null,
      };
      void 0 !== b && (c.time = b);
      null !== a.lj && (c.running = iq(a.lj));
      null !== a.dg && (c.waiting = iq(a.dg));
      a.workerStateChanged(c, a);
    }
  }

  function iq(a) {
    return {
      vertexes: a.vertexes.count,
      edges: a.edges.count,
    };
  }
  qi.prototype.uy = function() {
    var a = jq(this.constructor);
    a &&
      (null !== a.Ne && a.Ne.terminate(),
      (a.Ne = null),
      a.Cl.iteratorValues.each(function(a) {
        a.zr = !1;
        a.lj = null;
        a.dg = null;
        a.ir = !1;
        hq(a);
      }),
      a.Cl.clear());
  };

  function kq(a, b) {
    var c = jq(a);
    if (c) {
      if (b) for (var d in b) c[d] = b[d];
    } else throw Error('Unknown Layout class: ' + a);
  }

  function jq(a) {
    var b = null;
    if ('function' === typeof a) {
      if (((b = lq.get(a)), !b)) {
        var c = Ha(a);
        b = lq.get(c);
        b ||
          ((b = new mq()),
          (b.pu = a),
          (b.name = c),
          (b.j = a.name),
          (b.hx = nq),
          lq.set(c, b),
          lq.set(a, b),
          lq.set(a.name, b));
      }
    } else 'string' === typeof a && (b = lq.get(a));
    return b;
  }
  qi.prototype.qv = function() {
    if (
      'undefined' === typeof Worker ||
      !oq ||
      'undefined' === typeof self ||
      'undefined' !== typeof self.DedicatedWorkerGlobalScope
    )
      return !1;
    if (!this.mayUseWorker())
      return (
        this.zr && ((this.ir = !0), (this.dg = this.lj = null), hq(this)), !1
      );
    var a = jq(this.constructor);
    if (null === a) return !1;
    null === a.Ne &&
      ((a.Ne = new Worker(oq)),
      (a.Ne.onerror = function(a) {
        a.preventDefault();
        xa(
          'Worker Error at: ' +
            a.filename +
            ' ' +
            a.lineno +
            ' ' +
            a.colno +
            '\n  ' +
            a.message,
        );
      }),
      (a.Ne.j = function(a) {
        xa('Worker serialization error: ' + a);
      }),
      (a.Ne.onmessage = function(b) {
        var c = b.data;
        if ('_GoJS' === c._GoJS)
          if (c.version && Q.version && c.version !== Q.version)
            xa('Failure: GoJS v' + Q.version + '  Worker v' + c.version);
          else if ((b = a.Cl.get(c.id))) {
            a.Cl.remove(c.id);
            b.zr = !1;
            b.lj = null;
            if (b.ir) (b.ir = !1), (b.dg = null);
            else {
              var d = pq(b, c, !1);
              b.network = d;
              b.updateParts();
              b.network = null;
              b.isValidLayout = !0;
            }
            hq(b, c.time);
            c = b.dg;
            if (null !== c) b.dg = null;
            else
              for (d = a.Cl.iteratorValues; d.next(); ) {
                var e = d.value;
                c = e.dg;
                if (null !== c) {
                  e.dg = null;
                  break;
                }
              }
            null !== c && qq(b, c);
          }
      }),
      a.Ne.postMessage({
        _GoJS: '_GoJS',
        url: a.hx,
      }),
      Array.isArray(a.scripts) &&
        a.scripts.forEach(function(b) {
          a.Ne.postMessage({
            _GoJS: '_GoJS',
            url: b,
          });
        }),
      a.Ne.postMessage({
        _GoJS: '_GoJS',
        version: -1,
      }));
    null !== this.lj ? (this.dg = this.network) : qq(this, this.network);
    hq(this);
    this.doMinimalNetworkLayout();
    this.network = null;
    return (this.isValidLayout = !0);
  };

  function qq(a, b) {
    a.zr = !0;
    var c = jq(a.constructor),
      d = rq(a, b, !0);
    d._GoJS = '_GoJS';
    c.Ne.postMessage(d);
    c.Cl.set(cb(a), a);
    a.lj = b;
  }

  function rq(a, b, c) {
    a.onNetworkSerialization(1, c, b, null);
    var d = {};
    a.serializeLayoutProperties(d, c);
    var e = [];
    b.vertexes.each(function(a) {
      var b = {};
      a.serializeVertexProperties(b, c);
      e.push(b);
    });
    var f = [];
    b.edges.each(function(a) {
      var b = {};
      a.serializeEdgeProperties(b, c);
      f.push(b);
    });
    d = {
      id: c ? cb(a) : a.id,
      layout: Ha(a.constructor),
      p: d,
      hA: e,
      Ly: f,
    };
    a.onNetworkSerialization(2, c, b, d);
    return d;
  }

  function pq(a, b, c) {
    c && (a.id = b.id);
    var d = a.diagram,
      e = a.createNetwork();
    a.onNetworkSerialization(3, c, e, b);
    var f = b.hA,
      g = new pb();
    f &&
      f.forEach(function(a) {
        var b = null;
        null === a.key || null === d || c || (b = d.Lb(a.key));
        null !== b ? (b = e.yj(b)) : ((b = e.createVertex()), e.fg(b));
        c &&
          null !== a.key &&
          (b.data = {
            yh: a.key,
          });
        g.set(a.id, b);
      });
    var h = b.Ly,
      k = new pb();
    h &&
      h.forEach(function(a) {
        var b = null;
        null === a.key || null === d || c || (b = d.findLinkForKey(a.key));
        var f = e.createEdge();
        e.ol(f);
        f.link = b;
        c &&
          null !== a.key &&
          (f.data = {
            yh: a.key,
          });
        k.set(a.id, f);
      });
    f &&
      f.forEach(function(a) {
        var b = g.get(a.id);
        b && b.deserializeVertexProperties(a, g, k, c);
      });
    h &&
      h.forEach(function(a) {
        var b = k.get(a.id);
        b && b.deserializeEdgeProperties(a, g, k, c);
      });
    a.deserializeLayoutProperties(b.p, g, k, c, e);
    a.onNetworkSerialization(4, c, e, b);
    return e;
  }
  qi.prototype.onNetworkSerialization = function() {};
  ma.Object.defineProperties(qi.prototype, {
    diagram: {
      get: function() {
        return this.H;
      },
      set: function(a) {
        this.H = a;
      },
    },
    group: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m !== a && ((this.m = a), null !== a && (this.H = a.diagram));
      },
    },
    isOngoing: {
      get: function() {
        return this.Zm;
      },
      set: function(a) {
        this.Zm !== a && (this.Zm = a);
      },
    },
    isInitial: {
      get: function() {
        return this.wh;
      },
      set: function(a) {
        this.wh = a;
        a || (this.dn = !0);
      },
    },
    isViewportSized: {
      get: function() {
        return this.en;
      },
      set: function(a) {
        this.en !== a && (this.en = a) && this.D();
      },
    },
    isRouting: {
      get: function() {
        return this.bn;
      },
      set: function(a) {
        this.bn !== a && (this.bn = a);
      },
    },
    isRealtime: {
      get: function() {
        return this.an;
      },
      set: function(a) {
        this.an !== a && (this.an = a);
      },
    },
    isValidLayout: {
      get: function() {
        return this.dn;
      },
      set: function(a) {
        this.dn !== a &&
          ((this.dn = a), a || ((a = this.diagram), null !== a && (a.mh = !0)));
      },
    },
    network: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j !== a && ((this.j = a), null !== a && (a.layout = this));
      },
    },
    boundsComputation: {
      get: function() {
        return this.mm;
      },
      set: function(a) {
        this.mm !== a && ((this.mm = a), this.D());
      },
    },
    arrangementOrigin: {
      get: function() {
        return this.im;
      },
      set: function(a) {
        this.im.C(a) || (this.im.assign(a), this.D());
      },
    },
    id: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u = a;
      },
    },
    mayUseWorkerFunction: {
      get: function() {
        return this.nn;
      },
      set: function(a) {
        this.nn !== a && (this.nn = a);
      },
    },
    workerStateChanged: {
      get: function() {
        return this.ao;
      },
      set: function(a) {
        this.ao !== a && (this.ao = a);
      },
    },
  });
  qi.prototype.useWorker = qi.prototype.qv;
  qi.declareWorkerLayout = kq;
  qi.prototype.cancelWorker = qi.prototype.uy;
  qi.prototype.collectParts = qi.prototype.Iw;
  qi.prototype.getLayoutBounds = qi.prototype.hi;
  qi.prototype.invalidateLayout = qi.prototype.D;
  var lq = new pb(),
    nq =
      'object' === typeof x.document && x.document.currentScript
        ? x.document.currentScript.src
        : '',
    oq =
      'undefined' !== typeof URL &&
      'function' === typeof URL.createObjectURL &&
      'function' === typeof Blob
        ? URL.createObjectURL(
            new Blob(
              [
                'self.onmessage=function(e){if(e.data.url){\nimportScripts(e.data.url);}}',
              ],
              {
                type: 'text/javascript',
              },
            ),
          )
        : '';
  qi.className = 'Layout';
  qi.GoJSScriptURL = nq;
  qi.declareWorkerLayout = kq;
  'undefined' !== typeof self &&
    'undefined' !== typeof self.DedicatedWorkerGlobalScope &&
    'undefined' !== typeof self &&
    'undefined' !== typeof self.DedicatedWorkerGlobalScope &&
    (self.onmessage = function(a) {
      a = a.data;
      if ('_GoJS' === a._GoJS)
        if (a.url) importScripts(a.url);
        else if (a.version)
          self.postMessage(
            {
              _GoJS: '_GoJS',
              version: Q.version,
            },
            void 0,
          );
        else {
          var b = performance.now(),
            c = null;
          a.layout && (c = jq(a.layout));
          var d = null;
          c && c.pu && (d = new c.pu());
          if (!d) throw Error('no registered Worker Layout: ' + a.layout);
          d.network = pq(d, a, !0);
          d.workerLayout = function() {
            var a = rq(d, d.network, !1);
            a._GoJS = '_GoJS';
            a.time = performance.now() - b;
            self.postMessage(a, void 0);
            return !0;
          };
          d.doLayout(new E());
        }
    });

  function mq() {
    this.pu = null;
    this.hx = this.j = this.name = '';
    this.scripts = [];
    this.Ne = null;
    this.Cl = new pb();
  }

  function eq(a) {
    Ra(this);
    this.Kc = a;
    this.kf = new G();
    this.pe = new G();
    this.ds = new pb();
    this.Yr = new pb();
  }
  eq.prototype.clear = function() {
    if (this.kf) for (var a = this.kf.iterator; a.next(); ) a.value.clear();
    if (this.pe) for (a = this.pe.iterator; a.next(); ) a.value.clear();
    this.kf = new G();
    this.pe = new G();
    this.ds = new pb();
    this.Yr = new pb();
  };
  eq.prototype.toString = function(a) {
    void 0 === a && (a = 0);
    var b =
      'LayoutNetwork' +
      (null !== this.layout ? '(' + this.layout.toString() + ')' : '');
    if (0 >= a) return b;
    b += ' vertexes: ' + this.kf.count + ' edges: ' + this.pe.count;
    if (1 < a) {
      for (var c = this.kf.iterator; c.next(); )
        b += '\n    ' + c.value.toString(a - 1);
      for (c = this.pe.iterator; c.next(); )
        b += '\n    ' + c.value.toString(a - 1);
    }
    return b;
  };
  eq.prototype.createVertex = function() {
    return new sq(this);
  };
  eq.prototype.createEdge = function() {
    return new tq(this);
  };
  eq.prototype.eg = function(a, b, c) {
    if (null !== a) {
      void 0 === b && (b = !1);
      void 0 === c && (c = null);
      null === c &&
        (c = function(a) {
          if (a instanceof V) return !a.isLinkLabel;
          if (a instanceof T) {
            var b = a.fromNode;
            if (null === b || b.isLinkLabel) return !1;
            a = a.toNode;
            return null === a || a.isLinkLabel ? !1 : !0;
          }
          return !1;
        });
      for (a = a.iterator; a.next(); ) {
        var d = a.value;
        if (d instanceof V && (!b || d.isTopLevel) && d.canLayout() && c(d))
          if (d instanceof qf && null === d.layout) this.eg(d.memberParts, !1);
          else if (null === this.ei(d)) {
            var e = this.createVertex();
            e.node = d;
            this.fg(e);
          }
      }
      for (a.reset(); a.next(); )
        if (
          ((d = a.value),
          d instanceof T &&
            (!b || d.isTopLevel) &&
            d.canLayout() &&
            c(d) &&
            null === this.qo(d))
        ) {
          var f = d.fromNode;
          e = d.toNode;
          null !== f &&
            null !== e &&
            f !== e &&
            ((f = this.findGroupVertex(f)),
            (e = this.findGroupVertex(e)),
            null !== f && null !== e && this.Qj(f, e, d));
        }
    }
  };
  eq.prototype.findGroupVertex = function(a) {
    if (null === a) return null;
    var b = a.findVisibleNode();
    if (null === b) return null;
    a = this.ei(b);
    if (null !== a) return a;
    for (b = b.containingGroup; null !== b; ) {
      a = this.ei(b);
      if (null !== a) return a;
      b = b.containingGroup;
    }
    return null;
  };
  t = eq.prototype;
  t.fg = function(a) {
    if (null !== a) {
      this.kf.add(a);
      var b = a.node;
      null !== b && this.ds.add(b, a);
      a.network = this;
    }
  };
  t.yj = function(a) {
    if (null === a) return null;
    var b = this.ei(a);
    null === b && ((b = this.createVertex()), (b.node = a), this.fg(b));
    return b;
  };
  t.su = function(a) {
    if (null !== a && uq(this, a)) {
      for (var b = a.wd, c = b.count - 1; 0 <= c; c--) {
        var d = b.K(c);
        this.Gj(d);
      }
      b = a.Jd;
      for (a = b.count - 1; 0 <= a; a--) (c = b.K(a)), this.Gj(c);
    }
  };

  function uq(a, b) {
    if (null === b) return !1;
    var c = a.kf.remove(b);
    c && ((b = b.node), null !== b && a.ds.remove(b));
    return c;
  }
  t.Gy = function(a) {
    null !== a && ((a = this.ei(a)), null !== a && this.su(a));
  };
  t.ei = function(a) {
    return null === a ? null : this.ds.I(a);
  };
  t.ol = function(a) {
    if (null !== a) {
      vq(this, a);
      var b = a.toVertex;
      null !== b && b.iu(a);
      b = a.fromVertex;
      null !== b && b.gu(a);
    }
  };

  function vq(a, b) {
    if (null !== b) {
      a.pe.add(b);
      var c = b.link;
      null !== c && null === a.qo(c) && a.Yr.add(c, b);
      b.network = a;
    }
  }
  t.ky = function(a) {
    if (null === a) return null;
    var b = a.fromNode,
      c = a.toNode,
      d = this.qo(a);
    null === d
      ? ((d = this.createEdge()),
        (d.link = a),
        null !== b && (d.fromVertex = this.yj(b)),
        null !== c && (d.toVertex = this.yj(c)),
        this.ol(d))
      : (null !== b ? (d.fromVertex = this.yj(b)) : (d.fromVertex = null),
        null !== c ? (d.toVertex = this.yj(c)) : (d.toVertex = null));
    return d;
  };
  t.Gj = function(a) {
    if (null !== a) {
      var b = a.toVertex;
      null !== b && b.ru(a);
      b = a.fromVertex;
      null !== b && b.qu(a);
      wq(this, a);
    }
  };

  function wq(a, b) {
    null !== b &&
      a.pe.remove(b) &&
      ((b = b.link), null !== b && a.Yr.remove(b));
  }
  t.Fy = function(a) {
    null !== a && ((a = this.qo(a)), null !== a && this.Gj(a));
  };
  t.qo = function(a) {
    return null === a ? null : this.Yr.I(a);
  };
  t.Qj = function(a, b, c) {
    if (null === a || null === b) return null;
    if (a.network === this && b.network === this) {
      var d = this.createEdge();
      d.link = c;
      d.fromVertex = a;
      d.toVertex = b;
      this.ol(d);
      return d;
    }
    return null;
  };
  t.Ol = function(a) {
    if (null !== a) {
      var b = a.fromVertex,
        c = a.toVertex;
      null !== b && null !== c && (b.qu(a), c.ru(a), a.Ol(), b.iu(a), c.gu(a));
    }
  };
  t.oo = function() {
    for (var a = Ea(), b = this.pe.iterator; b.next(); ) {
      var c = b.value;
      c.fromVertex === c.toVertex && a.push(c);
    }
    b = a.length;
    for (c = 0; c < b; c++) this.Gj(a[c]);
    Ga(a);
  };
  eq.prototype.deleteArtificialVertexes = function() {
    for (var a = Ea(), b = this.kf.iterator; b.next(); ) {
      var c = b.value;
      null === c.node && null === c.data && a.push(c);
    }
    c = a.length;
    for (b = 0; b < c; b++) this.su(a[b]);
    b = Ea();
    for (c = this.pe.iterator; c.next(); ) {
      var d = c.value;
      null === d.link && null === d.data && b.push(d);
    }
    c = b.length;
    for (d = 0; d < c; d++) this.Gj(b[d]);
    Ga(a);
    Ga(b);
  };

  function xq(a) {
    for (var b = Ea(), c = a.pe.iterator; c.next(); ) {
      var d = c.value;
      (null !== d.fromVertex && null !== d.toVertex) || b.push(d);
    }
    c = b.length;
    for (d = 0; d < c; d++) a.Gj(b[d]);
    Ga(b);
  }
  eq.prototype.Ix = function(a) {
    void 0 === a && (a = !0);
    a && (this.deleteArtificialVertexes(), xq(this), this.oo());
    a = new E();
    for (var b = !0; b; ) {
      b = !1;
      for (var c = this.kf.iterator; c.next(); ) {
        var d = c.value;
        if (0 < d.wd.count || 0 < d.Jd.count) {
          b = this.layout.createNetwork();
          a.add(b);
          yq(this, b, d);
          b = !0;
          break;
        }
      }
    }
    a.sort(function(a, b) {
      return null === a || null === b || a === b
        ? 0
        : b.vertexes.count - a.vertexes.count;
    });
    return a;
  };

  function yq(a, b, c) {
    if (null !== c && c.network !== b) {
      uq(a, c);
      b.fg(c);
      for (var d = c.sourceEdges; d.next(); ) {
        var e = d.value;
        e.network !== b && (wq(a, e), vq(b, e), yq(a, b, e.fromVertex));
      }
      for (d = c.destinationEdges; d.next(); )
        (c = d.value),
          c.network !== b && (wq(a, c), vq(b, c), yq(a, b, c.toVertex));
    }
  }
  eq.prototype.My = function() {
    for (var a = new G(), b = this.kf.iterator; b.next(); ) a.add(b.value.node);
    for (b = this.pe.iterator; b.next(); ) a.add(b.value.link);
    return a;
  };
  ma.Object.defineProperties(eq.prototype, {
    layout: {
      get: function() {
        return this.Kc;
      },
      set: function(a) {
        null !== a && (this.Kc = a);
      },
    },
    vertexes: {
      get: function() {
        return this.kf;
      },
    },
    edges: {
      get: function() {
        return this.pe;
      },
    },
  });
  eq.prototype.findAllParts = eq.prototype.My;
  eq.prototype.splitIntoSubNetworks = eq.prototype.Ix;
  eq.prototype.deleteSelfEdges = eq.prototype.oo;
  eq.prototype.reverseEdge = eq.prototype.Ol;
  eq.prototype.linkVertexes = eq.prototype.Qj;
  eq.prototype.findEdge = eq.prototype.qo;
  eq.prototype.deleteLink = eq.prototype.Fy;
  eq.prototype.deleteEdge = eq.prototype.Gj;
  eq.prototype.addLink = eq.prototype.ky;
  eq.prototype.addEdge = eq.prototype.ol;
  eq.prototype.findVertex = eq.prototype.ei;
  eq.prototype.deleteNode = eq.prototype.Gy;
  eq.prototype.deleteVertex = eq.prototype.su;
  eq.prototype.addNode = eq.prototype.yj;
  eq.prototype.addVertex = eq.prototype.fg;
  eq.prototype.addParts = eq.prototype.eg;
  eq.className = 'LayoutNetwork';

  function sq(a) {
    Ra(this);
    this.nb = a;
    this.j = new M(0, 0, 10, 10).freeze();
    this.m = new I(5, 5).freeze();
    this.Lh = this.qb = null;
    this.wd = new E();
    this.Jd = new E();
  }
  sq.prototype.serializeVertexProperties = function(a) {
    a.id = cb(this);
    a.key = this.node ? this.node.key : this.data ? this.data.yh : void 0;
    void 0 === a.key && (a.key = null);
    a.x = this.bounds.x;
    a.y = this.bounds.y;
    a.iA = this.bounds.width;
    a.pz = this.bounds.height;
    a.fx = this.focus.x;
    a.fy = this.focus.y;
    var b = [];
    this.wd.each(function(a) {
      b.push(cb(a));
    });
    a.Gx = b;
    var c = [];
    this.Jd.each(function(a) {
      c.push(cb(a));
    });
    a.Ow = c;
  };
  sq.prototype.deserializeVertexProperties = function(a, b, c) {
    if (null !== a) {
      this.x = a.x;
      this.y = a.y;
      this.width = a.iA;
      this.height = a.pz;
      this.focusX = a.fx;
      this.focusY = a.fy;
      var d = this;
      a.Gx &&
        a.Gx.forEach(function(a) {
          (a = c.get(a)) && d.wd.add(a);
        });
      a.Ow &&
        a.Ow.forEach(function(a) {
          (a = c.get(a)) && d.Jd.add(a);
        });
    }
  };
  sq.prototype.clear = function() {
    this.Lh = this.qb = null;
    this.wd = new E();
    this.Jd = new E();
  };
  sq.prototype.toString = function(a) {
    void 0 === a && (a = 0);
    var b = 'LayoutVertex#' + cb(this);
    if (
      0 < a &&
      ((b += null !== this.node ? '(' + this.node.toString() + ')' : ''), 1 < a)
    ) {
      a = '';
      for (var c = !0, d = this.wd.iterator; d.next(); ) {
        var e = d.value;
        c ? (c = !1) : (a += ',');
        a += e.toString(0);
      }
      e = '';
      c = !0;
      for (d = this.Jd.iterator; d.next(); ) {
        var f = d.value;
        c ? (c = !1) : (e += ',');
        e += f.toString(0);
      }
      b += ' sources: ' + a + ' destinations: ' + e;
    }
    return b;
  };
  sq.prototype.commit = function() {
    var a = this.qb;
    if (null !== a) {
      var b = this.bounds,
        c = a.bounds;
      ya(c)
        ? ((c.x = b.x), (c.y = b.y), (c.width = b.width), (c.height = b.height))
        : (a.bounds = b.copy());
    } else if (((a = this.node), null !== a)) {
      b = this.bounds;
      if (!(a instanceof qf)) {
        c = M.alloc();
        var d = this.network.layout.hi(a, c),
          e = a.locationObject.ia(yc);
        if (d.v() && e.v()) {
          a.moveTo(
            b.x + this.focusX - (e.x - d.x),
            b.y + this.focusY - (e.y - d.y),
          );
          M.free(c);
          return;
        }
        M.free(c);
      }
      a.moveTo(b.x, b.y);
    }
  };
  sq.prototype.iu = function(a) {
    null !== a && (this.wd.contains(a) || this.wd.add(a));
  };
  sq.prototype.ru = function(a) {
    null !== a && this.wd.remove(a);
  };
  sq.prototype.gu = function(a) {
    null !== a && (this.Jd.contains(a) || this.Jd.add(a));
  };
  sq.prototype.qu = function(a) {
    null !== a && this.Jd.remove(a);
  };

  function zq(a, b) {
    a = a.Lh;
    b = b.Lh;
    return a
      ? b
        ? ((a = a.text), (b = b.text), a < b ? -1 : a > b ? 1 : 0)
        : 1
      : null !== b
      ? -1
      : 0;
  }
  ma.Object.defineProperties(sq.prototype, {
    sourceEdgesArrayAccess: {
      get: function() {
        return this.wd._dataArray;
      },
    },
    destinationEdgesArrayAccess: {
      get: function() {
        return this.Jd._dataArray;
      },
    },
    data: {
      get: function() {
        return this.qb;
      },
      set: function(a) {
        this.qb = a;
        if (null !== a && a.bounds) {
          var b = a.bounds;
          a = b.x;
          var c = b.y,
            d = b.width;
          b = b.height;
          this.m.h(d / 2, b / 2);
          this.j.h(a, c, d, b);
        }
      },
    },
    node: {
      get: function() {
        return this.Lh;
      },
      set: function(a) {
        if (this.Lh !== a) {
          this.Lh = a;
          a.Za();
          var b = this.network.layout,
            c = M.alloc(),
            d = b.hi(a, c);
          b = d.x;
          var e = d.y,
            f = d.width;
          d = d.height;
          isNaN(b) && (b = 0);
          isNaN(e) && (e = 0);
          this.j.h(b, e, f, d);
          M.free(c);
          if (!(a instanceof qf) && ((a = a.locationObject.ia(yc)), a.v())) {
            this.m.h(a.x - b, a.y - e);
            return;
          }
          this.m.h(f / 2, d / 2);
        }
      },
    },
    bounds: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j.C(a) || this.j.assign(a);
      },
    },
    focus: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m.C(a) || this.m.assign(a);
      },
    },
    centerX: {
      get: function() {
        return this.j.x + this.m.x;
      },
      set: function(a) {
        var b = this.j;
        b.x + this.m.x !== a && (b.ja(), (b.x = a - this.m.x), b.freeze());
      },
    },
    centerY: {
      get: function() {
        return this.j.y + this.m.y;
      },
      set: function(a) {
        var b = this.j;
        b.y + this.m.y !== a && (b.ja(), (b.y = a - this.m.y), b.freeze());
      },
    },
    focusX: {
      get: function() {
        return this.m.x;
      },
      set: function(a) {
        var b = this.m;
        b.x !== a && (b.ja(), (b.x = a), b.freeze());
      },
    },
    focusY: {
      get: function() {
        return this.m.y;
      },
      set: function(a) {
        var b = this.m;
        b.y !== a && (b.ja(), (b.y = a), b.freeze());
      },
    },
    x: {
      get: function() {
        return this.j.x;
      },
      set: function(a) {
        var b = this.j;
        b.x !== a && (b.ja(), (b.x = a), b.freeze());
      },
    },
    y: {
      get: function() {
        return this.j.y;
      },
      set: function(a) {
        var b = this.j;
        b.y !== a && (b.ja(), (b.y = a), b.freeze());
      },
    },
    width: {
      get: function() {
        return this.j.width;
      },
      set: function(a) {
        var b = this.j;
        b.width !== a && (b.ja(), (b.width = a), b.freeze());
      },
    },
    height: {
      get: function() {
        return this.j.height;
      },
      set: function(a) {
        var b = this.j;
        b.height !== a && (b.ja(), (b.height = a), b.freeze());
      },
    },
    network: {
      get: function() {
        return this.nb;
      },
      set: function(a) {
        this.nb = a;
      },
    },
    sourceVertexes: {
      get: function() {
        for (var a = new G(), b = this.sourceEdges; b.next(); )
          a.add(b.value.fromVertex);
        return a.iterator;
      },
    },
    destinationVertexes: {
      get: function() {
        for (var a = new G(), b = this.destinationEdges; b.next(); )
          a.add(b.value.toVertex);
        return a.iterator;
      },
    },
    vertexes: {
      get: function() {
        for (var a = new G(), b = this.sourceEdges; b.next(); )
          a.add(b.value.fromVertex);
        for (b = this.destinationEdges; b.next(); ) a.add(b.value.toVertex);
        return a.iterator;
      },
    },
    sourceEdges: {
      get: function() {
        return this.wd.iterator;
      },
    },
    destinationEdges: {
      get: function() {
        return this.Jd.iterator;
      },
    },
    edges: {
      get: function() {
        for (var a = new E(), b = this.sourceEdges; b.next(); ) a.add(b.value);
        for (b = this.destinationEdges; b.next(); ) a.add(b.value);
        return a.iterator;
      },
    },
    edgesCount: {
      get: function() {
        return this.wd.count + this.Jd.count;
      },
    },
  });
  sq.prototype.deleteDestinationEdge = sq.prototype.qu;
  sq.prototype.addDestinationEdge = sq.prototype.gu;
  sq.prototype.deleteSourceEdge = sq.prototype.ru;
  sq.prototype.addSourceEdge = sq.prototype.iu;
  sq.className = 'LayoutVertex';
  sq.standardComparer = zq;
  sq.smartComparer = function(a, b) {
    if (null !== a) {
      if (null !== b) {
        a = a.Lh;
        var c = b.Lh;
        if (null !== a) {
          if (null !== c) {
            b = a.text
              .toLocaleLowerCase()
              .split(/([+-]?[.]?\d+(?:\.\d*)?(?:e[+-]?\d+)?)/);
            a = c.text
              .toLocaleLowerCase()
              .split(/([+-]?[.]?\d+(?:\.\d*)?(?:e[+-]?\d+)?)/);
            for (c = 0; c < b.length; c++)
              if ('' !== a[c] && void 0 !== a[c]) {
                var d = parseFloat(b[c]),
                  e = parseFloat(a[c]);
                if (isNaN(d))
                  if (isNaN(e)) {
                    if (0 !== b[c].localeCompare(a[c]))
                      return b[c].localeCompare(a[c]);
                  } else return 1;
                else {
                  if (isNaN(e)) return -1;
                  if (0 !== d - e) return d - e;
                }
              } else if ('' !== b[c]) return 1;
            return '' !== a[c] && void 0 !== a[c] ? -1 : 0;
          }
          return 1;
        }
        return null !== c ? -1 : 0;
      }
      return 1;
    }
    return null !== b ? -1 : 0;
  };

  function tq(a) {
    Ra(this);
    this.hb = a;
    this.jd = this.ad = this.Pk = this.qb = null;
  }
  tq.prototype.clear = function() {
    this.jd = this.ad = this.Pk = this.qb = null;
  };
  tq.prototype.serializeEdgeProperties = function(a) {
    a.id = cb(this);
    a.key = this.link ? this.link.key : this.data ? this.data.yh : void 0;
    void 0 === a.key && (a.key = null);
    a.from = this.fromVertex ? cb(this.fromVertex) : null;
    a.dA = this.toVertex ? cb(this.toVertex) : null;
  };
  tq.prototype.deserializeEdgeProperties = function(a, b) {
    if (null !== a) {
      var c = b.get(a.from);
      c && (this.fromVertex = c);
      if ((a = b.get(a.dA))) this.toVertex = a;
    }
  };
  tq.prototype.toString = function(a) {
    void 0 === a && (a = 0);
    var b = 'LayoutEdge#' + cb(this);
    0 < a &&
      ((b += null !== this.Pk ? '(' + this.Pk.toString() + ')' : ''),
      1 < a &&
        (b +=
          ' ' +
          (this.ad ? this.ad.toString() : 'null') +
          ' --> ' +
          (this.jd ? this.jd.toString() : 'null')));
    return b;
  };
  tq.prototype.Ol = function() {
    var a = this.ad;
    this.ad = this.jd;
    this.jd = a;
  };
  tq.prototype.commit = function() {};
  tq.prototype.bx = function(a) {
    return this.jd === a ? this.ad : this.ad === a ? this.jd : null;
  };
  ma.Object.defineProperties(tq.prototype, {
    network: {
      get: function() {
        return this.hb;
      },
      set: function(a) {
        this.hb = a;
      },
    },
    data: {
      get: function() {
        return this.qb;
      },
      set: function(a) {
        this.qb !== a && (this.qb = a);
      },
    },
    link: {
      get: function() {
        return this.Pk;
      },
      set: function(a) {
        this.Pk !== a && (this.Pk = a);
      },
    },
    fromVertex: {
      get: function() {
        return this.ad;
      },
      set: function(a) {
        this.ad !== a && (this.ad = a);
      },
    },
    toVertex: {
      get: function() {
        return this.jd;
      },
      set: function(a) {
        this.jd !== a && (this.jd = a);
      },
    },
  });
  tq.prototype.getOtherVertex = tq.prototype.bx;
  tq.className = 'LayoutEdge';

  function Mk(a) {
    qi.call(this);
    this.isViewportSized = !0;
    this.bo = this.co = NaN;
    this.pg = new K(NaN, NaN).freeze();
    this.gf = new K(10, 10).freeze();
    this.Fb = Aq;
    this.Nb = Bq;
    this.fd = Cq;
    this.Zc = Dq;
    a && Object.assign(this, a);
  }
  la(Mk, qi);
  Mk.prototype.cloneProtected = function(a) {
    qi.prototype.cloneProtected.call(this, a);
    a.co = this.co;
    a.bo = this.bo;
    a.pg.assign(this.pg);
    a.gf.assign(this.gf);
    a.Fb = this.Fb;
    a.Nb = this.Nb;
    a.fd = this.fd;
    a.Zc = this.Zc;
  };
  Mk.prototype.ob = function(a) {
    a.classType === Mk
      ? a === Cq || a === Eq || a === Fq || a === Gq
        ? (this.sorting = a)
        : a === Bq || a === Hq
        ? (this.arrangement = a)
        : a === Aq || a === Iq
        ? (this.alignment = a)
        : C('Unknown enum value: ' + a)
      : qi.prototype.ob.call(this, a);
  };
  Mk.prototype.doLayout = function(a) {
    this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin);
    var b = this.Iw(a);
    a = this.diagram;
    for (var c = b.copy().iterator; c.next(); ) {
      var d = c.value;
      if (!d.eh() || (null === d.fromNode && null === d.toNode)) {
        if ((d.Za(), d instanceof qf))
          for (d = d.memberParts; d.next(); ) b.remove(d.value);
      } else b.remove(d);
    }
    var e = b.Ea();
    if (0 !== e.length) {
      switch (this.sorting) {
        case Gq:
          e.reverse();
          break;
        case Cq:
          e.sort(this.comparer);
          break;
        case Eq:
          e.sort(this.comparer), e.reverse();
      }
      var f = this.wrappingColumn;
      isNaN(f) && (f = 0);
      var g = this.wrappingWidth;
      isNaN(g) && null !== a
        ? ((b = a.padding),
          (g = Math.max(a.viewportBounds.width - b.left - b.right, 0)))
        : (g = Math.max(this.wrappingWidth, 0));
      0 >= f && 0 >= g && (f = 1);
      b = this.spacing.width;
      isFinite(b) || (b = 0);
      c = this.spacing.height;
      isFinite(c) || (c = 0);
      null !== a && a.Da('Layout');
      d = [];
      switch (this.alignment) {
        case Iq:
          var h = b,
            k = c,
            l = M.alloc(),
            m = Math.max(this.cellSize.width, 1);
          if (!isFinite(m))
            for (var n = (m = 0); n < e.length; n++) {
              var p = this.hi(e[n], l);
              m = Math.max(m, p.width);
            }
          m = Math.max(m + h, 1);
          n = Math.max(this.cellSize.height, 1);
          if (!isFinite(n))
            for (p = n = 0; p < e.length; p++) {
              var r = this.hi(e[p], l);
              n = Math.max(n, r.height);
            }
          n = Math.max(n + k, 1);
          p = this.arrangement;
          for (
            var q = (r = this.arrangementOrigin.x),
              u = this.arrangementOrigin.y,
              w = 0,
              v = 0,
              z = 0;
            z < e.length;
            z++
          ) {
            var y = e[z],
              A = this.hi(y, l),
              B = Math.ceil((A.width + h) / m) * m,
              F = Math.ceil((A.height + k) / n) * n;
            switch (p) {
              case Hq:
                var L = Math.abs(q - A.width);
                break;
              default:
                L = q + A.width;
            }
            if ((0 < f && w > f - 1) || (0 < g && 0 < w && L - r > g))
              d.push(new M(0, u, g + h, v)),
                (w = 0),
                (q = r),
                (u += v),
                (v = 0);
            v = Math.max(v, F);
            switch (p) {
              case Hq:
                A = -A.width;
                break;
              default:
                A = 0;
            }
            y.moveTo(q + A, u);
            switch (p) {
              case Hq:
                q -= B;
                break;
              default:
                q += B;
            }
            w++;
          }
          d.push(new M(0, u, g + h, v));
          M.free(l);
          break;
        case Aq:
          k = g;
          m = f;
          n = b;
          p = c;
          g = M.alloc();
          r = Math.max(this.cellSize.width, 1);
          f = u = l = 0;
          h = I.alloc();
          for (q = 0; q < e.length; q++)
            (v = e[q]),
              (w = this.hi(v, g)),
              (v = Go(v, v.locationObject, v.locationSpot, h)),
              (l = Math.max(l, v.x)),
              (u = Math.max(u, w.width - v.x)),
              (f = Math.max(f, v.y));
          q = this.arrangement;
          switch (q) {
            case Hq:
              l += n;
              break;
            default:
              u += n;
          }
          r = isFinite(r) ? Math.max(r + n, 1) : Math.max(l + u, 1);
          var S = (v = this.arrangementOrigin.x);
          z = this.arrangementOrigin.y;
          u = 0;
          k >= l && (k -= l);
          l = y = 0;
          B = Math.max(this.cellSize.height, 1);
          A = f = 0;
          F = !0;
          w = I.alloc();
          for (L = 0; L < e.length; L++) {
            var R = e[L],
              P = this.hi(R, g),
              H = Go(R, R.locationObject, R.locationSpot, h);
            if (0 < u)
              switch (q) {
                case Hq:
                  S = (S - v - (P.width - H.x)) / r;
                  S = J.ca(Math.round(S), S) ? Math.round(S) : Math.floor(S);
                  S = S * r + v;
                  break;
                default:
                  (S = (S - v + H.x) / r),
                    (S = J.ca(Math.round(S), S) ? Math.round(S) : Math.ceil(S)),
                    (S = S * r + v);
              }
            else
              switch (q) {
                case Hq:
                  y = S + H.x + P.width;
                  break;
                default:
                  y = S - H.x;
              }
            switch (q) {
              case Hq:
                var da = -(S + H.x) + y;
                break;
              default:
                da = S + P.width - H.x - y;
            }
            if ((0 < m && u > m - 1) || (0 < k && 0 < u && da > k)) {
              d.push(new M(0, F ? z - f : z, k + n, A + f + p));
              for (S = 0; S < u && L !== u; S++) {
                da = e[L - u + S];
                var X = Go(da, da.locationObject, da.locationSpot, w);
                da.moveTo(da.position.x, da.position.y + f - X.y);
              }
              A += p;
              z = F ? z + A : z + (A + f);
              u = A = f = 0;
              S = v;
              F = !1;
            }
            S === v &&
              (l = q === Hq ? Math.max(l, P.width - H.x) : Math.min(l, -H.x));
            f = Math.max(f, H.y);
            A = Math.max(A, P.height - H.y);
            isFinite(B) && (A = Math.max(A, Math.max(P.height, B) - H.y));
            F ? R.moveTo(S - H.x, z - H.y) : R.moveTo(S - H.x, z);
            switch (q) {
              case Hq:
                S -= H.x + n;
                break;
              default:
                S += P.width - H.x + n;
            }
            u++;
          }
          d.push(new M(0, z, k + n, (F ? A : A + f) + p));
          if (e.length !== u)
            for (k = 0; k < u; k++)
              (m = e[e.length - u + k]),
                (n = Go(m, m.locationObject, m.locationSpot, h)),
                m.moveTo(m.position.x, m.position.y + f - n.y);
          I.free(h);
          I.free(w);
          if (q === Hq)
            for (e = 0; e < d.length; e++)
              (f = d[e]), (f.width += l), (f.x -= l);
          else
            for (e = 0; e < d.length; e++)
              (f = d[e]), f.x > l && ((f.width += f.x - l), (f.x = l));
          M.free(g);
      }
      for (h = f = g = e = 0; h < d.length; h++)
        (k = d[h]),
          (e = Math.min(e, k.x)),
          (g = Math.min(g, k.y)),
          (f = Math.max(f, k.x + k.width));
      this.arrangement === Hq
        ? this.commitLayers(d, new I(e + b / 2 - (f + e), g - c / 2))
        : this.commitLayers(d, new I(e - b / 2, g - c / 2));
      null !== a && a.eb('Layout');
      this.isValidLayout = !0;
    }
  };
  Mk.prototype.commitLayers = function() {};

  function Dq(a, b) {
    a = a.text;
    b = b.text;
    return a < b ? -1 : a > b ? 1 : 0;
  }
  ma.Object.defineProperties(Mk.prototype, {
    wrappingWidth: {
      get: function() {
        return this.co;
      },
      set: function(a) {
        this.co !== a &&
          (0 < a || isNaN(a)) &&
          ((this.co = a), (this.isViewportSized = isNaN(a)), this.D());
      },
    },
    wrappingColumn: {
      get: function() {
        return this.bo;
      },
      set: function(a) {
        this.bo !== a && (0 < a || isNaN(a)) && ((this.bo = a), this.D());
      },
    },
    cellSize: {
      get: function() {
        return this.pg;
      },
      set: function(a) {
        this.pg.C(a) || (this.pg.assign(a), this.D());
      },
    },
    spacing: {
      get: function() {
        return this.gf;
      },
      set: function(a) {
        this.gf.C(a) || (this.gf.assign(a), this.D());
      },
    },
    alignment: {
      get: function() {
        return this.Fb;
      },
      set: function(a) {
        this.Fb === a || (a !== Aq && a !== Iq) || ((this.Fb = a), this.D());
      },
    },
    arrangement: {
      get: function() {
        return this.Nb;
      },
      set: function(a) {
        this.Nb === a || (a !== Bq && a !== Hq) || ((this.Nb = a), this.D());
      },
    },
    sorting: {
      get: function() {
        return this.fd;
      },
      set: function(a) {
        this.fd === a ||
          (a !== Fq && a !== Gq && a !== Cq && a !== Eq) ||
          ((this.fd = a), this.D());
      },
    },
    comparer: {
      get: function() {
        return this.Zc;
      },
      set: function(a) {
        this.Zc !== a && ((this.Zc = a), this.D());
      },
    },
  });
  var Iq = new D(Mk, 'Position', 0),
    Aq = new D(Mk, 'Location', 1),
    Bq = new D(Mk, 'LeftToRight', 2),
    Hq = new D(Mk, 'RightToLeft', 3),
    Fq = new D(Mk, 'Forward', 4),
    Gq = new D(Mk, 'Reverse', 5),
    Cq = new D(Mk, 'Ascending', 6),
    Eq = new D(Mk, 'Descending', 7);
  Mk.className = 'GridLayout';
  Mk.standardComparer = Dq;
  Mk.smartComparer = function(a, b) {
    if (null !== a) {
      if (null !== b) {
        a = a.text
          .toLocaleLowerCase()
          .split(/([+-]?[.]?\d+(?:\.\d*)?(?:e[+-]?\d+)?)/);
        b = b.text
          .toLocaleLowerCase()
          .split(/([+-]?[.]?\d+(?:\.\d*)?(?:e[+-]?\d+)?)/);
        for (var c = 0; c < a.length; c++)
          if ('' !== b[c] && void 0 !== b[c]) {
            var d = parseFloat(a[c]),
              e = parseFloat(b[c]);
            if (isNaN(d))
              if (isNaN(e)) {
                if (0 !== a[c].localeCompare(b[c]))
                  return a[c].localeCompare(b[c]);
              } else return 1;
            else {
              if (isNaN(e)) return -1;
              if (0 !== d - e) return d - e;
            }
          } else if ('' !== a[c]) return 1;
        return '' !== b[c] && void 0 !== b[c] ? -1 : 0;
      }
      return 1;
    }
    return null !== b ? -1 : 0;
  };
  Mk.Position = Iq;
  Mk.Location = Aq;
  Mk.LeftToRight = Bq;
  Mk.RightToLeft = Hq;
  Mk.Forward = Fq;
  Mk.Reverse = Gq;
  Mk.Ascending = Cq;
  Mk.Descending = Eq;

  function mi() {
    this.vn = new G();
    this.kn = new G();
    this.Ma = new G();
    this.Se = new pb();
    this.Re = new pb();
    this.Wi = new pb();
    this.H = null;
    this.Xo = !1;
  }
  t = mi.prototype;
  t.clear = function() {
    this.vn.clear();
    this.kn.clear();
    this.Ma.clear();
    this.Se.clear();
    this.Re.clear();
    this.Wi.clear();
  };
  t.Le = function(a) {
    this.H = a;
  };
  t.ii = function(a) {
    if (a instanceof V) {
      if ((this.vn.add(a), a instanceof qf)) {
        var b = a.containingGroup;
        null === b ? this.H.Uh.add(a) : b.Vk.add(a);
        b = a.layout;
        null !== b && (b.diagram = this.H);
      }
    } else a instanceof T ? this.kn.add(a) : a instanceof ue || this.Ma.add(a);
    b = a.data;
    null === b ||
      a instanceof ue ||
      (a instanceof T ? this.Re.add(b, a) : this.Se.add(b, a));
  };
  t.lc = function(a) {
    a.zj();
    if (a instanceof V) {
      if ((this.vn.remove(a), a instanceof qf)) {
        var b = a.containingGroup;
        null === b ? this.H.Uh.remove(a) : b.Vk.remove(a);
        b = a.layout;
        null !== b && (b.diagram = null);
      }
    } else
      a instanceof T ? this.kn.remove(a) : a instanceof ue || this.Ma.remove(a);
    b = a.data;
    null === b ||
      a instanceof ue ||
      (a instanceof T ? this.Re.remove(b) : this.Se.remove(b));
  };
  t.Od = function() {
    var a = this.H;
    if (null !== a) {
      for (var b = a.nodeTemplateMap.iterator; b.next(); ) {
        var c = b.value,
          d = b.key;
        (!c.Tc() || c instanceof qf) &&
          C(
            'Invalid node template in Diagram.nodeTemplateMap: template for "' +
              d +
              '" must be a Node or a simple Part, not a Group or Link: ' +
              c,
          );
      }
      for (b = a.groupTemplateMap.iterator; b.next(); )
        (c = b.value),
          (d = b.key),
          c instanceof qf ||
            C(
              'Invalid group template in Diagram.groupTemplateMap: template for "' +
                d +
                '" must be a Group, not a normal Node or Link: ' +
                c,
            );
      for (b = a.linkTemplateMap.iterator; b.next(); )
        (c = b.value),
          (d = b.key),
          c instanceof T ||
            C(
              'Invalid link template in Diagram.linkTemplateMap: template for "' +
                d +
                '" must be a Link, not a normal Node or simple Part: ' +
                c,
            );
      b = Ea();
      for (c = a.selection.iterator; c.next(); )
        (d = c.value.data) && b.push(d);
      c = Ea();
      for (a = a.highlighteds.iterator; a.next(); )
        (d = a.value.data) && c.push(d);
      a = Ea();
      for (d = this.nodes.iterator; d.next(); ) {
        var e = d.value;
        null !== e.data && (a.push(e.data), a.push(e.location));
      }
      for (d = this.links.iterator; d.next(); )
        (e = d.value), null !== e.data && (a.push(e.data), a.push(e.location));
      for (d = this.parts.iterator; d.next(); )
        (e = d.value), null !== e.data && (a.push(e.data), a.push(e.location));
      this.removeAllModeledParts();
      this.addAllModeledParts();
      for (d = 0; d < b.length; d++)
        (e = this.Ec(b[d])), null !== e && (e.isSelected = !0);
      for (d = 0; d < c.length; d++)
        (e = this.Ec(c[d])), null !== e && (e.isHighlighted = !0);
      for (d = 0; d < a.length; d += 2)
        (e = this.Ec(a[d])), null !== e && (e.location = a[d + 1]);
      Ga(b);
      Ga(c);
      Ga(a);
    }
  };
  mi.prototype.addAllModeledParts = function() {
    this.addModeledParts(this.diagram.model.nodeDataArray);
  };
  mi.prototype.addModeledParts = function(a, b) {
    var c = this,
      d = this.diagram.model;
    a.forEach(function(a) {
      d.lb(a) && Jq(c, a, !1);
    });
    a.forEach(function(a) {
      d.lb(a) && c.resolveReferencesForData(a);
    });
    !1 !== b && Zj(this.diagram, !1);
  };

  function Jq(a, b, c) {
    if (
      void 0 !== b &&
      null !== b &&
      !a.diagram.undoManager.isUndoingRedoing &&
      !a.Se.contains(b)
    ) {
      void 0 === c && (c = !0);
      a: {
        if (
          void 0 !== b &&
          null !== b &&
          !a.H.undoManager.isUndoingRedoing &&
          !a.Se.contains(b)
        ) {
          var d = a.uo(b);
          var e = So(a, b, d);
          if (null !== e && (kg(e), (e = e.copy()), null !== e)) {
            var f = a.diagram.skipsModelSourceBindings;
            a.diagram.skipsModelSourceBindings = !0;
            e.Jf = d;
            e.qb = b;
            a.Xo && (e.zg = 'Tool');
            a.diagram.add(e);
            e.qb = null;
            e.data = b;
            a.diagram.skipsModelSourceBindings = f;
            d = e;
            break a;
          }
        }
        d = null;
      }
      null !== d && c && a.resolveReferencesForData(b);
    }
  }
  mi.prototype.insertLink = function() {
    return null;
  };
  mi.prototype.resolveReferencesForData = function() {};
  mi.prototype.uo = function(a) {
    return this.H.model.uo(a);
  };

  function So(a, b, c) {
    a = a.H;
    var d = a.model;
    d.Oj() && d.Ku(b)
      ? ((b = a.groupTemplateMap.I(c)),
        null === b &&
          ((b = a.groupTemplateMap.I('')),
          null === b &&
            (Kq ||
              ((Kq = !0),
              xa('No Group template found for category "' + c + '"'),
              xa('  Using default group template')),
            (b = a.Rx))))
      : ((b = a.nodeTemplateMap.I(c)),
        null === b &&
          ((b = a.nodeTemplateMap.I('')),
          null === b &&
            (Lq ||
              ((Lq = !0),
              xa('No Node template found for category "' + c + '"'),
              xa('  Using default node template')),
            (b = a.Tx))));
    return b;
  }
  mi.prototype.getLinkCategoryForData = function() {
    return '';
  };
  mi.prototype.setLinkCategoryForData = function() {};
  mi.prototype.setFromNodeForLink = function() {};
  mi.prototype.setToNodeForLink = function() {};
  mi.prototype.findLinkTemplateForCategory = function(a) {
    var b = this.H,
      c = b.linkTemplateMap.I(a);
    null === c &&
      ((c = b.linkTemplateMap.I('')),
      null === c &&
        (Mq ||
          ((Mq = !0),
          xa('No Link template found for category "' + a + '"'),
          xa('  Using default link template')),
        (c = b.Sx)));
    return c;
  };
  mi.prototype.removeAllModeledParts = function() {
    this.gs(this.diagram.model.nodeDataArray);
  };
  mi.prototype.gs = function(a) {
    var b = this;
    a.forEach(function(a) {
      b.Lo(a);
    });
  };
  mi.prototype.Lo = function(a) {
    a = this.Ec(a);
    null !== a && (Gj(this.diagram, a, !1), this.unresolveReferencesForPart(a));
  };
  mi.prototype.unresolveReferencesForPart = function() {};
  mi.prototype.removeDataForLink = function() {};
  mi.prototype.findPartForKey = function(a) {
    if (null === a || void 0 === a) return null;
    a = this.H.model.dc(a);
    return null !== a ? this.Se.I(a) : null;
  };
  mi.prototype.Lb = function(a) {
    if (null === a || void 0 === a) return null;
    a = this.H.model.dc(a);
    if (null === a) return null;
    a = this.Se.I(a);
    return a instanceof V ? a : null;
  };
  mi.prototype.findLinkForKey = function() {
    return null;
  };
  t = mi.prototype;
  t.Ec = function(a) {
    if (null === a) return null;
    var b = this.Se.I(a);
    return null !== b ? b : (b = this.Re.I(a));
  };
  t.ci = function(a) {
    if (null === a) return null;
    a = this.Se.I(a);
    return a instanceof V ? a : null;
  };
  t.Dc = function(a) {
    return null === a ? null : this.Re.I(a);
  };
  t.Jr = function(a) {
    for (var b = 0; b < arguments.length; ++b);
    b = new G();
    for (var c = this.vn.iterator; c.next(); ) {
      var d = c.value,
        e = d.data;
      if (null !== e)
        for (var f = 0; f < arguments.length; f++) {
          var g = arguments[f];
          if (ya(g) && Nq(this, e, g)) {
            b.add(d);
            break;
          }
        }
    }
    return b.iterator;
  };
  t.Ir = function(a) {
    for (var b = 0; b < arguments.length; ++b);
    b = new G();
    for (var c = this.kn.iterator; c.next(); ) {
      var d = c.value,
        e = d.data;
      if (null !== e)
        for (var f = 0; f < arguments.length; f++) {
          var g = arguments[f];
          if (ya(g) && Nq(this, e, g)) {
            b.add(d);
            break;
          }
        }
    }
    return b.iterator;
  };

  function Nq(a, b, c) {
    for (var d in c) {
      var e = b[d],
        f = c[d];
      if (za(f)) {
        if (!za(e) || e.length < f.length) return !1;
        for (var g = 0; g < e.length; g++) {
          var h = f[g];
          if (void 0 !== h && !Oq(a, e[g], h)) return !1;
        }
      } else if (!Oq(a, e, f)) return !1;
    }
    return !0;
  }

  function Oq(a, b, c) {
    if ('function' === typeof c) {
      if (!c(b)) return !1;
    } else if (c instanceof RegExp) {
      if (!b || !c.test(b.toString())) return !1;
    } else if (ya(b) && ya(c)) {
      if (!Nq(a, b, c)) return !1;
    } else if (b !== c) return !1;
    return !0;
  }
  mi.prototype.doModelChanged = function(a) {
    if (this.H) {
      var b = this.H;
      if (a.model === b.model) {
        var c = a.change;
        b.doModelChanged(a);
        if (b.$) {
          b.$ = !1;
          try {
            var d = a.modelChange;
            if ('' !== d)
              if (c === de) {
                if ('nodeCategory' === d) {
                  var e = this.Ec(a.object),
                    f = a.newValue;
                  null !== e && 'string' === typeof f && (e.category = f);
                } else
                  'nodeDataArray' === d &&
                    (this.gs(a.oldValue), this.addModeledParts(a.newValue));
                b.isModified = !0;
              } else if (c === fe) {
                var g = a.newValue;
                'nodeDataArray' === d && ya(g) && Jq(this, g);
                b.isModified = !0;
              } else if (c === ge) {
                var h = a.oldValue;
                'nodeDataArray' === d && ya(h) && this.Lo(h);
                b.isModified = !0;
              } else
                c === ee &&
                  ('SourceChanged' === d
                    ? null !== a.object
                      ? this.updateDataBindings(a.object, a.propertyName)
                      : (this.Uo(), this.updateAllTargetBindings())
                    : 'ModelDisplaced' === d && this.Od());
            else if (c === de) {
              var k = a.propertyName,
                l = a.object;
              if (l === b.model) {
                if ('nodeKeyProperty' === k || 'nodeCategoryProperty' === k)
                  b.undoManager.isUndoingRedoing || this.Od();
              } else this.updateDataBindings(l, k);
              b.isModified = !0;
            } else if (c === fe || c === ge) {
              var m = a.change === fe,
                n = m ? a.newParam : a.oldParam,
                p = m ? a.newValue : a.oldValue,
                r = this.Wi.I(a.object);
              if (Array.isArray(r))
                for (a = 0; a < r.length; a++) {
                  var q = r[a];
                  if (m) kn(q, p, n, !0);
                  else if (!(0 > n)) {
                    var u = n + bn(q);
                    q.lc(u, !0);
                    nn(q, u, n);
                  }
                }
              b.isModified = !0;
            }
          } finally {
            b.$ = !0;
          }
        }
      }
    }
  };
  mi.prototype.updateAllTargetBindings = function(a) {
    void 0 === a && (a = '');
    for (var b = this.parts.iterator; b.next(); ) b.value.Ka(a);
    for (b = this.nodes.iterator; b.next(); ) b.value.Ka(a);
    for (b = this.links.iterator; b.next(); ) b.value.Ka(a);
  };
  mi.prototype.Uo = function() {
    for (
      var a = this.H.model, b = new G(), c = a.nodeDataArray, d = 0;
      d < c.length;
      d++
    )
      b.add(c[d]);
    var e = [];
    this.nodes.each(function(a) {
      null === a.data || b.contains(a.data) || e.push(a.data);
    });
    this.parts.each(function(a) {
      null === a.data || b.contains(a.data) || e.push(a.data);
    });
    e.forEach(function(b) {
      Pq(a, b, !1);
    });
    for (d = 0; d < c.length; d++) {
      var f = c[d];
      null === this.Ec(f) && Qq(a, f, !1);
    }
    this.refreshDataBoundLinks();
    for (c = this.parts.iterator; c.next(); )
      c.value.updateRelationshipsFromData();
    for (c = this.nodes.iterator; c.next(); )
      c.value.updateRelationshipsFromData();
    for (c = this.links.iterator; c.next(); )
      c.value.updateRelationshipsFromData();
  };
  mi.prototype.refreshDataBoundLinks = function() {};
  mi.prototype.updateRelationshipsFromData = function() {};
  mi.prototype.updateDataBindings = function(a, b) {
    if ('string' === typeof b) {
      var c = this.Ec(a);
      if (null !== c) c.Ka(b);
      else {
        c = null;
        for (var d = this.Wi.iterator; d.next(); ) {
          for (var e = d.value, f = 0; f < e.length; f++) {
            var g = e[f].Uw(a);
            null !== g && (null === c && (c = Ea()), c.push(g));
          }
          if (null !== c) break;
        }
        if (null !== c) {
          for (d = 0; d < c.length; d++) c[d].Ka(b);
          Ga(c);
        }
      }
      a === this.diagram.model.modelData && this.updateAllTargetBindings(b);
    }
  };

  function Cj(a, b) {
    var c = b.xh;
    if (za(c)) {
      var d = a.Wi.I(c);
      if (null === d) (d = []), d.push(b), a.Wi.add(c, d);
      else {
        for (a = 0; a < d.length; a++) if (d[a] === b) return;
        d.push(b);
      }
    }
  }

  function Fj(a, b, c) {
    Aj(b, function(a) {
      a = a.R.s;
      for (var b = a.length, d = 0; d < b; d++) Xj(c, a[d]);
    });
    var d = b.xh;
    if (za(d)) {
      var e = a.Wi.I(d);
      if (null !== e)
        for (var f = 0; f < e.length; f++)
          if (e[f] === b) {
            e.splice(f, 1);
            0 === e.length && a.Wi.remove(d);
            break;
          }
    }
  }
  mi.prototype.Ej = function(a, b, c) {
    void 0 === c && (c = !1);
    var d = new pb();
    if (za(a)) for (var e = 0; e < a.length; e++) Rq(this, a[e], b, d, c);
    else for (a = a.iterator; a.next(); ) Rq(this, a.value, b, d, c);
    if (null !== b) {
      c = b.model;
      a = b.toolManager.findTool('Dragging');
      a = null !== a ? a.dragOptions.dragsLink : b.Em.dragsLink;
      e = new G();
      for (var f = new pb(), g = d.iterator; g.next(); ) {
        var h = g.value;
        if (h instanceof T)
          a || (null !== h.fromNode && null !== h.toNode) || e.add(h);
        else if (h instanceof V && null !== h.data && c.Bl()) {
          var k = h;
          h = g.key;
          var l = h.ig();
          null !== l &&
            ((l = d.I(l)),
            null !== l
              ? (c.ie(k.data, c.ua(l.data)),
                (k = b.Dc(k.data)),
                (h = h.$g()),
                null !== h && null !== k && f.add(h, k))
              : c.ie(k.data, void 0));
        }
      }
      0 < e.count && b.hs(e, !1);
      if (0 < f.count) for (c = f.iterator; c.next(); ) d.add(c.key, c.value);
    }
    if (
      null !== b &&
      null !== this.H &&
      ((b = b.model), (c = b.afterCopyFunction), null !== c)
    ) {
      var m = new pb();
      d.each(function(a) {
        null !== a.key.data && m.add(a.key.data, a.value.data);
      });
      c(m, b, this.H.model);
    }
    for (b = d.iterator; b.next(); ) b.value.Ka();
    return d;
  };

  function Rq(a, b, c, d, e) {
    if (null === b || (e && !b.canCopy())) return null;
    if (d.contains(b)) return d.I(b);
    var f = a.copyPartData(b, c);
    if (!(f instanceof U)) return null;
    f.isSelected = !1;
    f.isHighlighted = !1;
    d.add(b, f);
    if (b instanceof V) {
      for (var g = b.linksConnected; g.next(); ) {
        var h = g.value;
        if (h.fromNode === b) {
          var k = d.I(h);
          null !== k && (k.fromNode = f);
        }
        h.toNode === b && ((h = d.I(h)), null !== h && (h.toNode = f));
      }
      if (b instanceof qf && f instanceof qf)
        for (b = b.memberParts; b.next(); )
          (g = Rq(a, b.value, c, d, e)),
            g instanceof T || null === g || (g.containingGroup = f);
    } else if (b instanceof T && f instanceof T)
      for (
        g = b.fromNode,
          null !== g && ((g = d.I(g)), null !== g && (f.fromNode = g)),
          g = b.toNode,
          null !== g && ((g = d.I(g)), null !== g && (f.toNode = g)),
          b = b.labelNodes;
        b.next();

      )
        (g = Rq(a, b.value, c, d, e)),
          null !== g && g instanceof V && (g.labeledLink = f);
    return f;
  }
  mi.prototype.copyPartData = function(a, b) {
    var c = null,
      d = a.data;
    if (null !== d && null !== b) {
      var e = b.model;
      a instanceof T ||
        ((d = e.copyNodeData(d)), ya(d) && (e.lf(d), (c = b.Ec(d))));
    } else
      kg(a),
        (c = a.copy()),
        null !== c &&
          ((e = this.H),
          null !== b
            ? b.add(c)
            : null !== d &&
              null !== e &&
              null !== e.commandHandler &&
              e.commandHandler.copiesClipboardData &&
              ((b = e.model),
              (e = null),
              c instanceof T || (e = b.copyNodeData(d)),
              ya(e) && (c.data = e)));
    return c;
  };
  ma.Object.defineProperties(mi.prototype, {
    nodes: {
      get: function() {
        return this.vn;
      },
    },
    links: {
      get: function() {
        return this.kn;
      },
    },
    parts: {
      get: function() {
        return this.Ma;
      },
    },
    diagram: {
      get: function() {
        return this.H;
      },
    },
    addsToTemporaryLayer: {
      get: function() {
        return this.Xo;
      },
      set: function(a) {
        this.Xo = a;
      },
    },
  });
  mi.prototype.updateAllRelationshipsFromData = mi.prototype.Uo;
  mi.prototype.findLinksByExample = mi.prototype.Ir;
  mi.prototype.findNodesByExample = mi.prototype.Jr;
  mi.prototype.findLinkForData = mi.prototype.Dc;
  mi.prototype.findNodeForData = mi.prototype.ci;
  mi.prototype.findPartForData = mi.prototype.Ec;
  mi.prototype.findNodeForKey = mi.prototype.Lb;
  mi.prototype.removeModeledPart = mi.prototype.Lo;
  mi.prototype.removeModeledParts = mi.prototype.gs;
  mi.prototype.rebuildParts = mi.prototype.Od;
  var Lq = !1,
    Kq = !1,
    Mq = !1;
  mi.className = 'PartManager';

  function Sq(a) {
    mi.apply(this, arguments);
  }
  la(Sq, mi);
  Sq.prototype.addAllModeledParts = function() {
    var a = this.diagram.model;
    this.addModeledParts(a.nodeDataArray);
    Tq(this, a.linkDataArray);
  };
  Sq.prototype.addModeledParts = function(a) {
    mi.prototype.addModeledParts.call(this, a, !1);
    for (a = this.links.iterator; a.next(); ) To(a.value);
    Zj(this.diagram, !1);
  };

  function Tq(a, b) {
    b.forEach(function(b) {
      Uq(a, b);
    });
    Zj(a.diagram, !1);
  }

  function Uq(a, b) {
    if (
      void 0 !== b &&
      null !== b &&
      !a.diagram.undoManager.isUndoingRedoing &&
      !a.Re.contains(b)
    ) {
      var c = a.getLinkCategoryForData(b),
        d = a.findLinkTemplateForCategory(c);
      if (null !== d) {
        kg(d);
        var e = d.copy();
        if (null !== e) {
          d = a.diagram.skipsModelSourceBindings;
          a.diagram.skipsModelSourceBindings = !0;
          e.Jf = c;
          e.qb = b;
          c = a.diagram.model;
          var f = Vq(c, b, !0);
          '' !== f && (e.fromPortId = f);
          f = Wq(c, b, !0);
          void 0 !== f && ((f = a.Lb(f)), f instanceof V && (e.fromNode = f));
          f = Vq(c, b, !1);
          '' !== f && (e.toPortId = f);
          f = Wq(c, b, !1);
          void 0 !== f && ((f = a.Lb(f)), f instanceof V && (e.toNode = f));
          c = c.vf(b);
          Array.isArray(c) &&
            c.forEach(function(b) {
              b = a.Lb(b);
              null !== b && (b.labeledLink = e);
            });
          a.Xo && (e.zg = 'Tool');
          a.diagram.add(e);
          e.qb = null;
          e.data = b;
          a.diagram.skipsModelSourceBindings = d;
        }
      }
    }
  }
  Sq.prototype.removeAllModeledParts = function() {
    var a = this.diagram.model;
    Xq(this, a.linkDataArray);
    this.gs(a.nodeDataArray);
  };

  function Xq(a, b) {
    b.forEach(function(b) {
      a.Lo(b);
    });
  }
  Sq.prototype.getLinkCategoryForData = function(a) {
    return this.diagram.model.Mr(a);
  };
  Sq.prototype.setLinkCategoryForData = function(a, b) {
    return this.diagram.model.Oo(a, b);
  };
  Sq.prototype.setFromNodeForLink = function(a, b) {
    var c = this.diagram.model;
    c.cv(a.data, c.ua(null !== b ? b.data : null));
  };
  Sq.prototype.setToNodeForLink = function(a, b) {
    var c = this.diagram.model;
    c.gv(a.data, c.ua(null !== b ? b.data : null));
  };
  Sq.prototype.removeDataForLink = function(a) {
    this.diagram.model.Jl(a.data);
  };
  Sq.prototype.findPartForKey = function(a) {
    var b = mi.prototype.findPartForKey.call(this, a);
    return null === b && ((a = this.diagram.model.Zg(a)), null !== a)
      ? this.Re.I(a)
      : b;
  };
  Sq.prototype.findLinkForKey = function(a) {
    if (null === a || void 0 === a) return null;
    a = this.diagram.model.Zg(a);
    return null !== a ? this.Re.I(a) : null;
  };
  Sq.prototype.doModelChanged = function(a) {
    var b = this;
    mi.prototype.doModelChanged.call(this, a);
    if (this.diagram) {
      var c = this.diagram;
      if (a.model === c.model) {
        var d = a.change;
        if (c.$) {
          c.$ = !1;
          try {
            var e = a.modelChange;
            if ('' !== e)
              if (d === de) {
                if ('linkFromKey' === e) {
                  var f = this.Dc(a.object);
                  if (null !== f) {
                    var g = this.Lb(a.newValue);
                    f.fromNode = g;
                  }
                } else if ('linkToKey' === e) {
                  var h = this.Dc(a.object);
                  if (null !== h) {
                    var k = this.Lb(a.newValue);
                    h.toNode = k;
                  }
                } else if ('linkFromPortId' === e) {
                  var l = this.Dc(a.object);
                  if (null !== l) {
                    var m = a.newValue;
                    'string' === typeof m && (l.fromPortId = m);
                  }
                } else if ('linkToPortId' === e) {
                  var n = this.Dc(a.object);
                  if (null !== n) {
                    var p = a.newValue;
                    'string' === typeof p && (n.toPortId = p);
                  }
                } else if ('nodeGroupKey' === e) {
                  var r = this.Ec(a.object);
                  if (null !== r) {
                    var q = a.newValue;
                    if (void 0 !== q) {
                      var u = this.Lb(q);
                      u instanceof qf
                        ? (r.containingGroup = u)
                        : (r.containingGroup = null);
                    } else r.containingGroup = null;
                  }
                } else if ('linkLabelKeys' === e) {
                  var w = this.Dc(a.object);
                  if (null !== w) {
                    var v = a.oldValue,
                      z = a.newValue;
                    Array.isArray(v) &&
                      v.forEach(function(a) {
                        0 <= z.indexOf(a) ||
                          ((a = b.Lb(a)), null !== a && (a.labeledLink = null));
                      });
                    Array.isArray(z) &&
                      z.forEach(function(a) {
                        a = b.Lb(a);
                        null !== a && (a.labeledLink = w);
                      });
                  }
                } else if ('linkCategory' === e) {
                  var y = this.Dc(a.object),
                    A = a.newValue;
                  null !== y && 'string' === typeof A && (y.category = A);
                } else
                  'linkDataArray' === e &&
                    (Xq(this, a.oldValue), Tq(this, a.newValue));
                c.isModified = !0;
              } else if (d === fe) {
                var B = a.newValue;
                if (
                  'linkDataArray' === e &&
                  'object' === typeof B &&
                  null !== B
                )
                  Uq(this, B);
                else if ('linkLabelKeys' === e && Yq(B)) {
                  var F = this.Dc(a.object),
                    L = this.Lb(B);
                  null !== F && null !== L && (L.labeledLink = F);
                }
                c.isModified = !0;
              } else {
                if (d === ge) {
                  var S = a.oldValue;
                  if (
                    'linkDataArray' === e &&
                    'object' === typeof S &&
                    null !== S
                  )
                    this.Lo(S);
                  else if ('linkLabelKeys' === e && Yq(S)) {
                    var R = this.Lb(S);
                    null !== R && (R.labeledLink = null);
                  }
                  c.isModified = !0;
                }
              }
            else if (d === de) {
              var P = a.propertyName;
              a.object !== c.model ||
                ('linkFromKeyProperty' !== P &&
                  'linkToKeyProperty' !== P &&
                  'linkFromPortIdProperty' !== P &&
                  'linkToPortIdProperty' !== P &&
                  'linkLabelKeysProperty' !== P &&
                  'nodeIsGroupProperty' !== P &&
                  'nodeGroupKeyProperty' !== P &&
                  'linkCategoryProperty' !== P) ||
                c.undoManager.isUndoingRedoing ||
                this.Od();
              c.isModified = !0;
            }
          } finally {
            c.$ = !0;
          }
        }
      }
    }
  };
  Sq.prototype.refreshDataBoundLinks = function() {
    var a = this,
      b = this.diagram.model,
      c = new G(),
      d = b.linkDataArray;
    d.forEach(function(a) {
      c.add(a);
    });
    var e = [];
    this.links.each(function(a) {
      null === a.data || c.contains(a.data) || e.push(a.data);
    });
    e.forEach(function(a) {
      Zq(b, a, !1);
    });
    d.forEach(function(c) {
      null === a.Dc(c) && $q(b, c, !1);
    });
  };
  Sq.prototype.updateRelationshipsFromData = function(a) {
    var b = a.data;
    if (null !== b) {
      var c = a.diagram;
      if (null !== c) {
        var d = c.model;
        if (a instanceof T) {
          var e = Wq(d, b, !0);
          e = c.Lb(e);
          a.fromNode = e;
          e = Wq(d, b, !1);
          e = c.Lb(e);
          a.toNode = e;
          b = d.vf(b);
          if (0 < b.length || 0 < a.labelNodes.count) {
            if (1 === b.length && 1 === a.labelNodes.count) {
              e = b[0];
              var f = a.labelNodes.first();
              if (d.ua(f.data) === e) return;
            }
            e = new G().addAll(b);
            var g = new G();
            a.labelNodes.each(function(a) {
              null !== a.data && ((a = d.ua(a.data)), void 0 !== a && g.add(a));
            });
            b = g.copy();
            b.Ko(e);
            e = e.copy();
            e.Ko(g);
            if (0 < b.count || 0 < e.count)
              b.each(function(b) {
                b = c.Lb(b);
                null !== b && b.labeledLink === a && (b.labeledLink = null);
              }),
                e.each(function(b) {
                  b = c.Lb(b);
                  null !== b && b.labeledLink !== a && (b.labeledLink = a);
                });
          }
        } else
          !(a instanceof ue) &&
            ((b = d.ah(b)),
            (b = c.findPartForKey(b)),
            null === b || b instanceof qf) &&
            (a.containingGroup = b);
      }
    }
  };
  Sq.prototype.resolveReferencesForData = function(a) {
    var b = this.diagram.model,
      c = b.ua(a);
    if (void 0 !== c) {
      var d = ar(b, c),
        e = this.Ec(a);
      if (null !== d && null !== e) {
        d = d.iterator;
        for (var f = {}; d.next(); ) {
          var g = d.value;
          b.lb(g)
            ? e instanceof qf &&
              b.ah(g) === c &&
              ((g = this.Ec(g)), null !== g && (g.containingGroup = e))
            : ((f.link = this.Dc(g)),
              null !== f.link &&
                e instanceof V &&
                (Wq(b, g, !0) === c && (f.link.fromNode = e),
                Wq(b, g, !1) === c && (f.link.toNode = e),
                (g = b.vf(g)),
                Array.isArray(g) &&
                  g.some(
                    (function(a) {
                      return function(b) {
                        return b === c ? ((e.labeledLink = a.link), !0) : !1;
                      };
                    })(f),
                  )));
          f = {
            link: f.link,
          };
        }
        br(b, c);
      }
      a = b.ah(a);
      void 0 !== a &&
        ((a = this.Lb(a)), a instanceof qf && (e.containingGroup = a));
    }
  };
  Sq.prototype.unresolveReferencesForPart = function(a) {
    var b = this.diagram.model;
    if (a instanceof V) {
      var c = b.ua(a.data);
      if (void 0 !== c) {
        for (var d = a.linksConnected; d.next(); ) cr(b, c, d.value.data);
        a.isLinkLabel && ((d = a.labeledLink), null !== d && cr(b, c, d.data));
        if (a instanceof qf)
          for (a = a.memberParts; a.next(); )
            (d = a.value.data), b.lb(d) && cr(b, c, d);
      }
    }
  };
  Sq.prototype.copyPartData = function(a, b) {
    var c = mi.prototype.copyPartData.call(this, a, b);
    if (a instanceof T)
      if (((a = a.data), null !== a && null !== b)) {
        var d = b.model;
        a = d.no(a);
        'object' === typeof a && null !== a && (d.Yh(a), (c = b.Dc(a)));
      } else
        null !== c &&
          ((b = this.diagram),
          null !== a &&
            null !== b &&
            null !== b.commandHandler &&
            b.commandHandler.copiesClipboardData &&
            ((b = b.model.no(a)),
            'object' === typeof b && null !== b && (c.data = b)));
    return c;
  };
  Sq.prototype.insertLink = function(a, b, c, d) {
    var e = this.diagram,
      f = e.model,
      g = e.toolManager.findTool('Linking'),
      h = '';
    null !== a &&
      (null === b && (b = a), (h = b.portId), null === h && (h = ''));
    b = '';
    null !== c &&
      (null === d && (d = c), (b = d.portId), null === b && (b = ''));
    d = g.archetypeLinkData;
    if (d instanceof T) {
      if ((kg(d), (f = d.copy()), null !== f))
        return (
          (f.fromNode = a),
          (f.fromPortId = h),
          (f.toNode = c),
          (f.toPortId = b),
          e.add(f),
          (a = g.archetypeLabelNodeData),
          a instanceof V &&
            (kg(a),
            (a = a.copy()),
            null !== a && ((a.labeledLink = f), e.add(a))),
          f
        );
    } else if (
      null !== d &&
      ((d = f.no(d)), 'object' === typeof d && null !== d)
    )
      return (
        null !== a && dr(f, d, f.ua(a.data), !0),
        er(f, d, h, !0),
        null !== c && dr(f, d, f.ua(c.data), !1),
        er(f, d, b, !1),
        f.Yh(d),
        (a = g.archetypeLabelNodeData),
        null === a ||
          a instanceof V ||
          ((a = f.copyNodeData(a)),
          'object' === typeof a &&
            null !== a &&
            (f.lf(a), (a = f.ua(a)), void 0 !== a && f.hu(d, a))),
        e.Dc(d)
      );
    return null;
  };
  Sq.prototype.findLinkForKey = Sq.prototype.findLinkForKey;
  Sq.prototype.findPartForKey = Sq.prototype.findPartForKey;
  Sq.prototype.removeAllModeledParts = Sq.prototype.removeAllModeledParts;
  Sq.prototype.addModeledParts = Sq.prototype.addModeledParts;
  Sq.prototype.addAllModeledParts = Sq.prototype.addAllModeledParts;
  Sq.className = 'GraphLinksPartManager';

  function fr() {
    mi.apply(this, arguments);
    this.Jg = null;
  }
  la(fr, mi);

  function gr(a, b, c) {
    if (null !== b && null !== c && null === c.$g()) {
      var d = a.diagram.toolManager.findTool('Linking'),
        e = b,
        f = c;
      a.diagram.isTreePathToChildren || ((e = c), (f = b));
      if (null === d || !Gf(d, e, f, null, !0))
        if (
          ((b = a.getLinkCategoryForData(c.data)),
          (d = a.findLinkTemplateForCategory(b)),
          null !== d && (kg(d), (d = d.copy()), null !== d))
        ) {
          var g = a.diagram.skipsModelSourceBindings;
          a.diagram.skipsModelSourceBindings = !0;
          d.Jf = b;
          d.qb = c.data;
          d.fromNode = e;
          d.toNode = f;
          a.diagram.add(d);
          d.qb = null;
          d.data = c.data;
          a.diagram.skipsModelSourceBindings = g;
        }
    }
  }
  fr.prototype.getLinkCategoryForData = function(a) {
    return this.diagram.model.Pr(a);
  };
  fr.prototype.setLinkCategoryForData = function(a, b) {
    this.diagram.model.ms(a, b);
  };
  fr.prototype.setFromNodeForLink = function(a, b, c) {
    var d = this.diagram.model;
    void 0 === c && (c = null);
    b = null !== b ? b.data : null;
    if (this.diagram.isTreePathToChildren) d.ie(a.data, d.ua(b));
    else {
      var e = this.Jg;
      this.Jg = a;
      null !== c && d.ie(c.data, void 0);
      d.ie(b, d.ua(null !== a.toNode ? a.toNode.data : null));
      this.Jg = e;
    }
  };
  fr.prototype.setToNodeForLink = function(a, b, c) {
    var d = this.diagram.model;
    void 0 === c && (c = null);
    b = null !== b ? b.data : null;
    if (this.diagram.isTreePathToChildren) {
      var e = this.Jg;
      this.Jg = a;
      null !== c && d.ie(c.data, void 0);
      d.ie(b, d.ua(null !== a.fromNode ? a.fromNode.data : null));
      this.Jg = e;
    } else d.ie(a.data, d.ua(b));
  };
  fr.prototype.removeDataForLink = function(a) {
    this.diagram.model.ie(a.data, void 0);
  };
  fr.prototype.findLinkForKey = function(a) {
    if (null === a || void 0 === a) return null;
    a = this.diagram.model.dc(a);
    return null !== a ? this.Re.I(a) : null;
  };
  fr.prototype.doModelChanged = function(a) {
    mi.prototype.doModelChanged.call(this, a);
    if (this.diagram) {
      var b = this.diagram;
      if (a.model === b.model) {
        var c = a.change;
        if (b.$) {
          b.$ = !1;
          try {
            var d = a.modelChange;
            if ('' !== d) {
              if (c === de) {
                if ('nodeParentKey' === d) {
                  var e = a.object,
                    f = this.Lb(a.newValue),
                    g = this.ci(e);
                  if (null !== this.Jg)
                    null !== f &&
                      ((this.Jg.data = e),
                      (this.Jg.category = this.getLinkCategoryForData(e)));
                  else if (null !== g) {
                    var h = g.$g();
                    null !== h
                      ? null === f
                        ? b.remove(h)
                        : b.isTreePathToChildren
                        ? (h.fromNode = f)
                        : (h.toNode = f)
                      : gr(this, f, g);
                  }
                } else if ('parentLinkCategory' === d) {
                  var k = this.ci(a.object),
                    l = a.newValue;
                  if (null !== k && 'string' === typeof l) {
                    var m = k.$g();
                    null !== m && (m.category = l);
                  }
                }
                b.isModified = !0;
              }
            } else if (c === de) {
              var n = a.propertyName;
              a.object === b.model &&
                'nodeParentKeyProperty' === n &&
                (b.undoManager.isUndoingRedoing || this.Od());
              b.isModified = !0;
            }
          } finally {
            b.$ = !0;
          }
        }
      }
    }
  };
  fr.prototype.updateRelationshipsFromData = function(a) {
    var b = a.data;
    if (null !== b) {
      var c = a.diagram;
      if (null !== c) {
        var d = c.model;
        a instanceof V &&
          ((b = d.bh(b)),
          (b = c.Lb(b)),
          (d = a.ig()),
          b !== d &&
            ((d = a.$g()),
            null !== b
              ? null !== d
                ? c.isTreePathToChildren
                  ? (d.fromNode = b)
                  : (d.toNode = b)
                : gr(this, b, a)
              : null !== d && Gj(c, d, !1)));
      }
    }
  };
  fr.prototype.updateDataBindings = function(a, b) {
    mi.prototype.updateDataBindings.call(this, a, b);
    'string' === typeof b &&
      null !== this.Ec(a) &&
      ((a = this.Dc(a)), null !== a && a.Ka(b));
  };
  fr.prototype.resolveReferencesForData = function(a) {
    var b = this.diagram.model,
      c = b.ua(a);
    if (void 0 !== c) {
      var d = ar(b, c),
        e = this.Ec(a);
      if (null !== d && null !== e) {
        for (d = d.iterator; d.next(); ) {
          var f = d.value;
          b.lb(f) && e instanceof V && b.bh(f) === c && gr(this, e, this.ci(f));
        }
        br(b, c);
      }
      a = b.bh(a);
      void 0 !== a && e instanceof V && ((a = this.Lb(a)), gr(this, a, e));
    }
  };
  fr.prototype.unresolveReferencesForPart = function(a) {
    var b = this.diagram.model;
    if (a instanceof V) {
      var c = b.ua(a.data),
        d = this.Dc(a.data);
      if (null !== d) {
        d.isSelected = !1;
        d.isHighlighted = !1;
        var e = d.layer;
        if (null !== e) {
          var f = e.lc(-1, d, !1);
          0 <= f && this.diagram.bb(ge, 'parts', e, d, null, f, null);
          f = d.layerChanged;
          null !== f && f(d, e, null);
        }
      }
      d = this.diagram.isTreePathToChildren;
      for (a = a.linksConnected; a.next(); )
        (e = a.value),
          (e = (d ? e.toNode : e.fromNode).data),
          b.lb(e) && cr(b, c, e);
    }
  };
  fr.prototype.insertLink = function(a, b, c) {
    b = this.diagram.model;
    var d = a,
      e = c;
    this.diagram.isTreePathToChildren || ((d = c), (e = a));
    return null !== d && null !== e
      ? (b.ie(e.data, b.ua(d.data)), e.$g())
      : null;
  };
  fr.prototype.findLinkForKey = fr.prototype.findLinkForKey;
  fr.className = 'TreePartManager';

  function Z(a, b) {
    this.Zk = new G();
    this.Xk = new G();
    this.Av = ',\n  "insertedNodeKeys": ';
    this.Px = ',\n  "modifiedNodeData": ';
    this.Cv = ',\n  "removedNodeKeys": ';
    this.kh = null;
    Ra(this);
    this.Am = this.va = '';
    this.xg = !1;
    this.j = {};
    this.Mc = [];
    this.kb = new pb();
    this.Mh = 'key';
    this.pk = this.Rk = null;
    this.rm = this.sm = !1;
    this.um = !0;
    this.fm = null;
    this.gj = 'category';
    this.Lf = new pb();
    this.ot = new E();
    this.Mg = !1;
    this.m = null;
    this.undoManager = new ie();
    void 0 !== a && (za(a) ? (this.nodeDataArray = a) : Object.assign(this, a));
    b && Object.assign(this, b);
  }
  Z.prototype.cloneProtected = function(a) {
    a.va = this.va;
    a.Am = this.Am;
    a.xg = this.xg;
    a.Mh = this.Mh;
    a.Rk = this.Rk;
    a.pk = this.pk;
    a.sm = this.sm;
    a.rm = this.rm;
    a.um = this.um;
    a.fm = this.fm;
    a.gj = this.gj;
  };
  Z.prototype.copy = function() {
    var a = new this.constructor();
    this.cloneProtected(a);
    return a;
  };
  Z.prototype.clear = function() {
    this.Mc = [];
    this.kb.clear();
    this.Lf.clear();
    this.undoManager.clear();
  };
  Z.prototype.toString = function(a) {
    void 0 === a && (a = 0);
    if (1 < a) return this.Qo();
    var b = ('' !== this.name ? this.name : '') + ' Model';
    if (0 < a) {
      b += '\n node data:';
      a = this.nodeDataArray;
      for (var c = a.length, d = 0; d < c; d++) {
        var e = a[d];
        b += ' ' + this.ua(e) + ':' + Ia(e);
      }
    }
    return b;
  };
  Z.prototype.eA = function(a) {
    a.change !== ee &&
      C(
        'Model.toIncrementalData argument is not a Transaction ChangedEvent:' +
          a.toString(),
      );
    var b = a.object;
    if (!(a.isTransactionFinished && b instanceof he)) return null;
    hr(this, b);
    a = this.uv(b, 'FinishedUndo' === a.propertyName);
    this.kh = null;
    return a;
  };
  Z.prototype.uv = function(a, b) {
    var c = this,
      d = !1,
      e = new G(),
      f = new G(),
      g = new G(),
      h = this.kh;
    a.changes.each(function(a) {
      a.model === c &&
        ('nodeDataArray' === a.modelChange
          ? a.change === fe
            ? e.add(a.newValue)
            : a.change === ge && g.add(a.oldValue)
          : c.lb(a.object)
          ? f.add(a.object)
          : a.change !== de ||
            (c.modelData !== a.object && 'modelData' !== a.propertyName)
          ? null !== a.object &&
            (h && h.contains(a.object)
              ? h.get(a.object).each(function(a) {
                  c.lb(a) && f.add(a);
                })
              : a.object instanceof Z ||
                (c.ki() && c.Cc(a.object)) ||
                ir(c, a.object).each(function(a) {
                  f.add(a);
                }))
          : (d = !0));
    });
    var k = this.Xk;
    k.clear();
    e.each(function(a) {
      k.add(c.ua(a));
      b || f.add(a);
    });
    var l = this.Zk;
    l.clear();
    g.each(function(a) {
      l.add(c.ua(a));
      b && f.add(a);
    });
    a = c.cloneDeep(f.Ea());
    var m = null;
    d &&
      (null === m && (m = {}), (m.modelData = this.cloneDeep(this.modelData)));
    0 < k.count &&
      (null === m && (m = {}),
      b ? (m.removedNodeKeys = k.Ea()) : (m.insertedNodeKeys = k.Ea()));
    0 < a.length && (null === m && (m = {}), (m.modifiedNodeData = a));
    0 < l.count &&
      (null === m && (m = {}),
      b ? (m.insertedNodeKeys = l.Ea()) : (m.removedNodeKeys = l.Ea()));
    l.clear();
    k.clear();
    return m;
  };
  Z.prototype.cloneDeep = function(a) {
    return jr(this, a, !0);
  };

  function jr(a, b, c, d, e, f) {
    function g(a, c) {
      h
        ? (void 0 === a.__gohashid && f.push(a), d.set(a, c))
        : ((a = kb++), d.set(a, c), e.set(a, b));
    }
    if (!ya(b)) return b;
    f || (f = []);
    var h = Object.isExtensible(b);
    d || (d = new pb());
    if (h) {
      var k = d.get(b);
      if (k) return k;
    } else
      for (e || (e = new pb()), k = e.iterator; k.next(); ) {
        var l = k.key;
        if (k.value === b && (l = d.get(l))) return l;
      }
    if (Array.isArray(b)) {
      k = [];
      g(b, k);
      for (var m = 0; m < b.length; m++) k.push(jr(a, b[m], !1, d, e, f));
    } else if (
      b instanceof I ||
      b instanceof K ||
      b instanceof M ||
      b instanceof ec ||
      b instanceof N
    )
      (k = b.copy()), g(b, k);
    else {
      if (b instanceof nl || b instanceof O || b instanceof D) return b;
      if (b instanceof E)
        (k = new E().addAll(jr(a, b.Ea(), !1, d, e, f))), g(b, k);
      else if (b instanceof G)
        (k = new G().addAll(jr(a, b.Ea(), !1, d, e, f))), g(b, k);
      else if (b instanceof pb)
        (k = new pb().addAll(jr(a, b.Ea(), !1, d, e, f))), g(b, k);
      else if (b instanceof Date) (k = new Date(b.getTime())), g(b, k);
      else if (b instanceof RegExp)
        (k = new RegExp(b)), g(b, k), (k.lastIndex = b.lastIndex);
      else if ('function' === typeof b.copy) (k = b.copy()), g(b, k);
      else
        for (m in ((k = {}), g(b, k), b))
          '__gohashid' !== m && (k[m] = jr(a, b[m], !1, d, e, f));
    }
    c &&
      f.forEach(function(a) {
        delete a.__gohashid;
      });
    return k;
  }
  t = Z.prototype;
  t.quote = function(a) {
    return JSON.stringify(a).replace(/[-]/g, function(a) {
      return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).substr(-4);
    });
  };
  t.am = function() {
    var a = '';
    '' !== this.name && (a += ',\n  "name": ' + this.quote(this.name));
    '' !== this.dataFormat &&
      (a += ',\n  "dataFormat": ' + this.quote(this.dataFormat));
    this.isReadOnly && (a += ',\n  "isReadOnly": ' + this.isReadOnly);
    'key' !== this.nodeKeyProperty &&
      'string' === typeof this.nodeKeyProperty &&
      (a += ',\n  "nodeKeyProperty": ' + this.quote(this.nodeKeyProperty));
    this.copiesArrays && (a += ',\n  "copiesArrays": true');
    this.copiesArrayObjects && (a += ',\n  "copiesArrayObjects": true');
    this.copiesKey || (a += ',\n  "copiesKey": false');
    'category' !== this.nodeCategoryProperty &&
      'string' === typeof this.nodeCategoryProperty &&
      (a +=
        ',\n  "nodeCategoryProperty": ' +
        this.quote(this.nodeCategoryProperty));
    return a;
  };
  t.Io = function(a) {
    a.name && (this.name = a.name);
    a.dataFormat && (this.dataFormat = a.dataFormat);
    a.isReadOnly && (this.isReadOnly = !0);
    a.nodeKeyProperty && (this.nodeKeyProperty = a.nodeKeyProperty);
    a.copiesArrays && (this.copiesArrays = !0);
    a.copiesArrayObjects && (this.copiesArrayObjects = !0);
    !1 === a.copiesKey && (this.copiesKey = !1);
    a.nodeCategoryProperty &&
      (this.nodeCategoryProperty = a.nodeCategoryProperty);
  };

  function kr(a, b) {
    b = b.modelData;
    ya(b) && (a.Ll(b), (a.modelData = b));
  }
  t.vv = function() {
    var a = this.modelData,
      b = !1,
      c;
    for (c in a)
      if (!lr(c, a[c])) {
        b = !0;
        break;
      }
    a = '';
    b && (a = ',\n  "modelData": ' + mr(this, this.modelData));
    return a + ',\n  "nodeDataArray": ' + nr(this, this.nodeDataArray, !0);
  };
  t.Uu = function(a) {
    kr(this, a);
    a = a.nodeDataArray;
    za(a) && (this.Ll(a), (this.nodeDataArray = a));
  };

  function hr(a, b) {
    function c(a, b) {
      if ((b = b.part))
        if (((b = b.data), a !== b)) {
          var c = d.get(a);
          null === c ? ((c = new G()), c.add(b), d.add(a, c)) : c.add(b);
        }
    }
    var d = a.kh;
    null === d &&
      ((d = new pb()),
      b.changes.each(function(a) {
        if (null !== a.diagram) {
          var b = a.change;
          if (b === de) (a = a.object.panel) && (b = a.data) && c(b, a);
          else if (b === fe || b === ge)
            (a = a.object), (b = a.itemArray) && c(b, a);
        }
      }),
      (a.kh = d));
  }

  function ir(a, b) {
    for (var c = new G(), d = 0; d < a.nodeDataArray.length; d++) {
      var e = a.nodeDataArray[d];
      or(a, b, e, e, c);
    }
    return c;
  }

  function or(a, b, c, d, e) {
    if (Array.isArray(c))
      for (var f = 0; f < c.length; f++) {
        var g = c[f];
        if (g === b) return e.add(d), !0;
        if (or(a, b, g, d, e)) return !0;
      }
    else if (ya(c) && Object.getPrototypeOf(c) === Object.prototype)
      for (f in c) {
        g = c[f];
        if (g === b) return e.add(d), !0;
        if (or(a, b, g, d, e)) return !0;
      }
    return !1;
  }
  t.tv = function(a, b) {
    var c = this,
      d = !1,
      e = new G(),
      f = new G(),
      g = new G(),
      h = this.kh;
    a.changes.each(function(a) {
      a.model === c &&
        ('nodeDataArray' === a.modelChange
          ? a.change === fe
            ? e.add(a.newValue)
            : a.change === ge && g.add(a.oldValue)
          : c.lb(a.object)
          ? f.add(a.object)
          : a.change !== de ||
            (c.modelData !== a.object && 'modelData' !== a.propertyName)
          ? null !== a.object &&
            (h && h.contains(a.object)
              ? h.get(a.object).each(function(a) {
                  c.lb(a) && f.add(a);
                })
              : a.object instanceof Z ||
                (c.ki() && c.Cc(a.object)) ||
                ir(c, a.object).each(function(a) {
                  f.add(a);
                }))
          : (d = !0));
    });
    var k = this.Xk;
    k.clear();
    e.each(function(a) {
      k.add(c.ua(a));
      b || f.add(a);
    });
    var l = this.Zk;
    l.clear();
    g.each(function(a) {
      l.add(c.ua(a));
      b && f.add(a);
    });
    a = '';
    d && (a += ',\n  "modelData": ' + mr(this, this.modelData));
    0 < k.count && (a += (b ? this.Cv : this.Av) + nr(this, k.Ea(), !0));
    0 < f.count && (a += this.Px + nr(this, f.Ea(), !0));
    0 < l.count && (a += (b ? this.Av : this.Cv) + nr(this, l.Ea(), !0));
    l.clear();
    k.clear();
    return a;
  };
  t.Ho = function(a) {
    ((void 0 !== a.name && a.name !== this.name) ||
      (void 0 !== a.dataFormat && a.dataFormat !== this.dataFormat) ||
      (void 0 !== a.isReadOnly && a.isReadOnly !== this.isReadOnly) ||
      (void 0 !== a.nodeKeyProperty &&
        a.nodeKeyProperty !== this.nodeKeyProperty) ||
      (void 0 !== a.copiesArrays && a.copiesArrays !== this.copiesArrays) ||
      (void 0 !== a.copiesArrayObjects &&
        a.copiesArrayObjects !== this.copiesArrayObjects) ||
      (void 0 !== a.copiesKey && a.copiesKey !== this.copiesKey) ||
      (void 0 !== a.nodeCategoryProperty &&
        a.nodeCategoryProperty !== this.nodeCategoryProperty)) &&
      C('applyIncrementalJson cannot change Model properties');
    kr(this, a);
    var b = a.insertedNodeKeys,
      c = a.modifiedNodeData,
      d = new pb();
    if (Array.isArray(c))
      for (var e = 0; e < c.length; e++) {
        var f = c[e],
          g = this.ua(f);
        void 0 !== g && null !== g && d.set(g, f);
      }
    if (Array.isArray(b))
      for (e = b.length, f = 0; f < e; f++) {
        g = b[f];
        var h = this.dc(g);
        null === h &&
          ((h = (h = d.get(g)) ? h : this.copyNodeData({})),
          this.Sl(h, g),
          this.lf(h));
      }
    if (Array.isArray(c))
      for (b = c.length, d = 0; d < b; d++)
        if (((e = c[d]), (f = this.ua(e)), (f = this.dc(f)), null !== f)) {
          for (var k in e)
            '__gohashid' === k ||
              k === this.nodeKeyProperty ||
              (this.Nj() && k === this.nodeIsGroupProperty) ||
              this.setDataProperty(f, k, e[k]);
          this.Tl(e, f);
        }
    a = a.removedNodeKeys;
    if (Array.isArray(a))
      for (c = a.length, k = 0; k < c; k++)
        (b = this.dc(a[k])), null !== b && this.Kl(b);
  };
  t.Jx = function(a, b) {
    a.change !== ee &&
      C(
        'Model.toIncrementalJson argument is not a Transaction ChangedEvent:' +
          a.toString(),
      );
    var c = a.object;
    if (!(a.isTransactionFinished && c instanceof he))
      return '{ "incremental": 0 }';
    void 0 === b && (b = pr(this, this));
    hr(this, c);
    a = this.tv(c, 'FinishedUndo' === a.propertyName);
    this.kh = null;
    return '2' === b
      ? '{ "incremental": 2' + a + '}'
      : '{ "class": ' +
          this.quote(b) +
          ', "incremental": 1' +
          this.am() +
          a +
          '}';
  };
  t.fA = function(a, b) {
    return this.Jx(a, b);
  };
  t.Qo = function(a) {
    void 0 === a && (a = pr(this, this));
    return '{ "class": ' + this.quote(a) + this.am() + this.vv() + '}';
  };
  t.toJSON = function(a) {
    return this.Qo(a);
  };
  t.Dw = function(a) {
    var b = null;
    if ('string' === typeof a)
      try {
        b = x.JSON.parse(a);
      } catch (d) {}
    else
      'object' === typeof a
        ? (b = a)
        : C('Unable to modify a Model from: ' + a);
    var c = b.incremental;
    'number' !== typeof c &&
      C('Unable to apply non-incremental changes to Model: ' + a);
    0 !== c &&
      (this.Da('applyIncrementalJson'),
      this.Ho(b),
      this.eb('applyIncrementalJson'));
  };
  t.qy = function(a) {
    return this.Dw(a);
  };
  Z.constructGraphLinksModel = function() {
    return new Z();
  };
  t = Z.prototype;
  t.Ll = function(a) {
    if (za(a))
      for (var b = a.length, c = 0; c < b; c++) {
        var d = a[c];
        if (ya(d)) {
          var e = c;
          d = this.Ll(d);
          Array.isArray(a)
            ? (a[e] = d)
            : C(
                'Cannot replace an object in an HTMLCollection or NodeList at ' +
                  e,
              );
        }
      }
    else if (ya(a)) {
      for (b in a)
        if (
          ((c = a[b]),
          ya(c) &&
            ((c = this.Ll(c)), (a[b] = c), 'points' === b && Array.isArray(c)))
        ) {
          e = 0 === c.length % 2;
          for (d = 0; d < c.length; d++)
            if ('number' !== typeof c[d]) {
              e = !1;
              break;
            }
          if (e) {
            e = new E();
            for (d = 0; d < c.length / 2; d++)
              e.add(new I(c[2 * d], c[2 * d + 1]));
            e.freeze();
            a[b] = e;
          }
        }
      return qr(a);
    }
    return a;
  };
  t.bm = function(a) {
    return void 0 === a
      ? 'undefined'
      : null === a
      ? 'null'
      : !0 === a
      ? 'true'
      : !1 === a
      ? 'false'
      : 'string' === typeof a
      ? this.quote(a)
      : 'number' === typeof a
      ? Infinity === a
        ? '9e9999'
        : -Infinity === a
        ? '-9e9999'
        : isNaN(a)
        ? '{"class":"NaN"}'
        : a.toString()
      : a instanceof Date
      ? '{"class":"Date", "value":"' + a.toJSON() + '"}'
      : a instanceof Number
      ? this.bm(a.valueOf())
      : za(a)
      ? nr(this, a)
      : ya(a)
      ? mr(this, a)
      : 'function' === typeof a
      ? 'null'
      : a.toString();
  };

  function nr(a, b, c) {
    void 0 === c && (c = !1);
    var d = b.length;
    if (0 >= d) return '[]';
    var e = new Ta();
    e.add('[');
    c && 1 < d && e.add('\n');
    for (var f = 0; f < d; f++) {
      var g = b[f];
      void 0 !== g && (0 < f && (e.add(','), c && e.add('\n')), e.add(a.bm(g)));
    }
    c && 1 < d && e.add('\n');
    e.add(']');
    return e.toString();
  }

  function lr(a, b) {
    return void 0 === b ||
      '__gohashid' === a ||
      '_' === a[0] ||
      'function' === typeof b
      ? !0
      : !1;
  }

  function rr(a) {
    return isNaN(a)
      ? 'NaN'
      : Infinity === a
      ? '9e9999'
      : -Infinity === a
      ? '-9e9999'
      : a;
  }

  function mr(a, b) {
    var c = b;
    if (c instanceof I)
      b = {
        class: 'go.Point',
        x: rr(c.x),
        y: rr(c.y),
      };
    else if (c instanceof K)
      b = {
        class: 'go.Size',
        width: rr(c.width),
        height: rr(c.height),
      };
    else if (c instanceof M)
      b = {
        class: 'go.Rect',
        x: rr(c.x),
        y: rr(c.y),
        width: rr(c.width),
        height: rr(c.height),
      };
    else if (c instanceof ec)
      b = {
        class: 'go.Margin',
        top: rr(c.top),
        right: rr(c.right),
        bottom: rr(c.bottom),
        left: rr(c.left),
      };
    else if (c instanceof N)
      c.pb()
        ? (b = {
            class: 'go.Spot',
            x: rr(c.x),
            y: rr(c.y),
            offsetX: rr(c.offsetX),
            offsetY: rr(c.offsetY),
          })
        : (b = {
            class: 'go.Spot',
            enum: c.toString(),
          });
    else if (c instanceof nl) {
      b = {
        class: 'go.Brush',
        type: c.type.name,
      };
      if (c.type === ul) b.color = c.color;
      else if (c.type === xl || c.type === ol)
        (b.start = c.start),
          (b.end = c.end),
          c.type === ol &&
            (0 !== c.startRadius && (b.startRadius = rr(c.startRadius)),
            isNaN(c.endRadius) || (b.endRadius = rr(c.endRadius)));
      if (null !== c.colorStops) {
        var d = {};
        for (c = c.colorStops.iterator; c.next(); ) d[c.key] = c.value;
        b.colorStops = d;
      }
    } else
      c instanceof O
        ? ((b = {
            class: 'go.Geometry',
            type: c.type.name,
          }),
          0 !== c.startX && (b.startX = rr(c.startX)),
          0 !== c.startY && (b.startY = rr(c.startY)),
          0 !== c.endX && (b.endX = rr(c.endX)),
          0 !== c.endY && (b.endY = rr(c.endY)),
          c.spot1.C(tc) || (b.spot1 = c.spot1),
          c.spot2.C(Cc) || (b.spot2 = c.spot2),
          c.type === O.m && (b.path = O.ga(c)))
        : c instanceof D &&
          (b = {
            class: 'go.EnumValue',
            classType: pr(a, c.classType),
            name: c.name,
          });
    d = '{';
    c = !0;
    for (var e in b) {
      var f = on(b, e);
      if (!lr(e, f))
        if (
          (c ? (c = !1) : (d += ','),
          (d += a.quote(e) + ':'),
          'points' === e && f instanceof E)
        ) {
          var g = '[';
          for (f = f.iterator; f.next(); ) {
            var h = f.value;
            1 < g.length && (g += ',');
            g += a.bm(h.x);
            g += ',';
            g += a.bm(h.y);
          }
          g += ']';
          d += g;
        } else d += a.bm(f);
    }
    return d + '}';
  }

  function sr(a) {
    return 'number' === typeof a
      ? a
      : 'NaN' === a
      ? NaN
      : '9e9999' === a
      ? Infinity
      : '-9e9999' === a
      ? -Infinity
      : parseFloat(a);
  }

  function qr(a) {
    if ('object' !== typeof a) return a;
    var b = a['class'] || '';
    if ('NaN' === b) return NaN;
    if ('Date' === b) return new Date(a.value);
    if (0 !== b.indexOf('go.')) return a;
    b = b.substr(3);
    var c = a;
    if ('Point' === b) c = new I(sr(a.x), sr(a.y));
    else if ('Size' === b) c = new K(sr(a.width), sr(a.height));
    else if ('Rect' === b)
      c = new M(sr(a.x), sr(a.y), sr(a.width), sr(a.height));
    else if ('Margin' === b)
      c = new ec(sr(a.top), sr(a.right), sr(a.bottom), sr(a.left));
    else if ('Spot' === b)
      'string' === typeof a['enum']
        ? (c = jd(a['enum']))
        : (c = new N(sr(a.x), sr(a.y), sr(a.offsetX), sr(a.offsetY)));
    else if ('Brush' === b) {
      if (
        ((c = new nl()),
        (c.type = Sa(nl, a.type)),
        'string' === typeof a.color && (c.color = a.color),
        a.start instanceof N && (c.start = a.start),
        a.end instanceof N && (c.end = a.end),
        'number' === typeof a.startRadius &&
          (c.startRadius = sr(a.startRadius)),
        'number' === typeof a.endRadius && (c.endRadius = sr(a.endRadius)),
        (a = a.colorStops),
        ya(a))
      )
        for (var d in a) c.addColorStop(parseFloat(d), a[d]);
    } else
      'Geometry' === b
        ? ((c = null),
          'string' === typeof a.path ? (c = O.parse(a.path)) : (c = new O()),
          (c.type = Sa(O, a.type)),
          'number' === typeof a.startX && (c.startX = sr(a.startX)),
          'number' === typeof a.startY && (c.startY = sr(a.startY)),
          'number' === typeof a.endX && (c.endX = sr(a.endX)),
          'number' === typeof a.endY && (c.endY = sr(a.endY)),
          a.spot1 instanceof N && (c.spot1 = a.spot1),
          a.spot2 instanceof N && (c.spot2 = a.spot2))
        : 'EnumValue' === b &&
          ((d = a.classType),
          0 === d.indexOf('go.') && (d = d.substr(3)),
          (d = tr(d)),
          'function' === typeof d && (c = Sa(d, a.name)));
    return c;
  }
  t.Ug = function(a) {
    this.ot.add(a);
    return this;
  };
  t.ak = function(a) {
    this.ot.remove(a);
  };
  t.Cr = function(a) {
    this.skipsUndoManager || this.undoManager.Fu(a);
    for (var b = this.ot, c = b.length, d = 0; d < c; d++) b.K(d)(a);
  };
  t.bb = function(a, b, c, d, e, f, g) {
    ur(this, '', a, b, c, d, e, f, g);
  };
  t.g = function(a, b, c, d, e) {
    ur(this, '', de, a, this, b, c, d, e);
  };
  t.fs = function(a, b, c, d, e, f) {
    ur(this, '', de, b, a, c, d, e, f);
  };

  function ur(a, b, c, d, e, f, g, h, k) {
    void 0 === h && (h = null);
    void 0 === k && (k = null);
    var l = new ce();
    l.model = a;
    l.change = c;
    l.modelChange = b;
    l.propertyName = d;
    l.object = e;
    l.oldValue = f;
    l.oldParam = h;
    l.newValue = g;
    l.newParam = k;
    a.Cr(l);
  }
  Z.prototype.changeState = function(a, b) {
    if (null !== a && a.model === this)
      if (a.change === de) {
        var c = a.object,
          d = a.propertyName,
          e = a.I(b);
        d === this.nodeKeyProperty &&
          this.lb(c) &&
          ((b = a.I(!b)),
          void 0 !== b && this.kb.remove(b),
          void 0 !== e && this.kb.add(e, c));
        Nj(c, d, e);
      } else
        a.change === fe
          ? ((c = a.newParam),
            'nodeDataArray' === a.modelChange
              ? ((a = a.newValue),
                ya(a) &&
                  'number' === typeof c &&
                  ((d = this.ua(a)),
                  b
                    ? (this.Mc[c] === a && Da(this.Mc, c),
                      void 0 !== d && this.kb.remove(d))
                    : (this.Mc[c] !== a && Ca(this.Mc, c, a),
                      void 0 !== d && this.kb.add(d, a))))
              : '' === a.modelChange
              ? ((d = a.object) &&
                  !za(d) &&
                  a.propertyName &&
                  (d = on(a.object, a.propertyName)),
                za(d) &&
                  'number' === typeof c &&
                  ((a = a.newValue), b ? Da(d, c) : Ca(d, c, a)))
              : C('unknown ChangedEvent.Insert modelChange: ' + a.toString()))
          : a.change === ge
          ? ((c = a.oldParam),
            'nodeDataArray' === a.modelChange
              ? ((a = a.oldValue),
                ya(a) &&
                  'number' === typeof c &&
                  ((d = this.ua(a)),
                  b
                    ? (this.Mc[c] !== a && Ca(this.Mc, c, a),
                      void 0 !== d && this.kb.add(d, a))
                    : (this.Mc[c] === a && Da(this.Mc, c),
                      void 0 !== d && this.kb.remove(d))))
              : '' === a.modelChange
              ? ((d = a.object) &&
                  !za(d) &&
                  a.propertyName &&
                  (d = on(a.object, a.propertyName)),
                za(d) &&
                  'number' === typeof c &&
                  ((a = a.oldValue), b ? Ca(d, c, a) : Da(d, c)))
              : C('unknown ChangedEvent.Remove modelChange: ' + a.toString()))
          : a.change !== ee && C('unknown ChangedEvent: ' + a.toString());
  };
  Z.prototype.Da = function(a) {
    return this.undoManager.Da(a);
  };
  Z.prototype.eb = function(a) {
    return this.undoManager.eb(a);
  };
  Z.prototype.Bf = function() {
    return this.undoManager.Bf();
  };
  Z.prototype.commit = function(a, b) {
    void 0 === b && (b = '');
    var c = this.skipsUndoManager;
    null === b && ((this.skipsUndoManager = !0), (b = ''));
    this.undoManager.Da(b);
    var d = !1;
    try {
      a(this), (d = !0);
    } finally {
      d ? this.undoManager.eb(b) : this.undoManager.Bf(),
        (this.skipsUndoManager = c);
    }
  };
  t = Z.prototype;
  t.Ka = function(a, b) {
    void 0 === b && (b = '');
    ur(this, 'SourceChanged', ee, b, a, null, null);
  };
  t.ua = function(a) {
    if (null !== a) {
      var b = this.Mh;
      if ('' !== b && ((b = on(a, b)), void 0 !== b)) {
        if (Yq(b)) return b;
        C(
          'Key value for node data ' + a + ' is not a number or a string: ' + b,
        );
      }
    }
  };
  t.Sl = function(a, b) {
    if (null !== a) {
      var c = this.Mh;
      if ('' !== c)
        if (this.lb(a)) {
          var d = on(a, c);
          d !== b &&
            null === this.dc(b) &&
            (Nj(a, c, b),
            void 0 !== d && this.kb.remove(d),
            this.kb.add(b, a),
            ur(this, 'nodeKey', de, c, a, d, b),
            'string' === typeof c && this.Ka(a, c),
            this.Mo(d, b));
        } else Nj(a, c, b);
    }
  };

  function Yq(a) {
    return 'number' === typeof a || 'string' === typeof a;
  }
  t.lb = function(a) {
    var b = this.ua(a);
    return void 0 === b ? !1 : this.kb.I(b) === a;
  };
  t.dc = function(a) {
    null === a && C('Model.findNodeDataForKey:key must not be null');
    return void 0 !== a && Yq(a) ? this.kb.I(a) : null;
  };
  t.Mu = function(a) {
    if (null !== a) {
      var b = this.Mh;
      if ('' !== b) {
        var c = this.ua(a);
        if (void 0 === c || this.kb.contains(c)) {
          var d = this.Rk;
          if (
            null !== d &&
            ((c = d(this, a)),
            void 0 !== c && null !== c && !this.kb.contains(c))
          ) {
            Nj(a, b, c);
            return;
          }
          if ('string' === typeof c) {
            for (d = 2; this.kb.contains(c + d); ) d++;
            Nj(a, b, c + d);
          } else if (void 0 === c || 'number' === typeof c) {
            for (c = -this.kb.count - 1; this.kb.contains(c); ) c--;
            Nj(a, b, c);
          }
        }
      }
    }
  };
  t.lf = function(a) {
    null !== a && (gb(a), this.lb(a) || Qq(this, a, !0));
  };

  function Qq(a, b, c) {
    var d = a.ua(b);
    if (void 0 === d || a.kb.I(d) !== b)
      a.Mu(b),
        (d = a.ua(b)),
        void 0 === d &&
          C(
            'Model.makeNodeDataKeyUnique failed on ' +
              b +
              '.  Data not added to Model.',
          ),
        a.kb.add(d, b),
        (d = null),
        c && ((d = a.Mc.length), Ca(a.Mc, d, b)),
        ur(a, 'nodeDataArray', fe, 'nodeDataArray', a, null, b, null, d),
        a.Nl(b),
        a.Ml(b);
  }
  t.my = function(a) {
    if (za(a)) for (var b = a.length, c = 0; c < b; c++) this.lf(a[c]);
    else for (a = a.iterator; a.next(); ) this.lf(a.value);
  };
  t.Kl = function(a) {
    null !== a && Pq(this, a, !0);
  };

  function Pq(a, b, c) {
    var d = a.ua(b);
    void 0 !== d && a.kb.remove(d);
    d = null;
    if (c) {
      a: if (((c = a.Mc), Array.isArray(c))) d = c.indexOf(b);
      else {
        d = c.length;
        for (var e = 0; e < d; e++)
          if (c[e] === b) {
            d = e;
            break a;
          }
        d = -1;
      }
      if (0 > d) return;
      Da(a.Mc, d);
    }
    ur(a, 'nodeDataArray', ge, 'nodeDataArray', a, b, null, d, null);
    a.To(b);
  }
  t.Uz = function(a) {
    if (za(a)) for (var b = a.length, c = 0; c < b; c++) this.Kl(a[c]);
    else for (a = a.iterator; a.next(); ) this.Kl(a.value);
  };
  t.Hz = function(a) {
    if (a !== this.nodeDataArray && za(a)) {
      var b = this.Zk;
      b.clear();
      b.addAll(this.kb.iteratorKeys);
      var c = this.Xk;
      c.clear();
      for (var d = a.length, e = 0; e < d; e++) {
        var f = a[e],
          g = this.ua(f);
        if (void 0 !== g) {
          c.add(g);
          var h = this.dc(g);
          h !== f &&
            (null !== h
              ? (this.ho(h, f), this.Tl(f, h))
              : ((f = this.cloneDeep(f)), this.Sl(f, g), this.lf(f)));
        } else (g = this.cloneDeep(f)), this.lf(g), c.add(this.ua(g));
      }
      for (a = b.iterator; a.next(); )
        (d = a.value), c.contains(d) || ((d = this.dc(d)) && this.Kl(d));
      b.clear();
      c.clear();
    }
  };
  t.Mo = function(a, b) {
    void 0 !== b && ((a = ar(this, a)), a instanceof G && this.Lf.add(b, a));
  };
  t.ov = function() {};
  t.Nl = function() {};
  t.Ml = function() {};
  t.To = function() {};

  function cr(a, b, c) {
    if (void 0 !== b) {
      var d = a.Lf.I(b);
      null === d && ((d = new G()), a.Lf.add(b, d));
      d.add(c);
    }
  }

  function br(a, b, c) {
    if (void 0 !== b) {
      var d = a.Lf.I(b);
      d instanceof G &&
        (void 0 === c || null === c
          ? a.Lf.remove(b)
          : (d.remove(c), 0 === d.count && a.Lf.remove(b)));
    }
  }

  function ar(a, b) {
    if (void 0 === b) return null;
    a = a.Lf.I(b);
    return a instanceof G ? a : null;
  }
  t.xy = function(a) {
    void 0 === a ? this.Lf.clear() : this.Lf.remove(a);
  };
  Z.prototype.copyNodeData = function(a) {
    if (null === a) return null;
    var b = this.pk;
    a = null !== b ? b(a, this) : wr(this, a, !0);
    ya(a) && Ra(a);
    return a;
  };

  function wr(a, b, c) {
    if (a.copiesArrays && Array.isArray(b)) {
      var d = [];
      for (c = 0; c < b.length; c++) {
        var e = wr(a, b[c], a.copiesArrayObjects);
        d.push(e);
      }
      Ra(d);
      return d;
    }
    if (c && ya(b)) {
      c = (c = b.constructor) ? new c() : {};
      e =
        a.copiesKey || 'string' !== typeof a.nodeKeyProperty
          ? null
          : a.nodeKeyProperty;
      for (d in b)
        if ('__gohashid' === d) c.__gohashid = void 0;
        else if (d === e) c[e] = void 0;
        else {
          var f = on(b, d),
            g = pr(a, f);
          'GraphObject' === g ||
          'Diagram' === g ||
          'Layer' === g ||
          'RowColumnDefinition' === g ||
          'AnimationManager' === g ||
          'Tool' === g ||
          'CommandHandler' === g ||
          'Layout' === g ||
          'InputEvent' === g ||
          'DiagramEvent' === g ||
          f instanceof Z ||
          f instanceof ie ||
          f instanceof he ||
          f instanceof ce
            ? Nj(c, d, f)
            : ((f = wr(a, f, !1)), Nj(c, d, f));
        }
      Ra(c);
      return c;
    }
    return b instanceof I
      ? b.copy()
      : b instanceof K
      ? b.copy()
      : b instanceof M
      ? b.copy()
      : b instanceof N
      ? b.copy()
      : b instanceof ec
      ? b.copy()
      : b;
  }
  Z.prototype.setDataProperty = function(a, b, c) {
    if (this.lb(a)) {
      if (b === this.nodeKeyProperty) {
        this.Sl(a, c);
        return;
      }
      if (b === this.nodeCategoryProperty) {
        this.Rl(a, c);
        return;
      }
    } else
      !xr &&
        a instanceof Y &&
        ((xr = !0),
        xa(
          'Model.setDataProperty is modifying a GraphObject, "' +
            a.toString() +
            '"',
        ),
        xa('  Is that really your intent?'));
    var d = on(a, b);
    d !== c && (Nj(a, b, c), this.fs(a, b, d, c));
  };
  t = Z.prototype;
  t.set = function(a, b, c) {
    this.setDataProperty(a, b, c);
  };
  t.ho = function(a, b) {
    if (b) {
      var c = this.lb(a),
        d;
      for (d in b)
        '__gohashid' === d ||
          (c && d === this.nodeKeyProperty) ||
          this.setDataProperty(a, d, b[d]);
    }
  };
  t.iy = function(a, b) {
    this.Qr(a, -1, b);
  };
  t.Qr = function(a, b, c) {
    0 > b && (b = a.length);
    Ca(a, b, c);
    ur(this, '', fe, '', a, null, c, null, b);
  };
  t.Xu = function(a, b) {
    void 0 === b && (b = -1);
    a === this.Mc &&
      C(
        'Model.removeArrayItem should not be called on the Model.nodeDataArray',
      );
    -1 === b && (b = a.length - 1);
    var c = a[b];
    Da(a, b);
    ur(this, '', ge, '', a, c, null, b, null);
  };
  t.uo = function(a) {
    if (null === a) return '';
    var b = this.gj;
    if ('' === b) return '';
    b = on(a, b);
    if (void 0 === b) return '';
    if ('string' === typeof b) return b;
    C('getCategoryForNodeData found a non-string category for ' + a + ': ' + b);
  };
  t.Rl = function(a, b) {
    if (null !== a) {
      var c = this.gj;
      if ('' !== c)
        if (this.lb(a)) {
          var d = on(a, c);
          void 0 === d && (d = '');
          d !== b && (Nj(a, c, b), ur(this, 'nodeCategory', de, c, a, d, b));
        } else Nj(a, c, b);
    }
  };
  t.Tl = function(a, b) {
    this.Rl(b, this.uo(a));
  };
  t.Bl = function() {
    return !1;
  };
  t.Nj = function() {
    return !1;
  };
  t.ki = function() {
    return !1;
  };
  t.Vr = function() {
    return !1;
  };
  t.Oj = function() {
    return !1;
  };

  function oi() {
    return new Z();
  }

  function pr(a, b) {
    if ('function' === typeof b) {
      if (b.className) return b.className;
      if (b.name) return b.name;
    } else if ('object' === typeof b && null !== b && b.constructor)
      return pr(a, b.constructor);
    return typeof b;
  }

  function tr(a) {
    return yr[a] ? yr[a] : void 0 !== x.go && x.go[a] ? x.go[a] : null;
  }

  function on(a, b) {
    if (!a || !b) return null;
    try {
      if ('function' === typeof b) var c = b(a);
      else
        'function' === typeof a.getAttribute
          ? ((c = a.getAttribute(b)), null === c && (c = void 0))
          : (c = a[b]);
    } catch (d) {}
    return c;
  }

  function Nj(a, b, c) {
    if (a && b)
      try {
        'function' === typeof b
          ? b(a, c)
          : 'function' === typeof a.setAttribute
          ? a.setAttribute(b, c)
          : (a[b] = c);
      } catch (d) {}
  }
  ma.Object.defineProperties(Z.prototype, {
    name: {
      get: function() {
        return this.va;
      },
      set: function(a) {
        var b = this.va;
        b !== a && ((this.va = a), this.g('name', b, a));
      },
    },
    dataFormat: {
      get: function() {
        return this.Am;
      },
      set: function(a) {
        var b = this.Am;
        b !== a && ((this.Am = a), this.g('dataFormat', b, a));
      },
    },
    isReadOnly: {
      get: function() {
        return this.xg;
      },
      set: function(a) {
        var b = this.xg;
        b !== a && ((this.xg = a), this.g('isReadOnly', b, a));
      },
    },
    modelData: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        var b = this.j;
        b !== a && ((this.j = a), this.g('modelData', b, a), this.Ka(a));
      },
    },
    undoManager: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        var b = this.m;
        b !== a &&
          (null !== b && b.yx(this), (this.m = a), null !== a && a.Bw(this));
      },
    },
    skipsUndoManager: {
      get: function() {
        return this.Mg;
      },
      set: function(a) {
        this.Mg = a;
      },
    },
    nodeKeyProperty: {
      get: function() {
        return this.Mh;
      },
      set: function(a) {
        var b = this.Mh;
        b !== a &&
          ('' === a && C('Model.nodeKeyProperty may not be the empty string'),
          0 < this.kb.count &&
            C(
              'Cannot set Model.nodeKeyProperty when there is existing node data',
            ),
          (this.Mh = a),
          this.g('nodeKeyProperty', b, a));
      },
    },
    makeUniqueKeyFunction: {
      get: function() {
        return this.Rk;
      },
      set: function(a) {
        var b = this.Rk;
        b !== a && ((this.Rk = a), this.g('makeUniqueKeyFunction', b, a));
      },
    },
    nodeDataArray: {
      get: function() {
        return this.Mc;
      },
      set: function(a) {
        var b = this.Mc;
        if (b !== a) {
          this.kb.clear();
          this.ov();
          for (var c = a.length, d = 0; d < c; d++) {
            var e = a[d];
            ya(e) ||
              C('Model.nodeDataArray must only contain Objects, not: ' + e);
            gb(e);
          }
          this.Mc = a;
          d = new E();
          for (e = 0; e < c; e++) {
            var f = a[e],
              g = this.ua(f);
            void 0 === g
              ? d.add(f)
              : null !== this.kb.I(g)
              ? d.add(f)
              : this.kb.add(g, f);
          }
          for (d = d.iterator; d.next(); )
            (e = d.value),
              this.Mu(e),
              (f = this.ua(e)),
              void 0 !== f && this.kb.add(f, e);
          ur(this, 'nodeDataArray', de, 'nodeDataArray', this, b, a);
          for (b = 0; b < c; b++) (d = a[b]), this.Nl(d), this.Ml(d);
          Array.isArray(a) || (this.isReadOnly = !0);
        }
      },
    },
    copyNodeDataFunction: {
      get: function() {
        return this.pk;
      },
      set: function(a) {
        var b = this.pk;
        b !== a && ((this.pk = a), this.g('copyNodeDataFunction', b, a));
      },
    },
    copiesArrays: {
      get: function() {
        return this.sm;
      },
      set: function(a) {
        var b = this.sm;
        b !== a && ((this.sm = a), this.g('copiesArrays', b, a));
      },
    },
    copiesArrayObjects: {
      get: function() {
        return this.rm;
      },
      set: function(a) {
        var b = this.rm;
        b !== a && ((this.rm = a), this.g('copiesArrayObjects', b, a));
      },
    },
    copiesKey: {
      get: function() {
        return this.um;
      },
      set: function(a) {
        var b = this.um;
        b !== a && ((this.um = a), this.g('copiesKey', b, a));
      },
    },
    afterCopyFunction: {
      get: function() {
        return this.fm;
      },
      set: function(a) {
        var b = this.fm;
        b !== a && ((this.fm = a), this.g('afterCopyFunction', b, a));
      },
    },
    nodeCategoryProperty: {
      get: function() {
        return this.gj;
      },
      set: function(a) {
        var b = this.gj;
        b !== a && ((this.gj = a), this.g('nodeCategoryProperty', b, a));
      },
    },
    type: {
      get: function() {
        return 'Model';
      },
    },
  });
  Z.prototype.setCategoryForNodeData = Z.prototype.Rl;
  Z.prototype.getCategoryForNodeData = Z.prototype.uo;
  Z.prototype.removeArrayItem = Z.prototype.Xu;
  Z.prototype.insertArrayItem = Z.prototype.Qr;
  Z.prototype.addArrayItem = Z.prototype.iy;
  Z.prototype.assignAllDataProperties = Z.prototype.ho;
  Z.prototype.set = Z.prototype.set;
  Z.prototype.clearUnresolvedReferences = Z.prototype.xy;
  Z.prototype.mergeNodeDataArray = Z.prototype.Hz;
  Z.prototype.removeNodeDataCollection = Z.prototype.Uz;
  Z.prototype.removeNodeData = Z.prototype.Kl;
  Z.prototype.addNodeDataCollection = Z.prototype.my;
  Z.prototype.addNodeData = Z.prototype.lf;
  Z.prototype.makeNodeDataKeyUnique = Z.prototype.Mu;
  Z.prototype.findNodeDataForKey = Z.prototype.dc;
  Z.prototype.containsNodeData = Z.prototype.lb;
  Z.prototype.setKeyForNodeData = Z.prototype.Sl;
  Z.prototype.getKeyForNodeData = Z.prototype.ua;
  Z.prototype.updateTargetBindings = Z.prototype.Ka;
  Z.prototype.commit = Z.prototype.commit;
  Z.prototype.rollbackTransaction = Z.prototype.Bf;
  Z.prototype.commitTransaction = Z.prototype.eb;
  Z.prototype.startTransaction = Z.prototype.Da;
  Z.prototype.raiseDataChanged = Z.prototype.fs;
  Z.prototype.raiseChanged = Z.prototype.g;
  Z.prototype.raiseChangedEvent = Z.prototype.bb;
  Z.prototype.removeChangedListener = Z.prototype.ak;
  Z.prototype.addChangedListener = Z.prototype.Ug;
  Z.prototype.writeJsonValue = Z.prototype.bm;
  Z.prototype.replaceJsonObjects = Z.prototype.Ll;
  Z.prototype.applyIncrementalJSON = Z.prototype.qy;
  Z.prototype.applyIncrementalJson = Z.prototype.Dw;
  Z.prototype.toJSON = Z.prototype.toJSON;
  Z.prototype.toJson = Z.prototype.Qo;
  Z.prototype.toIncrementalJSON = Z.prototype.fA;
  Z.prototype.toIncrementalJson = Z.prototype.Jx;
  Z.prototype.toIncrementalData = Z.prototype.eA;
  Z.prototype.clear = Z.prototype.clear;
  var xr = !1,
    yr = {};
  Z.className = 'Model';
  Z.fromJSON = Z.fromJson = function(a, b) {
    void 0 === b && (b = null);
    var c = null;
    if ('string' === typeof a)
      try {
        c = x.JSON.parse(a);
      } catch (f) {}
    else
      'object' === typeof a
        ? (c = a)
        : C('Unable to construct a Model from: ' + a);
    if (null === b) {
      a = null;
      var d = c['class'];
      if ('string' === typeof d)
        try {
          var e = null;
          0 === d.indexOf('go.')
            ? ((d = d.substr(3)), (e = tr(d)))
            : ((e = tr(d)), null === e && (e = x[d]));
          'function' === typeof e && (a = new e());
        } catch (f) {}
      null === a || a instanceof Z
        ? (b = a)
        : C('Unable to construct a Model of declared class: ' + c['class']);
    }
    null === b && (b = Z.constructGraphLinksModel());
    b.Io(c);
    b.Uu(c);
    return b;
  };
  Z.safePropertyValue = on;
  Z.safePropertySet = Nj;
  yr.Brush = nl;
  yr.ChangedEvent = ce;
  yr.Geometry = O;
  yr.Margin = ec;
  yr.Panel = W;
  yr.Point = I;
  yr.Rect = M;
  yr.Size = K;
  yr.Spot = N;
  yr.Transaction = he;
  yr.UndoManager = ie;

  function wi(a, b, c, d) {
    Ra(this);
    this._isFrozen = !1;
    void 0 === a && (a = '');
    void 0 === b && (b = a);
    void 0 === c && (c = null);
    this.j = -1;
    this.sd = null;
    this.ml = a;
    this.ll = this.Wn = 0;
    this.Zq = null;
    this.cn = !1;
    this.hl = b;
    this.qm = c;
    void 0 === d
      ? ((this.Uk = zr), (this.jk = null))
      : ((this.Uk = gn), (this.jk = d));
    this.Vs = new G();
  }
  wi.prototype.copy = function() {
    var a = new wi();
    a.ml = this.ml;
    a.Wn = this.Wn;
    a.ll = this.ll;
    a.Zq = this.Zq;
    a.cn = this.cn;
    a.hl = this.hl;
    a.qm = this.qm;
    a.Uk = this.Uk;
    a.jk = this.jk;
    return a;
  };
  t = wi.prototype;
  t.ob = function(a) {
    a.classType === wi && (this.mode = a);
  };
  t.toString = function() {
    return (
      'Binding(' +
      this.targetProperty +
      ':' +
      this.sourceProperty +
      (-1 !== this.ti ? ' ' + this.ti : '') +
      ' ' +
      this.mode.name +
      ')'
    );
  };
  t.freeze = function() {
    this._isFrozen = !0;
    return this;
  };
  t.ja = function() {
    this._isFrozen = !1;
    return this;
  };
  t.px = function(a) {
    void 0 === a && (a = null);
    this.mode = gn;
    this.backConverter = a;
    return this;
  };
  t.Fo = function(a) {
    void 0 === a && (a = '');
    this.sourceName = a;
    this.isToModel = !1;
    return this;
  };
  t.Kz = function() {
    this.sourceName = null;
    this.isToModel = !0;
    return this;
  };

  function gl(a, b, c) {
    a = a.sourceName;
    return null === a || '' === a
      ? b
      : '/' === a
      ? c.part
      : '.' === a
      ? c
      : '..' === a
      ? c.panel
      : b.fb(a);
  }
  t.pv = function(a, b, c) {
    var d = this.hl;
    if (void 0 === c || '' === d || d === c) {
      c = this.ml;
      var e = this.qm;
      if (null === e && '' === c)
        xa(
          'Binding error: target property is the empty string: ' +
            this.toString(),
        );
      else {
        var f = b;
        '' !== d && (f = on(b, d));
        if (void 0 !== f)
          if (null === e) '' !== c && Nj(a, c, f);
          else
            try {
              if ('' !== c) {
                var g = e(f, a);
                Nj(a, c, g);
              } else e(f, a);
            } catch (h) {}
      }
    }
  };
  t.Vo = function(a, b, c, d) {
    if (this.Uk === gn) {
      var e = this.ml;
      if (void 0 === c || e === c) {
        c = this.hl;
        var f = this.jk,
          g = a;
        '' !== e && (g = on(a, e));
        if (void 0 !== g && !this.Vs.contains(a))
          try {
            this.Vs.add(a);
            var h = null !== d ? d.diagram : null,
              k = null !== h ? h.model : null;
            if (null === f)
              if ('' !== c)
                null !== k ? k.setDataProperty(b, c, g) : Nj(b, c, g);
              else {
                if (
                  null !== k &&
                  null !== d &&
                  0 <= d.itemIndex &&
                  null !== d.panel &&
                  Array.isArray(d.panel.itemArray)
                ) {
                  var l = d.itemIndex,
                    m = d.panel.itemArray;
                  k.Xu(m, l);
                  k.Qr(m, l, g);
                }
              }
            else
              try {
                if ('' !== c) {
                  var n = f(g, b, k);
                  null !== k ? k.setDataProperty(b, c, n) : Nj(b, c, n);
                } else {
                  var p = f(g, b, k);
                  if (
                    void 0 !== p &&
                    null !== k &&
                    null !== d &&
                    0 <= d.itemIndex &&
                    null !== d.panel &&
                    Array.isArray(d.panel.itemArray)
                  ) {
                    var r = d.itemIndex,
                      q = d.panel.itemArray;
                    k.Xu(q, r);
                    k.Qr(q, r, p);
                  }
                }
              } catch (u) {}
          } finally {
            this.Vs.remove(a);
          }
      }
    }
  };
  ma.Object.defineProperties(wi.prototype, {
    ti: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this._isFrozen && va(this);
        this.j = a;
      },
    },
    targetProperty: {
      get: function() {
        return this.ml;
      },
      set: function(a) {
        this._isFrozen && va(this);
        this.ml = a;
      },
    },
    sourceName: {
      get: function() {
        return this.Zq;
      },
      set: function(a) {
        this._isFrozen && va(this);
        this.Zq = a;
        null !== a && (this.cn = !1);
      },
    },
    isToModel: {
      get: function() {
        return this.cn;
      },
      set: function(a) {
        this._isFrozen && va(this);
        this.cn = a;
      },
    },
    sourceProperty: {
      get: function() {
        return this.hl;
      },
      set: function(a) {
        this._isFrozen && va(this);
        this.hl = a;
      },
    },
    converter: {
      get: function() {
        return this.qm;
      },
      set: function(a) {
        this._isFrozen && va(this);
        this.qm = a;
      },
    },
    backConverter: {
      get: function() {
        return this.jk;
      },
      set: function(a) {
        this._isFrozen && va(this);
        this.jk = a;
      },
    },
    mode: {
      get: function() {
        return this.Uk;
      },
      set: function(a) {
        this._isFrozen && va(this);
        this.Uk = a;
      },
    },
  });
  wi.prototype.updateSource = wi.prototype.Vo;
  wi.prototype.updateTarget = wi.prototype.pv;
  wi.prototype.ofModel = wi.prototype.Kz;
  wi.prototype.ofObject = wi.prototype.Fo;
  wi.prototype.makeTwoWay = wi.prototype.px;
  var Jk = 'Binding',
    zr = new D(wi, 'OneWay', 1),
    gn = new D(wi, 'TwoWay', 2);
  wi.className = 'Binding';
  wi.parseEnum = function(a, b) {
    return function(c) {
      c = Sa(a, c);
      return null === c ? b : c;
    };
  };
  wi.toString = Ia;
  wi.OneWay = zr;
  wi.TwoWay = gn;

  function Ar(a, b, c) {
    Z.call(this);
    this.zv = ',\n  "insertedLinkKeys": ';
    this.Ox = ',\n  "modifiedLinkData": ';
    this.Bv = ',\n  "removedLinkKeys": ';
    this.ed = [];
    this.Rf = new G();
    this.rb = new pb();
    this.Bh = '';
    this.Li = this.nk = this.Sk = null;
    this.Ze = 'from';
    this.$e = 'to';
    this.aj = this.$i = '';
    this.Zi = 'category';
    this.ce = '';
    this.Yk = 'isGroup';
    this.ye = 'group';
    this.tm = !1;
    void 0 !== b && (this.linkDataArray = b);
    void 0 !== a && (za(a) ? (this.nodeDataArray = a) : Object.assign(this, a));
    c && Object.assign(this, c);
  }
  la(Ar, Z);
  Ar.constructGraphLinksModel = Z.constructGraphLinksModel;
  Ar.prototype.cloneProtected = function(a) {
    Z.prototype.cloneProtected.call(this, a);
    a.Bh = this.Bh;
    a.Sk = this.Sk;
    a.nk = this.nk;
    a.Ze = this.Ze;
    a.$e = this.$e;
    a.$i = this.$i;
    a.aj = this.aj;
    a.Zi = this.Zi;
    a.ce = this.ce;
    a.Yk = this.Yk;
    a.ye = this.ye;
    a.tm = this.tm;
  };
  t = Ar.prototype;
  t.clear = function() {
    Z.prototype.clear.call(this);
    this.ed = [];
    this.rb.clear();
    this.Rf.clear();
  };
  t.toString = function(a) {
    void 0 === a && (a = 0);
    if (2 <= a) return this.Qo();
    var b = ('' !== this.name ? this.name : '') + ' GraphLinksModel';
    if (0 < a) {
      b += '\n node data:';
      a = this.nodeDataArray;
      var c = a.length,
        d;
      for (d = 0; d < c; d++) {
        var e = a[d];
        b += ' ' + this.ua(e) + ':' + Ia(e);
      }
      b += '\n link data:';
      a = this.linkDataArray;
      c = a.length;
      for (d = 0; d < c; d++)
        (e = a[d]), (b += ' ' + Wq(this, e, !0) + '-->' + Wq(this, e, !1));
    }
    return b;
  };
  t.uv = function(a, b) {
    '' === this.linkKeyProperty &&
      C(
        'GraphLinksModel.linkKeyProperty must not be an empty string for .toIncrementalData() to succeed.',
      );
    var c = Z.prototype.uv.call(this, a, b),
      d = this,
      e = new G(),
      f = new G(),
      g = new G(),
      h = this.kh;
    a.changes.each(function(a) {
      a.model === d &&
        ('linkDataArray' === a.modelChange
          ? a.change === fe
            ? e.add(a.newValue)
            : a.change === ge && g.add(a.oldValue)
          : d.Cc(a.object)
          ? f.add(a.object)
          : null !== a.object &&
            (null !== a.object && h && h.contains(a.object)
              ? h.get(a.object).each(function(a) {
                  d.Cc(a) && f.add(a);
                })
              : a.object instanceof Z ||
                d.lb(a.object) ||
                Br(d, a.object).each(function(a) {
                  f.add(a);
                })));
    });
    var k = this.Xk;
    k.clear();
    e.each(function(a) {
      k.add(d.uc(a));
      b || f.add(a);
    });
    var l = this.Zk;
    l.clear();
    g.each(function(a) {
      l.add(d.uc(a));
      b && f.add(a);
    });
    a = d.cloneDeep(f.Ea());
    0 < k.count &&
      (null === c && (c = {}),
      b ? (c.removedLinkKeys = k.Ea()) : (c.insertedLinkKeys = k.Ea()));
    0 < a.length && (null === c && (c = {}), (c.modifiedLinkData = a));
    0 < l.count &&
      (null === c && (c = {}),
      b ? (c.insertedLinkKeys = l.Ea()) : (c.removedLinkKeys = l.Ea()));
    l.clear();
    k.clear();
    return c;
  };
  t.am = function() {
    var a = Z.prototype.am.call(this),
      b = '';
    'category' !== this.linkCategoryProperty &&
      'string' === typeof this.linkCategoryProperty &&
      (b +=
        ',\n  "linkCategoryProperty": ' +
        this.quote(this.linkCategoryProperty));
    '' !== this.linkKeyProperty &&
      'string' === typeof this.linkKeyProperty &&
      (b += ',\n  "linkKeyProperty": ' + this.quote(this.linkKeyProperty));
    'from' !== this.linkFromKeyProperty &&
      'string' === typeof this.linkFromKeyProperty &&
      (b +=
        ',\n  "linkFromKeyProperty": ' + this.quote(this.linkFromKeyProperty));
    'to' !== this.linkToKeyProperty &&
      'string' === typeof this.linkToKeyProperty &&
      (b += ',\n  "linkToKeyProperty": ' + this.quote(this.linkToKeyProperty));
    '' !== this.linkFromPortIdProperty &&
      'string' === typeof this.linkFromPortIdProperty &&
      (b +=
        ',\n  "linkFromPortIdProperty": ' +
        this.quote(this.linkFromPortIdProperty));
    '' !== this.linkToPortIdProperty &&
      'string' === typeof this.linkToPortIdProperty &&
      (b +=
        ',\n  "linkToPortIdProperty": ' +
        this.quote(this.linkToPortIdProperty));
    '' !== this.linkLabelKeysProperty &&
      'string' === typeof this.linkLabelKeysProperty &&
      (b +=
        ',\n  "linkLabelKeysProperty": ' +
        this.quote(this.linkLabelKeysProperty));
    'isGroup' !== this.nodeIsGroupProperty &&
      'string' === typeof this.nodeIsGroupProperty &&
      (b +=
        ',\n  "nodeIsGroupProperty": ' + this.quote(this.nodeIsGroupProperty));
    'group' !== this.nodeGroupKeyProperty &&
      'string' === typeof this.nodeGroupKeyProperty &&
      (b +=
        ',\n  "nodeGroupKeyProperty": ' +
        this.quote(this.nodeGroupKeyProperty));
    return a + b;
  };
  t.Io = function(a) {
    Z.prototype.Io.call(this, a);
    a.linkKeyProperty && (this.linkKeyProperty = a.linkKeyProperty);
    a.linkFromKeyProperty && (this.linkFromKeyProperty = a.linkFromKeyProperty);
    a.linkToKeyProperty && (this.linkToKeyProperty = a.linkToKeyProperty);
    a.linkFromPortIdProperty &&
      (this.linkFromPortIdProperty = a.linkFromPortIdProperty);
    a.linkToPortIdProperty &&
      (this.linkToPortIdProperty = a.linkToPortIdProperty);
    a.linkCategoryProperty &&
      (this.linkCategoryProperty = a.linkCategoryProperty);
    a.linkLabelKeysProperty &&
      (this.linkLabelKeysProperty = a.linkLabelKeysProperty);
    a.nodeIsGroupProperty && (this.nodeIsGroupProperty = a.nodeIsGroupProperty);
    a.nodeGroupKeyProperty &&
      (this.nodeGroupKeyProperty = a.nodeGroupKeyProperty);
  };
  t.vv = function() {
    var a = Z.prototype.vv.call(this),
      b = ',\n  "linkDataArray": ' + nr(this, this.linkDataArray, !0);
    return a + b;
  };
  t.Uu = function(a) {
    Z.prototype.Uu.call(this, a);
    a = a.linkDataArray;
    Array.isArray(a) && (this.Ll(a), (this.linkDataArray = a));
  };

  function Br(a, b) {
    for (var c = new G(), d = 0; d < a.linkDataArray.length; d++) {
      var e = a.linkDataArray[d];
      or(a, b, e, e, c);
    }
    return c;
  }
  t.tv = function(a, b) {
    '' === this.linkKeyProperty &&
      C(
        'GraphLinksModel.linkKeyProperty must not be an empty string for .toIncrementalJson() to succeed.',
      );
    var c = Z.prototype.tv.call(this, a, b),
      d = this,
      e = new G(),
      f = new G(),
      g = new G(),
      h = this.kh;
    a.changes.each(function(a) {
      a.model === d &&
        ('linkDataArray' === a.modelChange
          ? a.change === fe
            ? e.add(a.newValue)
            : a.change === ge && g.add(a.oldValue)
          : d.Cc(a.object)
          ? f.add(a.object)
          : null !== a.object &&
            (null !== a.object && h && h.contains(a.object)
              ? h.get(a.object).each(function(a) {
                  d.Cc(a) && f.add(a);
                })
              : a.object instanceof Z ||
                d.lb(a.object) ||
                Br(d, a.object).each(function(a) {
                  f.add(a);
                })));
    });
    var k = this.Xk;
    k.clear();
    e.each(function(a) {
      k.add(d.uc(a));
      b || f.add(a);
    });
    var l = this.Zk;
    l.clear();
    g.each(function(a) {
      l.add(d.uc(a));
      b && f.add(a);
    });
    a = c;
    0 < k.count && (a += (b ? this.Bv : this.zv) + nr(this, k.Ea(), !0));
    0 < f.count && (a += this.Ox + nr(this, f.Ea(), !0));
    0 < l.count && (a += (b ? this.zv : this.Bv) + nr(this, l.Ea(), !0));
    l.clear();
    k.clear();
    return a;
  };
  t.Ho = function(a) {
    ((void 0 !== a.linkCategoryProperty &&
      a.linkCategoryProperty !== this.linkCategoryProperty) ||
      (void 0 !== a.linkKeyProperty &&
        a.linkKeyProperty !== this.linkKeyProperty) ||
      (void 0 !== a.linkFromKeyProperty &&
        a.linkFromKeyProperty !== this.linkFromKeyProperty) ||
      (void 0 !== a.linkToKeyProperty &&
        a.linkToKeyProperty !== this.linkToKeyProperty) ||
      (void 0 !== a.linkFromPortIdProperty &&
        a.linkFromPortIdProperty !== this.linkFromPortIdProperty) ||
      (void 0 !== a.linkToPortIdProperty &&
        a.linkToPortIdProperty !== this.linkToPortIdProperty) ||
      (void 0 !== a.linkLabelKeysProperty &&
        a.linkLabelKeysProperty !== this.linkLabelKeysProperty) ||
      (void 0 !== a.nodeIsGroupProperty &&
        a.nodeIsGroupProperty !== this.nodeIsGroupProperty) ||
      (void 0 !== a.nodeGroupKeyProperty &&
        a.nodeGroupKeyProperty !== this.nodeGroupKeyProperty)) &&
      C('applyIncrementalJson cannot change Model properties');
    Z.prototype.Ho.call(this, a);
    var b = a.insertedLinkKeys;
    if (Array.isArray(b))
      for (var c = b.length, d = 0; d < c; d++) {
        var e = b[d],
          f = this.Zg(e);
        null === f && ((f = this.no({})), this.ks(f, e), this.Yh(f));
      }
    b = a.modifiedLinkData;
    if (Array.isArray(b))
      for (c = b.length, d = 0; d < c; d++)
        if (((e = b[d]), (f = this.uc(e)), (f = this.Zg(f)), null !== f)) {
          for (var g in e)
            '__gohashid' !== g &&
              g !== this.linkKeyProperty &&
              this.setDataProperty(f, g, e[g]);
          Cr(this, e, f);
        }
    a = a.removedLinkKeys;
    if (Array.isArray(a))
      for (g = a.length, b = 0; b < g; b++)
        (c = this.Zg(a[b])), null !== c && this.Jl(c);
  };
  Ar.prototype.changeState = function(a, b) {
    if (null !== a && a.model === this) {
      if (a.change === de) {
        var c = a.object,
          d = a.propertyName;
        if (d === this.linkKeyProperty && this.Cc(c)) {
          var e = a.I(b);
          b = a.I(!b);
          void 0 !== b && this.rb.remove(b);
          void 0 !== e && this.rb.add(e, c);
          Nj(c, d, e);
          return;
        }
      } else if (a.change === fe) {
        c = a.newParam;
        if ('linkDataArray' === a.modelChange) {
          a = a.newValue;
          ya(a) &&
            'number' === typeof c &&
            ((d = this.uc(a)),
            b
              ? (this.Rf.remove(a),
                this.ed[c] === a && this.ed.splice(c, 1),
                void 0 !== d && this.rb.remove(d))
              : (this.Rf.add(a),
                this.ed[c] !== a && this.ed.splice(c, 0, a),
                void 0 !== d && this.rb.add(d, a)));
          return;
        }
        if ('linkLabelKeys' === a.modelChange) {
          d = this.vf(a.object);
          Array.isArray(d) &&
            'number' === typeof c &&
            (b
              ? ((c = d.indexOf(a.newValue)), 0 <= c && d.splice(c, 1))
              : 0 > d.indexOf(a.newValue) && d.splice(c, 0, a.newValue));
          return;
        }
      } else if (a.change === ge) {
        c = a.oldParam;
        if ('linkDataArray' === a.modelChange) {
          a = a.oldValue;
          ya(a) &&
            'number' === typeof c &&
            ((d = this.uc(a)),
            b
              ? (this.Rf.add(a),
                this.ed[c] !== a && this.ed.splice(c, 0, a),
                void 0 !== d && this.rb.add(d, a))
              : (this.Rf.remove(a),
                this.ed[c] === a && this.ed.splice(c, 1),
                void 0 !== d && this.rb.remove(d)));
          return;
        }
        if ('linkLabelKeys' === a.modelChange) {
          d = this.vf(a.object);
          Array.isArray(d) &&
            'number' === typeof c &&
            (b
              ? 0 > d.indexOf(a.newValue) && d.splice(c, 0, a.newValue)
              : ((c = d.indexOf(a.newValue)), 0 <= c && d.splice(c, 1)));
          return;
        }
      }
      Z.prototype.changeState.call(this, a, b);
    }
  };
  t = Ar.prototype;
  t.Dl = function(a) {
    if (void 0 !== a) {
      var b = this.Li;
      if (null !== b) {
        var c = this.dc(a);
        null === c &&
          ((c = this.copyNodeData(b)),
          Nj(c, this.nodeKeyProperty, a),
          this.lf(c));
      }
      return a;
    }
  };
  t.$w = function(a) {
    return Wq(this, a, !0);
  };
  t.cv = function(a, b) {
    dr(this, a, b, !0);
  };
  t.ex = function(a) {
    return Wq(this, a, !1);
  };
  t.gv = function(a, b) {
    dr(this, a, b, !1);
  };

  function Wq(a, b, c) {
    if (
      null !== b &&
      ((a = c ? a.Ze : a.$e), '' !== a && ((a = on(b, a)), void 0 !== a))
    ) {
      if (Yq(a)) return a;
      C(
        (c ? 'FromKey' : 'ToKey') +
          ' value for link data ' +
          b +
          ' is not a number or a string: ' +
          a,
      );
    }
  }

  function dr(a, b, c, d) {
    null === c && (c = void 0);
    if (null !== b) {
      var e = d ? a.Ze : a.$e;
      if ('' !== e)
        if (((c = a.Dl(c)), a.Cc(b))) {
          var f = on(b, e);
          f !== c &&
            (br(a, f, b),
            Nj(b, e, c),
            null === a.dc(c) && cr(a, c, b),
            ur(a, d ? 'linkFromKey' : 'linkToKey', de, e, b, f, c),
            'string' === typeof e && a.Ka(b, e));
        } else Nj(b, e, c);
    }
  }
  t.ax = function(a) {
    return Vq(this, a, !0);
  };
  t.dv = function(a, b) {
    er(this, a, b, !0);
  };
  t.gx = function(a) {
    return Vq(this, a, !1);
  };
  t.hv = function(a, b) {
    er(this, a, b, !1);
  };

  function Vq(a, b, c) {
    if (null === b) return '';
    a = c ? a.$i : a.aj;
    if ('' === a) return '';
    b = on(b, a);
    return void 0 === b ? '' : b;
  }

  function er(a, b, c, d) {
    if (null !== b) {
      var e = d ? a.$i : a.aj;
      if ('' !== e)
        if (a.Cc(b)) {
          var f = on(b, e);
          void 0 === f && (f = '');
          f !== c &&
            (Nj(b, e, c),
            ur(a, d ? 'linkFromPortId' : 'linkToPortId', de, e, b, f, c),
            'string' === typeof e && a.Ka(b, e));
        } else Nj(b, e, c);
    }
  }
  t.vf = function(a) {
    if (null === a) return Dr;
    var b = this.ce;
    if ('' === b) return Dr;
    a = on(a, b);
    return void 0 === a ? Dr : a;
  };
  t.ls = function(a, b) {
    if (null !== a) {
      var c = this.ce;
      if ('' !== c)
        if (this.Cc(a)) {
          var d = on(a, c);
          void 0 === d && (d = Dr);
          if (d !== b) {
            if (Array.isArray(d))
              for (var e = d.length, f = 0; f < e; f++) br(this, d[f], a);
            Nj(a, c, b);
            e = b.length;
            for (f = 0; f < e; f++) {
              var g = b[f];
              null === this.dc(g) && cr(this, g, a);
            }
            ur(this, 'linkLabelKeys', de, c, a, d, b);
            'string' === typeof c && this.Ka(a, c);
          }
        } else Nj(a, c, b);
    }
  };
  t.hu = function(a, b) {
    if (null !== b && void 0 !== b && null !== a) {
      var c = this.ce;
      if ('' !== c) {
        var d = on(a, c);
        if (void 0 === d) (c = []), c.push(b), this.ls(a, c);
        else if (Array.isArray(d)) {
          var e = d.indexOf(b);
          0 <= e ||
            ((e = d.length),
            d.push(b),
            this.Cc(a) &&
              (null === this.dc(b) && cr(this, b, a),
              ur(this, 'linkLabelKeys', fe, c, a, null, b, null, e)));
        } else
          C(
            c +
              ' property is not an Array; cannot addLabelKeyForLinkData: ' +
              a,
          );
      }
    }
  };
  t.xx = function(a, b) {
    if (null !== b && void 0 !== b && null !== a) {
      var c = this.ce;
      if ('' !== c) {
        var d = on(a, c);
        if (Array.isArray(d)) {
          var e = d.indexOf(b);
          0 > e ||
            (d.splice(e, 1),
            this.Cc(a) &&
              (br(this, b, a),
              ur(this, 'linkLabelKeys', ge, c, a, b, null, e, null)));
        } else
          void 0 !== d &&
            C(
              c +
                ' property is not an Array; cannot removeLabelKeyforLinkData: ' +
                a,
            );
      }
    }
  };
  t.uc = function(a) {
    if (null !== a) {
      var b = this.Bh;
      if ('' !== b && ((b = on(a, b)), void 0 !== b)) {
        if (Yq(b)) return b;
        C(
          'Key value for link data ' + a + ' is not a number or a string: ' + b,
        );
      }
    }
  };
  t.ks = function(a, b) {
    if (null !== a) {
      var c = this.Bh;
      if ('' !== c)
        if (this.Cc(a)) {
          var d = on(a, c);
          d !== b &&
            null === this.Zg(b) &&
            (Nj(a, c, b),
            void 0 !== d && this.rb.remove(d),
            this.rb.add(b, a),
            ur(this, 'linkKey', de, c, a, d, b),
            'string' === typeof c && this.Ka(a, c));
        } else Nj(a, c, b);
    }
  };
  t.Zg = function(a) {
    null === a && C('GraphLinksModel.findLinkDataForKey:key must not be null');
    return void 0 !== a && Yq(a) ? this.rb.I(a) : null;
  };
  t.$r = function(a) {
    if (null !== a) {
      var b = this.Bh;
      if ('' !== b) {
        var c = this.uc(a);
        if (void 0 === c || this.rb.contains(c)) {
          var d = this.Sk;
          if (
            null !== d &&
            ((c = d(this, a)),
            void 0 !== c && null !== c && !this.rb.contains(c))
          ) {
            Nj(a, b, c);
            return;
          }
          if ('string' === typeof c) {
            for (d = 2; this.rb.contains(c + d); ) d++;
            Nj(a, b, c + d);
          } else if (void 0 === c || 'number' === typeof c) {
            for (c = -this.rb.count - 1; this.rb.contains(c); ) c--;
            Nj(a, b, c);
          }
        }
      }
    }
  };
  t.Cc = function(a) {
    return null === a ? !1 : this.Rf.contains(a);
  };
  t.Yh = function(a) {
    null !== a && (gb(a), this.Cc(a) || $q(this, a, !0));
  };

  function $q(a, b, c) {
    if ('' !== a.linkKeyProperty) {
      var d = a.uc(b);
      if (void 0 !== d && a.rb.I(d) === b) return;
      a.$r(b);
      d = a.uc(b);
      void 0 === d &&
        C(
          'GraphLinksModel.makeLinkDataKeyUnique failed on ' +
            b +
            '. Data not added to model.',
        );
      a.rb.add(d, b);
    }
    a.Rf.add(b);
    d = null;
    c && ((d = a.ed.length), a.ed.splice(d, 0, b));
    ur(a, 'linkDataArray', fe, 'linkDataArray', a, null, b, null, d);
    Er(a, b);
  }
  t.ly = function(a) {
    if (Array.isArray(a))
      for (var b = a.length, c = 0; c < b; c++) this.Yh(a[c]);
    else for (a = a.iterator; a.next(); ) this.Yh(a.value);
  };
  t.Jl = function(a) {
    null !== a && Zq(this, a, !0);
  };

  function Zq(a, b, c) {
    a.Rf.remove(b);
    var d = a.uc(b);
    void 0 !== d && a.rb.remove(d);
    d = null;
    if (c) {
      d = a.ed.indexOf(b);
      if (0 > d) return;
      a.ed.splice(d, 1);
    }
    ur(a, 'linkDataArray', ge, 'linkDataArray', a, b, null, d, null);
    c = Wq(a, b, !0);
    br(a, c, b);
    c = Wq(a, b, !1);
    br(a, c, b);
    d = a.vf(b);
    if (Array.isArray(d))
      for (var e = d.length, f = 0; f < e; f++) (c = d[f]), br(a, c, b);
  }
  t.Sz = function(a) {
    if (Array.isArray(a))
      for (var b = a.length, c = 0; c < b; c++) this.Jl(a[c]);
    else for (a = a.iterator; a.next(); ) this.Jl(a.value);
  };
  t.Gz = function(a) {
    '' === this.linkKeyProperty &&
      C(
        'GraphLinksModel.linkKeyProperty must not be an empty string for .mergeLinkDataArray() to succeed.',
      );
    if (a !== this.linkDataArray && za(a)) {
      var b = this.Zk;
      b.clear();
      b.addAll(this.rb.iteratorKeys);
      var c = this.Xk;
      c.clear();
      for (var d = a.length, e = 0; e < d; e++) {
        var f = a[e],
          g = this.uc(f);
        if (void 0 !== g) {
          c.add(g);
          var h = this.Zg(g);
          h !== f &&
            (null !== h
              ? (this.ho(h, f), Cr(this, f, h))
              : ((f = this.cloneDeep(f)), this.ks(f, g), this.Yh(f)));
        } else (g = this.cloneDeep(f)), this.Yh(g), c.add(this.uc(g));
      }
      for (a = b.iterator; a.next(); )
        (d = a.value), c.contains(d) || ((d = this.Zg(d)) && this.Jl(d));
      b.clear();
      c.clear();
    }
  };

  function Er(a, b) {
    var c = Wq(a, b, !0);
    c = a.Dl(c);
    null === a.dc(c) && cr(a, c, b);
    c = Wq(a, b, !1);
    c = a.Dl(c);
    null === a.dc(c) && cr(a, c, b);
    var d = a.vf(b);
    if (Array.isArray(d))
      for (var e = d.length, f = 0; f < e; f++)
        (c = d[f]), null === a.dc(c) && cr(a, c, b);
  }
  t.no = function(a) {
    if (null === a) return null;
    var b = this.nk;
    a = null !== b ? b(a, this) : wr(this, a, !0);
    ya(a) &&
      (Ra(a),
      '' !== this.Ze && Nj(a, this.Ze, void 0),
      '' !== this.$e && Nj(a, this.$e, void 0),
      '' !== this.ce && Nj(a, this.ce, []));
    return a;
  };
  t.Ku = function(a) {
    if (null === a) return !1;
    var b = this.Yk;
    return '' === b ? !1 : on(a, b) ? !0 : !1;
  };
  t.ah = function(a) {
    if (null !== a) {
      var b = this.ye;
      if ('' !== b && ((b = on(a, b)), void 0 !== b)) {
        if (Yq(b)) return b;
        C(
          'GroupKey value for node data ' +
            a +
            ' is not a number or a string: ' +
            b,
        );
      }
    }
  };
  t.Po = function(a, b) {
    null === b && (b = void 0);
    if (null !== a) {
      var c = this.ye;
      if ('' !== c)
        if (this.lb(a)) {
          var d = on(a, c);
          d !== b &&
            (br(this, d, a),
            Nj(a, c, b),
            null === this.dc(b) && cr(this, b, a),
            ur(this, 'nodeGroupKey', de, c, a, d, b),
            'string' === typeof c && this.Ka(a, c));
        } else Nj(a, c, b);
    }
  };
  Ar.prototype.copyNodeData = function(a) {
    if (null === a) return null;
    a = Z.prototype.copyNodeData.call(this, a);
    this.Cj ||
      '' === this.ye ||
      void 0 === on(a, this.ye) ||
      Nj(a, this.ye, void 0);
    return a;
  };
  Ar.prototype.setDataProperty = function(a, b, c) {
    if (this.lb(a)) {
      if (b === this.nodeKeyProperty) {
        this.Sl(a, c);
        return;
      }
      if (b === this.nodeCategoryProperty) {
        this.Rl(a, c);
        return;
      }
      if (b === this.nodeGroupKeyProperty) {
        this.Po(a, c);
        return;
      }
    } else if (this.Cc(a)) {
      if (b === this.linkFromKeyProperty) {
        dr(this, a, c, !0);
        return;
      }
      if (b === this.linkToKeyProperty) {
        dr(this, a, c, !1);
        return;
      }
      if (b === this.linkFromPortIdProperty) {
        er(this, a, c, !0);
        return;
      }
      if (b === this.linkToPortIdProperty) {
        er(this, a, c, !1);
        return;
      }
      if (b === this.linkKeyProperty) {
        this.ks(a, c);
        return;
      }
      if (b === this.linkCategoryProperty) {
        this.Oo(a, c);
        return;
      }
      if (b === this.linkLabelKeysProperty) {
        this.ls(a, c);
        return;
      }
    }
    var d = on(a, b);
    d !== c && (Nj(a, b, c), this.fs(a, b, d, c));
  };
  t = Ar.prototype;
  t.ho = function(a, b) {
    if (b) {
      var c = this.lb(a),
        d = this.Cc(a),
        e;
      for (e in b)
        '__gohashid' === e ||
          (c && e === this.nodeKeyProperty) ||
          (c && e === this.nodeIsGroupProperty && on(a, e) === b[e]) ||
          (d && e === this.linkKeyProperty) ||
          this.setDataProperty(a, e, b[e]);
    }
  };
  t.Mo = function(a, b) {
    Z.prototype.Mo.call(this, a, b);
    for (var c = this.kb.iterator; c.next(); ) this.Zu(c.value, a, b);
    for (c = this.Rf.iterator; c.next(); ) {
      var d = c.value,
        e = a,
        f = b;
      if (Wq(this, d, !0) === e) {
        var g = this.Ze;
        Nj(d, g, f);
        ur(this, 'linkFromKey', de, g, d, e, f);
        'string' === typeof g && this.Ka(d, g);
      }
      Wq(this, d, !1) === e &&
        ((g = this.$e),
        Nj(d, g, f),
        ur(this, 'linkToKey', de, g, d, e, f),
        'string' === typeof g && this.Ka(d, g));
      g = this.vf(d);
      if (Array.isArray(g))
        for (var h = g.length, k = this.ce, l = 0; l < h; l++)
          g[l] === e &&
            ((g[l] = f), ur(this, 'linkLabelKeys', fe, k, d, e, f, l, l));
    }
  };
  t.Zu = function(a, b, c) {
    if (this.ah(a) === b) {
      var d = this.ye;
      Nj(a, d, c);
      ur(this, 'nodeGroupKey', de, d, a, b, c);
      'string' === typeof d && this.Ka(a, d);
    }
  };
  t.ov = function() {
    Z.prototype.ov.call(this);
    for (var a = this.linkDataArray, b = a.length, c = 0; c < b; c++)
      Er(this, a[c]);
  };
  t.Nl = function(a) {
    Z.prototype.Nl.call(this, a);
    a = this.ua(a);
    var b = ar(this, a);
    if (null !== b) {
      var c = Ea();
      for (b = b.iterator; b.next(); ) {
        var d = b.value;
        if (this.lb(d)) {
          if (this.ah(d) === a) {
            var e = this.ye;
            ur(this, 'nodeGroupKey', de, e, d, a, a);
            'string' === typeof e && this.Ka(d, e);
            c.push(d);
          }
        } else if (
          (Wq(this, d, !0) === a &&
            ((e = this.Ze),
            ur(this, 'linkFromKey', de, e, d, a, a),
            'string' === typeof e && this.Ka(d, e),
            c.push(d)),
          Wq(this, d, !1) === a &&
            ((e = this.$e),
            ur(this, 'linkToKey', de, e, d, a, a),
            'string' === typeof e && this.Ka(d, e),
            c.push(d)),
          (e = this.vf(d)),
          Array.isArray(e))
        )
          for (var f = e.length, g = this.ce, h = 0; h < f; h++)
            e[h] === a &&
              (ur(this, 'linkLabelKeys', fe, g, d, a, a, h, h), c.push(d));
      }
      for (b = 0; b < c.length; b++) br(this, a, c[b]);
      Ga(c);
    }
  };
  t.Ml = function(a) {
    Z.prototype.Ml.call(this, a);
    var b = this.ah(a);
    null === this.dc(b) && cr(this, b, a);
  };
  t.To = function(a) {
    Z.prototype.To.call(this, a);
    var b = this.ah(a);
    br(this, b, a);
  };
  t.Mr = function(a) {
    if (null === a) return '';
    var b = this.Zi;
    if ('' === b) return '';
    b = on(a, b);
    if (void 0 === b) return '';
    if ('string' === typeof b) return b;
    C('getCategoryForLinkData found a non-string category for ' + a + ': ' + b);
  };
  Ar.prototype.getLinkCategoryForData = function(a) {
    return this.Mr(a);
  };
  Ar.prototype.Oo = function(a, b) {
    if (null !== a) {
      var c = this.Zi;
      if ('' !== c)
        if (this.Cc(a)) {
          var d = on(a, c);
          void 0 === d && (d = '');
          d !== b &&
            (Nj(a, c, b),
            ur(this, 'linkCategory', de, c, a, d, b),
            'string' === typeof c && this.Ka(a, c));
        } else Nj(a, c, b);
    }
  };
  Ar.prototype.setLinkCategoryForData = function(a, b) {
    this.Oo(a, b);
  };
  t = Ar.prototype;
  t.Tl = function(a, b) {
    Z.prototype.Tl.call(this, a, b);
    this.Po(b, this.ah(a));
  };

  function Cr(a, b, c) {
    a.Oo(c, a.Mr(b));
    a.cv(c, a.$w(b));
    a.gv(c, a.ex(b));
    a.ls(c, a.vf(b));
    a.dv(c, a.ax(b));
    a.hv(c, a.gx(b));
  }
  t.Nj = function() {
    return !0;
  };
  t.ki = function() {
    return !0;
  };
  t.Vr = function() {
    return !0;
  };
  t.Oj = function() {
    return !0;
  };
  ma.Object.defineProperties(Ar.prototype, {
    archetypeNodeData: {
      get: function() {
        return this.Li;
      },
      set: function(a) {
        var b = this.Li;
        b !== a && ((this.Li = a), this.g('archetypeNodeData', b, a));
      },
    },
    linkFromKeyProperty: {
      get: function() {
        return this.Ze;
      },
      set: function(a) {
        var b = this.Ze;
        b !== a && ((this.Ze = a), this.g('linkFromKeyProperty', b, a));
      },
    },
    linkToKeyProperty: {
      get: function() {
        return this.$e;
      },
      set: function(a) {
        var b = this.$e;
        b !== a && ((this.$e = a), this.g('linkToKeyProperty', b, a));
      },
    },
    linkFromPortIdProperty: {
      get: function() {
        return this.$i;
      },
      set: function(a) {
        var b = this.$i;
        b !== a && ((this.$i = a), this.g('linkFromPortIdProperty', b, a));
      },
    },
    linkToPortIdProperty: {
      get: function() {
        return this.aj;
      },
      set: function(a) {
        var b = this.aj;
        b !== a && ((this.aj = a), this.g('linkToPortIdProperty', b, a));
      },
    },
    linkLabelKeysProperty: {
      get: function() {
        return this.ce;
      },
      set: function(a) {
        var b = this.ce;
        b !== a && ((this.ce = a), this.g('linkLabelKeysProperty', b, a));
      },
    },
    linkDataArray: {
      get: function() {
        return this.ed;
      },
      set: function(a) {
        var b = this.ed;
        if (b !== a) {
          this.rb.clear();
          for (var c = a.length, d = 0; d < c; d++) {
            var e = a[d];
            ya(e) ||
              C(
                'GraphLinksModel.linkDataArray must only contain Objects, not: ' +
                  e,
              );
            gb(e);
          }
          this.ed = a;
          if ('' !== this.linkKeyProperty) {
            d = new E();
            for (e = 0; e < c; e++) {
              var f = a[e],
                g = this.uc(f);
              void 0 === g
                ? d.add(f)
                : null !== this.rb.I(g)
                ? d.add(f)
                : this.rb.add(g, f);
            }
            for (d = d.iterator; d.next(); )
              (e = d.value),
                this.$r(e),
                (f = this.uc(e)),
                void 0 !== f && this.rb.add(f, e);
          }
          d = new G();
          for (e = 0; e < c; e++) d.add(a[e]);
          this.Rf = d;
          ur(this, 'linkDataArray', de, 'linkDataArray', this, b, a);
          for (b = 0; b < c; b++) Er(this, a[b]);
        }
      },
    },
    linkKeyProperty: {
      get: function() {
        return this.Bh;
      },
      set: function(a) {
        var b = this.Bh;
        if (b !== a) {
          this.Bh = a;
          this.rb.clear();
          for (var c = this.linkDataArray.length, d = 0; d < c; d++) {
            var e = this.linkDataArray[d],
              f = this.uc(e);
            void 0 === f && (this.$r(e), (f = this.uc(e)));
            void 0 !== f && this.rb.add(f, e);
          }
          this.g('linkKeyProperty', b, a);
        }
      },
    },
    makeUniqueLinkKeyFunction: {
      get: function() {
        return this.Sk;
      },
      set: function(a) {
        var b = this.Sk;
        b !== a && ((this.Sk = a), this.g('makeUniqueLinkKeyFunction', b, a));
      },
    },
    copyLinkDataFunction: {
      get: function() {
        return this.nk;
      },
      set: function(a) {
        var b = this.nk;
        b !== a && ((this.nk = a), this.g('copyLinkDataFunction', b, a));
      },
    },
    nodeIsGroupProperty: {
      get: function() {
        return this.Yk;
      },
      set: function(a) {
        var b = this.Yk;
        b !== a && ((this.Yk = a), this.g('nodeIsGroupProperty', b, a));
      },
    },
    nodeGroupKeyProperty: {
      get: function() {
        return this.ye;
      },
      set: function(a) {
        var b = this.ye;
        b !== a && ((this.ye = a), this.g('nodeGroupKeyProperty', b, a));
      },
    },
    Cj: {
      get: function() {
        return this.tm;
      },
      set: function(a) {
        this.tm !== a && (this.tm = a);
      },
    },
    linkCategoryProperty: {
      get: function() {
        return this.Zi;
      },
      set: function(a) {
        var b = this.Zi;
        b !== a && ((this.Zi = a), this.g('linkCategoryProperty', b, a));
      },
    },
    type: {
      get: function() {
        return 'GraphLinksModel';
      },
    },
  });
  Ar.prototype.setCategoryForLinkData = Ar.prototype.Oo;
  Ar.prototype.getCategoryForLinkData = Ar.prototype.Mr;
  Ar.prototype.assignAllDataProperties = Ar.prototype.ho;
  Ar.prototype.setGroupKeyForNodeData = Ar.prototype.Po;
  Ar.prototype.getGroupKeyForNodeData = Ar.prototype.ah;
  Ar.prototype.isGroupForNodeData = Ar.prototype.Ku;
  Ar.prototype.copyLinkData = Ar.prototype.no;
  Ar.prototype.mergeLinkDataArray = Ar.prototype.Gz;
  Ar.prototype.removeLinkDataCollection = Ar.prototype.Sz;
  Ar.prototype.removeLinkData = Ar.prototype.Jl;
  Ar.prototype.addLinkDataCollection = Ar.prototype.ly;
  Ar.prototype.addLinkData = Ar.prototype.Yh;
  Ar.prototype.containsLinkData = Ar.prototype.Cc;
  Ar.prototype.makeLinkDataKeyUnique = Ar.prototype.$r;
  Ar.prototype.findLinkDataForKey = Ar.prototype.Zg;
  Ar.prototype.setKeyForLinkData = Ar.prototype.ks;
  Ar.prototype.getKeyForLinkData = Ar.prototype.uc;
  Ar.prototype.removeLabelKeyForLinkData = Ar.prototype.xx;
  Ar.prototype.addLabelKeyForLinkData = Ar.prototype.hu;
  Ar.prototype.setLabelKeysForLinkData = Ar.prototype.ls;
  Ar.prototype.getLabelKeysForLinkData = Ar.prototype.vf;
  Ar.prototype.setToPortIdForLinkData = Ar.prototype.hv;
  Ar.prototype.getToPortIdForLinkData = Ar.prototype.gx;
  Ar.prototype.setFromPortIdForLinkData = Ar.prototype.dv;
  Ar.prototype.getFromPortIdForLinkData = Ar.prototype.ax;
  Ar.prototype.setToKeyForLinkData = Ar.prototype.gv;
  Ar.prototype.getToKeyForLinkData = Ar.prototype.ex;
  Ar.prototype.setFromKeyForLinkData = Ar.prototype.cv;
  Ar.prototype.getFromKeyForLinkData = Ar.prototype.$w;
  Ar.prototype.clear = Ar.prototype.clear;
  var Dr = Object.freeze([]);
  Ar.className = 'GraphLinksModel';
  yr.GraphLinksModel = Ar;
  Z.constructGraphLinksModel = Z.constructGraphLinksModel = function() {
    return new Ar();
  };
  Z.initDiagramModel = oi = function() {
    return new Ar();
  };

  function Fr(a, b) {
    Z.call(this);
    this.ze = 'parent';
    this.vm = !1;
    this.ij = 'parentLinkCategory';
    void 0 !== a && (za(a) ? (this.nodeDataArray = a) : Object.assign(this, a));
    b && Object.assign(this, b);
  }
  la(Fr, Z);
  Fr.constructGraphLinksModel = Z.constructGraphLinksModel;
  Fr.prototype.cloneProtected = function(a) {
    Z.prototype.cloneProtected.call(this, a);
    a.ze = this.ze;
    a.vm = this.vm;
    a.ij = this.ij;
  };
  t = Fr.prototype;
  t.toString = function(a) {
    void 0 === a && (a = 0);
    if (2 <= a) return this.Qo();
    var b = ('' !== this.name ? this.name : '') + ' TreeModel';
    if (0 < a) {
      b += '\n node data:';
      a = this.nodeDataArray;
      for (var c = a.length, d = 0; d < c; d++) {
        var e = a[d];
        b += ' ' + this.ua(e) + ':' + Ia(e);
      }
    }
    return b;
  };
  t.am = function() {
    var a = Z.prototype.am.call(this),
      b = '';
    'parent' !== this.nodeParentKeyProperty &&
      'string' === typeof this.nodeParentKeyProperty &&
      (b +=
        ',\n  "nodeParentKeyProperty": ' +
        this.quote(this.nodeParentKeyProperty));
    return a + b;
  };
  t.Io = function(a) {
    Z.prototype.Io.call(this, a);
    a.nodeParentKeyProperty &&
      (this.nodeParentKeyProperty = a.nodeParentKeyProperty);
  };
  t.Ho = function(a) {
    void 0 !== a.nodeParentKeyProperty &&
      a.nodeParentKeyProperty !== this.nodeParentKeyProperty &&
      C('applyIncrementalJson cannot change Model properties');
    Z.prototype.Ho.call(this, a);
  };
  t.Dl = function(a) {
    return a;
  };
  t.bh = function(a) {
    if (null !== a) {
      var b = this.ze;
      if ('' !== b && ((b = on(a, b)), void 0 !== b)) {
        if (Yq(b)) return b;
        C(
          'ParentKey value for node data ' +
            a +
            ' is not a number or a string: ' +
            b,
        );
      }
    }
  };
  t.ie = function(a, b) {
    null === b && (b = void 0);
    if (null !== a) {
      var c = this.ze;
      if ('' !== c)
        if (((b = this.Dl(b)), this.lb(a))) {
          var d = on(a, c);
          d !== b &&
            (br(this, d, a),
            Nj(a, c, b),
            null === this.dc(b) && cr(this, b, a),
            ur(this, 'nodeParentKey', de, c, a, d, b),
            'string' === typeof c && this.Ka(a, c));
        } else Nj(a, c, b);
    }
  };
  t.Pr = function(a) {
    if (null === a) return '';
    var b = this.ij;
    if ('' === b) return '';
    b = on(a, b);
    if (void 0 === b) return '';
    if ('string' === typeof b) return b;
    C(
      'getParentLinkCategoryForNodeData found a non-string category for ' +
        a +
        ': ' +
        b,
    );
    return '';
  };
  Fr.prototype.getLinkCategoryForData = function(a) {
    return this.Pr(a);
  };
  Fr.prototype.ms = function(a, b) {
    if (null !== a) {
      var c = this.ij;
      if ('' !== c)
        if (this.lb(a)) {
          var d = on(a, c);
          void 0 === d && (d = '');
          d !== b &&
            (Nj(a, c, b),
            ur(this, 'parentLinkCategory', de, c, a, d, b),
            'string' === typeof c && this.Ka(a, c));
        } else Nj(a, c, b);
    }
  };
  Fr.prototype.setLinkCategoryForData = function(a, b) {
    this.ms(a, b);
  };
  Fr.prototype.copyNodeData = function(a) {
    if (null === a) return null;
    a = Z.prototype.copyNodeData.call(this, a);
    this.Dj ||
      '' === this.ze ||
      void 0 === on(a, this.ze) ||
      Nj(a, this.ze, void 0);
    return a;
  };
  Fr.prototype.setDataProperty = function(a, b, c) {
    if (this.lb(a)) {
      if (b === this.nodeKeyProperty) {
        this.Sl(a, c);
        return;
      }
      if (b === this.nodeCategoryProperty) {
        this.Rl(a, c);
        return;
      }
      if (b === this.nodeParentKeyProperty) {
        this.ie(a, c);
        return;
      }
    }
    var d = on(a, b);
    d !== c && (Nj(a, b, c), this.fs(a, b, d, c));
  };
  t = Fr.prototype;
  t.Mo = function(a, b) {
    Z.prototype.Mo.call(this, a, b);
    for (var c = this.kb.iterator; c.next(); ) this.Zu(c.value, a, b);
  };
  t.Zu = function(a, b, c) {
    if (this.bh(a) === b) {
      var d = this.ze;
      Nj(a, d, c);
      ur(this, 'nodeParentKey', de, d, a, b, c);
      'string' === typeof d && this.Ka(a, d);
    }
  };
  t.Nl = function(a) {
    Z.prototype.Nl.call(this, a);
    a = this.ua(a);
    var b = ar(this, a);
    if (null !== b) {
      var c = Ea();
      for (b = b.iterator; b.next(); ) {
        var d = b.value;
        if (this.lb(d) && this.bh(d) === a) {
          var e = this.ze;
          ur(this, 'nodeParentKey', de, e, d, a, a);
          'string' === typeof e && this.Ka(d, e);
          c.push(d);
        }
      }
      for (b = 0; b < c.length; b++) br(this, a, c[b]);
      Ga(c);
    }
  };
  t.Ml = function(a) {
    Z.prototype.Ml.call(this, a);
    var b = this.bh(a);
    b = this.Dl(b);
    null === this.dc(b) && cr(this, b, a);
  };
  t.To = function(a) {
    Z.prototype.To.call(this, a);
    var b = this.bh(a);
    br(this, b, a);
  };
  t.Tl = function(a, b) {
    Z.prototype.Tl.call(this, a, b);
    this.ms(b, this.Pr(a));
    this.ie(b, this.bh(a));
  };
  t.Bl = function() {
    return !0;
  };
  t.Vr = function() {
    return !0;
  };
  ma.Object.defineProperties(Fr.prototype, {
    nodeParentKeyProperty: {
      get: function() {
        return this.ze;
      },
      set: function(a) {
        var b = this.ze;
        b !== a && ((this.ze = a), this.g('nodeParentKeyProperty', b, a));
      },
    },
    Dj: {
      get: function() {
        return this.vm;
      },
      set: function(a) {
        this.vm !== a && (this.vm = a);
      },
    },
    parentLinkCategoryProperty: {
      get: function() {
        return this.ij;
      },
      set: function(a) {
        var b = this.ij;
        b !== a && ((this.ij = a), this.g('parentLinkCategoryProperty', b, a));
      },
    },
    linkCategoryProperty: {
      get: function() {
        return this.parentLinkCategoryProperty;
      },
      set: function(a) {
        this.parentLinkCategoryProperty = a;
      },
    },
    type: {
      get: function() {
        return 'TreeModel';
      },
    },
  });
  Fr.prototype.setParentLinkCategoryForNodeData = Fr.prototype.ms;
  Fr.prototype.getParentLinkCategoryForNodeData = Fr.prototype.Pr;
  Fr.prototype.setParentKeyForNodeData = Fr.prototype.ie;
  Fr.prototype.getParentKeyForNodeData = Fr.prototype.bh;
  Fr.className = 'TreeModel';
  yr.TreeModel = Fr;

  function Gr(a) {
    qi.call(this);
    this.Qv = this.Hm = this.hc = 0;
    this.zp = 360;
    this.Pv = Hr;
    this.Ni = 0;
    this.Dv = new I();
    this.mp = this.ee = 0;
    this.wr = new Ir();
    this.Is = this.hj = 0;
    this.Zx = 600;
    this.In = NaN;
    this.km = 1;
    this.Un = 0;
    this.jl = 360;
    this.Nb = Hr;
    this.L = Jr;
    this.fd = Kr;
    this.Zc = zq;
    this.gf = 6;
    this.un = Lr;
    a && Object.assign(this, a);
  }
  la(Gr, qi);
  Gr.prototype.cloneProtected = function(a) {
    qi.prototype.cloneProtected.call(this, a);
    a.In = this.In;
    a.km = this.km;
    a.Un = this.Un;
    a.jl = this.jl;
    a.Nb = this.Nb;
    a.L = this.L;
    a.fd = this.fd;
    a.Zc = this.Zc;
    a.gf = this.gf;
    a.un = this.un;
  };
  Gr.prototype.ob = function(a) {
    if (a.classType === Gr)
      if (a === Mr || a === Nr || a === Or || a === Pr || a === Kr)
        this.sorting = a;
      else if (a === Qr || a === Rr || a === Jr || a === Sr) this.direction = a;
      else if (a === Tr || a === Ur || a === Hr || a === Vr)
        this.arrangement = a;
      else {
        if (a === Wr || a === Lr) this.nodeDiameterFormula = a;
      }
    else qi.prototype.ob.call(this, a);
  };
  Gr.prototype.createNetwork = function() {
    return new Xr(this);
  };
  Gr.prototype.doLayout = function(a) {
    null === this.network && (this.network = this.makeNetwork(a));
    this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin);
    a = this.network.vertexes;
    if (1 >= a.count)
      1 === a.count && ((a = a.first()), (a.centerX = 0), (a.centerY = 0));
    else {
      var b = new E();
      b.addAll(a.iterator);
      a = new E();
      var c = new E();
      var d = this.sort(b);
      var e,
        f,
        g = this.mp;
      var h = this.arrangement;
      var k = this.nodeDiameterFormula;
      var l = this.radius;
      if (!isFinite(l) || 0 >= l) l = NaN;
      var m = this.aspectRatio;
      if (!isFinite(m) || 0 >= m) m = 1;
      var n = this.startAngle;
      isFinite(n) || (n = 0);
      var p = this.sweepAngle;
      if (!isFinite(p) || 360 < p || 1 > p) p = 360;
      b = this.spacing;
      isFinite(b) || (b = NaN);
      h === Vr && k === Wr
        ? (h = Hr)
        : h === Vr && k !== Wr && (h = this.arrangement);
      if (
        (this.direction === Qr || this.direction === Rr) &&
        this.sorting !== Kr
      ) {
        for (k = 0; !(k >= d.length); k += 2) {
          a.add(d.K(k));
          if (k + 1 >= d.length) break;
          c.add(d.K(k + 1));
        }
        this.direction === Qr
          ? (this.arrangement === Vr && a.reverse(),
            (d = new E()),
            d.addAll(a),
            d.addAll(c))
          : (this.arrangement === Vr && c.reverse(),
            (d = new E()),
            d.addAll(c),
            d.addAll(a));
      }
      k = d.length;
      for (var r = (f = e = 0); r < d.length; r++) {
        var q = n + (p * f * (this.direction === Jr ? 1 : -1)) / k,
          u = d.K(r).diameter;
        isNaN(u) && (u = Yr(d.K(r), q));
        360 > p && (0 === r || r === d.length - 1) && (u /= 2);
        e += u;
        f++;
      }
      if (isNaN(l) || h === Vr) {
        isNaN(b) && (b = 6);
        if (h !== Hr && h !== Vr) {
          f = -Infinity;
          for (g = 0; g < k; g++)
            (r = d.K(g)),
              (e = d.K(g === k - 1 ? 0 : g + 1)),
              isNaN(r.diameter) && Yr(r, 0),
              isNaN(e.diameter) && Yr(e, 0),
              (f = Math.max(f, (r.diameter + e.diameter) / 2));
          g = f + b;
          h === Tr
            ? (l = (f + b) / ((2 * Math.PI) / k))
            : (l = Zr(
                this,
                g * (360 <= p ? k : k - 1),
                m,
                (n * Math.PI) / 180,
                (p * Math.PI) / 180,
              ));
        } else
          l = Zr(
            this,
            e + (360 <= p ? k : k - 1) * (h !== Vr ? b : 1.6 * b),
            m,
            (n * Math.PI) / 180,
            (p * Math.PI) / 180,
          );
        f = l * m;
      } else if (
        ((f = l * m),
        (r = $r(this, l, f, (n * Math.PI) / 180, (p * Math.PI) / 180)),
        isNaN(b))
      ) {
        if (h === Hr || h === Vr) b = (r - e) / (360 <= p ? k : k - 1);
      } else if (h === Hr || h === Vr)
        (r = (r - e) / (360 <= p ? k : k - 1)),
          r < b
            ? ((l = Zr(
                this,
                e + b * (360 <= p ? k : k - 1),
                m,
                (n * Math.PI) / 180,
                (p * Math.PI) / 180,
              )),
              (f = l * m))
            : (b = r);
      else {
        g = -Infinity;
        for (e = 0; e < k; e++)
          (q = d.K(e)),
            (u = d.K(e === k - 1 ? 0 : e + 1)),
            isNaN(q.diameter) && Yr(q, 0),
            isNaN(u.diameter) && Yr(u, 0),
            (g = Math.max(g, (q.diameter + u.diameter) / 2));
        g += b;
        e = Zr(
          this,
          g * (360 <= p ? k : k - 1),
          m,
          (n * Math.PI) / 180,
          (p * Math.PI) / 180,
        );
        e > l ? ((l = e), (f = l * m)) : (g = r / (360 <= p ? k : k - 1));
      }
      this.Pv = h;
      this.hc = l;
      this.Hm = m;
      this.Qv = n;
      this.zp = p;
      this.Ni = b;
      this.ee = f;
      this.mp = g;
      b = d;
      d = this.Pv;
      h = this.hc;
      l = this.Qv;
      m = this.zp;
      n = this.Ni;
      p = this.ee;
      k = this.mp;
      if ((this.direction !== Qr && this.direction !== Rr) || d !== Vr)
        if (this.direction === Qr || this.direction === Rr) {
          g = 0;
          switch (d) {
            case Ur:
              g = (180 * as(this, h, p, l, k)) / Math.PI;
              break;
            case Hr:
              k = b = 0;
              g = a.first();
              null !== g && (b = Yr(g, Math.PI / 2));
              g = c.first();
              null !== g && (k = Yr(g, Math.PI / 2));
              g = (180 * as(this, h, p, l, n + (b + k) / 2)) / Math.PI;
              break;
            case Tr:
              g = m / b.length;
          }
          if (this.direction === Qr) {
            switch (d) {
              case Ur:
                bs(this, a, l, Sr);
                break;
              case Hr:
                cs(this, a, l, Sr);
                break;
              case Tr:
                ds(this, a, m / 2, l, Sr);
            }
            switch (d) {
              case Ur:
                bs(this, c, l + g, Jr);
                break;
              case Hr:
                cs(this, c, l + g, Jr);
                break;
              case Tr:
                ds(this, c, m / 2, l + g, Jr);
            }
          } else {
            switch (d) {
              case Ur:
                bs(this, c, l, Sr);
                break;
              case Hr:
                cs(this, c, l, Sr);
                break;
              case Tr:
                ds(this, c, m / 2, l, Sr);
            }
            switch (d) {
              case Ur:
                bs(this, a, l + g, Jr);
                break;
              case Hr:
                cs(this, a, l + g, Jr);
                break;
              case Tr:
                ds(this, a, m / 2, l + g, Jr);
            }
          }
        } else
          switch (d) {
            case Ur:
              bs(this, b, l, this.direction);
              break;
            case Hr:
              cs(this, b, l, this.direction);
              break;
            case Tr:
              ds(this, b, m, l, this.direction);
              break;
            case Vr:
              es(this, b, m, l, this.direction);
          }
      else es(this, b, m, l - m / 2, Jr);
    }
    this.updateParts();
    this.network = null;
    this.isValidLayout = !0;
  };

  function ds(a, b, c, d, e) {
    var f = a.zp,
      g = a.hc;
    a = a.ee;
    d = (d * Math.PI) / 180;
    c = (c * Math.PI) / 180;
    for (var h = b.length, k = 0; k < h; k++) {
      var l = d + (e === Jr ? (k * c) / (360 <= f ? h : h - 1) : -(k * c) / h),
        m = b.K(k),
        n = (g * Math.tan(l)) / a;
      n = Math.sqrt((g * g + a * a * n * n) / (1 + n * n));
      m.centerX = n * Math.cos(l);
      m.centerY = n * Math.sin(l);
      m.actualAngle = (180 * l) / Math.PI;
    }
  }

  function cs(a, b, c, d) {
    var e = a.hc,
      f = a.ee,
      g = a.Ni;
    c = (c * Math.PI) / 180;
    for (var h = b.length, k = 0; k < h; k++) {
      var l = b.K(k),
        m = b.K(k === h - 1 ? 0 : k + 1),
        n = f * Math.sin(c);
      l.centerX = e * Math.cos(c);
      l.centerY = n;
      l.actualAngle = (180 * c) / Math.PI;
      isNaN(l.diameter) && Yr(l, 0);
      isNaN(m.diameter) && Yr(m, 0);
      l = as(a, e, f, d === Jr ? c : -c, (l.diameter + m.diameter) / 2 + g);
      c += d === Jr ? l : -l;
    }
  }

  function bs(a, b, c, d) {
    var e = a.hc,
      f = a.ee,
      g = a.mp;
    c = (c * Math.PI) / 180;
    for (var h = b.length, k = 0; k < h; k++) {
      var l = b.K(k);
      l.centerX = e * Math.cos(c);
      l.centerY = f * Math.sin(c);
      l.actualAngle = (180 * c) / Math.PI;
      l = as(a, e, f, d === Jr ? c : -c, g);
      c += d === Jr ? l : -l;
    }
  }

  function es(a, b, c, d, e) {
    var f = a.zp;
    a.hj = 0;
    a.wr = new Ir();
    if (360 > c) {
      for (f = d + (e === Jr ? f : -f); 0 > f; ) f += 360;
      f %= 360;
      180 < f && (f -= 360);
      f *= Math.PI / 180;
      a.Is = f;
      fs(a, b, c, d, e);
    } else gs(a, b, c, d, e);
    a.wr.commit(b);
  }

  function gs(a, b, c, d, e) {
    var f = a.hc,
      g = a.Ni,
      h = a.Hm,
      k = f * Math.cos((d * Math.PI) / 180),
      l = a.ee * Math.sin((d * Math.PI) / 180),
      m = b.Ea();
    if (3 === m.length)
      (m[0].centerX = f),
        (m[0].centerY = 0),
        (m[1].centerX = m[0].centerX - m[0].width / 2 - m[1].width / 2 - g),
        (m[1].y = m[0].y),
        (m[2].centerX = (m[0].centerX + m[1].centerX) / 2),
        (m[2].y = m[0].y - m[2].height - g);
    else if (4 === m.length)
      (m[0].centerX = f),
        (m[0].centerY = 0),
        (m[2].centerX = -m[0].centerX),
        (m[2].centerY = m[0].centerY),
        (m[1].centerX = 0),
        (m[1].y = Math.min(m[0].y, m[2].y) - m[1].height - g),
        (m[3].centerX = 0),
        (m[3].y = Math.max(m[0].y + m[0].height + g, m[2].y + m[2].height + g));
    else {
      f = I.alloc();
      for (var n = 0; n < m.length; n++) {
        m[n].centerX = k;
        m[n].centerY = l;
        if (n >= m.length - 1) break;
        hs(a, k, l, m, n, e, f) || is(a, k, l, m, n, e, f);
        k = f.x;
        l = f.y;
      }
      I.free(f);
      a.hj++;
      if (!(23 < a.hj)) {
        k = m[0].centerX;
        l = m[0].centerY;
        f = m[m.length - 1].centerX;
        n = m[m.length - 1].centerY;
        var p =
            Math.abs(k - f) - ((m[0].width + m[m.length - 1].width) / 2 + g),
          r =
            Math.abs(l - n) - ((m[0].height + m[m.length - 1].height) / 2 + g);
        g = 0;
        1 > Math.abs(r)
          ? Math.abs(k - f) < (m[0].width + m[m.length - 1].width) / 2 &&
            (g = 0)
          : (g = 0 < r ? r : 1 > Math.abs(p) ? 0 : p);
        k = Math.abs(f) > Math.abs(n) ? 0 < f !== l > n : 0 < n !== k < f;
        if ((k = e === Jr ? k : !k))
          (g = -Math.abs(g)),
            (g = Math.min(g, -m[m.length - 1].width)),
            (g = Math.min(g, -m[m.length - 1].height));
        a.wr.compare(g, m);
        1 < Math.abs(g) &&
          ((a.hc =
            8 > a.hj
              ? a.hc - g / (2 * Math.PI)
              : 5 > m.length && 10 < g
              ? a.hc / 2
              : a.hc - (0 < g ? 1.7 : -2.3)),
          (a.ee = a.hc * h),
          gs(a, b, c, d, e));
      }
    }
  }

  function fs(a, b, c, d, e) {
    for (
      var f = a.hc,
        g = a.ee,
        h = a.Hm,
        k = f * Math.cos((d * Math.PI) / 180),
        l = g * Math.sin((d * Math.PI) / 180),
        m = I.alloc(),
        n = b.Ea(),
        p = 0;
      p < n.length;
      p++
    ) {
      n[p].centerX = k;
      n[p].centerY = l;
      if (p >= n.length - 1) break;
      hs(a, k, l, n, p, e, m) || is(a, k, l, n, p, e, m);
      k = m.x;
      l = m.y;
    }
    I.free(m);
    a.hj++;
    if (!(23 < a.hj)) {
      k = Math.atan2(l, k);
      k = e === Jr ? a.Is - k : k - a.Is;
      k = Math.abs(k) < Math.abs(k - 2 * Math.PI) ? k : k - 2 * Math.PI;
      f = (k * (f + g)) / 2;
      g = a.wr;
      if (Math.abs(f) < Math.abs(g.xl))
        for (g.xl = f, g.bk = [], g.cm = [], k = 0; k < n.length; k++)
          (g.bk[k] = n[k].bounds.x), (g.cm[k] = n[k].bounds.y);
      1 < Math.abs(f) &&
        ((a.hc =
          8 > a.hj ? a.hc - f / (2 * Math.PI) : a.hc - (0 < f ? 1.7 : -2.3)),
        (a.ee = a.hc * h),
        fs(a, b, c, d, e));
    }
  }

  function hs(a, b, c, d, e, f, g) {
    var h = a.hc,
      k = a.ee,
      l = 0;
    a = (d[e].width + d[e + 1].width) / 2 + a.Ni;
    var m = !1;
    if (0 <= c !== (f === Jr)) {
      if (((f = b + a), f > h)) {
        f = b - a;
        if (f < -h) return (g.x = f), (g.y = l), !1;
        m = !0;
      }
    } else if (((f = b - a), f < -h)) {
      f = b + a;
      if (f > h) return (g.x = f), (g.y = l), !1;
      m = !0;
    }
    l = Math.sqrt(1 - Math.min(1, (f * f) / (h * h))) * k;
    0 > c !== m && (l = -l);
    if (Math.abs(c - l) > (d[e].height + d[e + 1].height) / 2)
      return (g.x = f), (g.y = l), !1;
    g.x = f;
    g.y = l;
    return !0;
  }

  function is(a, b, c, d, e, f, g) {
    var h = a.hc,
      k = a.ee,
      l = 0;
    a = (d[e].height + d[e + 1].height) / 2 + a.Ni;
    d = !1;
    if (0 <= b !== (f === Jr)) {
      if (((f = c - a), f < -k)) {
        f = c + a;
        if (f > k) {
          g.x = l;
          g.y = f;
          return;
        }
        d = !0;
      }
    } else if (((f = c + a), f > k)) {
      f = c - a;
      if (f < -k) {
        g.x = l;
        g.y = f;
        return;
      }
      d = !0;
    }
    l = Math.sqrt(1 - Math.min(1, (f * f) / (k * k))) * h;
    0 > b !== d && (l = -l);
    g.x = l;
    g.y = f;
  }
  Gr.prototype.commitLayout = function() {
    this.commitNodes();
    this.isRouting && this.commitLinks();
  };
  Gr.prototype.commitNodes = function() {
    var a =
        null !== this.group &&
        null !== this.group.placeholder &&
        this.group.isSubGraphExpanded,
      b = a ? this.group.location.copy() : null,
      c = this.actualCenter;
    a
      ? (c = new I(0, 0))
      : ((c.x = this.arrangementOrigin.x + this.hc),
        (c.y = this.arrangementOrigin.y + this.ee));
    for (var d = this.network.vertexes.iterator; d.next(); ) {
      var e = d.value;
      e.x += c.x;
      e.y += c.y;
      e.commit();
    }
    a &&
      (this.group.Za(),
      (a = this.group.position.copy()),
      (c = this.group.location.copy()),
      (b = b.je(c.je(a))),
      this.group.move(b),
      (this.Dv = b.je(a)));
  };
  Gr.prototype.commitLinks = function() {
    for (var a = this.network.edges.iterator; a.next(); ) a.value.commit();
  };

  function $r(a, b, c, d, e) {
    var f = a.Zx;
    if (0.001 > Math.abs(a.Hm - 1))
      return void 0 !== d && void 0 !== e ? e * b : 2 * Math.PI * b;
    a = b > c ? Math.sqrt(b * b - c * c) / b : Math.sqrt(c * c - b * b) / c;
    var g = 0;
    var h =
      void 0 !== d && void 0 !== e ? e / (f + 1) : Math.PI / (2 * (f + 1));
    for (var k = 0, l = 0; l <= f; l++) {
      void 0 !== d && void 0 !== e
        ? (k = d + (l * e) / f)
        : (k = (l * Math.PI) / (2 * f));
      var m = Math.sin(k);
      g += Math.sqrt(1 - a * a * m * m) * h;
    }
    return void 0 !== d && void 0 !== e
      ? (b > c ? b : c) * g
      : 4 * (b > c ? b : c) * g;
  }

  function Zr(a, b, c, d, e) {
    return b / (void 0 !== d && void 0 !== e ? $r(a, 1, c, d, e) : $r(a, 1, c));
  }

  function as(a, b, c, d, e) {
    if (0.001 > Math.abs(a.Hm - 1)) return e / b;
    var f = b > c ? Math.sqrt(b * b - c * c) / b : Math.sqrt(c * c - b * b) / c,
      g = 0;
    a = (2 * Math.PI) / (700 * a.network.vertexes.count);
    b > c && (d += Math.PI / 2);
    for (var h = 0; ; h++) {
      var k = Math.sin(d + h * a);
      g += (b > c ? b : c) * Math.sqrt(1 - f * f * k * k) * a;
      if (g >= e) return h * a;
    }
  }
  Gr.prototype.sort = function(a) {
    switch (this.sorting) {
      case Or:
        break;
      case Pr:
        a.reverse();
        break;
      case Mr:
        a.sort(this.comparer);
        break;
      case Nr:
        a.sort(this.comparer);
        a.reverse();
        break;
      case Kr:
        return this.Vj(js(a));
      default:
        C('Invalid sorting type.');
    }
    return a;
  };

  function js(a) {
    for (var b = [], c = 0; c < a.length; c++) b.push(0);
    c = new E();
    for (var d = 0; d < a.length; d++) {
      var e = -1,
        f = -1;
      if (0 === d)
        for (var g = 0; g < a.length; g++) {
          var h = a.K(g).edgesCount;
          h > e && ((e = h), (f = g));
        }
      else
        for (g = 0; g < a.length; g++) (h = b[g]), h > e && ((e = h), (f = g));
      c.add(a.K(f));
      b[f] = -1;
      f = a.K(f);
      for (g = f.sourceEdges; g.next(); )
        (e = a.indexOf(g.value.fromVertex)), 0 > e || (0 <= b[e] && b[e]++);
      for (f = f.destinationEdges; f.next(); )
        (e = a.indexOf(f.value.toVertex)), 0 > e || (0 <= b[e] && b[e]++);
    }
    return c;
  }
  Gr.prototype.Vj = function(a) {
    for (var b = [], c = 0; c < a.length; c++) {
      var d = a.K(c);
      b[c] = [];
      for (var e, f = d.destinationEdges; f.next(); )
        (e = a.indexOf(f.value.toVertex)),
          e !== c && 0 > b[c].indexOf(e) && b[c].push(e);
      for (d = d.sourceEdges; d.next(); )
        (e = a.indexOf(d.value.fromVertex)),
          e !== c && 0 > b[c].indexOf(e) && b[c].push(e);
    }
    f = [];
    for (c = 0; c < b.length; c++) f[c] = 0;
    c = [];
    var g = [],
      h = [];
    d = [];
    e = new E();
    for (var k = 0, l = 0; l < b.length; l++) {
      var m = b[l].length;
      if (1 === m) d.push(l);
      else if (0 === m) e.add(a.K(l));
      else {
        if (0 === k) c.push(l);
        else {
          for (var n = (m = Infinity), p = -1, r = [], q = 0; q < c.length; q++)
            0 > b[c[q]].indexOf(c[q === c.length - 1 ? 0 : q + 1]) &&
              r.push(q === c.length - 1 ? 0 : q + 1);
          if (0 === r.length) for (q = 0; q < c.length; q++) r.push(q);
          for (q = 0; q < r.length; q++) {
            for (var u = r[q], w = b[l], v = 0, z = 0; z < g.length; z++) {
              var y = f[g[z]],
                A = f[h[z]];
              if (y < A) {
                var B = y;
                y = A;
              } else B = A;
              if (B < u && u <= y)
                for (A = 0; A < w.length; A++) {
                  var F = w[A];
                  0 > c.indexOf(F) ||
                    (B < f[F] && f[F] < y) ||
                    B === f[F] ||
                    y === f[F] ||
                    v++;
                }
              else
                for (A = 0; A < w.length; A++)
                  (F = w[A]),
                    0 > c.indexOf(F) ||
                      (B < f[F] && f[F] < y && B !== f[F] && y !== f[F] && v++);
            }
            w = v;
            for (z = v = 0; z < b[l].length; z++)
              (B = c.indexOf(b[l][z])),
                0 <= B &&
                  ((B = Math.abs(u - (B >= u ? B + 1 : B))),
                  (v += B < c.length + 1 - B ? B : c.length + 1 - B));
            for (z = 0; z < g.length; z++)
              (B = f[g[z]]),
                (y = f[h[z]]),
                B >= u && B++,
                y >= u && y++,
                B > y && ((A = y), (y = B), (B = A)),
                y - B < (c.length + 2) / 2 === (B < u && u <= y) && v++;
            if (w < m || (w === m && v < n)) (m = w), (n = v), (p = u);
          }
          c.splice(p, 0, l);
          for (m = 0; m < c.length; m++) f[c[m]] = m;
          for (m = 0; m < b[l].length; m++)
            (n = b[l][m]), 0 <= c.indexOf(n) && (g.push(l), h.push(n));
        }
        k++;
      }
    }
    for (g = c.length; ; ) {
      f = !0;
      for (h = 0; h < d.length; h++)
        if (((k = d[h]), (l = b[k][0]), (m = c.indexOf(l)), 0 <= m)) {
          for (p = n = 0; p < b[l].length; p++)
            (r = c.indexOf(b[l][p])),
              0 > r ||
                r === m ||
                ((q = r > m ? r - m : m - r),
                (n += r < m !== q > g - q ? 1 : -1));
          c.splice(0 > n ? m : m + 1, 0, k);
          d.splice(h, 1);
          h--;
        } else f = !1;
      if (f) break;
      else c.push(d[0]), d.splice(0, 1);
    }
    for (b = 0; b < c.length; b++) e.add(a.K(c[b]));
    return e;
  };
  ma.Object.defineProperties(Gr.prototype, {
    radius: {
      get: function() {
        return this.In;
      },
      set: function(a) {
        this.In !== a && (0 < a || isNaN(a)) && ((this.In = a), this.D());
      },
    },
    aspectRatio: {
      get: function() {
        return this.km;
      },
      set: function(a) {
        this.km !== a && 0 < a && ((this.km = a), this.D());
      },
    },
    startAngle: {
      get: function() {
        return this.Un;
      },
      set: function(a) {
        this.Un !== a && ((this.Un = a), this.D());
      },
    },
    sweepAngle: {
      get: function() {
        return this.jl;
      },
      set: function(a) {
        this.jl !== a &&
          (0 < a && 360 >= a ? (this.jl = a) : (this.jl = 360), this.D());
      },
    },
    arrangement: {
      get: function() {
        return this.Nb;
      },
      set: function(a) {
        this.Nb === a ||
          (a !== Vr && a !== Hr && a !== Ur && a !== Tr) ||
          ((this.Nb = a), this.D());
      },
    },
    direction: {
      get: function() {
        return this.L;
      },
      set: function(a) {
        this.L === a ||
          (a !== Jr && a !== Sr && a !== Qr && a !== Rr) ||
          ((this.L = a), this.D());
      },
    },
    sorting: {
      get: function() {
        return this.fd;
      },
      set: function(a) {
        this.fd === a ||
          (a !== Or && a !== Pr && a !== Mr && !Nr && a !== Kr) ||
          ((this.fd = a), this.D());
      },
    },
    comparer: {
      get: function() {
        return this.Zc;
      },
      set: function(a) {
        this.Zc !== a && ((this.Zc = a), this.D());
      },
    },
    spacing: {
      get: function() {
        return this.gf;
      },
      set: function(a) {
        this.gf !== a && ((this.gf = a), this.D());
      },
    },
    nodeDiameterFormula: {
      get: function() {
        return this.un;
      },
      set: function(a) {
        this.un === a || (a !== Lr && a !== Wr) || ((this.un = a), this.D());
      },
    },
    actualXRadius: {
      get: function() {
        return this.hc;
      },
    },
    actualYRadius: {
      get: function() {
        return this.ee;
      },
    },
    actualSpacing: {
      get: function() {
        return this.Ni;
      },
    },
    actualCenter: {
      get: function() {
        return this.Dv;
      },
    },
  });
  var Hr = new D(Gr, 'ConstantSpacing', 0),
    Ur = new D(Gr, 'ConstantDistance', 1),
    Tr = new D(Gr, 'ConstantAngle', 2),
    Vr = new D(Gr, 'Packed', 3),
    Jr = new D(Gr, 'Clockwise', 4),
    Sr = new D(Gr, 'Counterclockwise', 5),
    Qr = new D(Gr, 'BidirectionalLeft', 6),
    Rr = new D(Gr, 'BidirectionalRight', 7),
    Or = new D(Gr, 'Forwards', 8),
    Pr = new D(Gr, 'Reverse', 9),
    Mr = new D(Gr, 'Ascending', 10),
    Nr = new D(Gr, 'Descending', 11),
    Kr = new D(Gr, 'Optimized', 12),
    Lr = new D(Gr, 'Pythagorean', 13),
    Wr = new D(Gr, 'Circular', 14);
  Gr.className = 'CircularLayout';
  Gr.ConstantSpacing = Hr;
  Gr.ConstantDistance = Ur;
  Gr.ConstantAngle = Tr;
  Gr.Packed = Vr;
  Gr.Clockwise = Jr;
  Gr.Counterclockwise = Sr;
  Gr.BidirectionalLeft = Qr;
  Gr.BidirectionalRight = Rr;
  Gr.Forwards = Or;
  Gr.Reverse = Pr;
  Gr.Ascending = Mr;
  Gr.Descending = Nr;
  Gr.Optimized = Kr;
  Gr.Pythagorean = Lr;
  Gr.Circular = Wr;

  function Ir() {
    this.xl = -Infinity;
    this.cm = this.bk = null;
  }
  Ir.prototype.compare = function(a, b) {
    if (
      (0 < a && 0 > this.xl) ||
      (Math.abs(a) < Math.abs(this.xl) && !(0 > a && 0 < this.xl))
    )
      for (this.xl = a, this.bk = [], this.cm = [], a = 0; a < b.length; a++)
        (this.bk[a] = b[a].bounds.x), (this.cm[a] = b[a].bounds.y);
  };
  Ir.prototype.commit = function(a) {
    if (null !== this.bk && null !== this.cm)
      for (var b = 0; b < this.bk.length; b++) {
        var c = a.K(b);
        c.x = this.bk[b];
        c.y = this.cm[b];
      }
  };
  Ir.className = 'VertexArrangement';

  function Xr(a) {
    eq.call(this, a);
  }
  la(Xr, eq);
  Xr.prototype.createVertex = function() {
    return new ks(this);
  };
  Xr.prototype.createEdge = function() {
    return new ls(this);
  };
  Xr.className = 'CircularNetwork';

  function ks(a) {
    sq.call(this, a);
    this.u = this.Mi = NaN;
  }
  la(ks, sq);

  function Yr(a, b) {
    var c = a.network;
    if (null === c) return NaN;
    c = c.layout;
    if (null === c) return NaN;
    if (c.arrangement === Vr)
      if (c.nodeDiameterFormula === Wr) a.Mi = Math.max(a.width, a.height);
      else {
        c = Math.abs(Math.sin(b));
        b = Math.abs(Math.cos(b));
        if (0 === c) return a.width;
        if (0 === b) return a.height;
        a.Mi = Math.min(a.height / c, a.width / b);
      }
    else
      a.Mi =
        c.nodeDiameterFormula === Wr
          ? Math.max(a.width, a.height)
          : Math.sqrt(a.width * a.width + a.height * a.height);
    return a.Mi;
  }
  ma.Object.defineProperties(ks.prototype, {
    diameter: {
      get: function() {
        return this.Mi;
      },
      set: function(a) {
        this.Mi !== a && (this.Mi = a);
      },
    },
    actualAngle: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u !== a && (this.u = a);
      },
    },
  });
  ks.className = 'CircularVertex';

  function ls(a) {
    tq.call(this, a);
  }
  la(ls, tq);
  ls.className = 'CircularEdge';

  function ms(a) {
    qi.call(this);
    this.Sg = null;
    this.gn = 0;
    this.Td = new K(100, 100).freeze();
    this.jm = !1;
    this.ff = !0;
    this.od = !1;
    this.Tk = 100;
    this.Im = 1;
    this.Pf = 1e3;
    this.pn = 10;
    this.Jn = Math;
    this.vk = 0.05;
    this.uk = 50;
    this.sk = 150;
    this.tk = 0;
    this.Dm = 10;
    this.Cm = 5;
    a && Object.assign(this, a);
  }
  la(ms, qi);
  ms.prototype.cloneProtected = function(a) {
    qi.prototype.cloneProtected.call(this, a);
    a.Td.assign(this.Td);
    a.jm = this.jm;
    a.ff = this.ff;
    a.od = this.od;
    a.Tk = this.Tk;
    a.Im = this.Im;
    a.Pf = this.Pf;
    a.pn = this.pn;
    a.Jn = this.Jn;
    a.vk = this.vk;
    a.uk = this.uk;
    a.sk = this.sk;
    a.tk = this.tk;
    a.Dm = this.Dm;
    a.Cm = this.Cm;
  };
  ms.prototype.serializeLayoutProperties = function(a, b) {
    qi.prototype.serializeLayoutProperties.call(this, a, b);
    a.arrangementSpacing = {
      width: this.arrangementSpacing.width,
      height: this.arrangementSpacing.height,
    };
    a.arrangesToOrigin = this.arrangesToOrigin;
    a.setsPortSpots = this.setsPortSpots;
    a.comments = this.comments;
    a.maxIterations = this.maxIterations;
    a.epsilonDistance = this.epsilonDistance;
    a.infinityDistance = this.infinityDistance;
    a.moveLimit = this.moveLimit;
    a.defaultSpringStiffness = this.defaultSpringStiffness;
    a.defaultSpringLength = this.defaultSpringLength;
    a.defaultElectricalCharge = this.defaultElectricalCharge;
    a.defaultGravitationalMass = this.defaultGravitationalMass;
    a.defaultCommentSpringLength = this.defaultCommentSpringLength;
    a.defaultCommentElectricalCharge = this.defaultCommentElectricalCharge;
  };
  ms.prototype.deserializeLayoutProperties = function(a, b, c, d, e) {
    qi.prototype.deserializeLayoutProperties.call(this, a, b, c, d, e);
    this.arrangementSpacing = new K(
      a.arrangementSpacing.width,
      a.arrangementSpacing.height,
    );
    this.arrangesToOrigin = a.arrangesToOrigin;
    this.setsPortSpots = a.setsPortSpots;
    this.comments = a.comments;
    this.maxIterations = a.maxIterations;
    this.epsilonDistance = a.epsilonDistance;
    this.infinityDistance = a.infinityDistance;
    this.moveLimit = a.moveLimit;
    this.defaultSpringStiffness = a.defaultSpringStiffness;
    this.defaultSpringLength = a.defaultSpringLength;
    this.defaultElectricalCharge = a.defaultElectricalCharge;
    this.defaultGravitationalMass = a.defaultGravitationalMass;
    this.defaultCommentSpringLength = a.defaultCommentSpringLength;
    this.defaultCommentElectricalCharge = a.defaultCommentElectricalCharge;
  };
  ms.prototype.createNetwork = function() {
    return new ns(this);
  };
  ms.prototype.doLayout = function(a) {
    null === this.network && (this.network = this.makeNetwork(a));
    if (!this.qv()) {
      a = this.maxIterations;
      if (0 < this.network.vertexes.count) {
        this.network.oo();
        for (var b = this.network.vertexes.iterator; b.next(); ) {
          var c = b.value;
          c.charge = this.electricalCharge(c);
          c.mass = this.gravitationalMass(c);
        }
        for (b = this.network.edges.iterator; b.next(); )
          (c = b.value),
            (c.stiffness = this.springStiffness(c)),
            (c.length = this.springLength(c));
        this.ju();
        this.gn = 0;
        if (this.needsClusterLayout()) {
          b = this.network;
          c = b.Ix();
          for (var d = c.iterator; d.next(); ) {
            this.network = d.value;
            for (var e = this.network.vertexes.iterator; e.next(); ) {
              var f = e.value;
              f.Nd = f.vertexes.count;
              f.hh = 1;
              f.Bj = null;
              f.Ke = null;
            }
            os(this, 0, a);
          }
          this.network = b;
          var g = (d = c.iterator);
          d = this.arrangementSpacing;
          var h = g.count,
            k = !0;
          f = e = 0;
          for (var l = Ea(), m = 0; m < h + b.vertexes.count + 2; m++)
            l[m] = null;
          h = 0;
          g.reset();
          for (var n = M.alloc(); g.next(); )
            if (((m = g.value), this.computeBounds(m, n), k))
              (k = !1),
                (e = n.x + n.width / 2),
                (f = n.y + n.height / 2),
                (l[0] = new I(n.x + n.width + d.width, n.y)),
                (l[1] = new I(n.x, n.y + n.height + d.height)),
                (h = 2);
            else {
              var p = ps(l, h, e, f, n.width, n.height, d),
                r = l[p],
                q = new I(r.x + n.width + d.width, r.y),
                u = new I(r.x, r.y + n.height + d.height);
              p + 1 < h && l.splice(p + 1, 0, null);
              l[p] = q;
              l[p + 1] = u;
              h++;
              p = r.x - n.x;
              r = r.y - n.y;
              for (m = m.vertexes.iterator; m.next(); )
                (q = m.value), (q.centerX += p), (q.centerY += r);
            }
          M.free(n);
          for (m = b.vertexes.iterator; m.next(); )
            (g = m.value),
              (p = g.bounds),
              2 > h
                ? ((e = p.x + p.width / 2),
                  (f = p.y + p.height / 2),
                  (l[0] = new I(p.x + p.width + d.width, p.y)),
                  (l[1] = new I(p.x, p.y + p.height + d.height)),
                  (h = 2))
                : ((k = ps(l, h, e, f, p.width, p.height, d)),
                  (n = l[k]),
                  (r = new I(n.x + p.width + d.width, n.y)),
                  (p = new I(n.x, n.y + p.height + d.height)),
                  k + 1 < h && l.splice(k + 1, 0, null),
                  (l[k] = r),
                  (l[k + 1] = p),
                  h++,
                  (g.centerX = n.x + g.width / 2),
                  (g.centerY = n.y + g.height / 2));
          Ga(l);
          for (d = c.iterator; d.next(); ) {
            c = d.value;
            for (e = c.vertexes.iterator; e.next(); ) b.fg(e.value);
            for (c = c.edges.iterator; c.next(); ) b.ol(c.value);
          }
        }
        qs(this, a);
        this.updateParts();
      }
      this.Tk = a;
      this.network = null;
      this.isValidLayout = !0;
    }
  };
  ms.prototype.needsClusterLayout = function() {
    if (3 > this.network.vertexes.count) return !1;
    for (
      var a = 0,
        b = 0,
        c = this.network.vertexes.first().bounds,
        d = this.network.vertexes.iterator;
      d.next();

    ) {
      if (d.value.bounds.Sc(c) && (a++, 2 < a)) return !0;
      if (10 < b) break;
      b++;
    }
    return !1;
  };
  ms.prototype.computeBounds = function(a, b) {
    var c = !0;
    for (a = a.vertexes.iterator; a.next(); ) {
      var d = a.value;
      c ? ((c = !1), b.set(d.bounds)) : b.Xc(d.bounds);
    }
    return b;
  };

  function os(a, b, c) {
    if (rs(a, b)) {
      var d = a.Pf;
      a.Pf *= 1 + 1 / (b + 1);
      var e = ss(a, b),
        f = Math.max(
          0,
          Math.max(Math.min(a.network.vertexes.count, (c * (b + 1)) / 11), 10),
        );
      a.maxIterations += f;
      os(a, b + 1, c);
      qs(a, f);
      ts(a, e);
      b = e.vertexes.Ea();
      b.sort(function(a, b) {
        return null === a || null === b || a === b ? 0 : b.Nd - a.Nd;
      });
      for (c = 0; c < b.length; c++) us(a, b[c]);
      a.Pf = d;
    }
  }

  function rs(a, b) {
    if (10 < b || 3 > a.network.vertexes.count) return !1;
    a.Sg = a.network.vertexes.Ea();
    a = a.Sg;
    a.sort(function(a, b) {
      return null === a || null === b || a === b ? 0 : b.Nd - a.Nd;
    });
    for (b = a.length - 1; 0 <= b && 1 >= a[b].Nd; ) b--;
    return 1 < a.length - b;
  }

  function ss(a, b) {
    for (var c = a.network, d = new ns(a), e = 0; e < a.Sg.length; e++) {
      var f = a.Sg[e];
      if (1 < f.Nd) {
        d.fg(f);
        var g = new vs();
        g.ts = f.Nd;
        g.us = f.width;
        g.ss = f.height;
        g.wv = f.focus.x;
        g.xv = f.focus.y;
        null === f.Ke && (f.Ke = new E());
        f.Ke.add(g);
        f.av = f.Ke.count - 1;
      } else break;
    }
    for (f = c.edges.iterator; f.next(); ) {
      var h = f.value;
      e = h.fromVertex;
      g = h.toVertex;
      e.network === d && g.network === d
        ? d.ol(h)
        : e.network === d
        ? ((h = e.Bj),
          null === h && ((h = new E()), (e.Bj = h)),
          h.add(g),
          e.Nd--,
          (e.hh += g.hh))
        : g.network === d &&
          ((h = g.Bj),
          null === h && ((h = new E()), (g.Bj = h)),
          h.add(e),
          g.Nd--,
          (g.hh += e.hh));
    }
    for (e = d.edges.iterator; e.next(); )
      (f = e.value),
        (f.length *= Math.max(
          1,
          J.sqrt((f.fromVertex.hh + f.toVertex.hh) / (4 * b + 1)),
        ));
    for (b = d.vertexes.iterator; b.next(); ) {
      e = b.value;
      var k = e.Bj;
      if (
        null !== k &&
        0 < k.count &&
        ((g = e.Ke.K(e.Ke.count - 1).ts - e.Nd), !(0 >= g))
      ) {
        for (var l = (h = 0), m = k.count - g; m < k.count; m++) {
          var n = k.K(m),
            p = null;
          for (f = n.edges.iterator; f.next(); ) {
            var r = f.value;
            if (r.bx(n) === e) {
              p = r;
              break;
            }
          }
          null !== p && ((l += p.length), (h += n.width * n.height));
        }
        f = e.centerX;
        k = e.centerY;
        m = e.width;
        n = e.height;
        p = e.focus;
        r = m * n;
        1 > r && (r = 1);
        h = J.sqrt((h + r + (l * l * 4) / (g * g)) / r);
        g = ((h - 1) * m) / 2;
        h = ((h - 1) * n) / 2;
        e.bounds = new M(f - p.x - g, k - p.y - h, m + 2 * g, n + 2 * h);
        e.focus = new I(p.x + g, p.y + h);
      }
    }
    a.network = d;
    return c;
  }

  function ts(a, b) {
    for (var c = a.network.vertexes.iterator; c.next(); ) {
      var d = c.value;
      d.network = b;
      if (null !== d.Ke) {
        var e = d.Ke.K(d.av);
        d.Nd = e.ts;
        var f = e.wv,
          g = e.xv;
        d.bounds = new M(d.centerX - f, d.centerY - g, e.us, e.ss);
        d.focus = new I(f, g);
        d.av--;
      }
    }
    for (c = a.network.edges.iterator; c.next(); ) c.value.network = b;
    a.network = b;
  }

  function us(a, b) {
    var c = b.Bj;
    if (null !== c && 0 !== c.count) {
      var d = b.centerX,
        e = b.centerY,
        f = b.width,
        g = b.height;
      null !== b.Ke &&
        0 < b.Ke.count &&
        ((g = b.Ke.K(0)), (f = g.us), (g = g.ss));
      f = J.sqrt(f * f + g * g) / 2;
      for (
        var h = !1, k = (g = 0), l = 0, m = b.vertexes.iterator;
        m.next();

      ) {
        var n = m.value;
        1 >= n.Nd
          ? k++
          : ((h = !0),
            l++,
            (g += Math.atan2(b.centerY - n.centerY, b.centerX - n.centerX)));
      }
      if (0 !== k)
        for (
          0 < l && (g /= l),
            l = b = 0,
            b = h ? (2 * Math.PI) / (k + 1) : (2 * Math.PI) / k,
            0 === k % 2 && (l = b / 2),
            1 < c.count &&
              c.sort(function(a, b) {
                return null === a || null === b || a === b
                  ? 0
                  : b.width * b.height - a.width * a.height;
              }),
            h = 0 === k % 2 ? 0 : 1,
            c = c.iterator;
          c.next();

        )
          if (((k = c.value), !(1 < k.Nd || a.isFixed(k)))) {
            m = null;
            for (n = k.edges.iterator; n.next(); ) {
              m = n.value;
              break;
            }
            n = k.width;
            var p = k.height;
            n = J.sqrt(n * n + p * p) / 2;
            m = f + m.length + n;
            n = g + (b * ((h / 2) >> 1) + l) * (0 === h % 2 ? 1 : -1);
            k.centerX = d + m * Math.cos(n);
            k.centerY = e + m * Math.sin(n);
            h++;
          }
    }
  }

  function ps(a, b, c, d, e, f, g) {
    var h = 9e19,
      k = -1,
      l = 0;
    a: for (; l < b; l++) {
      var m = a[l],
        n = m.x - c,
        p = m.y - d;
      n = n * n + p * p;
      if (n < h) {
        for (p = l - 1; 0 <= p; p--)
          if (a[p].y > m.y && a[p].x - m.x < e + g.width) continue a;
        for (p = l + 1; p < b; p++)
          if (a[p].x > m.x && a[p].y - m.y < f + g.height) continue a;
        k = l;
        h = n;
      }
    }
    return k;
  }
  ms.prototype.ju = function() {
    if (this.comments)
      for (var a = this.network.vertexes.iterator; a.next(); )
        this.addComments(a.value);
  };
  ms.prototype.addComments = function(a) {
    var b = a.node;
    if (null !== b)
      for (b = b.wu(); b.next(); ) {
        var c = b.value;
        if ('Comment' === c.category && c.isVisible()) {
          var d = this.network.ei(c);
          null === d && (d = this.network.yj(c));
          d.charge = this.defaultCommentElectricalCharge;
          c = null;
          for (var e = d.destinationEdges; e.next(); ) {
            var f = e.value;
            if (f.toVertex === a) {
              c = f;
              break;
            }
          }
          if (null === c)
            for (e = d.sourceEdges; e.next(); )
              if (((f = e.value), f.fromVertex === a)) {
                c = f;
                break;
              }
          null === c && (c = this.network.Qj(a, d, null));
          c.length = this.defaultCommentSpringLength;
        }
      }
  };

  function ws(a, b) {
    var c = a.bounds,
      d = c.x;
    a = c.y;
    var e = c.width;
    c = c.height;
    var f = b.bounds,
      g = f.x;
    b = f.y;
    var h = f.width;
    f = f.height;
    return d + e < g
      ? a > b + f
        ? ((c = d + e - g), (a = a - b - f), J.sqrt(c * c + a * a))
        : a + c < b
        ? ((d = d + e - g), (a = a + c - b), J.sqrt(d * d + a * a))
        : g - (d + e)
      : d > g + h
      ? a > b + f
        ? ((c = d - g - h), (a = a - b - f), J.sqrt(c * c + a * a))
        : a + c < b
        ? ((d = d - g - h), (a = a + c - b), J.sqrt(d * d + a * a))
        : d - (g + h)
      : a > b + f
      ? a - (b + f)
      : a + c < b
      ? b - (a + c)
      : 0.1;
  }

  function qs(a, b) {
    a.Sg = null;
    for (b = a.gn + b; a.gn < b && (a.gn++, xs(a)); );
    a.Sg = null;
  }

  function xs(a) {
    null === a.Sg && (a.Sg = a.network.vertexes.Ea());
    var b = a.Sg;
    if (0 >= b.length) return !1;
    var c = b[0];
    c.forceX = 0;
    c.forceY = 0;
    for (
      var d = c.centerX, e = d, f = (c = c.centerY), g = 1;
      g < b.length;
      g++
    ) {
      var h = b[g];
      h.forceX = 0;
      h.forceY = 0;
      var k = h.centerX;
      h = h.centerY;
      d = Math.min(d, k);
      e = Math.max(e, k);
      c = Math.min(c, h);
      f = Math.max(f, h);
    }
    (e = e - d > f - c)
      ? b.sort(function(a, b) {
          return null === a || null === b || a === b
            ? 0
            : a.centerX - b.centerX;
        })
      : b.sort(function(a, b) {
          return null === a || null === b || a === b
            ? 0
            : a.centerY - b.centerY;
        });
    c = a.Pf;
    var l = (d = h = 0);
    for (f = 0; f < b.length; f++) {
      g = b[f];
      d = g.bounds;
      h = g.focus;
      k = d.x + h.x;
      var m = d.y + h.y;
      d = g.charge * a.electricalFieldX(k, m);
      l = g.charge * a.electricalFieldY(k, m);
      d += g.mass * a.gravitationalFieldX(k, m);
      l += g.mass * a.gravitationalFieldY(k, m);
      g.forceX += d;
      g.forceY += l;
      for (var n = f + 1; n < b.length; n++) {
        var p = b[n];
        if (p !== g) {
          d = p.bounds;
          h = p.focus;
          l = d.x + h.x;
          var r = d.y + h.y;
          if (k - l > c || l - k > c) {
            if (e) break;
          } else if (m - r > c || r - m > c) {
            if (!e) break;
          } else {
            var q = ws(g, p);
            1 > q
              ? ((d = a.randomNumberGenerator),
                null === d && (a.randomNumberGenerator = d = new ys()),
                (q = d.random()),
                (h = d.random()),
                k > l
                  ? ((d = Math.abs(p.bounds.right - g.bounds.x)),
                    (d = (1 + d) * q))
                  : k < l
                  ? ((d = Math.abs(p.bounds.x - g.bounds.right)),
                    (d = -(1 + d) * q))
                  : ((d = Math.max(p.width, g.width)),
                    (d = (1 + d) * q - d / 2)),
                m > r
                  ? ((l = Math.abs(p.bounds.bottom - g.bounds.y)),
                    (l = (1 + l) * h))
                  : k < l
                  ? ((l = Math.abs(p.bounds.y - g.bounds.bottom)),
                    (l = -(1 + l) * h))
                  : ((l = Math.max(p.height, g.height)),
                    (l = (1 + l) * h - l / 2)))
              : ((h = -(g.charge * p.charge) / (q * q)),
                (d = ((l - k) / q) * h),
                (l = ((r - m) / q) * h));
            g.forceX += d;
            g.forceY += l;
            p.forceX -= d;
            p.forceY -= l;
          }
        }
      }
    }
    for (e = a.network.edges.iterator; e.next(); )
      (h = e.value),
        (c = h.fromVertex),
        (f = h.toVertex),
        (g = c.bounds),
        (k = c.focus),
        (d = g.x + k.x),
        (g = g.y + k.y),
        (m = f.bounds),
        (n = f.focus),
        (k = m.x + n.x),
        (m = m.y + n.y),
        (n = ws(c, f)),
        1 > n
          ? ((n = a.randomNumberGenerator),
            null === n && (a.randomNumberGenerator = n = new ys()),
            (h = n.random()),
            (n = n.random()),
            (d =
              (d > k ? 1 : -1) *
              (1 + (f.width > c.width ? f.width : c.width)) *
              h),
            (l =
              (g > m ? 1 : -1) *
              (1 + (f.height > c.height ? f.height : c.height)) *
              n))
          : ((h = h.stiffness * (n - h.length)),
            (d = ((k - d) / n) * h),
            (l = ((m - g) / n) * h)),
        (c.forceX += d),
        (c.forceY += l),
        (f.forceX -= d),
        (f.forceY -= l);
    for (e = d = 0; e < b.length; e++)
      (c = b[e]),
        a.isFixed(c)
          ? a.moveFixedVertex(c)
          : (d = Math.max(d, a.moveVertex(c) || 0));
    return d > a.epsilonDistance * a.epsilonDistance;
  }
  ms.prototype.moveVertex = function(a) {
    var b = a.forceX,
      c = a.forceY,
      d = this.moveLimit;
    b < -d ? (b = -d) : b > d && (b = d);
    c < -d ? (c = -d) : c > d && (c = d);
    a.centerX += b;
    a.centerY += c;
    return b * b + c * c;
  };
  ms.prototype.moveFixedVertex = function() {};
  ms.prototype.commitLayout = function() {
    this.ev();
    this.commitNodes();
    this.isRouting && this.commitLinks();
  };
  ms.prototype.ev = function() {
    if (this.setsPortSpots)
      for (var a = this.network.edges.iterator; a.next(); ) {
        var b = a.value.link;
        null !== b && ((b.fromSpot = Wc), (b.toSpot = Wc));
      }
  };
  ms.prototype.commitNodes = function() {
    var a = 0,
      b = 0;
    if (this.arrangesToOrigin) {
      var c = M.alloc();
      this.computeBounds(this.network, c);
      b = this.arrangementOrigin;
      a = b.x - c.x;
      b = b.y - c.y;
      M.free(c);
    }
    c = M.alloc();
    for (var d = this.network.vertexes.iterator; d.next(); ) {
      var e = d.value;
      if (0 !== a || 0 !== b)
        c.assign(e.bounds), (c.x += a), (c.y += b), (e.bounds = c);
      e.commit();
    }
    M.free(c);
  };
  ms.prototype.commitLinks = function() {
    for (var a = this.network.edges.iterator; a.next(); ) a.value.commit();
  };
  ms.prototype.springStiffness = function(a) {
    a = a.stiffness;
    return isNaN(a) ? this.vk : a;
  };
  ms.prototype.springLength = function(a) {
    a = a.length;
    return isNaN(a) ? this.uk : a;
  };
  ms.prototype.electricalCharge = function(a) {
    a = a.charge;
    return isNaN(a) ? this.sk : a;
  };
  ms.prototype.electricalFieldX = function() {
    return 0;
  };
  ms.prototype.electricalFieldY = function() {
    return 0;
  };
  ms.prototype.gravitationalMass = function(a) {
    a = a.mass;
    return isNaN(a) ? this.tk : a;
  };
  ms.prototype.gravitationalFieldX = function() {
    return 0;
  };
  ms.prototype.gravitationalFieldY = function() {
    return 0;
  };
  ms.prototype.isFixed = function(a) {
    return a.isFixed;
  };
  ma.Object.defineProperties(ms.prototype, {
    currentIteration: {
      get: function() {
        return this.gn;
      },
    },
    arrangementSpacing: {
      get: function() {
        return this.Td;
      },
      set: function(a) {
        this.Td.C(a) || (this.Td.assign(a), this.D());
      },
    },
    arrangesToOrigin: {
      get: function() {
        return this.jm;
      },
      set: function(a) {
        this.jm !== a && ((this.jm = a), this.D());
      },
    },
    setsPortSpots: {
      get: function() {
        return this.ff;
      },
      set: function(a) {
        this.ff !== a && ((this.ff = a), this.D());
      },
    },
    comments: {
      get: function() {
        return this.od;
      },
      set: function(a) {
        this.od !== a && ((this.od = a), this.D());
      },
    },
    maxIterations: {
      get: function() {
        return this.Tk;
      },
      set: function(a) {
        this.Tk !== a && 0 <= a && ((this.Tk = a), this.D());
      },
    },
    epsilonDistance: {
      get: function() {
        return this.Im;
      },
      set: function(a) {
        this.Im !== a && 0 < a && ((this.Im = a), this.D());
      },
    },
    infinityDistance: {
      get: function() {
        return this.Pf;
      },
      set: function(a) {
        this.Pf !== a && 1 < a && ((this.Pf = a), this.D());
      },
    },
    moveLimit: {
      get: function() {
        return this.pn;
      },
      set: function(a) {
        this.pn !== a && 1 < a && ((this.pn = a), this.D());
      },
    },
    randomNumberGenerator: {
      get: function() {
        return this.Jn;
      },
      set: function(a) {
        this.Jn !== a &&
          (null !== a &&
            'function' !== typeof a.random &&
            C(
              'ForceDirectedLayout.randomNumberGenerator must have a "random()" function on it: ' +
                a,
            ),
          (this.Jn = a));
      },
    },
    defaultSpringStiffness: {
      get: function() {
        return this.vk;
      },
      set: function(a) {
        this.vk !== a && ((this.vk = a), this.D());
      },
    },
    defaultSpringLength: {
      get: function() {
        return this.uk;
      },
      set: function(a) {
        this.uk !== a && ((this.uk = a), this.D());
      },
    },
    defaultElectricalCharge: {
      get: function() {
        return this.sk;
      },
      set: function(a) {
        this.sk !== a && ((this.sk = a), this.D());
      },
    },
    defaultGravitationalMass: {
      get: function() {
        return this.tk;
      },
      set: function(a) {
        this.tk !== a && ((this.tk = a), this.D());
      },
    },
    defaultCommentSpringLength: {
      get: function() {
        return this.Dm;
      },
      set: function(a) {
        this.Dm !== a && ((this.Dm = a), this.D());
      },
    },
    defaultCommentElectricalCharge: {
      get: function() {
        return this.Cm;
      },
      set: function(a) {
        this.Cm !== a && ((this.Cm = a), this.D());
      },
    },
  });
  ms.className = 'ForceDirectedLayout';

  function vs() {
    this.xv = this.wv = this.ss = this.us = this.ts = 0;
  }
  vs.className = 'ForceDirectedSubnet';

  function ns(a) {
    eq.call(this, a);
  }
  la(ns, eq);
  ns.prototype.createVertex = function() {
    return new zs(this);
  };
  ns.prototype.createEdge = function() {
    return new As(this);
  };
  ns.className = 'ForceDirectedNetwork';

  function zs(a) {
    sq.call(this, a);
    this.ga = !1;
    this.Ga = this.u = NaN;
    this.hh = this.Nd = this.W = this.F = 0;
    this.Ke = this.Bj = null;
    this.av = 0;
  }
  la(zs, sq);
  zs.prototype.serializeVertexProperties = function(a, b) {
    sq.prototype.serializeVertexProperties.call(this, a, b);
    a.isFixed = this.isFixed;
    a.charge = this.charge;
    a.mass = this.mass;
  };
  zs.prototype.deserializeVertexProperties = function(a, b, c, d) {
    sq.prototype.deserializeVertexProperties.call(this, a, b, c, d);
    this.isFixed = a.isFixed;
    this.charge = a.charge;
    this.mass = a.mass;
  };
  ma.Object.defineProperties(zs.prototype, {
    isFixed: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        this.ga !== a && (this.ga = a);
      },
    },
    charge: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u !== a && (this.u = a);
      },
    },
    mass: {
      get: function() {
        return this.Ga;
      },
      set: function(a) {
        this.Ga !== a && (this.Ga = a);
      },
    },
    forceX: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F !== a && (this.F = a);
      },
    },
    forceY: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W !== a && (this.W = a);
      },
    },
  });
  zs.className = 'ForceDirectedVertex';

  function As(a) {
    tq.call(this, a);
    this.j = this.m = NaN;
  }
  la(As, tq);
  As.prototype.serializeEdgeProperties = function(a, b) {
    tq.prototype.serializeEdgeProperties.call(this, a, b);
    a.stiffness = this.stiffness;
    a.length = this.length;
  };
  As.prototype.deserializeEdgeProperties = function(a, b, c, d) {
    tq.prototype.deserializeEdgeProperties.call(this, a, b, c, d);
    this.stiffness = a.stiffness;
    this.length = a.length;
  };
  ma.Object.defineProperties(As.prototype, {
    stiffness: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m !== a && (this.m = a);
      },
    },
    length: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j !== a && (this.j = a);
      },
    },
  });
  As.className = 'ForceDirectedEdge';

  function ys() {
    var a = 0;
    void 0 === a && (a = 42);
    this.seed = a;
    this.Kx = 48271;
    this.Mx = 2147483647;
    this.Q = 44488.07041494893;
    this.Nx = 3399;
    this.Lx = 1 / 2147483647;
    this.random();
  }
  ys.prototype.random = function() {
    var a = (this.seed % this.Q) * this.Kx - (this.seed / this.Q) * this.Nx;
    0 < a ? (this.seed = a) : (this.seed = a + this.Mx);
    return this.seed * this.Lx;
  };
  ys.className = 'RandomNumberGenerator';

  function Bs(a) {
    qi.call(this);
    this.gc = this.be = 25;
    this.L = 0;
    this.rk = Cs;
    this.Ok = Ds;
    this.Fk = Es;
    this.Xi = 4;
    this.ek = Fs;
    this.Tf = 15;
    this.ff = !0;
    this.jn = 4;
    this.Ja = this.Dh = this.wa = -1;
    this.zc = this.Bg = 0;
    this.Qa = this.Bd = this.Cd = this.ae = this.Hb = null;
    this.Cg = 0;
    this.qn = this.fj = null;
    this.Lc = 0;
    this.rn = null;
    this.Yc = new I();
    this.we = [];
    this.we.length = 100;
    a && Object.assign(this, a);
  }
  la(Bs, qi);
  Bs.prototype.cloneProtected = function(a) {
    qi.prototype.cloneProtected.call(this, a);
    a.be = this.be;
    a.gc = this.gc;
    a.L = this.L;
    a.rk = this.rk;
    a.Ok = this.Ok;
    a.Fk = this.Fk;
    a.Xi = this.Xi;
    a.ek = this.ek;
    a.Tf = this.Tf;
    a.ff = this.ff;
    a.jn = this.jn;
  };
  Bs.prototype.serializeLayoutProperties = function(a, b) {
    qi.prototype.serializeLayoutProperties.call(this, a, b);
    a.layerSpacing = this.layerSpacing;
    a.columnSpacing = this.columnSpacing;
    a.direction = this.direction;
    a.cycleRemoveOption = this.cycleRemoveOption.name;
    a.layeringOption = this.layeringOption.name;
    a.initializeOption = this.initializeOption.name;
    a.iterations = this.iterations;
    a.aggressiveOption = this.aggressiveOption.name;
    a.packOption = this.packOption;
    a.setsPortSpots = this.setsPortSpots;
    a.linkSpacing = this.linkSpacing;
    a.wa = this.wa;
    a.Dh = this.Dh;
    a.Ja = this.Ja;
    a.Bg = this.Bg;
    a.zc = this.zc;
    a.Hb = this.Hb;
    a.Cg = this.Cg;
    a.Lc = this.Lc;
    a.Yc = {
      x: this.Yc.x,
      y: this.Yc.y,
    };
  };
  Bs.prototype.deserializeLayoutProperties = function(a, b, c, d, e) {
    qi.prototype.deserializeLayoutProperties.call(this, a, b, c, d, e);
    this.layerSpacing = a.layerSpacing;
    this.columnSpacing = a.columnSpacing;
    this.direction = a.direction;
    this.cycleRemoveOption = Sa(Bs, a.cycleRemoveOption);
    this.layeringOption = Sa(Bs, a.layeringOption);
    this.initializeOption = Sa(Bs, a.initializeOption);
    this.iterations = a.iterations;
    this.aggressiveOption = Sa(Bs, a.aggressiveOption);
    this.packOption = a.packOption;
    this.setsPortSpots = a.setsPortSpots;
    this.linkSpacing = a.linkSpacing;
    this.wa = a.wa;
    this.Dh = a.Dh;
    this.Ja = a.Ja;
    this.Bg = a.Bg;
    this.zc = a.zc;
    this.Hb = a.Hb;
    this.Cg = a.Cg;
    this.Lc = a.Lc;
    this.Yc = new I(this.Yc.x, this.Yc.y);
    e &&
      !d &&
      e.edges.each(function(a) {
        if (
          !a.link &&
          a.fromVertex &&
          a.toVertex &&
          (null === a.fromVertex.node || null === a.toVertex.node)
        ) {
          for (
            var b = a.fromVertex;
            null !== b && null === b.node && 0 < b.wd.count;

          ) {
            var c = b.wd.K(0);
            if (c.link) {
              a.link = c.link;
              break;
            }
            b = c.fromVertex;
          }
          if (!a.link) {
            for (
              c = a.toVertex;
              null !== c && null === c.node && 0 < c.Jd.count;

            ) {
              var d = c.Jd.K(0);
              if (d.link) {
                a.link = d.link;
                break;
              }
              c = d.toVertex;
            }
            if (!a.link)
              for (c = c.wd.iterator; c.next(); )
                if (((d = c.value), d.link && d.fromVertex === b)) {
                  a.link = d.link;
                  break;
                }
          }
        }
      });
  };
  Bs.prototype.ob = function(a) {
    a.classType === Bs
      ? 0 === a.name.indexOf('Aggressive')
        ? (this.aggressiveOption = a)
        : 0 === a.name.indexOf('Cycle')
        ? (this.cycleRemoveOption = a)
        : 0 === a.name.indexOf('Init')
        ? (this.initializeOption = a)
        : 0 === a.name.indexOf('Layer')
        ? (this.layeringOption = a)
        : C('Unknown enum value: ' + a)
      : qi.prototype.ob.call(this, a);
  };
  Bs.prototype.createNetwork = function() {
    return new Gs(this);
  };
  Bs.prototype.doLayout = function(a) {
    null === this.network && (this.network = this.makeNetwork(a));
    this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin);
    this.Dh = -1;
    this.zc = this.Bg = 0;
    this.rn = this.qn = this.fj = null;
    for (a = 0; a < this.we.length; a++) this.we[a] = null;
    if (0 < this.network.vertexes.count) {
      this.network.oo();
      if (this.qv()) return;
      this.cycleRemoveOption !== Hs && this.removeCycles();
      for (a = this.network.vertexes.iterator; a.next(); ) a.value.layer = -1;
      this.wa = -1;
      this.assignLayers();
      for (a.reset(); a.next(); ) this.wa = Math.max(this.wa, a.value.layer);
      this.cycleRemoveOption === Hs && this.removeCycles();
      a = this.network;
      for (var b = [], c = a.edges.iterator; c.next(); ) {
        var d = c.value;
        d.valid = !1;
        b.push(d);
      }
      for (c = 0; c < b.length; c++) {
        d = b[c];
        var e = d.fromVertex,
          f = d.toVertex;
        if (
          !(
            d.valid ||
            (((null === e.node && null === e.data) ||
              (null === f.node && null === f.data)) &&
              e.layer === f.layer)
          )
        ) {
          var g = 0,
            h = 0,
            k = 0,
            l = 0;
          if (null !== d.link) {
            h = d.link;
            if (null === h) continue;
            var m = e.node;
            g = f.node;
            if (null === m || null === g) continue;
            var n = h.fromNode;
            k = h.toNode;
            var p = h.fromPort;
            h = h.toPort;
            if (d.rev) {
              l = n;
              var r = p;
              n = k;
              p = h;
              k = l;
              h = r;
            }
            var q = e.focus;
            l = f.focus;
            var u = d.rev ? f.bounds : e.bounds;
            r = I.alloc();
            m !== n
              ? u.v() && n.isVisible()
                ? n.actualBounds.v()
                  ? (Go(n, p, yc, r),
                    (r.x += n.actualBounds.x - u.x),
                    (r.y += n.actualBounds.y - u.y))
                  : (Go(n, p, yc, r), r.v() || r.assign(q))
                : r.assign(q)
              : u.v()
              ? (Go(n, p, yc, r), r.v() || r.assign(q))
              : r.assign(q);
            n = d.rev ? e.bounds : f.bounds;
            m = I.alloc();
            g !== k
              ? n.v() && k.isVisible()
                ? k.actualBounds.v()
                  ? (Go(k, h, yc, m),
                    (m.x += k.actualBounds.x - n.x),
                    (m.y += k.actualBounds.y - n.y))
                  : (Go(k, h, yc, m), m.v() || m.assign(l))
                : m.assign(l)
              : n.v()
              ? (Go(k, h, yc, m), m.v() || m.assign(l))
              : m.assign(l);
            90 === this.L || 270 === this.L
              ? ((g = Math.round((r.x - q.x) / this.gc)),
                (k = r.x),
                (h = Math.round((m.x - l.x) / this.gc)),
                (l = m.x))
              : ((g = Math.round((r.y - q.y) / this.gc)),
                (k = r.y),
                (h = Math.round((m.y - l.y) / this.gc)),
                (l = m.y));
            I.free(r);
            I.free(m);
            d.portFromColOffset = g;
            d.portFromPos = k;
            d.portToColOffset = h;
            d.portToPos = l;
          } else
            (d.portFromColOffset = 0),
              (d.portFromPos = 0),
              (d.portToColOffset = 0),
              (d.portToPos = 0);
          r = e.layer;
          m = f.layer;
          n = 0;
          u = d.link;
          if (null !== u) {
            var w = u.fromPort,
              v = u.toPort;
            if (null !== w && null !== v) {
              var z = u.fromNode;
              p = u.toNode;
              if (null !== z && null !== p) {
                var y = Is(this, !0),
                  A = Is(this, !1),
                  B = this.setsPortSpots ? y : u.computeSpot(!0, w);
                q = this.setsPortSpots ? A : u.computeSpot(!1, v);
                var F = u.isOrthogonal;
                B.Uc() && B.xf(A) && q.Uc() && q.xf(y)
                  ? (n = 0)
                  : ((y = u.getLinkPoint(z, w, B, !0, F, p, v, I.alloc())),
                    (A = u.getLinkDirection(z, w, y, B, !0, F, p, v)),
                    I.free(y),
                    B.Wr() || A !== Js(this, d, !0)
                      ? this.setsPortSpots &&
                        null !== z &&
                        1 === z.ports.count &&
                        d.rev &&
                        (n += 1)
                      : (n += 1),
                    (B = u.getLinkPoint(p, v, q, !1, F, z, w, I.alloc())),
                    (u = u.getLinkDirection(p, v, B, q, !1, F, z, w)),
                    I.free(B),
                    q.Wr() || u !== Js(this, d, !1)
                      ? this.setsPortSpots &&
                        null !== p &&
                        1 === p.ports.count &&
                        d.rev &&
                        (n += 2)
                      : (n += 2));
              }
            }
          }
          p = n;
          n = 1 === p || 3 === p ? !0 : !1;
          if ((p = 2 === p || 3 === p ? !0 : !1))
            (q = a.createVertex()),
              (q.node = null),
              (q.nf = 1),
              (q.layer = r),
              (q.near = e),
              a.fg(q),
              (e = a.Qj(e, q, d.link)),
              (e.valid = !1),
              (e.rev = d.rev),
              (e.portFromColOffset = g),
              (e.portToColOffset = 0),
              (e.portFromPos = k),
              (e.portToPos = 0),
              (e = q);
          u = 1;
          n && u--;
          if (r - m > u && 0 < r) {
            d.valid = !1;
            q = a.createVertex();
            q.node = null;
            q.nf = 2;
            q.layer = r - 1;
            a.fg(q);
            e = a.Qj(e, q, d.link);
            e.valid = !0;
            e.rev = d.rev;
            e.portFromColOffset = p ? 0 : g;
            e.portToColOffset = 0;
            e.portFromPos = p ? 0 : k;
            e.portToPos = 0;
            e = q;
            for (r--; r - m > u && 0 < r; )
              (q = a.createVertex()),
                (q.node = null),
                (q.nf = 3),
                (q.layer = r - 1),
                a.fg(q),
                (e = a.Qj(e, q, d.link)),
                (e.valid = !0),
                (e.rev = d.rev),
                (e.portFromColOffset = 0),
                (e.portToColOffset = 0),
                (e.portFromPos = 0),
                (e.portToPos = 0),
                (e = q),
                r--;
            e = a.Qj(q, f, d.link);
            e.valid = !n;
            n && (q.near = f);
            e.rev = d.rev;
            e.portFromColOffset = 0;
            e.portToColOffset = h;
            e.portFromPos = 0;
            e.portToPos = l;
          } else d.valid = !0;
        }
      }
      a = this.Hb = [];
      for (b = 0; b <= this.wa; b++) a[b] = 0;
      for (b = this.network.vertexes.iterator; b.next(); ) b.value.index = -1;
      this.initializeIndices();
      this.Dh = -1;
      for (c = this.zc = this.Bg = 0; c <= this.wa; c++)
        a[c] > a[this.zc] && ((this.Dh = a[c] - 1), (this.zc = c)),
          a[c] < a[this.Bg] && (this.Bg = c);
      this.rn = [];
      for (c = 0; c < a.length; c++) this.rn[c] = [];
      for (b.reset(); b.next(); )
        (a = b.value), (this.rn[a.layer][a.index] = a);
      this.Ja = -1;
      for (a = 0; a <= this.wa; a++) {
        b = Ks(this, a);
        c = 0;
        d = this.Hb[a];
        for (f = 0; f < d; f++)
          (e = b[f]),
            (c += this.nodeMinColumnSpace(e, !0)),
            (e.column = c),
            (c += 1),
            (c += this.nodeMinColumnSpace(e, !1));
        this.Ja = Math.max(this.Ja, c - 1);
        Ls(this, a, b);
      }
      this.reduceCrossings();
      this.straightenAndPack();
      this.updateParts();
    }
    this.network = null;
    this.isValidLayout = !0;
  };
  Bs.prototype.linkMinLength = function() {
    return 1;
  };

  function Ms(a) {
    var b = a.fromVertex.node || a.fromVertex.data;
    a = a.toVertex.node || a.toVertex.data;
    return null === b && null === a ? 8 : null === b || null === a ? 4 : 1;
  }
  Bs.prototype.nodeMinLayerSpace = function(a, b) {
    return null === a.node && null === a.data
      ? 0
      : 90 === this.L || 270 === this.L
      ? b
        ? a.focus.y + 10
        : a.bounds.height - a.focus.y + 10
      : b
      ? a.focus.x + 10
      : a.bounds.width - a.focus.x + 10;
  };
  Bs.prototype.nodeMinColumnSpace = function(a, b) {
    if (null === a.node && null === a.data) return 0;
    var c = b ? a.Uj : a.Tj;
    if (null !== c) return c;
    c = this.L;
    return 90 === c || 270 === c
      ? b
        ? (a.Uj = (a.focus.x / this.gc + 1) | 0)
        : (a.Tj = ((a.bounds.width - a.focus.x) / this.gc + 1) | 0)
      : b
      ? (a.Uj = (a.focus.y / this.gc + 1) | 0)
      : (a.Tj = ((a.bounds.height - a.focus.y) / this.gc + 1) | 0);
  };

  function Ns(a) {
    null === a.fj && (a.fj = []);
    for (var b = 0, c = a.network.vertexes.iterator; c.next(); ) {
      var d = c.value;
      a.fj[b] = d.layer;
      b++;
      a.fj[b] = d.column;
      b++;
      a.fj[b] = d.index;
      b++;
    }
    return a.fj;
  }

  function Os(a, b) {
    var c = 0;
    for (a = a.network.vertexes.iterator; a.next(); ) {
      var d = a.value;
      d.layer = b[c];
      c++;
      d.column = b[c];
      c++;
      d.index = b[c];
      c++;
    }
  }

  function Ps(a, b, c) {
    var d = Ks(a, b),
      e = a.Hb[b];
    if (null === a.qn || a.qn.length < e * e) a.qn = [];
    for (var f = a.qn, g = 0; g < e; g++) {
      var h = 0,
        k = d[g],
        l = k.near;
      if (null !== l && l.layer === k.layer)
        if (((k = l.index), k > g))
          for (var m = g + 1; m < k; m++) {
            var n = d[m];
            (n.near === l && n.nf === l.nf) || h++;
          }
        else
          for (m = g - 1; m > k; m--)
            (n = d[m]), (n.near === l && n.nf === l.nf) || h++;
      var p;
      if (0 <= c)
        for (k = d[g].sourceEdgesArrayAccess, l = 0; l < k.length; l++) {
          var r = k[l];
          if (r.valid && r.fromVertex.layer !== b)
            for (
              n = r.fromVertex.index,
                m = r.portToPos,
                r = r.portFromPos,
                p = l + 1;
              p < k.length;
              p++
            ) {
              var q = k[p];
              if (q.valid && q.fromVertex.layer !== b) {
                var u = q.fromVertex.index;
                var w = q.portToPos;
                q = q.portFromPos;
                m < w && (n > u || (n === u && r > q)) && h++;
                w < m && (u > n || (u === n && q > r)) && h++;
              }
            }
        }
      if (0 >= c)
        for (k = d[g].destinationEdgesArrayAccess, l = 0; l < k.length; l++)
          if (((r = k[l]), r.valid && r.toVertex.layer !== b))
            for (
              n = r.toVertex.index,
                m = r.portToPos,
                r = r.portFromPos,
                p = l + 1;
              p < k.length;
              p++
            )
              (q = k[p]),
                q.valid &&
                  q.toVertex.layer !== b &&
                  ((u = q.toVertex.index),
                  (w = q.portToPos),
                  (q = q.portFromPos),
                  r < q && (n > u || (n === u && m > w)) && h++,
                  q < r && (u > n || (u === n && w > m)) && h++);
      f[g * e + g] = h;
      for (k = g + 1; k < e; k++) {
        var v = 0,
          z = 0;
        if (0 <= c) {
          h = d[g].sourceEdgesArrayAccess;
          var y = d[k].sourceEdgesArrayAccess;
          for (l = 0; l < h.length; l++)
            if (((r = h[l]), r.valid && r.fromVertex.layer !== b))
              for (
                n = r.fromVertex.index, r = r.portFromPos, p = 0;
                p < y.length;
                p++
              )
                (q = y[p]),
                  q.valid &&
                    q.fromVertex.layer !== b &&
                    ((u = q.fromVertex.index),
                    (q = q.portFromPos),
                    (n < u || (n === u && r < q)) && z++,
                    (u < n || (u === n && q < r)) && v++);
        }
        if (0 >= c)
          for (
            h = d[g].destinationEdgesArrayAccess,
              y = d[k].destinationEdgesArrayAccess,
              l = 0;
            l < h.length;
            l++
          )
            if (((r = h[l]), r.valid && r.toVertex.layer !== b))
              for (
                n = r.toVertex.index, m = r.portToPos, p = 0;
                p < y.length;
                p++
              )
                (q = y[p]),
                  q.valid &&
                    q.toVertex.layer !== b &&
                    ((u = q.toVertex.index),
                    (w = q.portToPos),
                    (n < u || (n === u && m < w)) && z++,
                    (u < n || (u === n && w < m)) && v++);
        f[g * e + k] = v;
        f[k * e + g] = z;
      }
    }
    Ls(a, b, d);
    return f;
  }
  Bs.prototype.countCrossings = function() {
    for (var a = 0, b = 0; b <= this.wa; b++)
      for (var c = Ps(this, b, 1), d = this.Hb[b], e = 0; e < d; e++)
        for (var f = e; f < d; f++) a += c[e * d + f];
    return a;
  };

  function Qs(a) {
    for (var b = 0, c = 0; c <= a.wa; c++) {
      for (
        var d = a, e = c, f = Ks(d, e), g = d.Hb[e], h = 0, k = 0;
        k < g;
        k++
      ) {
        var l = f[k].destinationEdgesArrayAccess;
        if (null !== l)
          for (var m = 0; m < l.length; m++) {
            var n = l[m];
            if (n.valid && n.toVertex.layer !== e) {
              var p = n.fromVertex.column + n.portFromColOffset;
              var r = n.toVertex.column + n.portToColOffset;
              h += (Math.abs(p - r) + 1) * Ms(n);
            }
          }
      }
      Ls(d, e, f);
      b += h;
    }
    return b;
  }
  Bs.prototype.normalize = function() {
    var a = Infinity;
    this.Ja = -1;
    for (var b = this.network.vertexes.iterator; b.next(); ) {
      var c = b.value;
      a = Math.min(a, c.column - this.nodeMinColumnSpace(c, !0));
      this.Ja = Math.max(this.Ja, c.column + this.nodeMinColumnSpace(c, !1));
    }
    for (b.reset(); b.next(); ) b.value.column -= a;
    this.Ja -= a;
  };

  function Rs(a, b, c) {
    for (var d = Ks(a, b), e = a.Hb[b], f = [], g = 0; g < e; g++) {
      var h = d[g],
        k = null;
      0 >= c && (k = h.sourceEdgesArrayAccess);
      var l = null;
      0 <= c && (l = h.destinationEdgesArrayAccess);
      var m = 0,
        n = 0,
        p = h.near;
      null !== p && p.layer === h.layer && ((m += p.column - 1), n++);
      if (null !== k)
        for (p = 0; p < k.length; p++) {
          h = k[p];
          var r = h.fromVertex;
          h.valid && !h.rev && r.layer !== b && ((m += r.column), n++);
        }
      if (null !== l)
        for (k = 0; k < l.length; k++)
          (h = l[k]),
            (p = h.toVertex),
            h.valid && !h.rev && p.layer !== b && ((m += p.column), n++);
      f[g] = 0 === n ? -1 : m / n;
    }
    Ls(a, b, d);
    return f;
  }

  function Ss(a, b, c) {
    for (var d = Ks(a, b), e = a.Hb[b], f = [], g = 0; g < e; g++) {
      var h = d[g],
        k = null;
      0 >= c && (k = h.sourceEdgesArrayAccess);
      var l = null;
      0 <= c && (l = h.destinationEdgesArrayAccess);
      var m = 0,
        n = [],
        p = h.near;
      null !== p && p.layer === h.layer && ((n[m] = p.column - 1), m++);
      h = void 0;
      if (null !== k)
        for (p = 0; p < k.length; p++) {
          h = k[p];
          var r = h.fromVertex;
          h.valid &&
            !h.rev &&
            r.layer !== b &&
            ((n[m] = r.column + h.portFromColOffset), m++);
        }
      if (null !== l)
        for (k = 0; k < l.length; k++)
          (h = l[k]),
            (p = h.toVertex),
            h.valid &&
              !h.rev &&
              p.layer !== b &&
              ((n[m] = p.column + h.portToColOffset), m++);
      0 === m
        ? (f[g] = -1)
        : (n.sort(function(a, b) {
            return a - b;
          }),
          (l = m >> 1),
          (f[g] = 0 !== (m & 1) ? n[l] : (n[l - 1] + n[l]) >> 1));
    }
    Ls(a, b, d);
    return f;
  }

  function Ts(a, b, c, d, e, f) {
    if (b.component === d) {
      b.component = c;
      if (e)
        for (var g = b.destinationEdges; g.next(); ) {
          var h = g.value;
          var k = h.toVertex;
          var l = b.layer - k.layer;
          h = a.linkMinLength(h);
          l === h && Ts(a, k, c, d, e, f);
        }
      if (f)
        for (g = b.sourceEdges; g.next(); )
          (h = g.value),
            (k = h.fromVertex),
            (l = k.layer - b.layer),
            (h = a.linkMinLength(h)),
            l === h && Ts(a, k, c, d, e, f);
    }
  }

  function Us(a, b, c, d, e, f) {
    if (b.component === d) {
      b.component = c;
      if (e)
        for (var g = b.destinationEdges; g.next(); )
          Us(a, g.value.toVertex, c, d, e, f);
      if (f)
        for (b = b.sourceEdges; b.next(); )
          Us(a, b.value.fromVertex, c, d, e, f);
    }
  }
  Bs.prototype.removeCycles = function() {
    for (var a = this.network.edges.iterator; a.next(); ) a.value.rev = !1;
    switch (this.rk) {
      default:
      case Vs:
        a = this.network;
        var b = 0,
          c = a.vertexes.count - 1,
          d = [];
        d.length = c + 1;
        for (var e = a.vertexes.iterator; e.next(); ) e.value.valid = !0;
        for (; null !== Ws(a); ) {
          for (e = Xs(a); null !== e; )
            (d[c] = e), c--, (e.valid = !1), (e = Xs(a));
          for (e = Ys(a); null !== e; )
            (d[b] = e), b++, (e.valid = !1), (e = Ys(a));
          e = null;
          for (var f = 0, g = this.network.vertexes.iterator; g.next(); ) {
            var h = g.value;
            if (h.valid) {
              for (var k = 0, l = h.destinationEdges; l.next(); )
                l.value.toVertex.valid && k++;
              l = 0;
              for (var m = h.sourceEdges; m.next(); )
                m.value.fromVertex.valid && l++;
              if (null === e || f < k - l) (e = h), (f = k - l);
            }
          }
          null !== e && ((d[b] = e), b++, (e.valid = !1));
        }
        for (b = 0; b < a.vertexes.count; b++) d[b].index = b;
        for (d = a.edges.iterator; d.next(); )
          (b = d.value),
            b.fromVertex.index > b.toVertex.index && (a.Ol(b), (b.rev = !0));
        break;
      case Cs:
        for (d = this.network.vertexes.iterator; d.next(); )
          (a = d.value), (a.gg = -1), (a.finish = -1);
        for (a = this.network.edges.iterator; a.next(); ) a.value.forest = !1;
        this.Cg = 0;
        for (d.reset(); d.next(); )
          (b = d.value), 0 === b.sourceEdges.count && Zs(this, b);
        for (d.reset(); d.next(); ) (b = d.value), -1 === b.gg && Zs(this, b);
        for (a.reset(); a.next(); )
          (d = a.value),
            d.forest ||
              ((b = d.fromVertex),
              (c = b.finish),
              (e = d.toVertex),
              (f = e.finish),
              e.gg < b.gg && c < f && (this.network.Ol(d), (d.rev = !0)));
        break;
      case Hs:
        a = this.network;
        b = a.vertexes.iterator;
        for (d = Infinity; b.next(); ) d = Math.min(d, b.value.layer);
        if (Infinity > d) {
          if (0 > d) for (b.reset(); b.next(); ) b.value.layer -= d;
          d = [];
          for (b.reset(); b.next(); )
            (c = b.value),
              (e = d[c.layer]),
              void 0 === e ? (d[c.layer] = [c]) : e.push(c);
          for (c = b = 0; c < d.length; c++)
            if (((e = d[c]), !e || 0 === e.length)) b++;
            else if (0 < c) for (f = 0; f < e.length; f++) e[f].layer -= b;
          for (d = a.edges.iterator; d.next(); )
            (b = d.value),
              b.fromVertex.layer < b.toVertex.layer && (a.Ol(b), (b.rev = !0));
        }
    }
  };

  function Ws(a) {
    for (a = a.vertexes.iterator; a.next(); ) {
      var b = a.value;
      if (b.valid) return b;
    }
    return null;
  }

  function Xs(a) {
    for (a = a.vertexes.iterator; a.next(); ) {
      var b = a.value;
      if (b.valid) {
        for (var c = !0, d = b.destinationEdges; d.next(); )
          if (d.value.toVertex.valid) {
            c = !1;
            break;
          }
        if (c) return b;
      }
    }
    return null;
  }

  function Ys(a) {
    for (a = a.vertexes.iterator; a.next(); ) {
      var b = a.value;
      if (b.valid) {
        for (var c = !0, d = b.sourceEdges; d.next(); )
          if (d.value.fromVertex.valid) {
            c = !1;
            break;
          }
        if (c) return b;
      }
    }
    return null;
  }

  function Zs(a, b) {
    b.gg = a.Cg;
    a.Cg++;
    for (var c = b.destinationEdges; c.next(); ) {
      var d = c.value,
        e = d.toVertex;
      -1 === e.gg && ((d.forest = !0), Zs(a, e));
    }
    b.finish = a.Cg;
    a.Cg++;
  }
  Bs.prototype.assignLayers = function() {
    switch (this.Ok) {
      case $s:
        at(this);
        break;
      case bt:
        for (var a, b = this.network.vertexes.iterator; b.next(); )
          (a = ct(this, b.value)), (this.wa = Math.max(a, this.wa));
        for (b.reset(); b.next(); )
          (a = b.value), (a.layer = this.wa - a.layer);
        break;
      default:
      case Ds:
        at(this);
        for (b = this.network.vertexes.iterator; b.next(); ) b.value.valid = !1;
        for (b.reset(); b.next(); )
          (a = b.value), 0 === a.sourceEdges.count && dt(this, a);
        a = Infinity;
        for (b.reset(); b.next(); ) a = Math.min(a, b.value.layer);
        this.wa = -1;
        for (b.reset(); b.next(); ) {
          var c = b.value;
          c.layer -= a;
          this.wa = Math.max(this.wa, c.layer);
        }
    }
  };

  function at(a) {
    for (var b = a.network.vertexes.iterator; b.next(); ) {
      var c = et(a, b.value);
      a.wa = Math.max(c, a.wa);
    }
  }

  function et(a, b) {
    var c = 0;
    if (-1 === b.layer) {
      for (var d = b.destinationEdges; d.next(); ) {
        var e = d.value,
          f = e.toVertex;
        e = a.linkMinLength(e);
        c = Math.max(c, et(a, f) + e);
      }
      b.layer = c;
    } else c = b.layer;
    return c;
  }

  function ct(a, b) {
    var c = 0;
    if (-1 === b.layer) {
      for (var d = b.sourceEdges; d.next(); ) {
        var e = d.value,
          f = e.fromVertex;
        e = a.linkMinLength(e);
        c = Math.max(c, ct(a, f) + e);
      }
      b.layer = c;
    } else c = b.layer;
    return c;
  }

  function dt(a, b) {
    if (!b.valid) {
      b.valid = !0;
      for (var c = b.destinationEdges; c.next(); ) dt(a, c.value.toVertex);
      for (c = a.network.vertexes.iterator; c.next(); ) c.value.component = -1;
      for (var d = b.sourceEdgesArrayAccess, e = d.length, f = 0; f < e; f++) {
        var g = d[f],
          h = g.fromVertex,
          k = g.toVertex;
        g = a.linkMinLength(g);
        h.layer - k.layer > g && Ts(a, h, 0, -1, !0, !1);
      }
      for (Ts(a, b, 1, -1, !0, !0); 0 !== b.component; ) {
        f = 0;
        d = Infinity;
        h = 0;
        k = null;
        for (g = a.network.vertexes.iterator; g.next(); ) {
          var l = g.value;
          if (1 === l.component) {
            var m = 0,
              n = !1,
              p = l.sourceEdgesArrayAccess;
            e = p.length;
            for (var r = 0; r < e; r++) {
              var q = p[r],
                u = q.fromVertex;
              m += 1;
              1 !== u.component &&
                ((f += 1),
                (u = u.layer - l.layer),
                (q = a.linkMinLength(q)),
                (d = Math.min(d, u - q)));
            }
            p = l.destinationEdgesArrayAccess;
            e = p.length;
            for (r = 0; r < e; r++)
              (q = p[r].toVertex), --m, 1 !== q.component ? --f : (n = !0);
            (null === k || m < h) && !n && ((k = l), (h = m));
          }
        }
        if (0 < f) {
          for (c.reset(); c.next(); )
            (e = c.value), 1 === e.component && (e.layer += d);
          b.component = 0;
        } else k.component = 0;
      }
      for (c = a.network.vertexes.iterator; c.next(); ) c.value.component = -1;
      for (Ts(a, b, 1, -1, !0, !1); 0 !== b.component; ) {
        d = 0;
        e = Infinity;
        f = 0;
        h = null;
        for (k = a.network.vertexes.iterator; k.next(); )
          if (((g = k.value), 1 === g.component)) {
            l = 0;
            m = !1;
            p = g.sourceEdgesArrayAccess;
            n = p.length;
            for (r = 0; r < n; r++)
              (q = p[r].fromVertex),
                (l += 1),
                1 !== q.component ? (d += 1) : (m = !0);
            p = g.destinationEdgesArrayAccess;
            n = p.length;
            for (r = 0; r < n; r++)
              (q = p[r]),
                (u = q.toVertex),
                --l,
                1 !== u.component &&
                  (--d,
                  (u = g.layer - u.layer),
                  (q = a.linkMinLength(q)),
                  (e = Math.min(e, u - q)));
            (null === h || l > f) && !m && ((h = g), (f = l));
          }
        if (0 > d) {
          for (c.reset(); c.next(); )
            (d = c.value), 1 === d.component && (d.layer -= e);
          b.component = 0;
        } else h.component = 0;
      }
    }
  }

  function Js(a, b, c) {
    return 90 === a.L
      ? (c && !b.rev) || (!c && b.rev)
        ? 270
        : 90
      : 180 === a.L
      ? (c && !b.rev) || (!c && b.rev)
        ? 0
        : 180
      : 270 === a.L
      ? (c && !b.rev) || (!c && b.rev)
        ? 90
        : 270
      : (c && !b.rev) || (!c && b.rev)
      ? 180
      : 0;
  }
  Bs.prototype.initializeIndices = function() {
    switch (this.Fk) {
      default:
      case ft:
        for (var a = this.network.vertexes.iterator; a.next(); ) {
          var b = a.value,
            c = b.layer;
          b.index = this.Hb[c];
          this.Hb[c]++;
        }
        break;
      case Es:
        a = this.network.vertexes.iterator;
        for (b = this.wa; 0 <= b; b--)
          for (a.reset(); a.next(); )
            (c = a.value), c.layer === b && -1 === c.index && gt(this, c);
        break;
      case ht:
        for (a = this.network.vertexes.iterator, b = 0; b <= this.wa; b++)
          for (a.reset(); a.next(); )
            (c = a.value), c.layer === b && -1 === c.index && it(this, c);
    }
  };

  function gt(a, b) {
    var c = b.layer;
    b.index = a.Hb[c];
    a.Hb[c]++;
    b = b.destinationEdgesArrayAccess;
    for (c = !0; c; ) {
      c = !1;
      for (var d = 0; d < b.length - 1; d++) {
        var e = b[d],
          f = b[d + 1];
        e.portFromColOffset > f.portFromColOffset &&
          ((c = !0), (b[d] = f), (b[d + 1] = e));
      }
    }
    for (c = 0; c < b.length; c++)
      (d = b[c]), d.valid && ((d = d.toVertex), -1 === d.index && gt(a, d));
  }

  function it(a, b) {
    var c = b.layer;
    b.index = a.Hb[c];
    a.Hb[c]++;
    b = b.sourceEdgesArrayAccess;
    for (var d = !0; d; )
      for (d = !1, c = 0; c < b.length - 1; c++) {
        var e = b[c],
          f = b[c + 1];
        e.portToColOffset > f.portToColOffset &&
          ((d = !0), (b[c] = f), (b[c + 1] = e));
      }
    for (c = 0; c < b.length; c++)
      (d = b[c]), d.valid && ((d = d.fromVertex), -1 === d.index && it(a, d));
  }
  Bs.prototype.reduceCrossings = function() {
    var a = this.countCrossings(),
      b = Ns(this),
      c,
      d;
    for (c = 0; c < this.Xi; c++) {
      for (d = 0; d <= this.wa; d++) jt(this, d, 1), kt(this, d, 1);
      var e = this.countCrossings();
      e < a && ((a = e), (b = Ns(this)));
      for (d = this.wa; 0 <= d; d--) jt(this, d, -1), kt(this, d, -1);
      e = this.countCrossings();
      e < a && ((a = e), (b = Ns(this)));
    }
    Os(this, b);
    for (c = 0; c < this.Xi; c++) {
      for (d = 0; d <= this.wa; d++) jt(this, d, 0), kt(this, d, 0);
      e = this.countCrossings();
      e < a && ((a = e), (b = Ns(this)));
      for (d = this.wa; 0 <= d; d--) jt(this, d, 0), kt(this, d, 0);
      e = this.countCrossings();
      e < a && ((a = e), (b = Ns(this)));
    }
    Os(this, b);
    var f, g, h;
    switch (this.ek) {
      case lt:
        break;
      case mt:
        for (h = a + 1; (d = this.countCrossings()) < h; )
          for (h = d, c = this.wa; 0 <= c; c--)
            for (g = 0; g <= c; g++) {
              for (f = !0; f; )
                for (f = !1, d = c; d >= g; d--) f = kt(this, d, -1) || f;
              e = this.countCrossings();
              e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
              for (f = !0; f; )
                for (f = !1, d = c; d >= g; d--) f = kt(this, d, 1) || f;
              e = this.countCrossings();
              e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
              for (f = !0; f; )
                for (f = !1, d = g; d <= c; d++) f = kt(this, d, 1) || f;
              e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
              for (f = !0; f; )
                for (f = !1, d = g; d <= c; d++) f = kt(this, d, -1) || f;
              e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
              for (f = !0; f; )
                for (f = !1, d = c; d >= g; d--) f = kt(this, d, 0) || f;
              e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
              for (f = !0; f; )
                for (f = !1, d = g; d <= c; d++) f = kt(this, d, 0) || f;
              e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
            }
        break;
      default:
      case Fs:
        for (c = this.wa, g = 0, h = a + 1; (d = this.countCrossings()) < h; ) {
          h = d;
          for (f = !0; f; )
            for (f = !1, d = c; d >= g; d--) f = kt(this, d, -1) || f;
          e = this.countCrossings();
          e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
          for (f = !0; f; )
            for (f = !1, d = c; d >= g; d--) f = kt(this, d, 1) || f;
          e = this.countCrossings();
          e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
          for (f = !0; f; )
            for (f = !1, d = g; d <= c; d++) f = kt(this, d, 1) || f;
          e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
          for (f = !0; f; )
            for (f = !1, d = g; d <= c; d++) f = kt(this, d, -1) || f;
          e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
          for (f = !0; f; )
            for (f = !1, d = c; d >= g; d--) f = kt(this, d, 0) || f;
          e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
          for (f = !0; f; )
            for (f = !1, d = g; d <= c; d++) f = kt(this, d, 0) || f;
          e >= a ? Os(this, b) : ((a = e), (b = Ns(this)));
        }
    }
    Os(this, b);
  };

  function jt(a, b, c) {
    var d = Ks(a, b),
      e = a.Hb[b],
      f = Ss(a, b, c),
      g = Rs(a, b, c);
    for (c = 0; c < e; c++)
      -1 === g[c] && (g[c] = d[c].column), -1 === f[c] && (f[c] = d[c].column);
    for (var h = !0, k; h; )
      for (h = !1, c = 0; c < e - 1; c++)
        if (f[c + 1] < f[c] || (f[c + 1] === f[c] && g[c + 1] < g[c]))
          (h = !0),
            (k = f[c]),
            (f[c] = f[c + 1]),
            (f[c + 1] = k),
            (k = g[c]),
            (g[c] = g[c + 1]),
            (g[c + 1] = k),
            (k = d[c]),
            (d[c] = d[c + 1]),
            (d[c + 1] = k);
    for (c = f = 0; c < e; c++)
      (k = d[c]),
        (k.index = c),
        (f += a.nodeMinColumnSpace(k, !0)),
        (k.column = f),
        (f += 1),
        (f += a.nodeMinColumnSpace(k, !1));
    Ls(a, b, d);
  }

  function kt(a, b, c) {
    var d = Ks(a, b),
      e = a.Hb[b];
    c = Ps(a, b, c);
    var f;
    var g = [];
    for (f = 0; f < e; f++) g[f] = -1;
    var h = [];
    for (f = 0; f < e; f++) h[f] = -1;
    for (var k = !1, l = !0; l; )
      for (l = !1, f = 0; f < e - 1; f++) {
        var m = c[d[f].index * e + d[f + 1].index],
          n = c[d[f + 1].index * e + d[f].index],
          p = 0,
          r = 0,
          q = d[f].column,
          u = d[f + 1].column,
          w = a.nodeMinColumnSpace(d[f], !0),
          v = a.nodeMinColumnSpace(d[f], !1),
          z = a.nodeMinColumnSpace(d[f + 1], !0),
          y = a.nodeMinColumnSpace(d[f + 1], !1);
        w = q - w + z;
        v = u - v + y;
        var A = d[f].sourceEdges.iterator;
        for (A.reset(); A.next(); )
          if (((z = A.value), (y = z.fromVertex), z.valid && y.layer === b)) {
            for (z = 0; d[z] !== y; ) z++;
            z < f && ((p += 2 * (f - z)), (r += 2 * (f + 1 - z)));
            z === f + 1 && (p += 1);
            z > f + 1 && ((p += 4 * (z - f)), (r += 4 * (z - (f + 1))));
          }
        A = d[f].destinationEdges.iterator;
        for (A.reset(); A.next(); )
          if (((z = A.value), (y = z.toVertex), z.valid && y.layer === b)) {
            for (z = 0; d[z] !== y; ) z++;
            z === f + 1 && (r += 1);
          }
        A = d[f + 1].sourceEdges.iterator;
        for (A.reset(); A.next(); )
          if (((z = A.value), (y = z.fromVertex), z.valid && y.layer === b)) {
            for (z = 0; d[z] !== y; ) z++;
            z < f && ((p += 2 * (f + 1 - z)), (r += 2 * (f - z)));
            z === f && (r += 1);
            z > f + 1 && ((p += 4 * (z - (f + 1))), (r += 4 * (z - f)));
          }
        A = d[f + 1].destinationEdges.iterator;
        for (A.reset(); A.next(); )
          if (((z = A.value), (y = z.toVertex), z.valid && y.layer === b)) {
            for (z = 0; d[z] !== y; ) z++;
            z === f && (p += 1);
          }
        z = y = 0;
        A = g[d[f].index];
        var B = h[d[f].index],
          F = g[d[f + 1].index],
          L = h[d[f + 1].index];
        -1 !== A && ((y += Math.abs(A - q)), (z += Math.abs(A - v)));
        -1 !== B && ((y += Math.abs(B - q)), (z += Math.abs(B - v)));
        -1 !== F && ((y += Math.abs(F - u)), (z += Math.abs(F - w)));
        -1 !== L && ((y += Math.abs(L - u)), (z += Math.abs(L - w)));
        if (
          r < p - 0.5 ||
          (r === p && n < m - 0.5) ||
          (r === p && n === m && z < y - 0.5)
        )
          (l = k = !0),
            (d[f].column = v),
            (d[f + 1].column = w),
            (m = d[f]),
            (d[f] = d[f + 1]),
            (d[f + 1] = m);
      }
    for (f = 0; f < e; f++) d[f].index = f;
    Ls(a, b, d);
    return k;
  }
  Bs.prototype.straightenAndPack = function() {
    var a = 0 !== (this.Tf & 1);
    var b = 0 !== (this.Tf & nt);
    1e3 < this.network.edges.count && b && (a = !1);
    if (a) {
      var c = [];
      for (b = 0; b <= this.wa; b++) c[b] = 0;
      for (var d, e = this.network.vertexes.iterator; e.next(); ) {
        var f = e.value;
        b = f.layer;
        d = f.column;
        f = this.nodeMinColumnSpace(f, !1);
        c[b] = Math.max(c[b], d + f);
      }
      for (e.reset(); e.next(); )
        (f = e.value),
          (b = f.layer),
          (d = f.column),
          (f.column = ((8 * (this.Ja - c[b])) >> 1) + 8 * d);
      this.Ja *= 8;
    }
    if (0 !== (this.Tf & 2))
      for (c = !0; c; ) {
        c = !1;
        for (b = this.zc + 1; b <= this.wa; b++) c = ot(this, b, 1) || c;
        for (b = this.zc - 1; 0 <= b; b--) c = ot(this, b, -1) || c;
        c = ot(this, this.zc, 0) || c;
      }
    if (0 !== (this.Tf & 4)) {
      for (b = this.zc + 1; b <= this.wa; b++) pt(this, b, 1);
      for (b = this.zc - 1; 0 <= b; b--) pt(this, b, -1);
      pt(this, this.zc, 0);
    }
    a && (qt(this, -1), qt(this, 1));
    if (0 !== (this.Tf & 2))
      for (c = !0; c; ) {
        c = !1;
        c = ot(this, this.zc, 0) || c;
        for (b = this.zc + 1; b <= this.wa; b++) c = ot(this, b, 0) || c;
        for (b = this.zc - 1; 0 <= b; b--) c = ot(this, b, 0) || c;
      }
  };

  function ot(a, b, c) {
    for (var d = !1; rt(a, b, c); ) d = !0;
    return d;
  }

  function rt(a, b, c) {
    var d,
      e = Ks(a, b),
      f = a.Hb[b],
      g = Rs(a, b, -1);
    if (0 < c) for (d = 0; d < f; d++) g[d] = -1;
    var h = Rs(a, b, 1);
    if (0 > c) for (d = 0; d < f; d++) h[d] = -1;
    for (var k = !1, l = !0; l; )
      for (l = !1, d = 0; d < f; d++) {
        var m = e[d].column,
          n = a.nodeMinColumnSpace(e[d], !0),
          p = a.nodeMinColumnSpace(e[d], !1),
          r = 0;
        0 > d - 1 ||
        m - e[d - 1].column - 1 > n + a.nodeMinColumnSpace(e[d - 1], !1)
          ? (r = m - 1)
          : (r = m);
        n =
          d + 1 >= f ||
          e[d + 1].column - m - 1 > p + a.nodeMinColumnSpace(e[d + 1], !0)
            ? m + 1
            : m;
        var q = (p = 0),
          u = 0;
        if (0 >= c)
          for (var w = e[d].sourceEdges.iterator; w.next(); ) {
            var v = w.value;
            var z = v.fromVertex;
            if (v.valid && z.layer !== b) {
              var y = Ms(v);
              var A = v.portFromColOffset;
              v = v.portToColOffset;
              z = z.column;
              p += (Math.abs(m + v - (z + A)) + 1) * y;
              q += (Math.abs(r + v - (z + A)) + 1) * y;
              u += (Math.abs(n + v - (z + A)) + 1) * y;
            }
          }
        if (0 <= c)
          for (w = e[d].destinationEdges.iterator; w.next(); )
            (v = w.value),
              (z = v.toVertex),
              v.valid &&
                z.layer !== b &&
                ((y = Ms(v)),
                (A = v.portFromColOffset),
                (v = v.portToColOffset),
                (z = z.column),
                (p += (Math.abs(m + A - (z + v)) + 1) * y),
                (q += (Math.abs(r + A - (z + v)) + 1) * y),
                (u += (Math.abs(n + A - (z + v)) + 1) * y));
        v = A = y = 0;
        w = g[e[d].index];
        z = h[e[d].index];
        -1 !== w &&
          ((y += Math.abs(w - m)),
          (A += Math.abs(w - r)),
          (v += Math.abs(w - n)));
        -1 !== z &&
          ((y += Math.abs(z - m)),
          (A += Math.abs(z - r)),
          (v += Math.abs(z - n)));
        if (q < p || (q === p && A < y)) (l = k = !0), (e[d].column = r);
        else if (u < p || (u === p && v < y)) (l = k = !0), (e[d].column = n);
      }
    Ls(a, b, e);
    a.normalize();
    return k;
  }

  function pt(a, b, c) {
    var d = Ks(a, b),
      e = a.Hb[b],
      f = Ss(a, b, c),
      g = [];
    for (c = 0; c < e; c++) g[c] = f[c];
    for (f = !0; f; )
      for (f = !1, c = 0; c < e; c++) {
        var h = d[c].column,
          k = a.nodeMinColumnSpace(d[c], !0),
          l = a.nodeMinColumnSpace(d[c], !1),
          m = 0;
        if (-1 === g[c])
          if (0 === c && c === e - 1) m = h;
          else if (0 === c) {
            var n = d[c + 1].column;
            n - h === l + a.nodeMinColumnSpace(d[c + 1], !0)
              ? (m = h - 1)
              : (m = h);
          } else
            c === e - 1
              ? ((n = d[c - 1].column),
                (m =
                  h - n === k + a.nodeMinColumnSpace(d[c - 1], !1) ? h + 1 : h))
              : ((n = d[c - 1].column),
                (k = n + a.nodeMinColumnSpace(d[c - 1], !1) + k + 1),
                (n = d[c + 1].column),
                (l = n - a.nodeMinColumnSpace(d[c + 1], !0) - l - 1),
                (m = ((k + l) / 2) | 0));
        else
          0 === c && c === e - 1
            ? (m = g[c])
            : 0 === c
            ? ((n = d[c + 1].column),
              (l = n - a.nodeMinColumnSpace(d[c + 1], !0) - l - 1),
              (m = Math.min(g[c], l)))
            : c === e - 1
            ? ((n = d[c - 1].column),
              (k = n + a.nodeMinColumnSpace(d[c - 1], !1) + k + 1),
              (m = Math.max(g[c], k)))
            : ((n = d[c - 1].column),
              (k = n + a.nodeMinColumnSpace(d[c - 1], !1) + k + 1),
              (n = d[c + 1].column),
              (l = n - a.nodeMinColumnSpace(d[c + 1], !0) - l - 1),
              k < g[c] && g[c] < l
                ? (m = g[c])
                : k >= g[c]
                ? (m = k)
                : l <= g[c] && (m = l));
        m !== h && ((f = !0), (d[c].column = m));
      }
    Ls(a, b, d);
    a.normalize();
  }

  function st(a, b) {
    for (var c = !0, d = a.network.vertexes.iterator; d.next(); ) {
      var e = d.value,
        f = a.nodeMinColumnSpace(e, !0),
        g = a.nodeMinColumnSpace(e, !1);
      if (e.column - f <= b && e.column + g >= b) {
        c = !1;
        break;
      }
    }
    a = !1;
    if (c)
      for (d.reset(); d.next(); )
        (c = d.value), c.column > b && (--c.column, (a = !0));
    return a;
  }

  function tt(a, b) {
    var c = b + 1;
    var d,
      e = [],
      f = [];
    for (d = 0; d <= a.wa; d++) (e[d] = !1), (f[d] = !1);
    for (var g = a.network.vertexes.iterator; g.next(); ) {
      d = g.value;
      var h = d.column - a.nodeMinColumnSpace(d, !0),
        k = d.column + a.nodeMinColumnSpace(d, !1);
      h <= b && k >= b && (e[d.layer] = !0);
      h <= c && k >= c && (f[d.layer] = !0);
    }
    h = !0;
    c = !1;
    for (d = 0; d <= a.wa; d++) h = h && !(e[d] && f[d]);
    if (h)
      for (g.reset(); g.next(); )
        (a = g.value), a.column > b && (--a.column, (c = !0));
    return c;
  }

  function qt(a, b) {
    for (var c = 0; c <= a.Ja; c++) for (; st(a, c); );
    a.normalize();
    for (c = 0; c < a.Ja; c++) for (; tt(a, c); );
    a.normalize();
    var d;
    if (0 < b)
      for (c = 0; c <= a.Ja; c++) {
        var e = Ns(a);
        var f = Qs(a);
        for (d = f + 1; f < d; ) {
          d = f;
          ut(a, c, 1);
          var g = Qs(a);
          g > f ? Os(a, e) : g < f && ((f = g), (e = Ns(a)));
        }
      }
    if (0 > b)
      for (c = a.Ja; 0 <= c; c--)
        for (e = Ns(a), f = Qs(a), d = f + 1; f < d; )
          (d = f),
            ut(a, c, -1),
            (g = Qs(a)),
            g > f ? Os(a, e) : g < f && ((f = g), (e = Ns(a)));
    a.normalize();
  }

  function ut(a, b, c) {
    a.Lc = 0;
    for (var d = a.network.vertexes.iterator; d.next(); )
      d.value.component = -1;
    if (0 < c)
      for (d.reset(); d.next(); ) {
        var e = d.value;
        e.column - a.nodeMinColumnSpace(e, !0) <= b && (e.component = a.Lc);
      }
    if (0 > c)
      for (d.reset(); d.next(); )
        (e = d.value),
          e.column + a.nodeMinColumnSpace(e, !1) >= b && (e.component = a.Lc);
    a.Lc++;
    for (d.reset(); d.next(); )
      (b = d.value), -1 === b.component && (Us(a, b, a.Lc, -1, !0, !0), a.Lc++);
    var f;
    b = [];
    for (f = 0; f < a.Lc * a.Lc; f++) b[f] = !1;
    e = [];
    for (f = 0; f < (a.wa + 1) * (a.Ja + 1); f++) e[f] = -1;
    for (d.reset(); d.next(); ) {
      f = d.value;
      for (
        var g = f.layer,
          h = Math.max(0, f.column - a.nodeMinColumnSpace(f, !0)),
          k = Math.min(a.Ja, f.column + a.nodeMinColumnSpace(f, !1));
        h <= k;
        h++
      )
        e[g * (a.Ja + 1) + h] = f.component;
    }
    for (f = 0; f <= a.wa; f++) {
      if (0 < c)
        for (g = 0; g < a.Ja; g++)
          -1 !== e[f * (a.Ja + 1) + g] &&
            -1 !== e[f * (a.Ja + 1) + g + 1] &&
            e[f * (a.Ja + 1) + g] !== e[f * (a.Ja + 1) + g + 1] &&
            (b[e[f * (a.Ja + 1) + g] * a.Lc + e[f * (a.Ja + 1) + g + 1]] = !0);
      if (0 > c)
        for (g = a.Ja; 0 < g; g--)
          -1 !== e[f * (a.Ja + 1) + g] &&
            -1 !== e[f * (a.Ja + 1) + g - 1] &&
            e[f * (a.Ja + 1) + g] !== e[f * (a.Ja + 1) + g - 1] &&
            (b[e[f * (a.Ja + 1) + g] * a.Lc + e[f * (a.Ja + 1) + g - 1]] = !0);
    }
    e = [];
    for (f = 0; f < a.Lc; f++) e[f] = !0;
    g = [];
    for (g.push(0); 0 !== g.length; )
      if (((k = g[g.length - 1]), g.pop(), e[k]))
        for (e[k] = !1, f = 0; f < a.Lc; f++)
          b[k * a.Lc + f] && g.splice(0, 0, f);
    if (0 < c)
      for (d.reset(); d.next(); ) (a = d.value), e[a.component] && --a.column;
    if (0 > c)
      for (d.reset(); d.next(); )
        (c = d.value), e[c.component] && (c.column += 1);
  }
  Bs.prototype.commitLayout = function() {
    if (this.setsPortSpots)
      for (
        var a = Is(this, !0), b = Is(this, !1), c = this.network.edges.iterator;
        c.next();

      ) {
        var d = c.value.link;
        null !== d && ((d.fromSpot = a), (d.toSpot = b));
      }
    this.commitNodes();
    this.nu();
    this.isRouting && this.commitLinks();
  };

  function Is(a, b) {
    return 270 === a.L
      ? b
        ? ad
        : fd
      : 90 === a.L
      ? b
        ? fd
        : ad
      : 180 === a.L
      ? b
        ? dd
        : ed
      : b
      ? ed
      : dd;
  }
  Bs.prototype.commitNodes = function() {
    this.ae = [];
    this.Cd = [];
    this.Bd = [];
    this.Qa = [];
    for (var a = 0; a <= this.wa; a++)
      (this.ae[a] = 0), (this.Cd[a] = 0), (this.Bd[a] = 0), (this.Qa[a] = 0);
    for (a = this.network.vertexes.iterator; a.next(); ) {
      var b = a.value,
        c = b.layer;
      this.ae[c] = Math.max(this.ae[c], this.nodeMinLayerSpace(b, !0));
      this.Cd[c] = Math.max(this.Cd[c], this.nodeMinLayerSpace(b, !1));
    }
    b = 0;
    c = this.be;
    for (var d = 0; d <= this.wa; d++) {
      var e = c;
      0 >= this.ae[d] + this.Cd[d] && (e = 0);
      0 < d && (b += e / 2);
      90 === this.L || 0 === this.L
        ? ((b += this.Cd[d]), (this.Bd[d] = b), (b += this.ae[d]))
        : ((b += this.ae[d]), (this.Bd[d] = b), (b += this.Cd[d]));
      d < this.wa && (b += e / 2);
      this.Qa[d] = b;
    }
    c = b;
    b = this.arrangementOrigin;
    for (d = 0; d <= this.wa; d++)
      270 === this.L
        ? (this.Bd[d] = b.y + this.Bd[d])
        : 90 === this.L
        ? ((this.Bd[d] = b.y + c - this.Bd[d]), (this.Qa[d] = c - this.Qa[d]))
        : 180 === this.L
        ? (this.Bd[d] = b.x + this.Bd[d])
        : ((this.Bd[d] = b.x + c - this.Bd[d]), (this.Qa[d] = c - this.Qa[d]));
    a.reset();
    for (c = d = Infinity; a.next(); ) {
      e = a.value;
      var f = e.layer,
        g = e.column | 0;
      if (270 === this.L || 90 === this.L) {
        var h = b.x + this.gc * g;
        f = this.Bd[f];
      } else (h = this.Bd[f]), (f = b.y + this.gc * g);
      e.centerX = h;
      e.centerY = f;
      d = Math.min(e.x, d);
      c = Math.min(e.y, c);
    }
    d = b.x - d;
    b = b.y - c;
    this.Yc = new I(d, b);
    for (a.reset(); a.next(); )
      (c = a.value), (c.x += d), (c.y += b), c.commit();
  };
  Bs.prototype.nu = function() {
    for (var a = 0, b = this.be, c = 0; c <= this.wa; c++)
      (a += this.ae[c]), (a += this.Cd[c]);
    a += this.wa * b;
    b = [];
    c = this.gc * this.Ja;
    for (var d = this.maxLayer; 0 <= d; d--)
      270 === this.L
        ? 0 === d
          ? b.push(new M(0, 0, c, Math.abs(this.Qa[0])))
          : b.push(
              new M(
                0,
                this.Qa[d - 1],
                c,
                Math.abs(this.Qa[d - 1] - this.Qa[d]),
              ),
            )
        : 90 === this.L
        ? 0 === d
          ? b.push(new M(0, this.Qa[0], c, Math.abs(this.Qa[0] - a)))
          : b.push(
              new M(0, this.Qa[d], c, Math.abs(this.Qa[d - 1] - this.Qa[d])),
            )
        : 180 === this.L
        ? 0 === d
          ? b.push(new M(0, 0, Math.abs(this.Qa[0]), c))
          : b.push(
              new M(
                this.Qa[d - 1],
                0,
                Math.abs(this.Qa[d - 1] - this.Qa[d]),
                c,
              ),
            )
        : 0 === d
        ? b.push(new M(this.Qa[0], 0, Math.abs(this.Qa[0] - a), c))
        : b.push(
            new M(this.Qa[d], 0, Math.abs(this.Qa[d - 1] - this.Qa[d]), c),
          );
    this.commitLayers(b, this.Yc);
  };
  Bs.prototype.commitLayers = function() {};
  Bs.prototype.commitLinks = function() {
    for (var a = this.network.edges.iterator, b; a.next(); )
      (b = a.value.link), null !== b && (b.jh(), b.Aj(), b.pf());
    for (a.reset(); a.next(); ) (b = a.value.link), null !== b && b.mg();
    for (a.reset(); a.next(); ) {
      var c = a.value;
      b = c.link;
      if (null !== b) {
        b.jh();
        var d = b,
          e = d.fromNode,
          f = d.toNode,
          g = d.fromPort,
          h = d.toPort;
        if (null !== e) {
          var k = e.findVisibleNode();
          null !== k && k !== e && ((e = k), (g = k.port));
        }
        null !== f &&
          ((k = f.findVisibleNode()),
          null !== k && k !== f && ((f = k), (h = k.port)));
        var l = b.computeSpot(!0, g);
        k = b.computeSpot(!1, h);
        var m = c.fromVertex,
          n = c.toVertex;
        if (c.valid) {
          if (b.curve === cg && 4 === b.pointsCount)
            if (m.column === n.column)
              (c = b.getLinkPoint(e, g, l, !0, !1, f, h)),
                (g = b.getLinkPoint(f, h, k, !1, !1, e, g)),
                c.v() || c.set(e.actualBounds.center),
                g.v() || g.set(f.actualBounds.center),
                b.Aj(),
                b.mf(c.x, c.y),
                b.mf((2 * c.x + g.x) / 3, (2 * c.y + g.y) / 3),
                b.mf((c.x + 2 * g.x) / 3, (c.y + 2 * g.y) / 3),
                b.mf(g.x, g.y);
            else {
              var p = !1,
                r = !1;
              null !== g && l === sc && (p = !0);
              null !== h && k === sc && (r = !0);
              if (p || r) {
                var q = b.i(0).x;
                c = b.i(0).y;
                m = b.i(3).x;
                d = b.i(3).y;
                if (p) {
                  if (90 === this.L || 270 === this.L) {
                    p = q;
                    var u = (c + d) / 2;
                  } else (p = (q + m) / 2), (u = c);
                  b.M(1, p, u);
                  l = b.getLinkPoint(e, g, l, !0, !1, f, h);
                  l.v() || l.set(e.actualBounds.center);
                  b.M(0, l.x, l.y);
                }
                r &&
                  (90 === this.L || 270 === this.L
                    ? ((l = m), (c = (c + d) / 2))
                    : ((l = (q + m) / 2), (c = d)),
                  b.M(2, l, c),
                  (e = b.getLinkPoint(f, h, k, !1, !1, e, g)),
                  e.v() || e.set(f.actualBounds.center),
                  b.M(3, e.x, e.y));
              }
            }
          b.pf();
        } else if (m.layer === n.layer) b.pf();
        else {
          p = r = !1;
          u = this.be;
          q = b.firstPickIndex + 1;
          if (b.isOrthogonal) {
            p = !0;
            var w = b.pointsCount;
            4 < w && b.points.removeRange(2, w - 3);
          } else if (b.curve === cg)
            (r = !0),
              (w = b.pointsCount),
              4 < w && b.points.removeRange(2, w - 3),
              4 === w && (q = 2);
          else {
            w = b.pointsCount;
            var v = l === sc,
              z = k === sc;
            2 < w && v && z
              ? b.points.removeRange(1, w - 2)
              : 3 < w && v && !z
              ? b.points.removeRange(1, w - 3)
              : 3 < w && !v && z
              ? b.points.removeRange(2, w - 2)
              : 4 < w && !v && !z && b.points.removeRange(2, w - 3);
          }
          if (c.rev) {
            for (; null !== n && m !== n; ) {
              var y = (w = null);
              for (
                v = n.sourceEdges.iterator;
                v.next() &&
                ((z = v.value),
                z.link !== c.link ||
                  ((w = z.fromVertex), (y = z.toVertex), null !== w.node));

              );
              if (null === w) break;
              if (w !== m) {
                v = b.i(q - 1).x;
                z = b.i(q - 1).y;
                var A = w.centerX;
                var B = w.centerY;
                if (p)
                  180 === this.L || 0 === this.L
                    ? q === b.firstPickIndex + 1
                      ? (b.l(q++, v, z), b.l(q++, v, B))
                      : (null !== y ? y.centerY : z) !== B &&
                        ((y = this.Qa[w.layer - 1] + this.Yc.x),
                        b.l(q++, y, z),
                        b.l(q++, y, B))
                    : q === b.firstPickIndex + 1
                    ? (b.l(q++, v, z), b.l(q++, A, z))
                    : (null !== y ? y.centerX : v) !== A &&
                      ((y = this.Qa[w.layer - 1] + this.Yc.y),
                      b.l(q++, v, y),
                      b.l(q++, A, y));
                else if (q === b.firstPickIndex + 1) {
                  y = Math.max(10, this.ae[n.layer]);
                  var F = Math.max(10, this.Cd[n.layer]);
                  if (r)
                    180 === this.L
                      ? A <= n.bounds.x
                        ? ((n = n.bounds.x),
                          b.l(q++, n - y, B),
                          b.l(q++, n, B),
                          b.l(q++, n + F, B))
                        : (b.l(q++, A - y, B),
                          b.l(q++, A, B),
                          b.l(q++, A + F, B))
                      : 90 === this.L
                      ? B >= n.bounds.bottom
                        ? ((n = n.bounds.y + n.bounds.height),
                          b.l(q++, A, n + F),
                          b.l(q++, A, n),
                          b.l(q++, A, n - y))
                        : (b.l(q++, A, B + F),
                          b.l(q++, A, B),
                          b.l(q++, A, B - y))
                      : 270 === this.L
                      ? B <= n.bounds.y
                        ? ((n = n.bounds.y),
                          b.l(q++, A, n - y),
                          b.l(q++, A, n),
                          b.l(q++, A, n + F))
                        : (b.l(q++, A, B - y),
                          b.l(q++, A, B),
                          b.l(q++, A, B + F))
                      : 0 === this.L &&
                        (A >= n.bounds.right
                          ? ((n = n.bounds.x + n.bounds.width),
                            b.l(q++, n + F, B),
                            b.l(q++, n, B),
                            b.l(q++, n - y, B))
                          : (b.l(q++, A + F, B),
                            b.l(q++, A, B),
                            b.l(q++, A - y, B)));
                  else {
                    b.l(q++, v, z);
                    var L = 0;
                    if (180 === this.L || 0 === this.L) {
                      if (
                        180 === this.L ? A >= n.bounds.right : A <= n.bounds.x
                      )
                        L = (0 === this.L ? -y : F) / 2;
                      b.l(q++, v + L, B);
                    } else {
                      if (
                        270 === this.L ? B >= n.bounds.bottom : B <= n.bounds.y
                      )
                        L = (90 === this.L ? -y : F) / 2;
                      b.l(q++, A, z + L);
                    }
                    b.l(q++, A, B);
                  }
                } else
                  (y = Math.max(10, this.ae[w.layer])),
                    (F = Math.max(10, this.Cd[w.layer])),
                    r
                      ? 180 === this.L
                        ? (b.l(q++, A - y - u, B),
                          b.l(q++, Math.min(A - y + u / 2, A), B),
                          b.l(q++, A, B),
                          b.l(q++, A, B),
                          b.l(q++, Math.max(A + F - u / 2, A), B),
                          b.l(q++, A + F + u, B))
                        : 90 === this.L
                        ? (b.l(q++, A, B + F + u),
                          b.l(q++, A, Math.max(B + F - u / 2, B)),
                          b.l(q++, A, B),
                          b.l(q++, A, B),
                          b.l(q++, A, Math.min(B - y + u / 2, B)),
                          b.l(q++, A, B - y - u))
                        : 270 === this.L
                        ? (b.l(q++, A, B - y - u),
                          b.l(q++, A, Math.min(B - y + u / 2, B)),
                          b.l(q++, A, B),
                          b.l(q++, A, B),
                          b.l(q++, A, Math.max(B + F - u / 2, B)),
                          b.l(q++, A, B + F + u))
                        : (b.l(q++, A + F + u, B),
                          b.l(q++, Math.max(A + F - u / 2, A), B),
                          b.l(q++, A, B),
                          b.l(q++, A, B),
                          b.l(q++, Math.min(A - y + u / 2, A), B),
                          b.l(q++, A - y - u, B))
                      : b.l(q++, A, B);
              }
              n = w;
            }
            if (null === h || l !== sc || p)
              if (
                ((v = b.i(q - 1).x),
                (z = b.i(q - 1).y),
                (A = b.i(q).x),
                (B = b.i(q).y),
                p)
              )
                (u = this.Cd[m.layer]),
                  180 === this.L || 0 === this.L
                    ? ((p = z),
                      p >= m.bounds.y &&
                        p <= m.bounds.bottom &&
                        (180 === this.L
                          ? A >= m.bounds.x
                          : A <= m.bounds.right) &&
                        ((n = m.centerX + (180 === this.L ? -u : u)),
                        p < m.bounds.y + m.bounds.height / 2
                          ? (p = m.bounds.y - this.gc / 2)
                          : (p = m.bounds.bottom + this.gc / 2),
                        b.l(q++, n, z),
                        b.l(q++, n, p)),
                      b.l(q++, A, p))
                    : ((p = v),
                      p >= m.bounds.x &&
                        p <= m.bounds.right &&
                        (270 === this.L
                          ? B >= m.bounds.y
                          : B <= m.bounds.bottom) &&
                        ((n = m.centerY + (270 === this.L ? -u : u)),
                        p < m.bounds.x + m.bounds.width / 2
                          ? (p = m.bounds.x - this.gc / 2)
                          : (p = m.bounds.right + this.gc / 2),
                        b.l(q++, v, n),
                        b.l(q++, p, n)),
                      b.l(q++, p, B)),
                  b.l(q++, A, B);
              else if (r)
                (y = Math.max(10, this.ae[m.layer])),
                  (F = Math.max(10, this.Cd[m.layer])),
                  180 === this.L && A >= m.bounds.x
                    ? ((n = m.bounds.x + m.bounds.width),
                      b.M(q - 2, n, z),
                      b.M(q - 1, n + F, z))
                    : 90 === this.L && B <= m.bounds.bottom
                    ? ((n = m.bounds.y), b.M(q - 2, v, n), b.M(q - 1, v, n - y))
                    : 270 === this.L && B >= m.bounds.y
                    ? ((n = m.bounds.y + m.bounds.height),
                      b.M(q - 2, v, n),
                      b.M(q - 1, v, n + F))
                    : 0 === this.L &&
                      A <= m.bounds.right &&
                      ((n = m.bounds.x),
                      b.M(q - 2, n, z),
                      b.M(q - 1, n - y, z));
              else {
                y = Math.max(10, this.ae[m.layer]);
                F = Math.max(10, this.Cd[m.layer]);
                p = 0;
                if (180 === this.L || 0 === this.L) {
                  if (180 === this.L ? A <= m.bounds.x : A >= m.bounds.right)
                    p = (0 === this.L ? F : -y) / 2;
                  b.l(q++, A + p, z);
                } else {
                  if (270 === this.L ? B <= m.bounds.y : B >= m.bounds.bottom)
                    p = (90 === this.L ? F : -y) / 2;
                  b.l(q++, v, B + p);
                }
                b.l(q++, A, B);
              }
          } else {
            for (; null !== m && m !== n; ) {
              y = w = null;
              for (
                m = m.destinationEdges.iterator;
                m.next() &&
                ((v = m.value),
                v.link !== c.link ||
                  ((w = v.toVertex),
                  (y = v.fromVertex),
                  null !== y.node && (y = null),
                  null !== w.node));

              );
              if (null === w) break;
              w !== n &&
                ((v = b.i(q - 1).x),
                (z = b.i(q - 1).y),
                (A = w.centerX),
                (B = w.centerY),
                p
                  ? 180 === this.L || 0 === this.L
                    ? (null !== y ? y.centerY : z) !== B &&
                      ((y = this.Qa[w.layer] + this.Yc.x),
                      q === b.firstPickIndex + 1 &&
                        (y = 0 === this.L ? Math.max(y, v) : Math.min(y, v)),
                      b.l(q++, y, z),
                      b.l(q++, y, B))
                    : (null !== y ? y.centerX : v) !== A &&
                      ((y = this.Qa[w.layer] + this.Yc.y),
                      q === b.firstPickIndex + 1 &&
                        (y = 90 === this.L ? Math.max(y, z) : Math.min(y, z)),
                      b.l(q++, v, y),
                      b.l(q++, A, y))
                  : ((y = Math.max(10, this.ae[w.layer])),
                    (F = Math.max(10, this.Cd[w.layer])),
                    r
                      ? 180 === this.L
                        ? (b.l(q++, A + F + u, B),
                          b.l(q++, Math.max(A + F - u / 2, A), B),
                          b.l(q++, A, B),
                          b.l(q++, A, B),
                          b.l(q++, Math.min(A - y + u / 2, A), B),
                          b.l(q++, A - y - u, B))
                        : 90 === this.L
                        ? (b.l(q++, A, B - y - u),
                          b.l(q++, A, Math.min(B - y + u / 2, B)),
                          b.l(q++, A, B),
                          b.l(q++, A, B),
                          b.l(q++, A, Math.max(B + F - u / 2, B)),
                          b.l(q++, A, B + F + u))
                        : 270 === this.L
                        ? (b.l(q++, A, B + F + u),
                          b.l(q++, A, Math.max(B + F - u / 2, B)),
                          b.l(q++, A, B),
                          b.l(q++, A, B),
                          b.l(q++, A, Math.min(B - y + u / 2, B)),
                          b.l(q++, A, B - y - u))
                        : (b.l(q++, A - y - u, B),
                          b.l(q++, Math.min(A - y + u / 2, A), B),
                          b.l(q++, A, B),
                          b.l(q++, A, B),
                          b.l(q++, Math.max(A + F - u / 2, A), B),
                          b.l(q++, A + F + u, B))
                      : 180 === this.L
                      ? (b.l(q++, A + F, B), b.l(q++, A - y, B))
                      : 90 === this.L
                      ? (b.l(q++, A, B - y), b.l(q++, A, B + F))
                      : 270 === this.L
                      ? (b.l(q++, A, B + F), b.l(q++, A, B - y))
                      : (b.l(q++, A - y, B), b.l(q++, A + F, B))));
              m = w;
            }
            p &&
              ((v = b.i(q - 1).x),
              (z = b.i(q - 1).y),
              (A = b.i(q).x),
              (B = b.i(q).y),
              180 === this.L || 0 === this.L
                ? z !== B &&
                  ((y =
                    0 === this.L
                      ? Math.min(
                          Math.max((A + v) / 2, this.Qa[n.layer] + this.Yc.x),
                          A,
                        )
                      : Math.max(
                          Math.min((A + v) / 2, this.Qa[n.layer] + this.Yc.x),
                          A,
                        )),
                  b.l(q++, y, z),
                  b.l(q++, y, B))
                : v !== A &&
                  ((y =
                    90 === this.L
                      ? Math.min(
                          Math.max((B + z) / 2, this.Qa[n.layer] + this.Yc.y),
                          B,
                        )
                      : Math.max(
                          Math.min((B + z) / 2, this.Qa[n.layer] + this.Yc.y),
                          B,
                        )),
                  b.l(q++, v, y),
                  b.l(q++, A, y)));
          }
          null !== d &&
            r &&
            (null !== g &&
              (l === sc &&
                ((l = b.i(0)),
                (d = b.i(2)),
                l.C(d) || b.M(1, (l.x + d.x) / 2, (l.y + d.y) / 2)),
              (l = b.getLinkPoint(e, g, sc, !0, !1, f, h)),
              l.v() || l.set(e.actualBounds.center),
              b.M(0, l.x, l.y)),
            null !== h &&
              (k === sc &&
                ((k = b.i(b.pointsCount - 1)),
                (l = b.i(b.pointsCount - 3)),
                k.C(l) ||
                  b.M(b.pointsCount - 2, (k.x + l.x) / 2, (k.y + l.y) / 2)),
              (e = b.getLinkPoint(f, h, sc, !1, !1, e, g)),
              e.v() || e.set(f.actualBounds.center),
              b.M(b.pointsCount - 1, e.x, e.y)));
          b.pf();
          c.commit();
        }
      }
    }
    this.avoidOrthogonalOverlaps();
  };
  Bs.prototype.avoidOrthogonalOverlaps = function() {
    if (!(0 >= this.linkSpacing)) {
      for (var a = new E(), b = this.network.edges.iterator; b.next(); ) {
        var c = b.value.link;
        null !== c && c.isOrthogonal && !a.contains(c) && a.add(c);
      }
      if (0 < a.count)
        if (90 === this.L || 270 === this.L) {
          b = 0;
          c = [];
          for (a = a.iterator; a.next(); ) {
            var d = a.value;
            if (null !== d && d.isOrthogonal)
              for (var e = 2; e < d.pointsCount - 3; e++) {
                var f = d.i(e);
                var g = d.i(e + 1);
                if (this.B(f.y, g.y) && !this.B(f.x, g.x)) {
                  var h = new vt();
                  h.layer = Math.floor(f.y / 2);
                  var k = d.i(0),
                    l = d.i(d.pointsCount - 1);
                  h.first = k.x * k.x + k.y;
                  h.fc = l.x * l.x + l.y;
                  h.ld = Math.min(f.x, g.x);
                  h.Bc = Math.max(f.x, g.x);
                  h.index = e;
                  h.link = d;
                  if (e + 2 < d.pointsCount) {
                    k = d.i(e - 1);
                    l = d.i(e + 2);
                    var m = 0;
                    k.y < f.y
                      ? (m = l.y < f.y ? 3 : f.x < g.x ? 2 : 1)
                      : k.y > f.y && (m = l.y > f.y ? 0 : g.x < f.x ? 2 : 1);
                    h.j = m;
                  }
                  c.push(h);
                }
              }
          }
          if (1 < c.length)
            for (c.sort(this.Cx), a = 0; a < c.length; ) {
              f = c[a].layer;
              for (d = a + 1; d < c.length && c[d].layer === f; ) d++;
              if (1 < d - a)
                for (f = a; f < d; ) {
                  g = c[f].Bc;
                  for (e = a + 1; e < d && c[e].ld < g; )
                    (g = Math.max(g, c[e].Bc)), e++;
                  g = e - f;
                  if (1 < g) {
                    this.ri(c, this.js, f, f + g);
                    m = 1;
                    h = c[f].fc;
                    for (k = f; k < e; k++)
                      (l = c[k]), l.fc !== h && (m++, (h = l.fc));
                    this.ri(c, this.Bx, f, f + g);
                    var n = 1;
                    h = c[f].first;
                    for (k = f; k < e; k++)
                      (l = c[k]), l.first !== h && (n++, (h = l.first));
                    k = !0;
                    l = n;
                    m < n
                      ? ((k = !1),
                        (l = m),
                        (h = c[f].fc),
                        this.ri(c, this.js, f, f + g))
                      : (h = c[f].first);
                    m = 0;
                    for (n = f; n < e; n++) {
                      var p = c[n];
                      (k ? p.first : p.fc) !== h &&
                        (m++, (h = k ? p.first : p.fc));
                      var r = p.link;
                      f = r.i(p.index);
                      g = r.i(p.index + 1);
                      var q = this.linkSpacing * (m - (l - 1) / 2);
                      b++;
                      r.jh();
                      r.M(p.index, f.x, f.y + q);
                      r.M(p.index + 1, g.x, g.y + q);
                      r.pf();
                    }
                  }
                  f = e;
                }
              a = d;
            }
        } else {
          b = 0;
          c = [];
          for (a = a.iterator; a.next(); )
            if (((d = a.value), null !== d && d.isOrthogonal))
              for (e = 2; e < d.pointsCount - 3; e++)
                (f = d.i(e)),
                  (g = d.i(e + 1)),
                  this.B(f.x, g.x) &&
                    !this.B(f.y, g.y) &&
                    ((h = new vt()),
                    (h.layer = Math.floor(f.x / 2)),
                    (k = d.i(0)),
                    (l = d.i(d.pointsCount - 1)),
                    (h.first = k.x + k.y * k.y),
                    (h.fc = l.x + l.y * l.y),
                    (h.ld = Math.min(f.y, g.y)),
                    (h.Bc = Math.max(f.y, g.y)),
                    (h.index = e),
                    (h.link = d),
                    e + 2 < d.pointsCount &&
                      ((k = d.i(e - 1)),
                      (l = d.i(e + 2)),
                      (m = 0),
                      k.x < f.x
                        ? (m = l.x < f.x ? 3 : f.y < g.y ? 2 : 1)
                        : k.x > f.x && (m = l.x > f.x ? 0 : g.y < f.y ? 2 : 1),
                      (h.j = m)),
                    c.push(h));
          if (1 < c.length)
            for (c.sort(this.Cx), a = 0; a < c.length; ) {
              f = c[a].layer;
              for (d = a + 1; d < c.length && c[d].layer === f; ) d++;
              if (1 < d - a)
                for (f = a; f < d; ) {
                  g = c[f].Bc;
                  for (e = a + 1; e < d && c[e].ld < g; )
                    (g = Math.max(g, c[e].Bc)), e++;
                  g = e - f;
                  if (1 < g) {
                    this.ri(c, this.js, f, f + g);
                    m = 1;
                    h = c[f].fc;
                    for (k = f; k < e; k++)
                      (l = c[k]), l.fc !== h && (m++, (h = l.fc));
                    this.ri(c, this.Bx, f, f + g);
                    n = 1;
                    h = c[f].first;
                    for (k = f; k < e; k++)
                      (l = c[k]), l.first !== h && (n++, (h = l.first));
                    k = !0;
                    l = n;
                    m < n
                      ? ((k = !1),
                        (l = m),
                        (h = c[f].fc),
                        this.ri(c, this.js, f, f + g))
                      : (h = c[f].first);
                    m = 0;
                    for (n = f; n < e; n++)
                      (p = c[n]),
                        (k ? p.first : p.fc) !== h &&
                          (m++, (h = k ? p.first : p.fc)),
                        (r = p.link),
                        (f = r.i(p.index)),
                        (g = r.i(p.index + 1)),
                        (q = this.linkSpacing * (m - (l - 1) / 2)),
                        b++,
                        r.jh(),
                        r.M(p.index, f.x + q, f.y),
                        r.M(p.index + 1, g.x + q, g.y),
                        r.pf();
                  }
                  f = e;
                }
              a = d;
            }
        }
    }
  };
  t = Bs.prototype;
  t.Cx = function(a, b) {
    return a instanceof vt && b instanceof vt && a !== b
      ? a.layer < b.layer
        ? -1
        : a.layer > b.layer
        ? 1
        : a.ld < b.ld
        ? -1
        : a.ld > b.ld
        ? 1
        : a.Bc < b.Bc
        ? -1
        : a.Bc > b.Bc
        ? 1
        : 0
      : 0;
  };
  t.Bx = function(a, b) {
    return a instanceof vt && b instanceof vt && a !== b
      ? a.first < b.first
        ? -1
        : a.first > b.first || a.j < b.j
        ? 1
        : a.j > b.j || a.ld < b.ld
        ? -1
        : a.ld > b.ld
        ? 1
        : a.Bc < b.Bc
        ? -1
        : a.Bc > b.Bc
        ? 1
        : 0
      : 0;
  };
  t.js = function(a, b) {
    return a instanceof vt && b instanceof vt && a !== b
      ? a.fc < b.fc
        ? -1
        : a.fc > b.fc || a.j < b.j
        ? 1
        : a.j > b.j || a.ld < b.ld
        ? -1
        : a.ld > b.ld
        ? 1
        : a.Bc < b.Bc
        ? -1
        : a.Bc > b.Bc
        ? 1
        : 0
      : 0;
  };
  t.B = function(a, b) {
    a -= b;
    return -1 < a && 1 > a;
  };
  t.ri = function(a, b, c, d) {
    var e = a.length,
      f = d - c;
    if (!(1 >= f))
      if (
        ((0 > c || c >= e - 1) && C('not in range 0 <= from < length: ' + c),
        2 === f)
      )
        (d = a[c]), (e = a[c + 1]), 0 < b(d, e) && ((a[c] = e), (a[c + 1] = d));
      else if (0 === c)
        if (d >= e) a.sort(b);
        else for (c = a.slice(0, d), c.sort(b), b = 0; b < d; b++) a[b] = c[b];
      else if (d >= e)
        for (d = a.slice(c), d.sort(b), b = c; b < e; b++) a[b] = d[b - c];
      else
        for (e = a.slice(c, d), e.sort(b), b = c; b < d; b++) a[b] = e[b - c];
  };

  function Ks(a, b) {
    var c = a.Hb[b];
    if (c >= a.we.length) {
      var d = [];
      for (var e = 0; e < a.we.length; e++) d[e] = a.we[e];
      a.we = d;
    }
    void 0 === a.we[c] || null === a.we[c]
      ? (d = [])
      : ((d = a.we[c]), (a.we[c] = null));
    a = a.rn[b];
    for (b = 0; b < a.length; b++) (c = a[b]), (d[c.index] = c);
    return d;
  }

  function Ls(a, b, c) {
    a.we[a.Hb[b]] = c;
  }
  ma.Object.defineProperties(Bs.prototype, {
    layerSpacing: {
      get: function() {
        return this.be;
      },
      set: function(a) {
        this.be !== a && 0 <= a && ((this.be = a), this.D());
      },
    },
    columnSpacing: {
      get: function() {
        return this.gc;
      },
      set: function(a) {
        this.gc !== a && 0 < a && ((this.gc = a), this.D());
      },
    },
    direction: {
      get: function() {
        return this.L;
      },
      set: function(a) {
        this.L !== a &&
          (0 === a || 90 === a || 180 === a || 270 === a
            ? ((this.L = a), this.D())
            : C('LayeredDigraphLayout.direction must be 0, 90, 180, or 270'));
      },
    },
    cycleRemoveOption: {
      get: function() {
        return this.rk;
      },
      set: function(a) {
        this.rk === a ||
          (a !== Vs && a !== Cs && a !== Hs) ||
          ((this.rk = a), this.D());
      },
    },
    layeringOption: {
      get: function() {
        return this.Ok;
      },
      set: function(a) {
        this.Ok === a ||
          (a !== Ds && a !== $s && a !== bt) ||
          ((this.Ok = a), this.D());
      },
    },
    initializeOption: {
      get: function() {
        return this.Fk;
      },
      set: function(a) {
        this.Fk === a ||
          (a !== Es && a !== ht && a !== ft) ||
          ((this.Fk = a), this.D());
      },
    },
    iterations: {
      get: function() {
        return this.Xi;
      },
      set: function(a) {
        this.Xi !== a && 0 <= a && ((this.Xi = a), this.D());
      },
    },
    aggressiveOption: {
      get: function() {
        return this.ek;
      },
      set: function(a) {
        this.ek === a ||
          (a !== lt && a !== Fs && a !== mt) ||
          ((this.ek = a), this.D());
      },
    },
    packOption: {
      get: function() {
        return this.Tf;
      },
      set: function(a) {
        this.Tf !== a && 0 <= a && 8 > a && ((this.Tf = a), this.D());
      },
    },
    setsPortSpots: {
      get: function() {
        return this.ff;
      },
      set: function(a) {
        this.ff !== a && ((this.ff = a), this.D());
      },
    },
    linkSpacing: {
      get: function() {
        return this.jn;
      },
      set: function(a) {
        this.jn !== a && 0 <= a && ((this.jn = a), this.D());
      },
    },
    maxLayer: {
      get: function() {
        return this.wa;
      },
    },
    maxIndex: {
      get: function() {
        return this.Dh;
      },
    },
    maxColumn: {
      get: function() {
        return this.Ja;
      },
    },
    minIndexLayer: {
      get: function() {
        return this.Bg;
      },
    },
    maxIndexLayer: {
      get: function() {
        return this.zc;
      },
    },
  });
  var Cs = new D(Bs, 'CycleDepthFirst', 0),
    Vs = new D(Bs, 'CycleGreedy', 1),
    Hs = new D(Bs, 'CycleFromLayers', 2),
    Ds = new D(Bs, 'LayerOptimalLinkLength', 0),
    $s = new D(Bs, 'LayerLongestPathSink', 1),
    bt = new D(Bs, 'LayerLongestPathSource', 2),
    Es = new D(Bs, 'InitDepthFirstOut', 0),
    ht = new D(Bs, 'InitDepthFirstIn', 1),
    ft = new D(Bs, 'InitNaive', 2),
    lt = new D(Bs, 'AggressiveNone', 0),
    Fs = new D(Bs, 'AggressiveLess', 1),
    mt = new D(Bs, 'AggressiveMore', 2),
    nt = 8;
  Bs.className = 'LayeredDigraphLayout';
  Bs.CycleDepthFirst = Cs;
  Bs.CycleGreedy = Vs;
  Bs.CycleFromLayers = Hs;
  Bs.LayerOptimalLinkLength = Ds;
  Bs.LayerLongestPathSink = $s;
  Bs.LayerLongestPathSource = bt;
  Bs.InitDepthFirstOut = Es;
  Bs.InitDepthFirstIn = ht;
  Bs.InitNaive = ft;
  Bs.AggressiveNone = lt;
  Bs.AggressiveLess = Fs;
  Bs.AggressiveMore = mt;
  Bs.PackNone = 0;
  Bs.PackExpand = 1;
  Bs.PackStraighten = 2;
  Bs.PackMedian = 4;
  Bs.PackAll = 15;

  function vt() {
    this.index = this.Bc = this.ld = this.fc = this.first = this.layer = 0;
    this.link = null;
    this.j = 0;
  }
  vt.className = 'SegInfo';

  function Gs(a) {
    eq.call(this, a);
  }
  la(Gs, eq);
  Gs.prototype.createVertex = function() {
    return new wt(this);
  };
  Gs.prototype.createEdge = function() {
    return new xt(this);
  };
  Gs.className = 'LayeredDigraphNetwork';

  function wt(a) {
    sq.call(this, a);
    this.Wa = this.rg = this.Ah = -1;
    this.u = NaN;
    this.F = null;
    this.valid = !1;
    this.finish = this.gg = NaN;
    this.nf = 0;
    this.Tj = this.Uj = null;
  }
  la(wt, sq);
  wt.prototype.serializeVertexProperties = function(a, b) {
    sq.prototype.serializeVertexProperties.call(this, a, b);
    a.layer = this.layer;
    a.column = this.column;
    a.index = this.index;
    a.component = this.component;
    a.near = this.near ? cb(this.near) : null;
    a.valid = this.valid;
    a.gg = this.gg;
    a.finish = this.finish;
    a.nf = this.nf;
    a.Uj = this.Uj;
    a.Tj = this.Tj;
  };
  wt.prototype.deserializeVertexProperties = function(a, b, c, d) {
    sq.prototype.deserializeVertexProperties.call(this, a, b, c, d);
    this.layer = a.layer;
    this.column = a.column;
    this.index = a.index;
    this.component = a.component;
    if ((b = b.get(a.near))) this.near = b;
    this.valid = a.valid;
    this.gg = a.gg;
    this.finish = a.finish;
    this.nf = a.nf;
    this.Uj = a.Uj;
    this.Tj = a.Tj;
  };
  ma.Object.defineProperties(wt.prototype, {
    layer: {
      get: function() {
        return this.Ah;
      },
      set: function(a) {
        this.Ah !== a && (this.Ah = a);
      },
    },
    column: {
      get: function() {
        return this.rg;
      },
      set: function(a) {
        this.rg !== a && (this.rg = a);
      },
    },
    index: {
      get: function() {
        return this.Wa;
      },
      set: function(a) {
        this.Wa !== a && (this.Wa = a);
      },
    },
    component: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u !== a && (this.u = a);
      },
    },
    near: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F !== a && (this.F = a);
      },
    },
  });
  wt.className = 'LayeredDigraphVertex';

  function xt(a) {
    tq.call(this, a);
    this.j = this.ga = this.Ga = !1;
    this.W = this.u = NaN;
    this.F = this.m = 0;
  }
  la(xt, tq);
  xt.prototype.serializeEdgeProperties = function(a, b) {
    tq.prototype.serializeEdgeProperties.call(this, a, b);
    a.valid = this.valid;
    a.rev = this.rev;
    a.forest = this.forest;
    a.portFromPos = this.portFromPos;
    a.portToPos = this.portToPos;
    a.portFromColOffset = this.portFromColOffset;
    a.portToColOffset = this.portToColOffset;
  };
  xt.prototype.deserializeEdgeProperties = function(a, b, c, d) {
    tq.prototype.deserializeEdgeProperties.call(this, a, b, c, d);
    this.valid = a.valid;
    this.rev = a.rev;
    this.forest = a.forest;
    this.portFromPos = a.portFromPos;
    this.portToPos = a.portToPos;
    this.portFromColOffset = a.portFromColOffset;
    this.portToColOffset = a.portToColOffset;
  };
  ma.Object.defineProperties(xt.prototype, {
    fromVertex: {
      get: function() {
        return this.ad;
      },
      set: function(a) {
        this.ad !== a && (this.ad = a);
      },
    },
    toVertex: {
      get: function() {
        return this.jd;
      },
      set: function(a) {
        this.jd !== a && (this.jd = a);
      },
    },
    valid: {
      get: function() {
        return this.Ga;
      },
      set: function(a) {
        this.Ga !== a && (this.Ga = a);
      },
    },
    rev: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        this.ga !== a && (this.ga = a);
      },
    },
    forest: {
      get: function() {
        return this.j;
      },
      set: function(a) {
        this.j !== a && (this.j = a);
      },
    },
    portFromPos: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        this.u !== a && (this.u = a);
      },
    },
    portToPos: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W !== a && (this.W = a);
      },
    },
    portFromColOffset: {
      get: function() {
        return this.m;
      },
      set: function(a) {
        this.m !== a && (this.m = a);
      },
    },
    portToColOffset: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F !== a && (this.F = a);
      },
    },
  });
  xt.className = 'LayeredDigraphEdge';

  function yt(a) {
    qi.call(this);
    this.Qb = new G();
    this.En = zt;
    this.qd = At;
    this.Yn = Bt;
    this.aq = Ct;
    this.Ev = [];
    this.od = !0;
    this.Nb = Dt;
    this.Td = new K(10, 10).freeze();
    var b = new Et(this);
    this.V = new Ft(b);
    this.Y = new Ft(b);
    this.Xt = [];
    a && Object.assign(this, a);
  }
  la(yt, qi);
  yt.prototype.cloneProtected = function(a) {
    qi.prototype.cloneProtected.call(this, a);
    a.En = this.En;
    a.Yn = this.Yn;
    a.aq = this.aq;
    a.od = this.od;
    a.Nb = this.Nb;
    a.Td.assign(this.Td);
    a.V.copyInheritedPropertiesFrom(this.V);
    a.Y.copyInheritedPropertiesFrom(this.Y);
  };
  yt.prototype.ob = function(a) {
    a.classType === yt
      ? 0 === a.name.indexOf('Alignment')
        ? (this.alignment = a)
        : 0 === a.name.indexOf('Arrangement')
        ? (this.arrangement = a)
        : 0 === a.name.indexOf('Compaction')
        ? (this.compaction = a)
        : 0 === a.name.indexOf('Path')
        ? (this.path = a)
        : 0 === a.name.indexOf('Sorting')
        ? (this.sorting = a)
        : 0 === a.name.indexOf('Style')
        ? (this.treeStyle = a)
        : C('Unknown enum value: ' + a)
      : qi.prototype.ob.call(this, a);
  };
  yt.prototype.createNetwork = function() {
    return new Et(this);
  };
  yt.prototype.makeNetwork = function(a) {
    function b(a) {
      if (a instanceof V) return !a.isLinkLabel && 'Comment' !== a.category;
      if (a instanceof T) {
        var b = a.fromNode;
        if (null === b || b.isLinkLabel || 'Comment' === b.category) return !1;
        a = a.toNode;
        return null === a || a.isLinkLabel || 'Comment' === a.category
          ? !1
          : !0;
      }
      return !1;
    }
    var c = this.createNetwork();
    a instanceof Q
      ? (c.eg(a.nodes, !0, b), c.eg(a.links, !0, b))
      : a instanceof qf
      ? c.eg(a.memberParts, !1, b)
      : c.eg(a.iterator, !1, b);
    return c;
  };
  yt.prototype.doLayout = function(a) {
    null === this.network && (this.network = this.makeNetwork(a));
    this.arrangement !== Gt &&
      (this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin));
    var b = this.diagram;
    null === b && a instanceof Q && (b = a);
    this.path === zt && null !== b
      ? (this.qd = b.isTreePathToChildren ? At : Ht)
      : (this.qd = this.path === zt ? At : this.path);
    if (0 < this.network.vertexes.count) {
      this.network.oo();
      for (a = this.network.vertexes.iterator; a.next(); )
        (b = a.value),
          (b.initialized = !1),
          (b.level = 0),
          (b.parent = null),
          (b.children = []);
      if (0 < this.Qb.count) {
        a = new G();
        for (b = this.Qb.iterator; b.next(); ) {
          var c = b.value;
          c instanceof V
            ? ((c = this.network.ei(c)), null !== c && a.add(c))
            : c instanceof Ft && a.add(c);
        }
        this.Qb = a;
      }
      0 === this.Qb.count && this.findRoots();
      for (a = this.Qb.copy().iterator; a.next(); )
        (b = a.value), b.initialized || ((b.initialized = !0), It(this, b));
      b = this.network.vertexes;
      for (a = null; (a = Jt(b)), 0 < a.count; )
        (b = Kt(this, a)),
          null !== b && this.Qb.add(b),
          (b.initialized = !0),
          It(this, b),
          (b = a);
      for (a = this.Qb.iterator; a.next(); )
        (b = a.value), b instanceof Ft && Lt(this, b);
      for (a = this.Qb.iterator; a.next(); )
        (b = a.value), b instanceof Ft && Mt(this, b);
      for (a = this.Qb.iterator; a.next(); )
        (b = a.value), b instanceof Ft && Nt(this, b);
      this.ju();
      if (this.layerStyle === Ot) {
        a = [];
        for (b = this.network.vertexes.iterator; b.next(); ) {
          c = b.value;
          var d = c.parent;
          null === d && (d = c);
          d = 0 === d.angle || 180 === d.angle;
          var e = a[c.level];
          void 0 === e && (e = 0);
          a[c.level] = Math.max(e, d ? c.width : c.height);
        }
        for (b = 0; b < a.length; b++) void 0 === a[b] && (a[b] = 0);
        this.Ev = a;
        for (b = this.network.vertexes.iterator; b.next(); )
          (c = b.value),
            (d = c.parent),
            null === d && (d = c),
            0 === d.angle || 180 === d.angle
              ? (180 === d.angle && (c.focusX += a[c.level] - c.width),
                (c.width = a[c.level]))
              : (270 === d.angle && (c.focusY += a[c.level] - c.height),
                (c.height = a[c.level]));
      } else if (this.layerStyle === Pt)
        for (a = this.network.vertexes.iterator; a.next(); ) {
          b = a.value;
          c = 0 === b.angle || 180 === b.angle;
          d = -1;
          for (e = 0; e < b.children.length; e++) {
            var f = b.children[e];
            d = Math.max(d, c ? f.width : f.height);
          }
          if (0 <= d)
            for (e = 0; e < b.children.length; e++)
              (f = b.children[e]),
                c
                  ? (180 === b.angle && (f.focusX += d - f.width),
                    (f.width = d))
                  : (270 === b.angle && (f.focusY += d - f.height),
                    (f.height = d));
        }
      for (a = this.Qb.iterator; a.next(); )
        (b = a.value), b instanceof Ft && this.layoutTree(b);
      this.arrangeTrees();
      this.updateParts();
    }
    this.network = null;
    this.Qb = new G();
    this.isValidLayout = !0;
  };

  function Jt(a) {
    var b = new G();
    for (a = a.iterator; a.next(); ) {
      var c = a.value;
      c.initialized || b.add(c);
    }
    return b;
  }
  yt.prototype.findRoots = function() {
    for (var a = this.network.vertexes, b = a.iterator; b.next(); ) {
      var c = b.value;
      switch (this.qd) {
        case At:
          0 === c.sourceEdges.count && this.Qb.add(c);
          break;
        case Ht:
          0 === c.destinationEdges.count && this.Qb.add(c);
          break;
        default:
          C('Unhandled path value ' + this.qd.toString());
      }
    }
    0 === this.Qb.count && ((a = Kt(this, a)), null !== a && this.Qb.add(a));
  };

  function Kt(a, b) {
    var c = 999999,
      d = null;
    for (b = b.iterator; b.next(); ) {
      var e = b.value;
      switch (a.qd) {
        case At:
          e.sourceEdges.count < c && ((c = e.sourceEdges.count), (d = e));
          break;
        case Ht:
          e.destinationEdges.count < c &&
            ((c = e.destinationEdges.count), (d = e));
          break;
        default:
          C('Unhandled path value ' + a.qd.toString());
      }
    }
    return d;
  }

  function It(a, b) {
    if (null !== b) {
      switch (a.qd) {
        case At:
          if (0 < b.destinationEdges.count) {
            for (var c = new E(), d = b.destinationVertexes; d.next(); ) {
              var e = d.value;
              Qt(a, b, e) && c.add(e);
            }
            0 < c.count && (b.children = c.Ea());
          }
          break;
        case Ht:
          if (0 < b.sourceEdges.count) {
            c = new E();
            for (d = b.sourceVertexes; d.next(); )
              (e = d.value), Qt(a, b, e) && c.add(e);
            0 < c.count && (b.children = c.Ea());
          }
          break;
        default:
          C('Unhandled path value' + a.qd.toString());
      }
      c = b.children;
      d = c.length;
      for (e = 0; e < d; e++) {
        var f = c[e];
        f.initialized = !0;
        f.level = b.level + 1;
        f.parent = b;
        a.Qb.remove(f);
      }
      for (b = 0; b < d; b++) It(a, c[b]);
    }
  }

  function Qt(a, b, c) {
    if (c.initialized) {
      if (null === b) var d = !1;
      else {
        for (d = b.parent; null !== d && d !== c; ) d = d.parent;
        d = d === c;
      }
      if (d || c.level > b.level) return !1;
      a.removeChild(c.parent, c);
    }
    return !0;
  }
  yt.prototype.removeChild = function(a, b) {
    if (null !== a && null !== b) {
      for (var c = a.children, d = 0, e = 0; e < c.length; e++)
        c[e] === b && d++;
      if (0 < d) {
        d = Array(c.length - d);
        for (var f = (e = 0); f < c.length; f++) c[f] !== b && (d[e++] = c[f]);
        a.children = d;
      }
    }
  };

  function Lt(a, b) {
    if (null !== b) {
      a.initializeTreeVertexValues(b);
      b.alignment === Rt && a.sortTreeVertexChildren(b);
      for (
        var c = 0,
          d = b.childrenCount,
          e = 0,
          f = b.children,
          g = f.length,
          h = 0;
        h < g;
        h++
      ) {
        var k = f[h];
        Lt(a, k);
        c += k.descendantCount + 1;
        d = Math.max(d, k.maxChildrenCount);
        e = Math.max(e, k.maxGenerationCount);
      }
      b.descendantCount = c;
      b.maxChildrenCount = d;
      b.maxGenerationCount = 0 < d ? e + 1 : 0;
    }
  }

  function St(a, b) {
    switch (a.Yn) {
      default:
      case Bt:
        return null !== b.parent ? b.parent : a.V;
      case Tt:
        return null === b.parent
          ? a.V
          : null === b.parent.parent
          ? a.Y
          : b.parent;
      case Ut:
        return null !== b.parent
          ? null !== b.parent.parent
            ? b.parent.parent
            : a.Y
          : a.V;
      case Vt:
        var c = !0;
        if (0 === b.childrenCount) c = !1;
        else
          for (var d = b.children, e = d.length, f = 0; f < e; f++)
            if (0 < d[f].childrenCount) {
              c = !1;
              break;
            }
        return c && null !== b.parent
          ? a.Y
          : null !== b.parent
          ? b.parent
          : a.V;
    }
  }
  yt.prototype.initializeTreeVertexValues = function(a) {
    a.copyInheritedPropertiesFrom(St(this, a));
    if (null !== a.parent && a.parent.alignment === Rt) {
      for (
        var b = a.angle, c = a.parent.children, d = 0;
        d < c.length && a !== c[d];

      )
        d++;
      0 === d % 2
        ? d !== c.length - 1 &&
          (b = 90 === b ? 180 : 180 === b ? 270 : 270 === b ? 180 : 270)
        : (b = 90 === b ? 0 : 180 === b ? 90 : 270 === b ? 0 : 90);
      a.angle = b;
    }
    a.initialized = !0;
  };

  function Mt(a, b) {
    if (null !== b) {
      a.assignTreeVertexValues(b);
      b = b.children;
      for (var c = b.length, d = 0; d < c; d++) Mt(a, b[d]);
    }
  }
  yt.prototype.assignTreeVertexValues = function() {};

  function Nt(a, b) {
    if (null !== b) {
      b.alignment !== Rt && a.sortTreeVertexChildren(b);
      b = b.children;
      for (var c = b.length, d = 0; d < c; d++) Nt(a, b[d]);
    }
  }
  yt.prototype.sortTreeVertexChildren = function(a) {
    switch (a.sorting) {
      case Wt:
        break;
      case Xt:
        a.children.reverse();
        break;
      case Yt:
        a.children.sort(a.comparer);
        break;
      case Zt:
        a.children.sort(a.comparer);
        a.children.reverse();
        break;
      default:
        C('Unhandled sorting value ' + a.sorting.toString());
    }
  };
  yt.prototype.ju = function() {
    if (this.comments)
      for (var a = this.network.vertexes.iterator; a.next(); )
        this.addComments(a.value);
  };
  yt.prototype.addComments = function(a) {
    var b = a.angle,
      c = a.parent,
      d = 0;
    var e = !1;
    null !== c && ((d = c.angle), (e = c.alignment), (e = $t(e)));
    b = 90 === b || 270 === b;
    d = 90 === d || 270 === d;
    c = 0 === a.childrenCount;
    var f = 0,
      g = 0,
      h = 0,
      k = a.commentSpacing;
    if (null !== a.node)
      for (var l = a.node.wu(); l.next(); ) {
        var m = l.value;
        'Comment' === m.category &&
          m.canLayout() &&
          (null === a.comments && (a.comments = []),
          a.comments.push(m),
          m.Za(),
          (m = m.measuredBounds),
          (b && !c) || (!e && !d && c) || (e && d && c)
            ? ((f = Math.max(f, m.width)), (g += m.height + Math.abs(h)))
            : ((f += m.width + Math.abs(h)), (g = Math.max(g, m.height))),
          (h = k));
      }
    null !== a.comments &&
      ((b && !c) || (!e && !d && c) || (e && d && c)
        ? ((f += Math.abs(a.commentMargin)), (g = Math.max(0, g - a.height)))
        : ((g += Math.abs(a.commentMargin)), (f = Math.max(0, f - a.width))),
      (e = M.allocAt(0, 0, a.bounds.width + f, a.bounds.height + g)),
      (a.bounds = e),
      M.free(e));
  };

  function $t(a) {
    return a === au || a === Rt || a === bu || a === cu;
  }

  function du(a) {
    return a === au || a === Rt;
  }

  function eu(a) {
    var b = a.parent;
    if (null !== b) {
      var c = b.alignment;
      if ($t(c)) {
        if (du(c)) {
          b = b.children;
          for (c = 0; c < b.length && a !== b[c]; ) c++;
          return 0 === c % 2;
        }
        if (c === bu) return !0;
      }
    }
    return !1;
  }
  yt.prototype.layoutComments = function(a) {
    if (null !== a.comments) {
      var b = a.node.measuredBounds,
        c = a.parent,
        d = a.angle,
        e = 0;
      var f = !1;
      null !== c && ((e = c.angle), (f = c.alignment), (f = $t(f)));
      d = 90 === d || 270 === d;
      c = 90 === e || 270 === e;
      for (
        var g = 0 === a.childrenCount,
          h = eu(a),
          k = 0,
          l = a.comments,
          m = l.length,
          n = I.alloc(),
          p = 0;
        p < m;
        p++
      ) {
        var r = l[p],
          q = r.measuredBounds;
        if ((d && !g) || (!f && !c && g) || (f && c && g)) {
          if ((135 < e && !f) || (c && h))
            if (0 <= a.commentMargin)
              for (
                n.h(a.bounds.x - a.commentMargin - q.width, a.bounds.y + k),
                  r.move(n),
                  r = r.Kd();
                r.next();

              ) {
                var u = r.value;
                u.fromSpot = dd;
                u.toSpot = ed;
              }
            else
              for (
                n.h(
                  a.bounds.x + 2 * a.focus.x - a.commentMargin,
                  a.bounds.y + k,
                ),
                  r.move(n),
                  r = r.Kd();
                r.next();

              )
                (u = r.value), (u.fromSpot = ed), (u.toSpot = dd);
          else if (0 <= a.commentMargin)
            for (
              n.h(a.bounds.x + 2 * a.focus.x + a.commentMargin, a.bounds.y + k),
                r.move(n),
                r = r.Kd();
              r.next();

            )
              (u = r.value), (u.fromSpot = ed), (u.toSpot = dd);
          else
            for (
              n.h(a.bounds.x + a.commentMargin - q.width, a.bounds.y + k),
                r.move(n),
                r = r.Kd();
              r.next();

            )
              (u = r.value), (u.fromSpot = dd), (u.toSpot = ed);
          k =
            0 <= a.commentSpacing
              ? k + (q.height + a.commentSpacing)
              : k + (a.commentSpacing - q.height);
        } else {
          if ((135 < e && !f) || (!c && h))
            if (0 <= a.commentMargin)
              for (
                n.h(a.bounds.x + k, a.bounds.y - a.commentMargin - q.height),
                  r.move(n),
                  r = r.Kd();
                r.next();

              )
                (u = r.value), (u.fromSpot = ad), (u.toSpot = fd);
            else
              for (
                n.h(
                  a.bounds.x + k,
                  a.bounds.y + 2 * a.focus.y - a.commentMargin,
                ),
                  r.move(n),
                  r = r.Kd();
                r.next();

              )
                (u = r.value), (u.fromSpot = fd), (u.toSpot = ad);
          else if (0 <= a.commentMargin)
            for (
              n.h(a.bounds.x + k, a.bounds.y + 2 * a.focus.y + a.commentMargin),
                r.move(n),
                r = r.Kd();
              r.next();

            )
              (u = r.value), (u.fromSpot = fd), (u.toSpot = ad);
          else
            for (
              n.h(a.bounds.x + k, a.bounds.y + a.commentMargin - q.height),
                r.move(n),
                r = r.Kd();
              r.next();

            )
              (u = r.value), (u.fromSpot = ad), (u.toSpot = fd);
          k =
            0 <= a.commentSpacing
              ? k + (q.width + a.commentSpacing)
              : k + (a.commentSpacing - q.width);
        }
      }
      I.free(n);
      b = k - a.commentSpacing - (d ? b.height : b.width);
      if (this.qd === At)
        for (a = a.destinationEdges; a.next(); )
          (e = a.value.link),
            null === e ||
              e.isAvoiding ||
              (e.fromEndSegmentLength = 0 < b ? b : NaN);
      else
        for (a = a.sourceEdges; a.next(); )
          (e = a.value.link),
            null === e ||
              e.isAvoiding ||
              (e.toEndSegmentLength = 0 < b ? b : NaN);
    }
  };
  yt.prototype.layoutTree = function(a) {
    if (null !== a) {
      for (var b = a.children, c = b.length, d = 0; d < c; d++)
        this.layoutTree(b[d]);
      switch (a.compaction) {
        case fu:
          gu(this, a);
          break;
        case hu:
          if (a.alignment === Rt) gu(this, a);
          else if (0 === a.childrenCount)
            (d = a.parent),
              (c = !1),
              (b = 0),
              null !== d && ((b = d.angle), (c = d.alignment), (c = $t(c))),
              (d = eu(a)),
              a.S.h(0, 0),
              a.Ca.h(a.width, a.height),
              null === a.parent ||
              null === a.comments ||
              (((180 !== b && 270 !== b) || c) && !d)
                ? a.ka.h(0, 0)
                : (180 === b && !c) || ((90 === b || 270 === b) && d)
                ? a.ka.h(a.width - 2 * a.focus.x, 0)
                : a.ka.h(0, a.height - 2 * a.focus.y),
              (a.Bo = null),
              (a.No = null);
          else {
            var e = ku(a);
            b = 90 === e || 270 === e;
            var f = 0,
              g = a.children,
              h = g.length;
            for (c = 0; c < h; c++)
              (d = g[c]), (f = Math.max(f, b ? d.Ca.width : d.Ca.height));
            var k = a.alignment,
              l = k === lu,
              m = $t(k),
              n = Math.max(0, a.breadthLimit);
            c = mu(a);
            var p = a.nodeSpacing,
              r = nu(a),
              q = a.rowSpacing,
              u = 0;
            if (k === ou || l || a.Pl || (a.Ql && 1 === a.maxGenerationCount))
              u = Math.max(0, a.rowIndent);
            d = a.width;
            var w = a.height,
              v = 0,
              z = 0,
              y = 0,
              A = null,
              B = null,
              F = 0,
              L = 0,
              S = 0,
              R = 0,
              P = 0,
              H = 0,
              da = 0,
              X = 0;
            m && !du(k) && 135 < e && g.reverse();
            if (du(k))
              if (1 < h)
                for (var oa = 0; oa < h; oa++)
                  0 === oa % 2 &&
                    oa !== h - 1 &&
                    (X = Math.max(X, b ? g[oa].Ca.width : g[oa].Ca.height));
              else 1 === h && (X = b ? g[0].Ca.width : g[0].Ca.height);
            if (m) {
              switch (k) {
                case au:
                  z = 135 > e ? pu(a, g, X, v, z) : qu(a, g, X, v, z);
                  X = z.x;
                  v = z.width;
                  z = z.height;
                  break;
                case bu:
                  for (A = 0; A < h; A++)
                    (B = g[A]),
                      (n = B.Ca),
                      (y = 0 === H ? 0 : q),
                      b
                        ? (B.S.h(f - n.width, R + y),
                          (v = Math.max(v, n.width)),
                          (z = Math.max(z, R + y + n.height)),
                          (R += y + n.height))
                        : (B.S.h(S + y, f - n.height),
                          (v = Math.max(v, S + y + n.width)),
                          (z = Math.max(z, n.height)),
                          (S += y + n.width)),
                      H++;
                  break;
                case cu:
                  for (A = 0; A < h; A++)
                    (B = g[A]),
                      (f = B.Ca),
                      (n = 0 === H ? 0 : q),
                      b
                        ? (B.S.h(p / 2 + a.focus.x, R + n),
                          (v = Math.max(v, f.width)),
                          (z = Math.max(z, R + n + f.height)),
                          (R += n + f.height))
                        : (B.S.h(S + n, p / 2 + a.focus.y),
                          (v = Math.max(v, S + n + f.width)),
                          (z = Math.max(z, f.height)),
                          (S += n + f.width)),
                      H++;
              }
              A = ru(this, 2);
              B = ru(this, 2);
              b
                ? (A[0].h(0, 0), A[1].h(0, z), B[0].h(v, 0))
                : (A[0].h(0, 0), A[1].h(v, 0), B[0].h(0, z));
              B[1].h(v, z);
            } else
              for (oa = 0; oa < h; oa++) {
                var Ba = g[oa],
                  db = Ba.Ca;
                if (b) {
                  0 < n &&
                    0 < H &&
                    S + p + db.width > n &&
                    (S < f && su(a, k, f - S, 0, da, oa - 1),
                    P++,
                    (H = 0),
                    (da = oa),
                    (y = z),
                    (S = 0),
                    (R = 135 < e ? -z - q : z + q));
                  tu(this, Ba, 0, R);
                  var hb = 0;
                  if (0 === H) {
                    if (
                      ((A = Ba.Bo),
                      (B = Ba.No),
                      (F = db.width),
                      (L = db.height),
                      null === A || null === B || e !== ku(Ba))
                    )
                      (A = ru(this, 2)),
                        (B = ru(this, 2)),
                        A[0].h(0, 0),
                        A[1].h(0, L),
                        B[0].h(F, 0),
                        B[1].h(F, L);
                  } else {
                    var Fb = Ea();
                    L = uu(this, a, Ba, A, B, F, L, Fb);
                    hb = L.x;
                    A = Fb[0];
                    B = Fb[1];
                    F = L.width;
                    L = L.height;
                    Ga(Fb);
                    S < db.width &&
                      0 > hb &&
                      (vu(a, -hb, 0, da, oa - 1),
                      wu(A, -hb, 0),
                      wu(B, -hb, 0),
                      (hb = 0));
                  }
                  Ba.S.h(hb, R);
                  v = Math.max(v, F);
                  z = Math.max(z, y + (0 === P ? 0 : q) + db.height);
                  S = F;
                } else {
                  0 < n &&
                    0 < H &&
                    R + p + db.height > n &&
                    (R < f && su(a, k, 0, f - R, da, oa - 1),
                    P++,
                    (H = 0),
                    (da = oa),
                    (y = v),
                    (R = 0),
                    (S = 135 < e ? -v - q : v + q));
                  tu(this, Ba, S, 0);
                  hb = 0;
                  if (0 === H) {
                    if (
                      ((A = Ba.Bo),
                      (B = Ba.No),
                      (F = db.width),
                      (L = db.height),
                      null === A || null === B || e !== ku(Ba))
                    )
                      (A = ru(this, 2)),
                        (B = ru(this, 2)),
                        A[0].h(0, 0),
                        A[1].h(F, 0),
                        B[0].h(0, L),
                        B[1].h(F, L);
                  } else
                    (Fb = Ea()),
                      (L = uu(this, a, Ba, A, B, F, L, Fb)),
                      (hb = L.x),
                      (A = Fb[0]),
                      (B = Fb[1]),
                      (F = L.width),
                      (L = L.height),
                      Ga(Fb),
                      R < db.height &&
                        0 > hb &&
                        (vu(a, 0, -hb, da, oa - 1),
                        wu(A, 0, -hb),
                        wu(B, 0, -hb),
                        (hb = 0));
                  Ba.S.h(S, hb);
                  z = Math.max(z, L);
                  v = Math.max(v, y + (0 === P ? 0 : q) + db.width);
                  R = L;
                }
                H++;
              }
            0 < P &&
              (b
                ? ((z += Math.max(0, c)),
                  S < v && su(a, k, v - S, 0, da, h - 1),
                  0 < u && (l || vu(a, u, 0, 0, h - 1), (v += u)))
                : ((v += Math.max(0, c)),
                  R < z && su(a, k, 0, z - R, da, h - 1),
                  0 < u && (l || vu(a, 0, u, 0, h - 1), (z += u))));
            u = l = 0;
            switch (k) {
              case xu:
                b
                  ? (l += v / 2 - a.focus.x - r / 2)
                  : (u += z / 2 - a.focus.y - r / 2);
                break;
              case yu:
                0 < P
                  ? b
                    ? (l += v / 2 - a.focus.x - r / 2)
                    : (u += z / 2 - a.focus.y - r / 2)
                  : b
                  ? ((X = g[0].S.x + g[0].ka.x),
                    (l +=
                      X +
                      (g[h - 1].S.x +
                        g[h - 1].ka.x +
                        2 * g[h - 1].focus.x -
                        X) /
                        2 -
                      a.focus.x -
                      r / 2))
                  : ((X = g[0].S.y + g[0].ka.y),
                    (u +=
                      X +
                      (g[h - 1].S.y +
                        g[h - 1].ka.y +
                        2 * g[h - 1].focus.y -
                        X) /
                        2 -
                      a.focus.y -
                      r / 2));
                break;
              case ou:
                b ? ((l -= r), (v += r)) : ((u -= r), (z += r));
                break;
              case lu:
                b
                  ? ((l += v - a.width + r), (v += r))
                  : ((u += z - a.height + r), (z += r));
                break;
              case au:
                b
                  ? 1 < h
                    ? (l += X + p / 2 - a.focus.x)
                    : (l += g[0].focus.x - a.focus.x + g[0].ka.x)
                  : 1 < h
                  ? (u += X + p / 2 - a.focus.y)
                  : (u += g[0].focus.y - a.focus.y + g[0].ka.y);
                break;
              case bu:
                b ? (l += v + p / 2 - a.focus.x) : (u += z + p / 2 - a.focus.y);
                break;
              case cu:
                break;
              default:
                C('Unhandled alignment value ' + k.toString());
            }
            for (r = 0; r < h; r++)
              (X = g[r]),
                b
                  ? X.S.h(
                      X.S.x + X.ka.x - l,
                      X.S.y +
                        (135 < e
                          ? (m ? -z : -X.Ca.height) + X.ka.y - c
                          : w + c + X.ka.y),
                    )
                  : X.S.h(
                      X.S.x +
                        (135 < e
                          ? (m ? -v : -X.Ca.width) + X.ka.x - c
                          : d + c + X.ka.x),
                      X.S.y + X.ka.y - u,
                    );
            h = g = 0;
            m
              ? b
                ? ((v = zu(a, v, l)),
                  0 > l && (l = 0),
                  135 < e && (u += z + c),
                  (z += w + c),
                  k === cu && (g += p / 2 + a.focus.x),
                  (h += w + c))
                : (135 < e && (l += v + c),
                  (v += d + c),
                  (z = Au(a, z, u)),
                  0 > u && (u = 0),
                  k === cu && (h += p / 2 + a.focus.y),
                  (g += d + c))
              : b
              ? (null === a.comments
                  ? d > v &&
                    ((v = Bu(k, d - v, 0)),
                    (g = v.x),
                    (h = v.y),
                    (v = d),
                    (l = 0))
                  : (v = zu(a, v, l)),
                0 > l && ((g -= l), (l = 0)),
                135 < e && (u += z + c),
                (z = Math.max(Math.max(z, w), z + w + c)),
                (h += w + c))
              : (135 < e && (l += v + c),
                (v = Math.max(Math.max(v, d), v + d + c)),
                null === a.comments
                  ? w > z &&
                    ((z = Bu(k, 0, w - z)),
                    (g = z.x),
                    (h = z.y),
                    (z = w),
                    (u = 0))
                  : (z = Au(a, z, u)),
                0 > u && ((h -= u), (u = 0)),
                (g += d + c));
            if (0 < P)
              (e = ru(this, 4)),
                (P = ru(this, 4)),
                b
                  ? (e[2].h(0, w + c),
                    e[3].h(e[2].x, z),
                    P[2].h(v, e[2].y),
                    P[3].h(P[2].x, e[3].y))
                  : (e[2].h(d + c, 0),
                    e[3].h(v, e[2].y),
                    P[2].h(e[2].x, z),
                    P[3].h(e[3].x, P[2].y));
            else {
              e = ru(this, A.length + 2);
              P = ru(this, B.length + 2);
              for (k = 0; k < A.length; k++)
                (m = A[k]), e[k + 2].h(m.x + g, m.y + h);
              for (k = 0; k < B.length; k++)
                (m = B[k]), P[k + 2].h(m.x + g, m.y + h);
            }
            b
              ? (e[0].h(l, 0),
                e[1].h(e[0].x, w),
                e[2].y < e[1].y &&
                  (e[2].x > e[0].x ? e[2].assign(e[1]) : e[1].assign(e[2])),
                e[3].y < e[2].y &&
                  (e[3].x > e[0].x ? e[3].assign(e[2]) : e[2].assign(e[3])),
                P[0].h(l + d, 0),
                P[1].h(P[0].x, w),
                P[2].y < P[1].y &&
                  (P[2].x < P[0].x ? P[2].assign(P[1]) : P[1].assign(P[2])),
                P[3].y < P[2].y &&
                  (P[3].x < P[0].x ? P[3].assign(P[2]) : P[2].assign(P[3])),
                (e[2].y -= c / 2),
                (P[2].y -= c / 2))
              : (e[0].h(0, u),
                e[1].h(d, e[0].y),
                e[2].x < e[1].x &&
                  (e[2].y > e[0].y ? e[2].assign(e[1]) : e[1].assign(e[2])),
                e[3].x < e[2].x &&
                  (e[3].y > e[0].y ? e[3].assign(e[2]) : e[2].assign(e[3])),
                P[0].h(0, u + w),
                P[1].h(d, P[0].y),
                P[2].x < P[1].x &&
                  (P[2].y < P[0].y ? P[2].assign(P[1]) : P[1].assign(P[2])),
                P[3].x < P[2].x &&
                  (P[3].y < P[0].y ? P[3].assign(P[2]) : P[2].assign(P[3])),
                (e[2].x -= c / 2),
                (P[2].x -= c / 2));
            Cu(this, A);
            Cu(this, B);
            a.Bo = e;
            a.No = P;
            a.ka.h(l, u);
            a.Ca.h(v, z);
          }
          break;
        default:
          C('Unhandled compaction value ' + a.compaction.toString());
      }
    }
  };

  function gu(a, b) {
    if (0 === b.childrenCount) {
      var c = !1,
        d = 0;
      null !== b.parent &&
        ((d = b.parent.angle), (c = b.parent.alignment), (c = $t(c)));
      var e = eu(b);
      b.S.h(0, 0);
      b.Ca.h(b.width, b.height);
      null === b.parent ||
      null === b.comments ||
      (((180 !== d && 270 !== d) || c) && !e)
        ? b.ka.h(0, 0)
        : (180 === d && !c) || ((90 === d || 270 === d) && e)
        ? b.ka.h(b.width - 2 * b.focus.x, 0)
        : b.ka.h(0, b.height - 2 * b.focus.y);
    } else {
      d = ku(b);
      c = 90 === d || 270 === d;
      var f = 0;
      e = b.children;
      for (var g = e.length, h = 0; h < g; h++) {
        var k = e[h];
        f = Math.max(f, c ? k.Ca.width : k.Ca.height);
      }
      var l = b.alignment,
        m = l === ou,
        n = l === lu;
      h = $t(l);
      var p = Math.max(0, b.breadthLimit);
      k = mu(b);
      var r = b.nodeSpacing,
        q = nu(b),
        u = m || n ? 0 : q / 2,
        w = b.rowSpacing,
        v = 0;
      if (m || n || b.Pl || (b.Ql && 1 === b.maxGenerationCount))
        v = Math.max(0, b.rowIndent);
      m = b.width;
      var z = b.height,
        y = 0,
        A = 0,
        B = 0,
        F = 0,
        L = 0,
        S = 0,
        R = 0,
        P = 0,
        H = 0;
      h && !du(l) && 135 < d && e.reverse();
      if (du(l))
        if (1 < g)
          for (var da = 0; da < g; da++) {
            var X = e[da],
              oa = X.Ca;
            0 === da % 2 &&
              da !== g - 1 &&
              (H = Math.max(H, (c ? oa.width : oa.height) + Du(X) - r));
          }
        else 1 === g && (H = c ? e[0].Ca.width : e[0].Ca.height);
      if (h)
        switch (l) {
          case au:
          case Rt:
            A = 135 > d ? pu(b, e, H, y, A) : qu(b, e, H, y, A);
            H = A.x;
            y = A.width;
            A = A.height;
            break;
          case bu:
            for (a = 0; a < g; a++)
              (p = e[a]),
                (u = p.Ca),
                (B = 0 === R ? 0 : w),
                c
                  ? (p.S.h(f - u.width, L + B),
                    (y = Math.max(y, u.width)),
                    (A = Math.max(A, L + B + u.height)),
                    (L += B + u.height))
                  : (p.S.h(F + B, f - u.height),
                    (y = Math.max(y, F + B + u.width)),
                    (A = Math.max(A, u.height)),
                    (F += B + u.width)),
                R++;
            break;
          case cu:
            for (f = 0; f < g; f++)
              (a = e[f]),
                (p = a.Ca),
                (u = 0 === R ? 0 : w),
                c
                  ? (a.S.h(r / 2 + b.focus.x, L + u),
                    (y = Math.max(y, p.width)),
                    (A = Math.max(A, L + u + p.height)),
                    (L += u + p.height))
                  : (a.S.h(F + u, r / 2 + b.focus.y),
                    (y = Math.max(y, F + u + p.width)),
                    (A = Math.max(A, p.height)),
                    (F += u + p.width)),
                R++;
        }
      else
        for (da = 0; da < g; da++) {
          X = e[da];
          oa = X.Ca;
          if (c) {
            0 < p &&
              0 < R &&
              F + r + oa.width > p &&
              (F < f && su(b, l, f - F, 0, P, da - 1),
              S++,
              (R = 0),
              (P = da),
              (B = A),
              (F = 0),
              (L = 135 < d ? -A - w : A + w));
            var Ba = 0 === R ? u : r;
            tu(a, X, 0, L);
            X.S.h(F + Ba, L);
            y = Math.max(y, F + Ba + oa.width);
            A = Math.max(A, B + (0 === S ? 0 : w) + oa.height);
            F += Ba + oa.width;
          } else
            0 < p &&
              0 < R &&
              L + r + oa.height > p &&
              (L < f && su(b, l, 0, f - L, P, da - 1),
              S++,
              (R = 0),
              (P = da),
              (B = y),
              (L = 0),
              (F = 135 < d ? -y - w : y + w)),
              (Ba = 0 === R ? u : r),
              tu(a, X, F, 0),
              X.S.h(F, L + Ba),
              (A = Math.max(A, L + Ba + oa.height)),
              (y = Math.max(y, B + (0 === S ? 0 : w) + oa.width)),
              (L += Ba + oa.height);
          R++;
        }
      0 < S &&
        (c
          ? ((A += Math.max(0, k)),
            F < y && su(b, l, y - F, 0, P, g - 1),
            0 < v && (n || vu(b, v, 0, 0, g - 1), (y += v)))
          : ((y += Math.max(0, k)),
            L < A && su(b, l, 0, A - L, P, g - 1),
            0 < v && (n || vu(b, 0, v, 0, g - 1), (A += v))));
      v = n = 0;
      switch (l) {
        case xu:
          c
            ? (n += y / 2 - b.focus.x - q / 2)
            : (v += A / 2 - b.focus.y - q / 2);
          break;
        case yu:
          0 < S
            ? c
              ? (n += y / 2 - b.focus.x - q / 2)
              : (v += A / 2 - b.focus.y - q / 2)
            : c
            ? ((l = e[0].S.x + e[0].ka.x),
              (n +=
                l +
                (e[g - 1].S.x + e[g - 1].ka.x + 2 * e[g - 1].focus.x - l) / 2 -
                b.focus.x -
                q / 2))
            : ((l = e[0].S.y + e[0].ka.y),
              (v +=
                l +
                (e[g - 1].S.y + e[g - 1].ka.y + 2 * e[g - 1].focus.y - l) / 2 -
                b.focus.y -
                q / 2));
          break;
        case ou:
          c ? ((n -= q), (y += q)) : ((v -= q), (A += q));
          break;
        case lu:
          c
            ? ((n += y - b.width + q), (y += q))
            : ((v += A - b.height + q), (A += q));
          break;
        case au:
        case Rt:
          c
            ? 1 < g
              ? (n += H + r / 2 - b.focus.x)
              : (n += e[0].focus.x - b.focus.x + e[0].ka.x)
            : 1 < g
            ? (v += H + r / 2 - b.focus.y)
            : (v += e[0].focus.y - b.focus.y + e[0].ka.y);
          break;
        case bu:
          c ? (n += y + r / 2 - b.focus.x) : (v += A + r / 2 - b.focus.y);
          break;
        case cu:
          break;
        default:
          C('Unhandled alignment value ' + l.toString());
      }
      for (q = 0; q < g; q++)
        (l = e[q]),
          c
            ? l.S.h(
                l.S.x + l.ka.x - n,
                l.S.y +
                  (135 < d
                    ? (h ? -A : -l.Ca.height) + l.ka.y - k
                    : z + k + l.ka.y),
              )
            : l.S.h(
                l.S.x +
                  (135 < d
                    ? (h ? -y : -l.Ca.width) + l.ka.x - k
                    : m + k + l.ka.x),
                l.S.y + l.ka.y - v,
              );
      c
        ? ((y = zu(b, y, n)),
          0 > n && (n = 0),
          135 < d && (v += A + k),
          (A = Math.max(Math.max(A, z), A + z + k)))
        : (135 < d && (n += y + k),
          (y = Math.max(Math.max(y, m), y + m + k)),
          (A = Au(b, A, v)),
          0 > v && (v = 0));
      b.ka.h(n, v);
      b.Ca.h(y, A);
    }
  }

  function pu(a, b, c, d, e) {
    var f = b.length;
    if (0 === f) return new M(c, 0, d, e);
    if (1 === f)
      return (a = b[0]), (d = a.Ca.width), (e = a.Ca.height), new M(c, 0, d, e);
    for (
      var g = a.nodeSpacing,
        h = a.rowSpacing,
        k = 90 === ku(a),
        l = 0,
        m = 0,
        n = 0,
        p = 0;
      p < f;
      p++
    )
      if (!(0 !== p % 2 || (1 < f && p === f - 1))) {
        var r = b[p],
          q = r.Ca,
          u = 0 === l ? 0 : h;
        if (k) {
          var w = Du(r) - g;
          r.S.h(c - (q.width + w), n + u);
          d = Math.max(d, q.width + w);
          e = Math.max(e, n + u + q.height);
          n += u + q.height;
        } else
          (w = Du(r) - g),
            r.S.h(m + u, c - (q.height + w)),
            (e = Math.max(e, q.height + w)),
            (d = Math.max(d, m + u + q.width)),
            (m += u + q.width);
        l++;
      }
    l = 0;
    r = m;
    p = n;
    k ? ((m = c + g), (n = 0)) : ((m = 0), (n = c + g));
    for (q = 0; q < f; q++)
      if (0 !== q % 2) {
        u = b[q];
        w = u.Ca;
        var v = 0 === l ? 0 : h;
        if (k) {
          var z = Du(u) - g;
          u.S.h(m + z, n + v);
          d = Math.max(d, m + w.width + z);
          e = Math.max(e, n + v + w.height);
          n += v + w.height;
        } else
          (z = Du(u) - g),
            u.S.h(m + v, n + z),
            (d = Math.max(d, m + v + w.width)),
            (e = Math.max(e, n + w.height + z)),
            (m += v + w.width);
        l++;
      }
    1 < f &&
      1 === f % 2 &&
      ((b = b[f - 1]),
      (f = b.Ca),
      (h = null === b.parent ? 0 : b.parent.rowSpacing),
      k
        ? (b.S.h(c + g / 2 - b.focus.x - b.ka.x, e + h),
          (k = c + g / 2 - b.focus.x - b.ka.x),
          (d = Math.max(d, k + f.width)),
          0 > k && (d -= k),
          (e = Math.max(e, Math.max(p, n) + h + f.height)),
          0 > b.S.x && (c = Eu(a, b.S.x, !1, c, g)))
        : (b.S.h(d + h, c + g / 2 - b.focus.y - b.ka.y),
          (d = Math.max(d, Math.max(r, m) + h + f.width)),
          (n = c + g / 2 - b.focus.y - b.ka.y),
          (e = Math.max(e, n + f.height)),
          0 > n && (e -= n),
          0 > b.S.y && (c = Eu(a, b.S.y, !0, c, g))));
    return new M(c, 0, d, e);
  }

  function qu(a, b, c, d, e) {
    var f = b.length;
    if (0 === f) return new M(c, 0, d, e);
    if (1 === f)
      return (b = b[0]), (d = b.Ca.width), (e = b.Ca.height), new M(c, 0, d, e);
    for (
      var g = a.nodeSpacing,
        h = a.rowSpacing,
        k = 270 === ku(a),
        l = 0,
        m = 0,
        n = 0,
        p = 0;
      p < f;
      p++
    )
      if (!(0 !== p % 2 || (1 < f && p === f - 1))) {
        var r = b[p],
          q = r.Ca,
          u = 0 === l ? 0 : h;
        if (k) {
          var w = Du(r) - g;
          n -= u + q.height;
          r.S.h(c - (q.width + w), n);
          d = Math.max(d, q.width + w);
          e = Math.max(e, Math.abs(n));
        } else
          (w = Du(r) - g),
            (m -= u + q.width),
            r.S.h(m, c - (q.height + w)),
            (e = Math.max(e, q.height + w)),
            (d = Math.max(d, Math.abs(m)));
        l++;
      }
    l = 0;
    r = m;
    p = n;
    k ? ((m = c + g), (n = 0)) : ((m = 0), (n = c + g));
    for (q = 0; q < f; q++)
      if (0 !== q % 2) {
        u = b[q];
        w = u.Ca;
        var v = 0 === l ? 0 : h;
        if (k) {
          var z = Du(u) - g;
          n -= v + w.height;
          u.S.h(m + z, n);
          d = Math.max(d, m + w.width + z);
          e = Math.max(e, Math.abs(n));
        } else
          (z = Du(u) - g),
            (m -= v + w.width),
            u.S.h(m, n + z),
            (e = Math.max(e, n + w.height + z)),
            (d = Math.max(d, Math.abs(m)));
        l++;
      }
    1 < f &&
      1 === f % 2 &&
      ((h = b[f - 1]),
      (l = h.Ca),
      (q = null === h.parent ? 0 : h.parent.rowSpacing),
      k
        ? (h.S.h(c + g / 2 - h.focus.x - h.ka.x, -e - l.height - q),
          (m = c + g / 2 - h.focus.x - h.ka.x),
          (d = Math.max(d, m + l.width)),
          0 > m && (d -= m),
          (e = Math.max(e, Math.abs(Math.min(p, n)) + q + l.height)),
          0 > h.S.x && (c = Eu(a, h.S.x, !1, c, g)))
        : (h.S.h(-d - l.width - q, c + g / 2 - h.focus.y - h.ka.y),
          (d = Math.max(d, Math.abs(Math.min(r, m)) + q + l.width)),
          (n = c + g / 2 - h.focus.y - h.ka.y),
          (e = Math.max(e, n + l.height)),
          0 > n && (e -= n),
          0 > h.S.y && (c = Eu(a, h.S.y, !0, c, g))));
    for (a = 0; a < f; a++)
      (g = b[a]), k ? g.S.h(g.S.x, g.S.y + e) : g.S.h(g.S.x + d, g.S.y);
    return new M(c, 0, d, e);
  }

  function Du(a) {
    return null === a.parent ? 0 : a.parent.nodeSpacing;
  }

  function Eu(a, b, c, d, e) {
    a = a.children;
    for (var f = a.length, g = 0; g < f; g++)
      c ? a[g].S.h(a[g].S.x, a[g].S.y - b) : a[g].S.h(a[g].S.x - b, a[g].S.y);
    b = a[f - 1];
    return Math.max(
      d,
      c ? b.ka.y + b.focus.y - e / 2 : b.ka.x + b.focus.x - e / 2,
    );
  }

  function zu(a, b, c) {
    switch (a.alignment) {
      case yu:
      case xu:
        return c + a.width > b && (b = c + a.width), 0 > c && (b -= c), b;
      case ou:
        return a.width > b ? a.width : b;
      case lu:
        return 2 * a.focus.x > b ? a.width : b + a.width - 2 * a.focus.x;
      case au:
      case Rt:
        return Math.max(a.width, Math.max(b, c + a.width) - Math.min(0, c));
      case bu:
        return a.width - a.focus.x + a.nodeSpacing / 2 + b;
      case cu:
        return Math.max(a.width, a.focus.x + a.nodeSpacing / 2 + b);
      default:
        return b;
    }
  }

  function Au(a, b, c) {
    switch (a.alignment) {
      case yu:
      case xu:
        return c + a.height > b && (b = c + a.height), 0 > c && (b -= c), b;
      case ou:
        return a.height > b ? a.height : b;
      case lu:
        return 2 * a.focus.y > b ? a.height : b + a.height - 2 * a.focus.y;
      case au:
      case Rt:
        return Math.max(a.height, Math.max(b, c + a.height) - Math.min(0, c));
      case bu:
        return a.height - a.focus.y + a.nodeSpacing / 2 + b;
      case cu:
        return Math.max(a.height, a.focus.y + a.nodeSpacing / 2 + b);
      default:
        return b;
    }
  }

  function Bu(a, b, c) {
    switch (a) {
      case xu:
        b /= 2;
        c /= 2;
        break;
      case yu:
        b /= 2;
        c /= 2;
        break;
      case ou:
        c = b = 0;
        break;
      case lu:
        break;
      default:
        C('Unhandled alignment value ' + a.toString());
    }
    return new I(b, c);
  }

  function su(a, b, c, d, e, f) {
    b = Bu(b, c, d);
    vu(a, b.x, b.y, e, f);
  }

  function vu(a, b, c, d, e) {
    if (0 !== b || 0 !== c)
      for (a = a.children; d <= e; d++) {
        var f = a[d].S;
        f.x += b;
        f.y += c;
      }
  }

  function tu(a, b, c, d) {
    var e = b.parent;
    switch (a.qd) {
      case At:
        for (a = b.sourceEdges; a.next(); )
          (b = a.value), b.fromVertex === e && b.relativePoint.h(c, d);
        break;
      case Ht:
        for (a = b.destinationEdges; a.next(); )
          (b = a.value), b.toVertex === e && b.relativePoint.h(c, d);
        break;
      default:
        C('Unhandled path value ' + a.qd.toString());
    }
  }

  function wu(a, b, c) {
    for (var d = 0; d < a.length; d++) {
      var e = a[d];
      e.x += b;
      e.y += c;
    }
  }

  function uu(a, b, c, d, e, f, g, h) {
    var k = ku(b),
      l = 90 === k || 270 === k,
      m = b.nodeSpacing;
    b = d;
    var n = e;
    d = f;
    var p = g,
      r = c.Bo,
      q = c.No;
    g = c.Ca;
    var u = l ? Math.max(p, g.height) : Math.max(d, g.width);
    if (null === r || k !== ku(c))
      (r = ru(a, 2)),
        (q = ru(a, 2)),
        l
          ? (r[0].h(0, 0),
            r[1].h(0, g.height),
            q[0].h(g.width, 0),
            q[1].h(q[0].x, r[1].y))
          : (r[0].h(0, 0),
            r[1].h(g.width, 0),
            q[0].h(0, g.height),
            q[1].h(r[1].x, q[0].y));
    if (l) {
      p = 9999999;
      if (!(null === n || 2 > n.length || null === r || 2 > r.length))
        for (e = c = 0; c < n.length && e < r.length; ) {
          f = n[c];
          var w = r[e];
          k = w.x;
          l = w.y;
          k += d;
          var v = f;
          c + 1 < n.length && (v = n[c + 1]);
          var z = w;
          w = z.x;
          z = z.y;
          e + 1 < r.length && ((z = r[e + 1]), (w = z.x), (z = z.y), (w += d));
          var y = p;
          f.y === l
            ? (y = k - f.x)
            : f.y > l && f.y < z
            ? (y = k + ((f.y - l) / (z - l)) * (w - k) - f.x)
            : l > f.y &&
              l < v.y &&
              (y = k - (f.x + ((l - f.y) / (v.y - f.y)) * (v.x - f.x)));
          y < p && (p = y);
          v.y <= f.y ? c++ : z <= l ? e++ : (v.y <= z && c++, z <= v.y && e++);
        }
      p = d - p;
      p += m;
      c = r;
      e = p;
      if (null === b || 2 > b.length || null === c || 2 > c.length) d = null;
      else {
        m = ru(a, b.length + c.length);
        for (d = f = k = 0; f < c.length && c[f].y < b[0].y; )
          (l = c[f++]), m[d++].h(l.x + e, l.y);
        for (; k < b.length; ) (l = b[k++]), m[d++].h(l.x, l.y);
        for (k = b[b.length - 1].y; f < c.length && c[f].y <= k; ) f++;
        for (; f < c.length && c[f].y > k; )
          (l = c[f++]), m[d++].h(l.x + e, l.y);
        c = ru(a, d);
        for (k = 0; k < d; k++) c[k].assign(m[k]);
        Cu(a, m);
        d = c;
      }
      f = q;
      k = p;
      if (null === n || 2 > n.length || null === f || 2 > f.length) e = null;
      else {
        m = ru(a, n.length + f.length);
        for (e = l = c = 0; c < n.length && n[c].y < f[0].y; )
          (v = n[c++]), m[e++].h(v.x, v.y);
        for (; l < f.length; ) (v = f[l++]), m[e++].h(v.x + k, v.y);
        for (f = f[f.length - 1].y; c < n.length && n[c].y <= f; ) c++;
        for (; c < n.length && n[c].y > f; ) (k = n[c++]), m[e++].h(k.x, k.y);
        f = ru(a, e);
        for (c = 0; c < e; c++) f[c].assign(m[c]);
        Cu(a, m);
        e = f;
      }
      f = Math.max(0, p) + g.width;
      g = u;
      Cu(a, b);
      Cu(a, r);
      Cu(a, n);
      Cu(a, q);
      h[0] = d;
      h[1] = e;
      return new M(p, 0, f, g);
    }
    d = 9999999;
    if (!(null === n || 2 > n.length || null === r || 2 > r.length))
      for (e = c = 0; c < n.length && e < r.length; )
        (f = n[c]),
          (w = r[e]),
          (k = w.x),
          (l = w.y),
          (l += p),
          (v = f),
          c + 1 < n.length && (v = n[c + 1]),
          (z = w),
          (w = z.x),
          (z = z.y),
          e + 1 < r.length && ((z = r[e + 1]), (w = z.x), (z = z.y), (z += p)),
          (y = d),
          f.x === k
            ? (y = l - f.y)
            : f.x > k && f.x < w
            ? (y = l + ((f.x - k) / (w - k)) * (z - l) - f.y)
            : k > f.x &&
              k < v.x &&
              (y = l - (f.y + ((k - f.x) / (v.x - f.x)) * (v.y - f.y))),
          y < d && (d = y),
          v.x <= f.x ? c++ : w <= k ? e++ : (v.x <= w && c++, w <= v.x && e++);
    p -= d;
    p += m;
    c = r;
    e = p;
    if (null === b || 2 > b.length || null === c || 2 > c.length) d = null;
    else {
      m = ru(a, b.length + c.length);
      for (d = f = k = 0; f < c.length && c[f].x < b[0].x; )
        (l = c[f++]), m[d++].h(l.x, l.y + e);
      for (; k < b.length; ) (l = b[k++]), m[d++].h(l.x, l.y);
      for (k = b[b.length - 1].x; f < c.length && c[f].x <= k; ) f++;
      for (; f < c.length && c[f].x > k; ) (l = c[f++]), m[d++].h(l.x, l.y + e);
      c = ru(a, d);
      for (k = 0; k < d; k++) c[k].assign(m[k]);
      Cu(a, m);
      d = c;
    }
    f = q;
    k = p;
    if (null === n || 2 > n.length || null === f || 2 > f.length) e = null;
    else {
      m = ru(a, n.length + f.length);
      for (e = l = c = 0; c < n.length && n[c].x < f[0].x; )
        (v = n[c++]), m[e++].h(v.x, v.y);
      for (; l < f.length; ) (v = f[l++]), m[e++].h(v.x, v.y + k);
      for (f = f[f.length - 1].x; c < n.length && n[c].x <= f; ) c++;
      for (; c < n.length && n[c].x > f; ) (k = n[c++]), m[e++].h(k.x, k.y);
      f = ru(a, e);
      for (c = 0; c < e; c++) f[c].assign(m[c]);
      Cu(a, m);
      e = f;
    }
    f = u;
    g = Math.max(0, p) + g.height;
    Cu(a, b);
    Cu(a, r);
    Cu(a, n);
    Cu(a, q);
    h[0] = d;
    h[1] = e;
    return new M(p, 0, f, g);
  }

  function ru(a, b) {
    a = a.Xt[b];
    if (void 0 !== a && ((a = a.pop()), void 0 !== a)) return a;
    a = [];
    for (var c = 0; c < b; c++) a[c] = new I();
    return a;
  }

  function Cu(a, b) {
    var c = b.length,
      d = a.Xt[c];
    void 0 === d && ((d = []), (a.Xt[c] = d));
    d.push(b);
  }
  yt.prototype.arrangeTrees = function() {
    if (this.Nb === Gt)
      for (var a = this.Qb.iterator; a.next(); ) {
        var b = a.value;
        if (b instanceof Ft) {
          var c = b.node;
          if (null !== c) {
            var d = c.position;
            c = d.x;
            d = d.y;
            isFinite(c) || (c = 0);
            isFinite(d) || (d = 0);
            Fu(this, b, c, d);
          }
        }
      }
    else {
      a = [];
      for (b = this.Qb.iterator; b.next(); )
        (c = b.value), c instanceof Ft && a.push(c);
      switch (this.sorting) {
        case Wt:
          break;
        case Xt:
          a.reverse();
          break;
        case Yt:
          a.sort(this.comparer);
          break;
        case Zt:
          a.sort(this.comparer);
          a.reverse();
          break;
        default:
          C('Unhandled sorting value ' + this.sorting.toString());
      }
      c = this.arrangementOrigin;
      b = c.x;
      c = c.y;
      for (d = 0; d < a.length; d++) {
        var e = a[d];
        Fu(this, e, b + e.ka.x, c + e.ka.y);
        switch (this.Nb) {
          case Dt:
            c += e.Ca.height + this.Td.height;
            break;
          case Gu:
            b += e.Ca.width + this.Td.width;
            break;
          default:
            C('Unhandled arrangement value ' + this.Nb.toString());
        }
      }
    }
  };

  function Fu(a, b, c, d) {
    if (null !== b) {
      b.x = c;
      b.y = d;
      b = b.children;
      for (var e = b.length, f = 0; f < e; f++) {
        var g = b[f];
        Fu(a, g, c + g.S.x, d + g.S.y);
      }
    }
  }
  yt.prototype.commitLayout = function() {
    this.ev();
    this.commitNodes();
    this.nu();
    this.isRouting && this.commitLinks();
  };
  yt.prototype.commitNodes = function() {
    for (var a = this.network.vertexes.iterator; a.next(); ) a.value.commit();
    for (a.reset(); a.next(); ) this.layoutComments(a.value);
  };
  yt.prototype.nu = function() {
    if (this.layerStyle === Ot) {
      for (
        var a = this.Ev, b = [], c = null, d = this.network.vertexes.iterator;
        d.next();

      ) {
        var e = d.value;
        null === c ? (c = e.bounds.copy()) : c.Xc(e.bounds);
        var f = b[e.level];
        void 0 === f ? (f = mu(e)) : (f = Math.max(f, mu(e)));
        b[e.level] = f;
      }
      for (d = 0; d < b.length; d++) void 0 === b[d] && (b[d] = 0);
      90 === this.angle || 270 === this.angle
        ? (c.vc(this.nodeSpacing / 2, this.layerSpacing),
          (d = new I(-this.nodeSpacing / 2, -this.layerSpacing / 2)))
        : (c.vc(this.layerSpacing, this.nodeSpacing / 2),
          (d = new I(-this.layerSpacing / 2, -this.nodeSpacing / 2)));
      e = [];
      c = 90 === this.angle || 270 === this.angle ? c.width : c.height;
      f = 0;
      if (180 === this.angle || 270 === this.angle)
        for (var g = 0; g < a.length; g++) f += a[g] + b[g];
      for (g = 0; g < a.length; g++) {
        var h = a[g] + b[g];
        270 === this.angle
          ? ((f -= h), e.push(new M(0, f, c, h)))
          : 90 === this.angle
          ? (e.push(new M(0, f, c, h)), (f += h))
          : 180 === this.angle
          ? ((f -= h), e.push(new M(f, 0, h, c)))
          : (e.push(new M(f, 0, h, c)), (f += h));
      }
      this.commitLayers(e, d);
    }
  };
  yt.prototype.commitLayers = function() {};
  yt.prototype.commitLinks = function() {
    for (var a = this.network.edges.iterator; a.next(); ) a.value.commit();
  };
  yt.prototype.ev = function() {
    for (var a = this.Qb.iterator; a.next(); ) {
      var b = a.value;
      b instanceof Ft && Hu(this, b);
    }
  };

  function Hu(a, b) {
    if (null !== b) {
      a.setPortSpots(b);
      b = b.children;
      for (var c = b.length, d = 0; d < c; d++) Hu(a, b[d]);
    }
  }
  yt.prototype.setPortSpots = function(a) {
    var b = a.alignment;
    if ($t(b)) {
      var c = this.qd === At,
        d = ku(a);
      switch (d) {
        case 0:
          var e = ed;
          break;
        case 90:
          e = fd;
          break;
        case 180:
          e = dd;
          break;
        default:
          e = ad;
      }
      var f = a.children,
        g = f.length;
      switch (b) {
        case au:
        case Rt:
          for (b = 0; b < g; b++) {
            var h = f[b];
            h = (c ? h.sourceEdges : h.destinationEdges).first();
            if (null !== h && ((h = h.link), null !== h)) {
              var k = 90 === d || 270 === d ? dd : ad;
              if (1 === g || (b === g - 1 && 1 === g % 2))
                switch (d) {
                  case 0:
                    k = dd;
                    break;
                  case 90:
                    k = ad;
                    break;
                  case 180:
                    k = ed;
                    break;
                  default:
                    k = fd;
                }
              else 0 === b % 2 && (k = 90 === d || 270 === d ? ed : fd);
              c
                ? (a.setsPortSpot && (h.fromSpot = e),
                  a.setsChildPortSpot && (h.toSpot = k))
                : (a.setsPortSpot && (h.fromSpot = k),
                  a.setsChildPortSpot && (h.toSpot = e));
            }
          }
          break;
        case bu:
          d = 90 === d || 270 === d ? ed : fd;
          for (f = c ? a.destinationEdges : a.sourceEdges; f.next(); )
            (g = f.value.link),
              null !== g &&
                (c
                  ? (a.setsPortSpot && (g.fromSpot = e),
                    a.setsChildPortSpot && (g.toSpot = d))
                  : (a.setsPortSpot && (g.fromSpot = d),
                    a.setsChildPortSpot && (g.toSpot = e)));
          break;
        case cu:
          for (
            d = 90 === d || 270 === d ? dd : ad,
              f = c ? a.destinationEdges : a.sourceEdges;
            f.next();

          )
            (g = f.value.link),
              null !== g &&
                (c
                  ? (a.setsPortSpot && (g.fromSpot = e),
                    a.setsChildPortSpot && (g.toSpot = d))
                  : (a.setsPortSpot && (g.fromSpot = d),
                    a.setsChildPortSpot && (g.toSpot = e)));
      }
    } else if (((c = ku(a)), this.qd === At))
      for (e = a.destinationEdges; e.next(); ) {
        if (((d = e.value.link), null !== d)) {
          if (a.setsPortSpot)
            if (a.portSpot.Sb())
              switch (c) {
                case 0:
                  d.fromSpot = ed;
                  break;
                case 90:
                  d.fromSpot = fd;
                  break;
                case 180:
                  d.fromSpot = dd;
                  break;
                default:
                  d.fromSpot = ad;
              }
            else d.fromSpot = a.portSpot;
          if (a.setsChildPortSpot)
            if (a.childPortSpot.Sb())
              switch (c) {
                case 0:
                  d.toSpot = dd;
                  break;
                case 90:
                  d.toSpot = ad;
                  break;
                case 180:
                  d.toSpot = ed;
                  break;
                default:
                  d.toSpot = fd;
              }
            else d.toSpot = a.childPortSpot;
        }
      }
    else
      for (e = a.sourceEdges; e.next(); )
        if (((d = e.value.link), null !== d)) {
          if (a.setsPortSpot)
            if (a.portSpot.Sb())
              switch (c) {
                case 0:
                  d.toSpot = ed;
                  break;
                case 90:
                  d.toSpot = fd;
                  break;
                case 180:
                  d.toSpot = dd;
                  break;
                default:
                  d.toSpot = ad;
              }
            else d.toSpot = a.portSpot;
          if (a.setsChildPortSpot)
            if (a.childPortSpot.Sb())
              switch (c) {
                case 0:
                  d.fromSpot = dd;
                  break;
                case 90:
                  d.fromSpot = ad;
                  break;
                case 180:
                  d.fromSpot = ed;
                  break;
                default:
                  d.fromSpot = fd;
              }
            else d.fromSpot = a.childPortSpot;
        }
  };

  function ku(a) {
    a = a.angle;
    return 45 >= a ? 0 : 135 >= a ? 90 : 225 >= a ? 180 : 315 >= a ? 270 : 0;
  }

  function mu(a) {
    var b = ku(a);
    b = 90 === b || 270 === b;
    var c = a.layerSpacing;
    if (0 < a.layerSpacingParentOverlap) {
      var d = Math.min(1, a.layerSpacingParentOverlap);
      c -= b ? a.height * d : a.width * d;
    }
    c < (b ? -a.height : -a.width) && (c = b ? -a.height : -a.width);
    return c;
  }

  function nu(a) {
    var b = ku(a),
      c = a.nodeIndent;
    if (0 < a.nodeIndentPastParent) {
      var d = Math.min(1, a.nodeIndentPastParent);
      c += 90 === b || 270 === b ? a.width * d : a.height * d;
    }
    return (c = Math.max(0, c));
  }
  ma.Object.defineProperties(yt.prototype, {
    roots: {
      get: function() {
        return this.Qb;
      },
      set: function(a) {
        this.Qb !== a && ((this.Qb = a), this.D());
      },
    },
    path: {
      get: function() {
        return this.En;
      },
      set: function(a) {
        this.En !== a && ((this.En = a), this.D());
      },
    },
    treeStyle: {
      get: function() {
        return this.Yn;
      },
      set: function(a) {
        this.Nb === a ||
          (a !== Bt && a !== Ut && a !== Vt && a !== Tt) ||
          ((this.Yn = a), this.D());
      },
    },
    layerStyle: {
      get: function() {
        return this.aq;
      },
      set: function(a) {
        this.Nb === a ||
          (a !== Ct && a !== Pt && a !== Ot) ||
          ((this.aq = a), this.D());
      },
    },
    comments: {
      get: function() {
        return this.od;
      },
      set: function(a) {
        this.od !== a && ((this.od = a), this.D());
      },
    },
    arrangement: {
      get: function() {
        return this.Nb;
      },
      set: function(a) {
        this.Nb === a ||
          (a !== Dt && a !== Gu && a !== Gt) ||
          ((this.Nb = a), this.D());
      },
    },
    arrangementSpacing: {
      get: function() {
        return this.Td;
      },
      set: function(a) {
        this.Td.C(a) || (this.Td.assign(a), this.D());
      },
    },
    rootDefaults: {
      get: function() {
        return this.V;
      },
      set: function(a) {
        this.V !== a && ((this.V = a), this.D());
      },
    },
    alternateDefaults: {
      get: function() {
        return this.Y;
      },
      set: function(a) {
        this.Y !== a && ((this.Y = a), this.D());
      },
    },
    sorting: {
      get: function() {
        return this.V.sorting;
      },
      set: function(a) {
        this.V.sorting === a ||
          (a !== Wt && a !== Xt && a !== Yt && !Zt) ||
          ((this.V.sorting = a), this.D());
      },
    },
    comparer: {
      get: function() {
        return this.V.comparer;
      },
      set: function(a) {
        this.V.comparer !== a && ((this.V.comparer = a), this.D());
      },
    },
    angle: {
      get: function() {
        return this.V.angle;
      },
      set: function(a) {
        this.V.angle !== a &&
          (0 === a || 90 === a || 180 === a || 270 === a
            ? ((this.V.angle = a), this.D())
            : C('TreeLayout.angle must be 0, 90, 180, or 270'));
      },
    },
    alignment: {
      get: function() {
        return this.V.alignment;
      },
      set: function(a) {
        this.V.alignment !== a && ((this.V.alignment = a), this.D());
      },
    },
    nodeIndent: {
      get: function() {
        return this.V.nodeIndent;
      },
      set: function(a) {
        this.V.nodeIndent !== a &&
          0 <= a &&
          ((this.V.nodeIndent = a), this.D());
      },
    },
    nodeIndentPastParent: {
      get: function() {
        return this.V.nodeIndentPastParent;
      },
      set: function(a) {
        this.V.nodeIndentPastParent !== a &&
          0 <= a &&
          1 >= a &&
          ((this.V.nodeIndentPastParent = a), this.D());
      },
    },
    nodeSpacing: {
      get: function() {
        return this.V.nodeSpacing;
      },
      set: function(a) {
        this.V.nodeSpacing !== a && ((this.V.nodeSpacing = a), this.D());
      },
    },
    layerSpacing: {
      get: function() {
        return this.V.layerSpacing;
      },
      set: function(a) {
        this.V.layerSpacing !== a && ((this.V.layerSpacing = a), this.D());
      },
    },
    layerSpacingParentOverlap: {
      get: function() {
        return this.V.layerSpacingParentOverlap;
      },
      set: function(a) {
        this.V.layerSpacingParentOverlap !== a &&
          0 <= a &&
          1 >= a &&
          ((this.V.layerSpacingParentOverlap = a), this.D());
      },
    },
    compaction: {
      get: function() {
        return this.V.compaction;
      },
      set: function(a) {
        this.V.compaction === a ||
          (a !== fu && a !== hu) ||
          ((this.V.compaction = a), this.D());
      },
    },
    breadthLimit: {
      get: function() {
        return this.V.breadthLimit;
      },
      set: function(a) {
        this.V.breadthLimit !== a &&
          0 <= a &&
          ((this.V.breadthLimit = a), this.D());
      },
    },
    rowSpacing: {
      get: function() {
        return this.V.rowSpacing;
      },
      set: function(a) {
        this.V.rowSpacing !== a && ((this.V.rowSpacing = a), this.D());
      },
    },
    rowIndent: {
      get: function() {
        return this.V.rowIndent;
      },
      set: function(a) {
        this.V.rowIndent !== a && 0 <= a && ((this.V.rowIndent = a), this.D());
      },
    },
    commentSpacing: {
      get: function() {
        return this.V.commentSpacing;
      },
      set: function(a) {
        this.V.commentSpacing !== a && ((this.V.commentSpacing = a), this.D());
      },
    },
    commentMargin: {
      get: function() {
        return this.V.commentMargin;
      },
      set: function(a) {
        this.V.commentMargin !== a && ((this.V.commentMargin = a), this.D());
      },
    },
    setsPortSpot: {
      get: function() {
        return this.V.setsPortSpot;
      },
      set: function(a) {
        this.V.setsPortSpot !== a && ((this.V.setsPortSpot = a), this.D());
      },
    },
    portSpot: {
      get: function() {
        return this.V.portSpot;
      },
      set: function(a) {
        this.V.portSpot.C(a) || ((this.V.portSpot = a), this.D());
      },
    },
    setsChildPortSpot: {
      get: function() {
        return this.V.setsChildPortSpot;
      },
      set: function(a) {
        this.V.setsChildPortSpot !== a &&
          ((this.V.setsChildPortSpot = a), this.D());
      },
    },
    childPortSpot: {
      get: function() {
        return this.V.childPortSpot;
      },
      set: function(a) {
        this.V.childPortSpot.C(a) || ((this.V.childPortSpot = a), this.D());
      },
    },
    alternateSorting: {
      get: function() {
        return this.Y.sorting;
      },
      set: function(a) {
        this.Y.sorting === a ||
          (a !== Wt && a !== Xt && a !== Yt && !Zt) ||
          ((this.Y.sorting = a), this.D());
      },
    },
    alternateComparer: {
      get: function() {
        return this.Y.comparer;
      },
      set: function(a) {
        this.Y.comparer !== a && ((this.Y.comparer = a), this.D());
      },
    },
    alternateAngle: {
      get: function() {
        return this.Y.angle;
      },
      set: function(a) {
        this.Y.angle === a ||
          (0 !== a && 90 !== a && 180 !== a && 270 !== a) ||
          ((this.Y.angle = a), this.D());
      },
    },
    alternateAlignment: {
      get: function() {
        return this.Y.alignment;
      },
      set: function(a) {
        this.Y.alignment !== a && ((this.Y.alignment = a), this.D());
      },
    },
    alternateNodeIndent: {
      get: function() {
        return this.Y.nodeIndent;
      },
      set: function(a) {
        this.Y.nodeIndent !== a &&
          0 <= a &&
          ((this.Y.nodeIndent = a), this.D());
      },
    },
    alternateNodeIndentPastParent: {
      get: function() {
        return this.Y.nodeIndentPastParent;
      },
      set: function(a) {
        this.Y.nodeIndentPastParent !== a &&
          0 <= a &&
          1 >= a &&
          ((this.Y.nodeIndentPastParent = a), this.D());
      },
    },
    alternateNodeSpacing: {
      get: function() {
        return this.Y.nodeSpacing;
      },
      set: function(a) {
        this.Y.nodeSpacing !== a && ((this.Y.nodeSpacing = a), this.D());
      },
    },
    alternateLayerSpacing: {
      get: function() {
        return this.Y.layerSpacing;
      },
      set: function(a) {
        this.Y.layerSpacing !== a && ((this.Y.layerSpacing = a), this.D());
      },
    },
    alternateLayerSpacingParentOverlap: {
      get: function() {
        return this.Y.layerSpacingParentOverlap;
      },
      set: function(a) {
        this.Y.layerSpacingParentOverlap !== a &&
          0 <= a &&
          1 >= a &&
          ((this.Y.layerSpacingParentOverlap = a), this.D());
      },
    },
    alternateCompaction: {
      get: function() {
        return this.Y.compaction;
      },
      set: function(a) {
        this.Y.compaction === a ||
          (a !== fu && a !== hu) ||
          ((this.Y.compaction = a), this.D());
      },
    },
    alternateBreadthLimit: {
      get: function() {
        return this.Y.breadthLimit;
      },
      set: function(a) {
        this.Y.breadthLimit !== a &&
          0 <= a &&
          ((this.Y.breadthLimit = a), this.D());
      },
    },
    alternateRowSpacing: {
      get: function() {
        return this.Y.rowSpacing;
      },
      set: function(a) {
        this.Y.rowSpacing !== a && ((this.Y.rowSpacing = a), this.D());
      },
    },
    alternateRowIndent: {
      get: function() {
        return this.Y.rowIndent;
      },
      set: function(a) {
        this.Y.rowIndent !== a && 0 <= a && ((this.Y.rowIndent = a), this.D());
      },
    },
    alternateCommentSpacing: {
      get: function() {
        return this.Y.commentSpacing;
      },
      set: function(a) {
        this.Y.commentSpacing !== a && ((this.Y.commentSpacing = a), this.D());
      },
    },
    alternateCommentMargin: {
      get: function() {
        return this.Y.commentMargin;
      },
      set: function(a) {
        this.Y.commentMargin !== a && ((this.Y.commentMargin = a), this.D());
      },
    },
    alternateSetsPortSpot: {
      get: function() {
        return this.Y.setsPortSpot;
      },
      set: function(a) {
        this.Y.setsPortSpot !== a && ((this.Y.setsPortSpot = a), this.D());
      },
    },
    alternatePortSpot: {
      get: function() {
        return this.Y.portSpot;
      },
      set: function(a) {
        this.Y.portSpot.C(a) || ((this.Y.portSpot = a), this.D());
      },
    },
    alternateSetsChildPortSpot: {
      get: function() {
        return this.Y.setsChildPortSpot;
      },
      set: function(a) {
        this.Y.setsChildPortSpot !== a &&
          ((this.Y.setsChildPortSpot = a), this.D());
      },
    },
    alternateChildPortSpot: {
      get: function() {
        return this.Y.childPortSpot;
      },
      set: function(a) {
        this.Y.childPortSpot.C(a) || ((this.Y.childPortSpot = a), this.D());
      },
    },
  });
  var zt = new D(yt, 'PathDefault', -1),
    At = new D(yt, 'PathDestination', 0),
    Ht = new D(yt, 'PathSource', 1),
    Wt = new D(yt, 'SortingForwards', 10),
    Xt = new D(yt, 'SortingReverse', 11),
    Yt = new D(yt, 'SortingAscending', 12),
    Zt = new D(yt, 'SortingDescending', 13),
    xu = new D(yt, 'AlignmentCenterSubtrees', 20),
    yu = new D(yt, 'AlignmentCenterChildren', 21),
    ou = new D(yt, 'AlignmentStart', 22),
    lu = new D(yt, 'AlignmentEnd', 23),
    au = new D(yt, 'AlignmentBus', 24),
    Rt = new D(yt, 'AlignmentBusBranching', 25),
    bu = new D(yt, 'AlignmentTopLeftBus', 26),
    cu = new D(yt, 'AlignmentBottomRightBus', 27),
    fu = new D(yt, 'CompactionNone', 30),
    hu = new D(yt, 'CompactionBlock', 31),
    Bt = new D(yt, 'StyleLayered', 40),
    Vt = new D(yt, 'StyleLastParents', 41),
    Ut = new D(yt, 'StyleAlternating', 42),
    Tt = new D(yt, 'StyleRootOnly', 43),
    Dt = new D(yt, 'ArrangementVertical', 50),
    Gu = new D(yt, 'ArrangementHorizontal', 51),
    Gt = new D(yt, 'ArrangementFixedRoots', 52),
    Ct = new D(yt, 'LayerIndividual', 60),
    Pt = new D(yt, 'LayerSiblings', 61),
    Ot = new D(yt, 'LayerUniform', 62);
  yt.className = 'TreeLayout';
  yt.PathDefault = zt;
  yt.PathDestination = At;
  yt.PathSource = Ht;
  yt.SortingForwards = Wt;
  yt.SortingReverse = Xt;
  yt.SortingAscending = Yt;
  yt.SortingDescending = Zt;
  yt.AlignmentCenterSubtrees = xu;
  yt.AlignmentCenterChildren = yu;
  yt.AlignmentStart = ou;
  yt.AlignmentEnd = lu;
  yt.AlignmentBus = au;
  yt.AlignmentBusBranching = Rt;
  yt.AlignmentTopLeftBus = bu;
  yt.AlignmentBottomRightBus = cu;
  yt.CompactionNone = fu;
  yt.CompactionBlock = hu;
  yt.StyleLayered = Bt;
  yt.StyleLastParents = Vt;
  yt.StyleAlternating = Ut;
  yt.StyleRootOnly = Tt;
  yt.ArrangementVertical = Dt;
  yt.ArrangementHorizontal = Gu;
  yt.ArrangementFixedRoots = Gt;
  yt.LayerIndividual = Ct;
  yt.LayerSiblings = Pt;
  yt.LayerUniform = Ot;

  function Et(a) {
    eq.call(this, a);
  }
  la(Et, eq);
  Et.prototype.createVertex = function() {
    return new Ft(this);
  };
  Et.prototype.createEdge = function() {
    return new Iu(this);
  };
  Et.className = 'TreeNetwork';

  function Ft(a) {
    sq.call(this, a);
    this.W = !1;
    this.cb = null;
    this.u = [];
    this.hb = this.Ga = this.F = this.ga = 0;
    this.od = null;
    this.S = new I(0, 0);
    this.Ca = new K(0, 0);
    this.ka = new I(0, 0);
    this.Ql = this.Pl = this.Xz = !1;
    this.No = this.Bo = null;
    this.fd = Wt;
    this.Zc = zq;
    this.Gb = 0;
    this.Fb = yu;
    this.uq = this.tq = 0;
    this.vq = 20;
    this.be = 50;
    this.$p = 0;
    this.kp = hu;
    this.cp = 0;
    this.Mq = 25;
    this.jp = this.Lq = 10;
    this.ip = 20;
    this.Uq = !0;
    this.Cq = Wc;
    this.Tq = !0;
    this.gp = Wc;
  }
  la(Ft, sq);
  Ft.prototype.copyInheritedPropertiesFrom = function(a) {
    null !== a &&
      ((this.fd = a.sorting),
      (this.Zc = a.comparer),
      (this.Gb = a.angle),
      (this.Fb = a.alignment),
      (this.tq = a.nodeIndent),
      (this.uq = a.nodeIndentPastParent),
      (this.vq = a.nodeSpacing),
      (this.be = a.layerSpacing),
      (this.$p = a.layerSpacingParentOverlap),
      (this.kp = a.compaction),
      (this.cp = a.breadthLimit),
      (this.Mq = a.rowSpacing),
      (this.Lq = a.rowIndent),
      (this.jp = a.commentSpacing),
      (this.ip = a.commentMargin),
      (this.Uq = a.setsPortSpot),
      (this.Cq = a.portSpot),
      (this.Tq = a.setsChildPortSpot),
      (this.gp = a.childPortSpot));
  };
  ma.Object.defineProperties(Ft.prototype, {
    initialized: {
      get: function() {
        return this.W;
      },
      set: function(a) {
        this.W !== a && (this.W = a);
      },
    },
    parent: {
      get: function() {
        return this.cb;
      },
      set: function(a) {
        this.cb !== a && (this.cb = a);
      },
    },
    children: {
      get: function() {
        return this.u;
      },
      set: function(a) {
        if (this.u !== a) {
          if (null !== a) for (var b = a.length, c = 0; c < b; c++);
          this.u = a;
        }
      },
    },
    level: {
      get: function() {
        return this.ga;
      },
      set: function(a) {
        this.ga !== a && (this.ga = a);
      },
    },
    descendantCount: {
      get: function() {
        return this.F;
      },
      set: function(a) {
        this.F !== a && (this.F = a);
      },
    },
    maxChildrenCount: {
      get: function() {
        return this.Ga;
      },
      set: function(a) {
        this.Ga !== a && (this.Ga = a);
      },
    },
    maxGenerationCount: {
      get: function() {
        return this.hb;
      },
      set: function(a) {
        this.hb !== a && (this.hb = a);
      },
    },
    comments: {
      get: function() {
        return this.od;
      },
      set: function(a) {
        if (this.od !== a) {
          if (null !== a) for (var b = a.length, c = 0; c < b; c++);
          this.od = a;
        }
      },
    },
    sorting: {
      get: function() {
        return this.fd;
      },
      set: function(a) {
        this.fd !== a && (this.fd = a);
      },
    },
    comparer: {
      get: function() {
        return this.Zc;
      },
      set: function(a) {
        this.Zc !== a && (this.Zc = a);
      },
    },
    angle: {
      get: function() {
        return this.Gb;
      },
      set: function(a) {
        this.Gb !== a && (this.Gb = a);
      },
    },
    alignment: {
      get: function() {
        return this.Fb;
      },
      set: function(a) {
        this.Fb !== a && (this.Fb = a);
      },
    },
    nodeIndent: {
      get: function() {
        return this.tq;
      },
      set: function(a) {
        this.tq !== a && (this.tq = a);
      },
    },
    nodeIndentPastParent: {
      get: function() {
        return this.uq;
      },
      set: function(a) {
        this.uq !== a && (this.uq = a);
      },
    },
    nodeSpacing: {
      get: function() {
        return this.vq;
      },
      set: function(a) {
        this.vq !== a && (this.vq = a);
      },
    },
    layerSpacing: {
      get: function() {
        return this.be;
      },
      set: function(a) {
        this.be !== a && (this.be = a);
      },
    },
    layerSpacingParentOverlap: {
      get: function() {
        return this.$p;
      },
      set: function(a) {
        this.$p !== a && (this.$p = a);
      },
    },
    compaction: {
      get: function() {
        return this.kp;
      },
      set: function(a) {
        this.kp !== a && (this.kp = a);
      },
    },
    breadthLimit: {
      get: function() {
        return this.cp;
      },
      set: function(a) {
        this.cp !== a && (this.cp = a);
      },
    },
    rowSpacing: {
      get: function() {
        return this.Mq;
      },
      set: function(a) {
        this.Mq !== a && (this.Mq = a);
      },
    },
    rowIndent: {
      get: function() {
        return this.Lq;
      },
      set: function(a) {
        this.Lq !== a && (this.Lq = a);
      },
    },
    commentSpacing: {
      get: function() {
        return this.jp;
      },
      set: function(a) {
        this.jp !== a && (this.jp = a);
      },
    },
    commentMargin: {
      get: function() {
        return this.ip;
      },
      set: function(a) {
        this.ip !== a && (this.ip = a);
      },
    },
    setsPortSpot: {
      get: function() {
        return this.Uq;
      },
      set: function(a) {
        this.Uq !== a && (this.Uq = a);
      },
    },
    portSpot: {
      get: function() {
        return this.Cq;
      },
      set: function(a) {
        this.Cq.C(a) || (this.Cq = a);
      },
    },
    setsChildPortSpot: {
      get: function() {
        return this.Tq;
      },
      set: function(a) {
        this.Tq !== a && (this.Tq = a);
      },
    },
    childPortSpot: {
      get: function() {
        return this.gp;
      },
      set: function(a) {
        this.gp.C(a) || (this.gp = a);
      },
    },
    childrenCount: {
      get: function() {
        return this.children.length;
      },
    },
    relativePosition: {
      get: function() {
        return this.S;
      },
      set: function(a) {
        this.S.set(a);
      },
    },
    subtreeSize: {
      get: function() {
        return this.Ca;
      },
      set: function(a) {
        this.Ca.set(a);
      },
    },
    subtreeOffset: {
      get: function() {
        return this.ka;
      },
      set: function(a) {
        this.ka.set(a);
      },
    },
  });
  Ft.className = 'TreeVertex';

  function Iu(a) {
    tq.call(this, a);
    this.Ft = new I(0, 0);
  }
  la(Iu, tq);
  Iu.prototype.commit = function() {
    var a = this.link;
    if (null !== a && !a.isAvoiding) {
      var b = this.network.layout,
        c = null,
        d = null;
      switch (b.qd) {
        case At:
          c = this.fromVertex;
          d = this.toVertex;
          break;
        case Ht:
          c = this.toVertex;
          d = this.fromVertex;
          break;
        default:
          C('Unhandled path value ' + b.qd.toString());
      }
      if (null !== c && null !== d)
        if (((b = this.Ft), 0 !== b.x || 0 !== b.y || c.Xz)) {
          d = c.bounds;
          var e = ku(c),
            f = mu(c),
            g = c.rowSpacing;
          a.mg();
          var h = a.curve === cg,
            k = a.isOrthogonal,
            l;
          a.jh();
          if (k || h) {
            for (l = 2; 4 < a.pointsCount; ) a.Yu(2);
            var m = a.i(1);
            var n = a.i(2);
          } else {
            for (l = 1; 3 < a.pointsCount; ) a.Yu(1);
            m = a.i(0);
            n = a.i(a.pointsCount - 1);
          }
          var p = a.i(a.pointsCount - 1);
          0 === e
            ? (c.alignment === lu
                ? ((e = d.bottom + b.y),
                  0 === b.y &&
                    m.y > p.y + c.rowIndent &&
                    (e = Math.min(e, Math.max(m.y, e - nu(c)))))
                : c.alignment === ou
                ? ((e = d.top + b.y),
                  0 === b.y &&
                    m.y < p.y - c.rowIndent &&
                    (e = Math.max(e, Math.min(m.y, e + nu(c)))))
                : (e =
                    c.Pl || (c.Ql && 1 === c.maxGenerationCount)
                      ? d.top - c.ka.y + b.y
                      : d.y + d.height / 2 + b.y),
              h
                ? (a.l(l, m.x, e),
                  l++,
                  a.l(l, d.right + f, e),
                  l++,
                  a.l(l, d.right + f + (b.x - g) / 3, e),
                  l++,
                  a.l(l, d.right + f + (2 * (b.x - g)) / 3, e),
                  l++,
                  a.l(l, d.right + f + (b.x - g), e),
                  l++,
                  a.l(l, n.x, e))
                : (k && (a.l(l, d.right + f / 2, m.y), l++),
                  a.l(l, d.right + f / 2, e),
                  l++,
                  a.l(l, d.right + f + b.x - (k ? g / 2 : g), e),
                  l++,
                  k && a.l(l, a.i(l - 1).x, n.y)))
            : 90 === e
            ? (c.alignment === lu
                ? ((e = d.right + b.x),
                  0 === b.x &&
                    m.x > p.x + c.rowIndent &&
                    (e = Math.min(e, Math.max(m.x, e - nu(c)))))
                : c.alignment === ou
                ? ((e = d.left + b.x),
                  0 === b.x &&
                    m.x < p.x - c.rowIndent &&
                    (e = Math.max(e, Math.min(m.x, e + nu(c)))))
                : (e =
                    c.Pl || (c.Ql && 1 === c.maxGenerationCount)
                      ? d.left - c.ka.x + b.x
                      : d.x + d.width / 2 + b.x),
              h
                ? (a.l(l, e, m.y),
                  l++,
                  a.l(l, e, d.bottom + f),
                  l++,
                  a.l(l, e, d.bottom + f + (b.y - g) / 3),
                  l++,
                  a.l(l, e, d.bottom + f + (2 * (b.y - g)) / 3),
                  l++,
                  a.l(l, e, d.bottom + f + (b.y - g)),
                  l++,
                  a.l(l, e, n.y))
                : (k && (a.l(l, m.x, d.bottom + f / 2), l++),
                  a.l(l, e, d.bottom + f / 2),
                  l++,
                  a.l(l, e, d.bottom + f + b.y - (k ? g / 2 : g)),
                  l++,
                  k && a.l(l, n.x, a.i(l - 1).y)))
            : 180 === e
            ? (c.alignment === lu
                ? ((e = d.bottom + b.y),
                  0 === b.y &&
                    m.y > p.y + c.rowIndent &&
                    (e = Math.min(e, Math.max(m.y, e - nu(c)))))
                : c.alignment === ou
                ? ((e = d.top + b.y),
                  0 === b.y &&
                    m.y < p.y - c.rowIndent &&
                    (e = Math.max(e, Math.min(m.y, e + nu(c)))))
                : (e =
                    c.Pl || (c.Ql && 1 === c.maxGenerationCount)
                      ? d.top - c.ka.y + b.y
                      : d.y + d.height / 2 + b.y),
              h
                ? (a.l(l, m.x, e),
                  l++,
                  a.l(l, d.left - f, e),
                  l++,
                  a.l(l, d.left - f + (b.x + g) / 3, e),
                  l++,
                  a.l(l, d.left - f + (2 * (b.x + g)) / 3, e),
                  l++,
                  a.l(l, d.left - f + (b.x + g), e),
                  l++,
                  a.l(l, n.x, e))
                : (k && (a.l(l, d.left - f / 2, m.y), l++),
                  a.l(l, d.left - f / 2, e),
                  l++,
                  a.l(l, d.left - f + b.x + (k ? g / 2 : g), e),
                  l++,
                  k && a.l(l, a.i(l - 1).x, n.y)))
            : 270 === e
            ? (c.alignment === lu
                ? ((e = d.right + b.x),
                  0 === b.x &&
                    m.x > p.x + c.rowIndent &&
                    (e = Math.min(e, Math.max(m.x, e - nu(c)))))
                : c.alignment === ou
                ? ((e = d.left + b.x),
                  0 === b.x &&
                    m.x < p.x - c.rowIndent &&
                    (e = Math.max(e, Math.min(m.x, e + nu(c)))))
                : (e =
                    c.Pl || (c.Ql && 1 === c.maxGenerationCount)
                      ? d.left - c.ka.x + b.x
                      : d.x + d.width / 2 + b.x),
              h
                ? (a.l(l, e, m.y),
                  l++,
                  a.l(l, e, d.top - f),
                  l++,
                  a.l(l, e, d.top - f + (b.y + g) / 3),
                  l++,
                  a.l(l, e, d.top - f + (2 * (b.y + g)) / 3),
                  l++,
                  a.l(l, e, d.top - f + (b.y + g)),
                  l++,
                  a.l(l, e, n.y))
                : (k && (a.l(l, m.x, d.top - f / 2), l++),
                  a.l(l, e, d.top - f / 2),
                  l++,
                  a.l(l, e, d.top - f + b.y + (k ? g / 2 : g)),
                  l++,
                  k && a.l(l, n.x, a.i(l - 1).y)))
            : C('Invalid angle ' + e);
          a.pf();
        } else
          (a = this.link),
            (f = ku(c)),
            f !== ku(d) &&
              ((g = mu(c)),
              (h = c.bounds),
              (c = d.bounds),
              (0 === f && c.left - h.right < g + 1) ||
                (90 === f && c.top - h.bottom < g + 1) ||
                (180 === f && h.left - c.right < g + 1) ||
                (270 === f && h.top - c.bottom < g + 1) ||
                (a.mg(),
                (c = a.curve === cg),
                (b = a.isOrthogonal),
                (d = $t(this.fromVertex.alignment)),
                a.jh(),
                0 === f
                  ? ((f = h.right + g / 2),
                    c
                      ? 4 === a.pointsCount &&
                        ((c = a.i(3).y),
                        a.M(1, f - 20, a.i(1).y),
                        a.l(2, f - 20, c),
                        a.l(3, f, c),
                        a.l(4, f + 20, c),
                        a.M(5, a.i(5).x, c))
                      : b
                      ? d
                        ? a.M(3, a.i(2).x, a.i(4).y)
                        : 6 === a.pointsCount &&
                          (a.M(2, f, a.i(2).y), a.M(3, f, a.i(3).y))
                      : 4 === a.pointsCount
                      ? a.l(2, f, a.i(2).y)
                      : 3 === a.pointsCount
                      ? a.M(1, f, a.i(2).y)
                      : 2 === a.pointsCount && a.l(1, f, a.i(1).y))
                  : 90 === f
                  ? ((f = h.bottom + g / 2),
                    c
                      ? 4 === a.pointsCount &&
                        ((c = a.i(3).x),
                        a.M(1, a.i(1).x, f - 20),
                        a.l(2, c, f - 20),
                        a.l(3, c, f),
                        a.l(4, c, f + 20),
                        a.M(5, c, a.i(5).y))
                      : b
                      ? d
                        ? a.M(3, a.i(2).x, a.i(4).y)
                        : 6 === a.pointsCount &&
                          (a.M(2, a.i(2).x, f), a.M(3, a.i(3).x, f))
                      : 4 === a.pointsCount
                      ? a.l(2, a.i(2).x, f)
                      : 3 === a.pointsCount
                      ? a.M(1, a.i(2).x, f)
                      : 2 === a.pointsCount && a.l(1, a.i(1).x, f))
                  : 180 === f
                  ? ((f = h.left - g / 2),
                    c
                      ? 4 === a.pointsCount &&
                        ((c = a.i(3).y),
                        a.M(1, f + 20, a.i(1).y),
                        a.l(2, f + 20, c),
                        a.l(3, f, c),
                        a.l(4, f - 20, c),
                        a.M(5, a.i(5).x, c))
                      : b
                      ? d
                        ? a.M(3, a.i(2).x, a.i(4).y)
                        : 6 === a.pointsCount &&
                          (a.M(2, f, a.i(2).y), a.M(3, f, a.i(3).y))
                      : 4 === a.pointsCount
                      ? a.l(2, f, a.i(2).y)
                      : 3 === a.pointsCount
                      ? a.M(1, f, a.i(2).y)
                      : 2 === a.pointsCount && a.l(1, f, a.i(1).y))
                  : 270 === f &&
                    ((f = h.top - g / 2),
                    c
                      ? 4 === a.pointsCount &&
                        ((c = a.i(3).x),
                        a.M(1, a.i(1).x, f + 20),
                        a.l(2, c, f + 20),
                        a.l(3, c, f),
                        a.l(4, c, f - 20),
                        a.M(5, c, a.i(5).y))
                      : b
                      ? d
                        ? a.M(3, a.i(2).x, a.i(4).y)
                        : 6 === a.pointsCount &&
                          (a.M(2, a.i(2).x, f), a.M(3, a.i(3).x, f))
                      : 4 === a.pointsCount
                      ? a.l(2, a.i(2).x, f)
                      : 3 === a.pointsCount
                      ? a.M(1, a.i(2).x, f)
                      : 2 === a.pointsCount && a.l(1, a.i(1).x, f)),
                a.pf()));
    }
  };
  ma.Object.defineProperties(Iu.prototype, {
    fromVertex: {
      get: function() {
        return this.ad;
      },
      set: function(a) {
        this.ad !== a && (this.ad = a);
      },
    },
    toVertex: {
      get: function() {
        return this.jd;
      },
      set: function(a) {
        this.jd !== a && (this.jd = a);
      },
    },
    relativePoint: {
      get: function() {
        return this.Ft;
      },
      set: function(a) {
        this.Ft.set(a);
      },
    },
  });
  Iu.className = 'TreeEdge';
  La.prototype.initializeStandardTools = function() {
    this.gb('Action', new qg(), this.mouseDownTools);
    this.gb('Relinking', new Se(), this.mouseDownTools);
    this.gb('LinkReshaping', new ag(), this.mouseDownTools);
    this.gb('Rotating', new og(), this.mouseDownTools);
    this.gb('Resizing', new hg(), this.mouseDownTools);
    this.gb('Linking', new Uf(), this.mouseMoveTools);
    this.gb('Dragging', new Be(), this.mouseMoveTools);
    this.gb('DragSelecting', new Bg(), this.mouseMoveTools);
    this.gb('Panning', new Cg(), this.mouseMoveTools);
    this.gb('ContextMenu', new Eg(), this.mouseUpTools);
    this.gb('TextEditing', new Pg(), this.mouseUpTools);
    this.gb('ClickCreating', new rg(), this.mouseUpTools);
    this.gb('ClickSelecting', new pg(), this.mouseUpTools);
  };
  rn('Horizontal', new vm());
  rn('Spot', new xm());
  rn('Table', new Cm());
  rn('Viewbox', new Hm());
  rn('TableRow', new Fm());
  rn('TableColumn', new Gm());
  rn('Graduated', new Rm());
  rn('Grid', new Im());
  li.add('GraphLinksModel', Sq);
  li.add('TreeModel', fr);
  kq(ms, null);
  kq(Bs, null);
  var Ju = x.go,
    Ku = {
      get licenseKey() {
        return Q.licenseKey;
      },
      set licenseKey(a) {
        Q.licenseKey = a;
      },
      get version() {
        return Q.version;
      },
      Group: qf,
      EnumValue: D,
      List: E,
      Set: G,
      Map: pb,
      Point: I,
      Size: K,
      Rect: M,
      Margin: ec,
      Spot: N,
      Geometry: O,
      PathFigure: Xd,
      PathSegment: Yd,
      InputEvent: $d,
      DiagramEvent: be,
      ChangedEvent: ce,
      Model: Z,
      GraphLinksModel: Ar,
      TreeModel: Fr,
      Binding: wi,
      Transaction: he,
      UndoManager: ie,
      CommandHandler: Rk,
      Tool: ke,
      DraggingTool: Be,
      DraggingInfo: Te,
      DraggingOptions: Ce,
      LinkingBaseTool: Bf,
      LinkingTool: Uf,
      RelinkingTool: Se,
      LinkReshapingTool: ag,
      ResizingTool: hg,
      RotatingTool: og,
      ClickSelectingTool: pg,
      ActionTool: qg,
      ClickCreatingTool: rg,
      HTMLInfo: ze,
      ContextMenuTool: Eg,
      DragSelectingTool: Bg,
      PanningTool: Cg,
      TextEditingTool: Pg,
      ToolManager: La,
      Animation: kh,
      AnimationManager: gh,
      AnimationTrigger: Zh,
      Layer: di,
      Diagram: Q,
      Palette: Kk,
      Overview: Nk,
      Brush: nl,
      GraphObject: Y,
      Panel: W,
      RowColumnDefinition: Oj,
      Shape: Cf,
      TextBlock: Qg,
      Picture: Wj,
      Part: U,
      Adornment: ue,
      Node: V,
      Link: T,
      Placeholder: jg,
      Layout: qi,
      LayoutNetwork: eq,
      LayoutVertex: sq,
      LayoutEdge: tq,
      GridLayout: Mk,
      PanelLayout: Ll,
      CircularLayout: Gr,
      CircularNetwork: Xr,
      CircularVertex: ks,
      CircularEdge: ls,
      ForceDirectedLayout: ms,
      ForceDirectedNetwork: ns,
      ForceDirectedVertex: zs,
      ForceDirectedEdge: As,
      LayeredDigraphLayout: Bs,
      LayeredDigraphNetwork: Gs,
      LayeredDigraphVertex: wt,
      LayeredDigraphEdge: xt,
      TreeLayout: yt,
      TreeNetwork: Et,
      TreeVertex: Ft,
      TreeEdge: Iu,
    };
  'object' === typeof Ju &&
    Ju.version &&
    xa(
      'WARNING: a `go` object on the root object is already defined.  ' +
        ('Debug' in Ju ? 'debug ' : '') +
        'version: ' +
        Ju.version +
        ', replaced with version: ' +
        Ku.version,
    );
  Q.prototype.go = Ku;
  x.go = Ku;
  'undefined' !== typeof module &&
    'object' === typeof module.exports &&
    (module.exports = 'undefined' !== typeof global ? global.go : self.go);
})();

'function' === typeof define &&
  define.amd &&
  define('undefined' !== typeof global ? global.go : self.go);
