text: /*! osc.js 2.2.2, Copyright 2018 Colin Clark | github.com/colinbdclark/osc.js */
  
  
  var osc = osc || {};
  
  !function() {
      "use strict";
      osc.SECS_70YRS = 2208988800, osc.TWO_32 = 4294967296, osc.defaults = {
          metadata: !1,
          unpackSingleArgs: !0
      }, osc.isCommonJS = !("undefined" == typeof module || !module.exports), osc.isNode = osc.isCommonJS && "undefined" == typeof window, 
      osc.isElectron = !("undefined" == typeof process || !process.versions || !process.versions.electron), 
      osc.isBufferEnv = osc.isNode || osc.isElectron, osc.isArray = function(t) {
          return t && "[object Array]" === Object.prototype.toString.call(t);
      }, osc.isTypedArrayView = function(t) {
          return t.buffer && t.buffer instanceof ArrayBuffer;
      }, osc.isBuffer = function(t) {
          return osc.isBufferEnv && t instanceof Buffer;
      }, osc.Long = "undefined" != typeof Long ? Long : osc.isNode ? require("long") : void 0, 
      osc.dataView = function(t, e, r) {
          return t.buffer ? new DataView(t.buffer, e, r) : t instanceof ArrayBuffer ? new DataView(t, e, r) : new DataView(new Uint8Array(t), e, r);
      }, osc.byteArray = function(t) {
          if (t instanceof Uint8Array) return t;
          var e = t.buffer ? t.buffer : t;
          if (!(e instanceof ArrayBuffer || void 0 !== e.length && "string" != typeof e)) throw new Error("Can't wrap a non-array-like object as Uint8Array. Object was: " + JSON.stringify(t, null, 2));
          return new Uint8Array(e);
      }, osc.nativeBuffer = function(t) {
          return osc.isBufferEnv ? osc.isBuffer(t) ? t : new Buffer(t.buffer ? t : new Uint8Array(t)) : osc.isTypedArrayView(t) ? t : new Uint8Array(t);
      }, osc.copyByteArray = function(t, e, r) {
          if (osc.isTypedArrayView(t) && osc.isTypedArrayView(e)) e.set(t, r); else for (var n = void 0 === r ? 0 : r, i = Math.min(e.length - r, t.length), s = 0, o = n; s < i; s++, 
          o++) e[o] = t[s];
          return e;
      }, osc.readString = function(t, e) {
          for (var r = [], n = e.idx; n < t.byteLength; n++) {
              var i = t.getUint8(n);
              if (0 === i) {
                  n++;
                  break;
              }
              r.push(i);
          }
          return n = n + 3 & -4, e.idx = n, String.fromCharCode.apply(null, r);
      }, osc.writeString = function(t) {
          for (var e = t + "\0", r = e.length, n = new Uint8Array(r + 3 & -4), i = 0; i < e.length; i++) {
              var s = e.charCodeAt(i);
              n[i] = s;
          }
          return n;
      }, osc.readPrimitive = function(t, e, r, n) {
          var i = t[e](n.idx, !1);
          return n.idx += r, i;
      }, osc.writePrimitive = function(t, e, r, n, i) {
          var s;
          return i = void 0 === i ? 0 : i, e ? s = new Uint8Array(e.buffer) : (s = new Uint8Array(n), 
          e = new DataView(s.buffer)), e[r](i, t, !1), s;
      }, osc.readInt32 = function(t, e) {
          return osc.readPrimitive(t, "getInt32", 4, e);
      }, osc.writeInt32 = function(t, e, r) {
          return osc.writePrimitive(t, e, "setInt32", 4, r);
      }, osc.readInt64 = function(t, e) {
          var r = osc.readPrimitive(t, "getInt32", 4, e), n = osc.readPrimitive(t, "getInt32", 4, e);
          return osc.Long ? new osc.Long(n, r) : {
              high: r,
              low: n,
              unsigned: !1
          };
      }, osc.writeInt64 = function(t, e, r) {
          var n = new Uint8Array(8);
          return n.set(osc.writePrimitive(t.high, e, "setInt32", 4, r), 0), n.set(osc.writePrimitive(t.low, e, "setInt32", 4, r + 4), 4), 
          n;
      }, osc.readFloat32 = function(t, e) {
          return osc.readPrimitive(t, "getFloat32", 4, e);
      }, osc.writeFloat32 = function(t, e, r) {
          return osc.writePrimitive(t, e, "setFloat32", 4, r);
      }, osc.readFloat64 = function(t, e) {
          return osc.readPrimitive(t, "getFloat64", 8, e);
      }, osc.writeFloat64 = function(t, e, r) {
          return osc.writePrimitive(t, e, "setFloat64", 8, r);
      }, osc.readChar32 = function(t, e) {
          var r = osc.readPrimitive(t, "getUint32", 4, e);
          return String.fromCharCode(r);
      }, osc.writeChar32 = function(t, e, r) {
          var n = t.charCodeAt(0);
          if (!(void 0 === n || n < -1)) return osc.writePrimitive(n, e, "setUint32", 4, r);
      }, osc.readBlob = function(t, e) {
          var r = osc.readInt32(t, e), n = r + 3 & -4, i = new Uint8Array(t.buffer, e.idx, r);
          return e.idx += n, i;
      }, osc.writeBlob = function(t) {
          var e = (t = osc.byteArray(t)).byteLength, r = new Uint8Array((e + 3 & -4) + 4), n = new DataView(r.buffer);
          return osc.writeInt32(e, n), r.set(t, 4), r;
      }, osc.readMIDIBytes = function(t, e) {
          var r = new Uint8Array(t.buffer, e.idx, 4);
          return e.idx += 4, r;
      }, osc.writeMIDIBytes = function(t) {
          t = osc.byteArray(t);
          var e = new Uint8Array(4);
          return e.set(t), e;
      }, osc.readColor = function(t, e) {
          var r = new Uint8Array(t.buffer, e.idx, 4), n = r[3] / 255;
          return e.idx += 4, {
              r: r[0],
              g: r[1],
              b: r[2],
              a: n
          };
      }, osc.writeColor = function(t) {
          var e = Math.round(255 * t.a);
          return new Uint8Array([ t.r, t.g, t.b, e ]);
      }, osc.readTrue = function() {
          return !0;
      }, osc.readFalse = function() {
          return !1;
      }, osc.readNull = function() {
          return null;
      }, osc.readImpulse = function() {
          return 1;
      }, osc.readTimeTag = function(t, e) {
          var r = osc.readPrimitive(t, "getUint32", 4, e), n = osc.readPrimitive(t, "getUint32", 4, e);
          return {
              raw: [ r, n ],
              native: 0 === r && 1 === n ? Date.now() : osc.ntpToJSTime(r, n)
          };
      }, osc.writeTimeTag = function(t) {
          var e = t.raw ? t.raw : osc.jsToNTPTime(t.native), r = new Uint8Array(8), n = new DataView(r.buffer);
          return osc.writeInt32(e[0], n, 0), osc.writeInt32(e[1], n, 4), r;
      }, osc.timeTag = function(t, e) {
          t = t || 0;
          var r = (e = e || Date.now()) / 1e3, n = Math.floor(r), i = r - n, s = Math.floor(t), o = i + (t - s);
          if (o > 1) {
              var a = Math.floor(o);
              s += a, o = o - a;
          }
          return {
              raw: [ n + s + osc.SECS_70YRS, Math.round(osc.TWO_32 * o) ]
          };
      }, osc.ntpToJSTime = function(t, e) {
          return 1e3 * (t - osc.SECS_70YRS + e / osc.TWO_32);
      }, osc.jsToNTPTime = function(t) {
          var e = t / 1e3, r = Math.floor(e), n = e - r;
          return [ r + osc.SECS_70YRS, Math.round(osc.TWO_32 * n) ];
      }, osc.readArguments = function(t, e, r) {
          var n = osc.readString(t, r);
          if (0 !== n.indexOf(",")) throw new Error("A malformed type tag string was found while reading the arguments of an OSC message. String was: " + n, " at offset: " + r.idx);
          var i = n.substring(1).split(""), s = [];
          return osc.readArgumentsIntoArray(s, i, n, t, e, r), s;
      }, osc.readArgument = function(t, e, r, n, i) {
          var s = osc.argumentTypes[t];
          if (!s) throw new Error("'" + t + "' is not a valid OSC type tag. Type tag string was: " + e);
          var o = s.reader, a = osc[o](r, i);
          return n.metadata && (a = {
              type: t,
              value: a
          }), a;
      }, osc.readArgumentsIntoArray = function(t, e, r, n, i, s) {
          for (var o = 0; o < e.length; ) {
              var a, c = e[o];
              if ("[" === c) {
                  var u = e.slice(o + 1), h = u.indexOf("]");
                  if (h < 0) throw new Error("Invalid argument type tag: an open array type tag ('[') was found without a matching close array tag ('[]'). Type tag was: " + r);
                  var f = u.slice(0, h);
                  a = osc.readArgumentsIntoArray([], f, r, n, i, s), o += h + 2;
              } else a = osc.readArgument(c, r, n, i, s), o++;
              t.push(a);
          }
          return t;
      }, osc.writeArguments = function(t, e) {
          var r = osc.collectArguments(t, e);
          return osc.joinParts(r);
      }, osc.joinParts = function(t) {
          for (var e = new Uint8Array(t.byteLength), r = t.parts, n = 0, i = 0; i < r.length; i++) {
              var s = r[i];
              osc.copyByteArray(s, e, n), n += s.length;
          }
          return e;
      }, osc.addDataPart = function(t, e) {
          e.parts.push(t), e.byteLength += t.length;
      }, osc.writeArrayArguments = function(t, e) {
          for (var r = "[", n = 0; n < t.length; n++) {
              var i = t[n];
              r += osc.writeArgument(i, e);
          }
          return r += "]";
      }, osc.writeArgument = function(t, e) {
          if (osc.isArray(t)) return osc.writeArrayArguments(t, e);
          var r = t.type, n = osc.argumentTypes[r].writer;
          if (n) {
              var i = osc[n](t.value);
              osc.addDataPart(i, e);
          }
          return t.type;
      }, osc.collectArguments = function(t, e, r) {
          osc.isArray(t) || (t = void 0 === t ? [] : [ t ]), r = r || {
              byteLength: 0,
              parts: []
          }, e.metadata || (t = osc.annotateArguments(t));
          for (var n = ",", i = r.parts.length, s = 0; s < t.length; s++) {
              var o = t[s];
              n += osc.writeArgument(o, r);
          }
          var a = osc.writeString(n);
          return r.byteLength += a.byteLength, r.parts.splice(i, 0, a), r;
      }, osc.readMessage = function(t, e, r) {
          e = e || osc.defaults;
          var n = osc.dataView(t, t.byteOffset, t.byteLength);
          r = r || {
              idx: 0
          };
          var i = osc.readString(n, r);
          return osc.readMessageContents(i, n, e, r);
      }, osc.readMessageContents = function(t, e, r, n) {
          if (0 !== t.indexOf("/")) throw new Error("A malformed OSC address was found while reading an OSC message. String was: " + t);
          var i = osc.readArguments(e, r, n);
          return {
              address: t,
              args: 1 === i.length && r.unpackSingleArgs ? i[0] : i
          };
      }, osc.collectMessageParts = function(t, e, r) {
          return r = r || {
              byteLength: 0,
              parts: []
          }, osc.addDataPart(osc.writeString(t.address), r), osc.collectArguments(t.args, e, r);
      }, osc.writeMessage = function(t, e) {
          if (e = e || osc.defaults, !osc.isValidMessage(t)) throw new Error("An OSC message must contain a valid address. Message was: " + JSON.stringify(t, null, 2));
          var r = osc.collectMessageParts(t, e);
          return osc.joinParts(r);
      }, osc.isValidMessage = function(t) {
          return t.address && 0 === t.address.indexOf("/");
      }, osc.readBundle = function(t, e, r) {
          return osc.readPacket(t, e, r);
      }, osc.collectBundlePackets = function(t, e, r) {
          r = r || {
              byteLength: 0,
              parts: []
          }, osc.addDataPart(osc.writeString("#bundle"), r), osc.addDataPart(osc.writeTimeTag(t.timeTag), r);
          for (var n = 0; n < t.packets.length; n++) {
              var i = t.packets[n], s = (i.address ? osc.collectMessageParts : osc.collectBundlePackets)(i, e);
              r.byteLength += s.byteLength, osc.addDataPart(osc.writeInt32(s.byteLength), r), 
              r.parts = r.parts.concat(s.parts);
          }
          return r;
      }, osc.writeBundle = function(t, e) {
          if (!osc.isValidBundle(t)) throw new Error("An OSC bundle must contain 'timeTag' and 'packets' properties. Bundle was: " + JSON.stringify(t, null, 2));
          e = e || osc.defaults;
          var r = osc.collectBundlePackets(t, e);
          return osc.joinParts(r);
      }, osc.isValidBundle = function(t) {
          return void 0 !== t.timeTag && void 0 !== t.packets;
      }, osc.readBundleContents = function(t, e, r, n) {
          for (var i = osc.readTimeTag(t, r), s = []; r.idx < n; ) {
              var o = osc.readInt32(t, r), a = r.idx + o, c = osc.readPacket(t, e, r, a);
              s.push(c);
          }
          return {
              timeTag: i,
              packets: s
          };
      }, osc.readPacket = function(t, e, r, n) {
          var i = osc.dataView(t, t.byteOffset, t.byteLength);
          n = void 0 === n ? i.byteLength : n, r = r || {
              idx: 0
          };
          var s = osc.readString(i, r), o = s[0];
          if ("#" === o) return osc.readBundleContents(i, e, r, n);
          if ("/" === o) return osc.readMessageContents(s, i, e, r);
          throw new Error("The header of an OSC packet didn't contain an OSC address or a #bundle string. Header was: " + s);
      }, osc.writePacket = function(t, e) {
          if (osc.isValidMessage(t)) return osc.writeMessage(t, e);
          if (osc.isValidBundle(t)) return osc.writeBundle(t, e);
          throw new Error("The specified packet was not recognized as a valid OSC message or bundle. Packet was: " + JSON.stringify(t, null, 2));
      }, osc.argumentTypes = {
          i: {
              reader: "readInt32",
              writer: "writeInt32"
          },
          h: {
              reader: "readInt64",
              writer: "writeInt64"
          },
          f: {
              reader: "readFloat32",
              writer: "writeFloat32"
          },
          s: {
              reader: "readString",
              writer: "writeString"
          },
          S: {
              reader: "readString",
              writer: "writeString"
          },
          b: {
              reader: "readBlob",
              writer: "writeBlob"
          },
          t: {
              reader: "readTimeTag",
              writer: "writeTimeTag"
          },
          T: {
              reader: "readTrue"
          },
          F: {
              reader: "readFalse"
          },
          N: {
              reader: "readNull"
          },
          I: {
              reader: "readImpulse"
          },
          d: {
              reader: "readFloat64",
              writer: "writeFloat64"
          },
          c: {
              reader: "readChar32",
              writer: "writeChar32"
          },
          r: {
              reader: "readColor",
              writer: "writeColor"
          },
          m: {
              reader: "readMIDIBytes",
              writer: "writeMIDIBytes"
          }
      }, osc.inferTypeForArgument = function(t) {
          switch (typeof t) {
            case "boolean":
              return t ? "T" : "F";
  
            case "string":
              return "s";
  
            case "number":
              return "f";
  
            case "undefined":
              return "N";
  
            case "object":
              if (null === t) return "N";
              if (t instanceof Uint8Array || t instanceof ArrayBuffer) return "b";
              if ("number" == typeof t.high && "number" == typeof t.low) return "h";
          }
          throw new Error("Can't infer OSC argument type for value: " + JSON.stringify(t, null, 2));
      }, osc.annotateArguments = function(t) {
          for (var e = [], r = 0; r < t.length; r++) {
              var n, i = t[r];
              if ("object" == typeof i && i.type && void 0 !== i.value) n = i; else if (osc.isArray(i)) n = osc.annotateArguments(i); else {
                  n = {
                      type: osc.inferTypeForArgument(i),
                      value: i
                  };
              }
              e.push(n);
          }
          return e;
      }, osc.isCommonJS && (module.exports = osc);
  }(), function(t, e) {
      "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.Long = e() : t.Long = e();
  }("undefined" != typeof self ? self : this, function() {
      return function(t) {
          function e(n) {
              if (r[n]) return r[n].exports;
              var i = r[n] = {
                  i: n,
                  l: !1,
                  exports: {}
              };
              return t[n].call(i.exports, i, i.exports, e), i.l = !0, i.exports;
          }
          var r = {};
          return e.m = t, e.c = r, e.d = function(t, r, n) {
              e.o(t, r) || Object.defineProperty(t, r, {
                  configurable: !1,
                  enumerable: !0,
                  get: n
              });
          }, e.n = function(t) {
              var r = t && t.__esModule ? function() {
                  return t.default;
              } : function() {
                  return t;
              };
              return e.d(r, "a", r), r;
          }, e.o = function(t, e) {
              return Object.prototype.hasOwnProperty.call(t, e);
          }, e.p = "", e(e.s = 0);
      }([ function(t, e) {
          function r(t, e, r) {
              this.low = 0 | t, this.high = 0 | e, this.unsigned = !!r;
          }
          function n(t) {
              return !0 === (t && t.__isLong__);
          }
          function i(t, e) {
              var r, n, i;
              return e ? (i = 0 <= (t >>>= 0) && t < 256) && (n = f[t]) ? n : (r = o(t, (0 | t) < 0 ? -1 : 0, !0), 
              i && (f[t] = r), r) : (i = -128 <= (t |= 0) && t < 128) && (n = h[t]) ? n : (r = o(t, t < 0 ? -1 : 0, !1), 
              i && (h[t] = r), r);
          }
          function s(t, e) {
              if (isNaN(t)) return e ? y : v;
              if (e) {
                  if (t < 0) return y;
                  if (t >= g) return P;
              } else {
                  if (t <= -p) return A;
                  if (t + 1 >= p) return S;
              }
              return t < 0 ? s(-t, e).neg() : o(t % l | 0, t / l | 0, e);
          }
          function o(t, e, n) {
              return new r(t, e, n);
          }
          function a(t, e, r) {
              if (0 === t.length) throw Error("empty string");
              if ("NaN" === t || "Infinity" === t || "+Infinity" === t || "-Infinity" === t) return v;
              if ("number" == typeof e ? (r = e, e = !1) : e = !!e, (r = r || 10) < 2 || 36 < r) throw RangeError("radix");
              var n;
              if ((n = t.indexOf("-")) > 0) throw Error("interior hyphen");
              if (0 === n) return a(t.substring(1), e, r).neg();
              for (var i = s(d(r, 8)), o = v, c = 0; c < t.length; c += 8) {
                  var u = Math.min(8, t.length - c), h = parseInt(t.substring(c, c + u), r);
                  if (u < 8) {
                      var f = s(d(r, u));
                      o = o.mul(f).add(s(h));
                  } else o = (o = o.mul(i)).add(s(h));
              }
              return o.unsigned = e, o;
          }
          function c(t, e) {
              return "number" == typeof t ? s(t, e) : "string" == typeof t ? a(t, e) : o(t.low, t.high, "boolean" == typeof e ? e : t.unsigned);
          }
          t.exports = r;
          var u = null;
          try {
              u = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([ 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11 ])), {}).exports;
          } catch (t) {}
          r.prototype.__isLong__, Object.defineProperty(r.prototype, "__isLong__", {
              value: !0
          }), r.isLong = n;
          var h = {}, f = {};
          r.fromInt = i, r.fromNumber = s, r.fromBits = o;
          var d = Math.pow;
          r.fromString = a, r.fromValue = c;
          var l = 4294967296, g = l * l, p = g / 2, m = i(1 << 24), v = i(0);
          r.ZERO = v;
          var y = i(0, !0);
          r.UZERO = y;
          var w = i(1);
          r.ONE = w;
          var b = i(1, !0);
          r.UONE = b;
          var E = i(-1);
          r.NEG_ONE = E;
          var S = o(-1, 2147483647, !1);
          r.MAX_VALUE = S;
          var P = o(-1, -1, !0);
          r.MAX_UNSIGNED_VALUE = P;
          var A = o(0, -2147483648, !1);
          r.MIN_VALUE = A;
          var I = r.prototype;
          I.toInt = function() {
              return this.unsigned ? this.low >>> 0 : this.low;
          }, I.toNumber = function() {
              return this.unsigned ? (this.high >>> 0) * l + (this.low >>> 0) : this.high * l + (this.low >>> 0);
          }, I.toString = function(t) {
              if ((t = t || 10) < 2 || 36 < t) throw RangeError("radix");
              if (this.isZero()) return "0";
              if (this.isNegative()) {
                  if (this.eq(A)) {
                      var e = s(t), r = this.div(e), n = r.mul(e).sub(this);
                      return r.toString(t) + n.toInt().toString(t);
                  }
                  return "-" + this.neg().toString(t);
              }
              for (var i = s(d(t, 6), this.unsigned), o = this, a = ""; ;) {
                  var c = o.div(i), u = (o.sub(c.mul(i)).toInt() >>> 0).toString(t);
                  if ((o = c).isZero()) return u + a;
                  for (;u.length < 6; ) u = "0" + u;
                  a = "" + u + a;
              }
          }, I.getHighBits = function() {
              return this.high;
          }, I.getHighBitsUnsigned = function() {
              return this.high >>> 0;
          }, I.getLowBits = function() {
              return this.low;
          }, I.getLowBitsUnsigned = function() {
              return this.low >>> 0;
          }, I.getNumBitsAbs = function() {
              if (this.isNegative()) return this.eq(A) ? 64 : this.neg().getNumBitsAbs();
              for (var t = 0 != this.high ? this.high : this.low, e = 31; e > 0 && 0 == (t & 1 << e); e--) ;
              return 0 != this.high ? e + 33 : e + 1;
          }, I.isZero = function() {
              return 0 === this.high && 0 === this.low;
          }, I.eqz = I.isZero, I.isNegative = function() {
              return !this.unsigned && this.high < 0;
          }, I.isPositive = function() {
              return this.unsigned || this.high >= 0;
          }, I.isOdd = function() {
              return 1 == (1 & this.low);
          }, I.isEven = function() {
              return 0 == (1 & this.low);
          }, I.equals = function(t) {
              return n(t) || (t = c(t)), (this.unsigned === t.unsigned || this.high >>> 31 != 1 || t.high >>> 31 != 1) && this.high === t.high && this.low === t.low;
          }, I.eq = I.equals, I.notEquals = function(t) {
              return !this.eq(t);
          }, I.neq = I.notEquals, I.ne = I.notEquals, I.lessThan = function(t) {
              return this.comp(t) < 0;
          }, I.lt = I.lessThan, I.lessThanOrEqual = function(t) {
              return this.comp(t) <= 0;
          }, I.lte = I.lessThanOrEqual, I.le = I.lessThanOrEqual, I.greaterThan = function(t) {
              return this.comp(t) > 0;
          }, I.gt = I.greaterThan, I.greaterThanOrEqual = function(t) {
              return this.comp(t) >= 0;
          }, I.gte = I.greaterThanOrEqual, I.ge = I.greaterThanOrEqual, I.compare = function(t) {
              if (n(t) || (t = c(t)), this.eq(t)) return 0;
              var e = this.isNegative(), r = t.isNegative();
              return e && !r ? -1 : !e && r ? 1 : this.unsigned ? t.high >>> 0 > this.high >>> 0 || t.high === this.high && t.low >>> 0 > this.low >>> 0 ? -1 : 1 : this.sub(t).isNegative() ? -1 : 1;
          }, I.comp = I.compare, I.negate = function() {
              return !this.unsigned && this.eq(A) ? A : this.not().add(w);
          }, I.neg = I.negate, I.add = function(t) {
              n(t) || (t = c(t));
              var e = this.high >>> 16, r = 65535 & this.high, i = this.low >>> 16, s = 65535 & this.low, a = t.high >>> 16, u = 65535 & t.high, h = t.low >>> 16, f = 0, d = 0, l = 0, g = 0;
              return l += (g += s + (65535 & t.low)) >>> 16, d += (l += i + h) >>> 16, f += (d += r + u) >>> 16, 
              f += e + a, o((l &= 65535) << 16 | (g &= 65535), (f &= 65535) << 16 | (d &= 65535), this.unsigned);
          }, I.subtract = function(t) {
              return n(t) || (t = c(t)), this.add(t.neg());
          }, I.sub = I.subtract, I.multiply = function(t) {
              if (this.isZero()) return v;
              if (n(t) || (t = c(t)), u) return o(u.mul(this.low, this.high, t.low, t.high), u.get_high(), this.unsigned);
              if (t.isZero()) return v;
              if (this.eq(A)) return t.isOdd() ? A : v;
              if (t.eq(A)) return this.isOdd() ? A : v;
              if (this.isNegative()) return t.isNegative() ? this.neg().mul(t.neg()) : this.neg().mul(t).neg();
              if (t.isNegative()) return this.mul(t.neg()).neg();
              if (this.lt(m) && t.lt(m)) return s(this.toNumber() * t.toNumber(), this.unsigned);
              var e = this.high >>> 16, r = 65535 & this.high, i = this.low >>> 16, a = 65535 & this.low, h = t.high >>> 16, f = 65535 & t.high, d = t.low >>> 16, l = 65535 & t.low, g = 0, p = 0, y = 0, w = 0;
              return y += (w += a * l) >>> 16, p += (y += i * l) >>> 16, y &= 65535, p += (y += a * d) >>> 16, 
              g += (p += r * l) >>> 16, p &= 65535, g += (p += i * d) >>> 16, p &= 65535, g += (p += a * f) >>> 16, 
              g += e * l + r * d + i * f + a * h, o((y &= 65535) << 16 | (w &= 65535), (g &= 65535) << 16 | (p &= 65535), this.unsigned);
          }, I.mul = I.multiply, I.divide = function(t) {
              if (n(t) || (t = c(t)), t.isZero()) throw Error("division by zero");
              if (u) return this.unsigned || -2147483648 !== this.high || -1 !== t.low || -1 !== t.high ? o((this.unsigned ? u.div_u : u.div_s)(this.low, this.high, t.low, t.high), u.get_high(), this.unsigned) : this;
              if (this.isZero()) return this.unsigned ? y : v;
              var e, r, i;
              if (this.unsigned) {
                  if (t.unsigned || (t = t.toUnsigned()), t.gt(this)) return y;
                  if (t.gt(this.shru(1))) return b;
                  i = y;
              } else {
                  if (this.eq(A)) return t.eq(w) || t.eq(E) ? A : t.eq(A) ? w : (e = this.shr(1).div(t).shl(1)).eq(v) ? t.isNegative() ? w : E : (r = this.sub(t.mul(e)), 
                  i = e.add(r.div(t)));
                  if (t.eq(A)) return this.unsigned ? y : v;
                  if (this.isNegative()) return t.isNegative() ? this.neg().div(t.neg()) : this.neg().div(t).neg();
                  if (t.isNegative()) return this.div(t.neg()).neg();
                  i = v;
              }
              for (r = this; r.gte(t); ) {
                  e = Math.max(1, Math.floor(r.toNumber() / t.toNumber()));
                  for (var a = Math.ceil(Math.log(e) / Math.LN2), h = a <= 48 ? 1 : d(2, a - 48), f = s(e), l = f.mul(t); l.isNegative() || l.gt(r); ) l = (f = s(e -= h, this.unsigned)).mul(t);
                  f.isZero() && (f = w), i = i.add(f), r = r.sub(l);
              }
              return i;
          }, I.div = I.divide, I.modulo = function(t) {
              return n(t) || (t = c(t)), u ? o((this.unsigned ? u.rem_u : u.rem_s)(this.low, this.high, t.low, t.high), u.get_high(), this.unsigned) : this.sub(this.div(t).mul(t));
          }, I.mod = I.modulo, I.rem = I.modulo, I.not = function() {
              return o(~this.low, ~this.high, this.unsigned);
          }, I.and = function(t) {
              return n(t) || (t = c(t)), o(this.low & t.low, this.high & t.high, this.unsigned);
          }, I.or = function(t) {
              return n(t) || (t = c(t)), o(this.low | t.low, this.high | t.high, this.unsigned);
          }, I.xor = function(t) {
              return n(t) || (t = c(t)), o(this.low ^ t.low, this.high ^ t.high, this.unsigned);
          }, I.shiftLeft = function(t) {
              return n(t) && (t = t.toInt()), 0 == (t &= 63) ? this : t < 32 ? o(this.low << t, this.high << t | this.low >>> 32 - t, this.unsigned) : o(0, this.low << t - 32, this.unsigned);
          }, I.shl = I.shiftLeft, I.shiftRight = function(t) {
              return n(t) && (t = t.toInt()), 0 == (t &= 63) ? this : t < 32 ? o(this.low >>> t | this.high << 32 - t, this.high >> t, this.unsigned) : o(this.high >> t - 32, this.high >= 0 ? 0 : -1, this.unsigned);
          }, I.shr = I.shiftRight, I.shiftRightUnsigned = function(t) {
              if (n(t) && (t = t.toInt()), 0 == (t &= 63)) return this;
              var e = this.high;
              return t < 32 ? o(this.low >>> t | e << 32 - t, e >>> t, this.unsigned) : o(32 === t ? e : e >>> t - 32, 0, this.unsigned);
          }, I.shru = I.shiftRightUnsigned, I.shr_u = I.shiftRightUnsigned, I.toSigned = function() {
              return this.unsigned ? o(this.low, this.high, !1) : this;
          }, I.toUnsigned = function() {
              return this.unsigned ? this : o(this.low, this.high, !0);
          }, I.toBytes = function(t) {
              return t ? this.toBytesLE() : this.toBytesBE();
          }, I.toBytesLE = function() {
              var t = this.high, e = this.low;
              return [ 255 & e, e >>> 8 & 255, e >>> 16 & 255, e >>> 24, 255 & t, t >>> 8 & 255, t >>> 16 & 255, t >>> 24 ];
          }, I.toBytesBE = function() {
              var t = this.high, e = this.low;
              return [ t >>> 24, t >>> 16 & 255, t >>> 8 & 255, 255 & t, e >>> 24, e >>> 16 & 255, e >>> 8 & 255, 255 & e ];
          }, r.fromBytes = function(t, e, n) {
              return n ? r.fromBytesLE(t, e) : r.fromBytesBE(t, e);
          }, r.fromBytesLE = function(t, e) {
              return new r(t[0] | t[1] << 8 | t[2] << 16 | t[3] << 24, t[4] | t[5] << 8 | t[6] << 16 | t[7] << 24, e);
          }, r.fromBytesBE = function(t, e) {
              return new r(t[4] << 24 | t[5] << 16 | t[6] << 8 | t[7], t[0] << 24 | t[1] << 16 | t[2] << 8 | t[3], e);
          };
      } ]);
  }), function(t, e) {
      "use strict";
      "object" == typeof exports ? (t.slip = exports, e(exports)) : "function" == typeof define && define.amd ? define([ "exports" ], function(r) {
          return t.slip = r, t.slip, e(r);
      }) : (t.slip = {}, e(t.slip));
  }(this, function(t) {
      "use strict";
      var e = t;
      e.END = 192, e.ESC = 219, e.ESC_END = 220, e.ESC_ESC = 221, e.byteArray = function(t, e, r) {
          return t instanceof ArrayBuffer ? new Uint8Array(t, e, r) : t;
      }, e.expandByteArray = function(t) {
          var e = new Uint8Array(2 * t.length);
          return e.set(t), e;
      }, e.sliceByteArray = function(t, e, r) {
          var n = t.buffer.slice ? t.buffer.slice(e, r) : t.subarray(e, r);
          return new Uint8Array(n);
      }, e.encode = function(t, r) {
          (r = r || {}).bufferPadding = r.bufferPadding || 4;
          var n = (t = e.byteArray(t, r.offset, r.byteLength)).length + r.bufferPadding + 3 & -4, i = new Uint8Array(n), s = 1;
          i[0] = e.END;
          for (var o = 0; o < t.length; o++) {
              s > i.length - 3 && (i = e.expandByteArray(i));
              var a = t[o];
              a === e.END ? (i[s++] = e.ESC, a = e.ESC_END) : a === e.ESC && (i[s++] = e.ESC, 
              a = e.ESC_ESC), i[s++] = a;
          }
          return i[s] = e.END, e.sliceByteArray(i, 0, s + 1);
      }, e.Decoder = function(t) {
          t = "function" != typeof t ? t || {} : {
              onMessage: t
          }, this.maxMessageSize = t.maxMessageSize || 10485760, this.bufferSize = t.bufferSize || 1024, 
          this.msgBuffer = new Uint8Array(this.bufferSize), this.msgBufferIdx = 0, this.onMessage = t.onMessage, 
          this.onError = t.onError, this.escape = !1;
      };
      var r = e.Decoder.prototype;
      return r.decode = function(t) {
          var r;
          t = e.byteArray(t);
          for (var n = 0; n < t.length; n++) {
              var i = t[n];
              if (this.escape) i === e.ESC_ESC ? i = e.ESC : i === e.ESC_END && (i = e.END); else {
                  if (i === e.ESC) {
                      this.escape = !0;
                      continue;
                  }
                  if (i === e.END) {
                      r = this.handleEnd();
                      continue;
                  }
              }
              this.addByte(i) || this.handleMessageMaxError();
          }
          return r;
      }, r.handleMessageMaxError = function() {
          this.onError && this.onError(this.msgBuffer.subarray(0), "The message is too large; the maximum message size is " + this.maxMessageSize / 1024 + "KB. Use a larger maxMessageSize if necessary."), 
          this.msgBufferIdx = 0, this.escape = !1;
      }, r.addByte = function(t) {
          return this.msgBufferIdx > this.msgBuffer.length - 1 && (this.msgBuffer = e.expandByteArray(this.msgBuffer)), 
          this.msgBuffer[this.msgBufferIdx++] = t, this.escape = !1, this.msgBuffer.length < this.maxMessageSize;
      }, r.handleEnd = function() {
          if (0 !== this.msgBufferIdx) {
              var t = e.sliceByteArray(this.msgBuffer, 0, this.msgBufferIdx);
              return this.onMessage && this.onMessage(t), this.msgBufferIdx = 0, t;
          }
      }, e;
  }), function(t) {
      "use strict";
      function e() {}
      var r = e.prototype, n = t.EventEmitter;
      function i(t, e) {
          for (var r = t.length; r--; ) if (t[r].listener === e) return r;
          return -1;
      }
      function s(t) {
          return function() {
              return this[t].apply(this, arguments);
          };
      }
      r.getListeners = function(t) {
          var e, r, n = this._getEvents();
          if (t instanceof RegExp) for (r in e = {}, n) n.hasOwnProperty(r) && t.test(r) && (e[r] = n[r]); else e = n[t] || (n[t] = []);
          return e;
      }, r.flattenListeners = function(t) {
          var e, r = [];
          for (e = 0; e < t.length; e += 1) r.push(t[e].listener);
          return r;
      }, r.getListenersAsObject = function(t) {
          var e, r = this.getListeners(t);
          return r instanceof Array && ((e = {})[t] = r), e || r;
      }, r.addListener = function(t, e) {
          if (!function t(e) {
              return "function" == typeof e || e instanceof RegExp || !(!e || "object" != typeof e) && t(e.listener);
          }(e)) throw new TypeError("listener must be a function");
          var r, n = this.getListenersAsObject(t), s = "object" == typeof e;
          for (r in n) n.hasOwnProperty(r) && -1 === i(n[r], e) && n[r].push(s ? e : {
              listener: e,
              once: !1
          });
          return this;
      }, r.on = s("addListener"), r.addOnceListener = function(t, e) {
          return this.addListener(t, {
              listener: e,
              once: !0
          });
      }, r.once = s("addOnceListener"), r.defineEvent = function(t) {
          return this.getListeners(t), this;
      }, r.defineEvents = function(t) {
          for (var e = 0; e < t.length; e += 1) this.defineEvent(t[e]);
          return this;
      }, r.removeListener = function(t, e) {
          var r, n, s = this.getListenersAsObject(t);
          for (n in s) s.hasOwnProperty(n) && -1 !== (r = i(s[n], e)) && s[n].splice(r, 1);
          return this;
      }, r.off = s("removeListener"), r.addListeners = function(t, e) {
          return this.manipulateListeners(!1, t, e);
      }, r.removeListeners = function(t, e) {
          return this.manipulateListeners(!0, t, e);
      }, r.manipulateListeners = function(t, e, r) {
          var n, i, s = t ? this.removeListener : this.addListener, o = t ? this.removeListeners : this.addListeners;
          if ("object" != typeof e || e instanceof RegExp) for (n = r.length; n--; ) s.call(this, e, r[n]); else for (n in e) e.hasOwnProperty(n) && (i = e[n]) && ("function" == typeof i ? s.call(this, n, i) : o.call(this, n, i));
          return this;
      }, r.removeEvent = function(t) {
          var e, r = typeof t, n = this._getEvents();
          if ("string" === r) delete n[t]; else if (t instanceof RegExp) for (e in n) n.hasOwnProperty(e) && t.test(e) && delete n[e]; else delete this._events;
          return this;
      }, r.removeAllListeners = s("removeEvent"), r.emitEvent = function(t, e) {
          var r, n, i, s, o = this.getListenersAsObject(t);
          for (s in o) if (o.hasOwnProperty(s)) for (r = o[s].slice(0), i = 0; i < r.length; i++) !0 === (n = r[i]).once && this.removeListener(t, n.listener), 
          n.listener.apply(this, e || []) === this._getOnceReturnValue() && this.removeListener(t, n.listener);
          return this;
      }, r.trigger = s("emitEvent"), r.emit = function(t) {
          var e = Array.prototype.slice.call(arguments, 1);
          return this.emitEvent(t, e);
      }, r.setOnceReturnValue = function(t) {
          return this._onceReturnValue = t, this;
      }, r._getOnceReturnValue = function() {
          return !this.hasOwnProperty("_onceReturnValue") || this._onceReturnValue;
      }, r._getEvents = function() {
          return this._events || (this._events = {});
      }, e.noConflict = function() {
          return t.EventEmitter = n, e;
      }, "function" == typeof define && define.amd ? define(function() {
          return e;
      }) : "object" == typeof module && module.exports ? module.exports = e : t.EventEmitter = e;
  }(this || {});
  
  osc = osc || require("./osc.js");
  
  var slip = slip || require("slip"), EventEmitter = EventEmitter || require("events").EventEmitter;
  
  !function() {
      "use strict";
      osc.firePacketEvents = function(t, e, r, n) {
          e.address ? t.emit("message", e, r, n) : osc.fireBundleEvents(t, e, r, n);
      }, osc.fireBundleEvents = function(t, e, r, n) {
          t.emit("bundle", e, r, n);
          for (var i = 0; i < e.packets.length; i++) {
              var s = e.packets[i];
              osc.firePacketEvents(t, s, e.timeTag, n);
          }
      }, osc.fireClosedPortSendError = function(t, e) {
          e = e || "Can't send packets on a closed osc.Port object. Please open (or reopen) this Port by calling open().", 
          t.emit("error", e);
      }, osc.Port = function(t) {
          this.options = t || {}, this.on("data", this.decodeOSC.bind(this));
      };
      var t = osc.Port.prototype = Object.create(EventEmitter.prototype);
      t.constructor = osc.Port, t.send = function(t) {
          var e = Array.prototype.slice.call(arguments), r = this.encodeOSC(t), n = osc.nativeBuffer(r);
          e[0] = n, this.sendRaw.apply(this, e);
      }, t.encodeOSC = function(t) {
          var e;
          t = t.buffer ? t.buffer : t;
          try {
              e = osc.writePacket(t, this.options);
          } catch (t) {
              this.emit("error", t);
          }
          return e;
      }, t.decodeOSC = function(t, e) {
          t = osc.byteArray(t), this.emit("raw", t, e);
          try {
              var r = osc.readPacket(t, this.options);
              this.emit("osc", r, e), osc.firePacketEvents(this, r, void 0, e);
          } catch (t) {
              this.emit("error", t);
          }
      }, osc.SLIPPort = function(t) {
          var e = this, r = this.options = t || {};
          r.useSLIP = void 0 === r.useSLIP || r.useSLIP, this.decoder = new slip.Decoder({
              onMessage: this.decodeOSC.bind(this),
              onError: function(t) {
                  e.emit("error", t);
              }
          });
          var n = r.useSLIP ? this.decodeSLIPData : this.decodeOSC;
          this.on("data", n.bind(this));
      }, (t = osc.SLIPPort.prototype = Object.create(osc.Port.prototype)).constructor = osc.SLIPPort, 
      t.encodeOSC = function(t) {
          var e;
          t = t.buffer ? t.buffer : t;
          try {
              var r = osc.writePacket(t, this.options);
              e = slip.encode(r);
          } catch (t) {
              this.emit("error", t);
          }
          return e;
      }, t.decodeSLIPData = function(t, e) {
          this.decoder.decode(t, e);
      }, osc.relay = function(t, e, r, n, i, s) {
          r = r || "message", n = n || "send", i = i || function() {}, s = s ? [ null ].concat(s) : [];
          var o = function(t) {
              s[0] = t, t = i(t), e[n].apply(e, s);
          };
          return t.on(r, o), {
              eventName: r,
              listener: o
          };
      }, osc.relayPorts = function(t, e, r) {
          var n = r.raw ? "raw" : "osc", i = r.raw ? "sendRaw" : "send";
          return osc.relay(t, e, n, i, r.transform);
      }, osc.stopRelaying = function(t, e) {
          t.removeListener(e.eventName, e.listener);
      }, osc.Relay = function(t, e, r) {
          (this.options = r || {}).raw = !1, this.port1 = t, this.port2 = e, this.listen();
      }, (t = osc.Relay.prototype = Object.create(EventEmitter.prototype)).constructor = osc.Relay, 
      t.open = function() {
          this.port1.open(), this.port2.open();
      }, t.listen = function() {
          this.port1Spec && this.port2Spec && this.close(), this.port1Spec = osc.relayPorts(this.port1, this.port2, this.options), 
          this.port2Spec = osc.relayPorts(this.port2, this.port1, this.options);
          var t = this.close.bind(this);
          this.port1.on("close", t), this.port2.on("close", t);
      }, t.close = function() {
          osc.stopRelaying(this.port1, this.port1Spec), osc.stopRelaying(this.port2, this.port2Spec), 
          this.emit("close", this.port1, this.port2);
      }, "undefined" != typeof module && module.exports && (module.exports = osc);
  }();
  
  osc = osc || require("../osc.js");
  
  !function() {
      "use strict";
      osc.WebSocket = "undefined" != typeof WebSocket ? WebSocket : require("ws"), osc.WebSocketPort = function(t) {
          osc.Port.call(this, t), this.on("open", this.listen.bind(this)), this.socket = t.socket, 
          this.socket && (1 === this.socket.readyState ? (osc.WebSocketPort.setupSocketForBinary(this.socket), 
          this.emit("open", this.socket)) : this.open());
      };
      var t = osc.WebSocketPort.prototype = Object.create(osc.Port.prototype);
      t.constructor = osc.WebSocketPort, t.open = function() {
          (!this.socket || this.socket.readyState > 1) && (this.socket = new osc.WebSocket(this.options.url)), 
          osc.WebSocketPort.setupSocketForBinary(this.socket);
          var t = this;
          this.socket.onopen = function() {
              t.emit("open", t.socket);
          };
      }, t.listen = function() {
          var t = this;
          this.socket.onmessage = function(e) {
              t.emit("data", e.data, e);
          }, this.socket.onerror = function(e) {
              t.emit("error", e);
          }, this.socket.onclose = function(e) {
              t.emit("close", e);
          }, t.emit("ready");
      }, t.sendRaw = function(t) {
          this.socket && 1 === this.socket.readyState ? this.socket.send(t) : osc.fireClosedPortSendError(this);
      }, t.close = function(t, e) {
          this.socket.close(t, e);
      }, osc.WebSocketPort.setupSocketForBinary = function(t) {
          t.binaryType = osc.isNode ? "nodebuffer" : "arraybuffer";
      };
  }();
  
  osc = osc || {};
  
  !function() {
      "use strict";
      osc.listenToTransport = function(t, e, r) {
          e.onReceive.addListener(function(e) {
              e[r] === t[r] && t.emit("data", e.data, e);
          }), e.onReceiveError.addListener(function(e) {
              t.emit("error", e);
          }), t.emit("ready");
      }, osc.emitNetworkError = function(t, e) {
          t.emit("error", "There was an error while opening the UDP socket connection. Result code: " + e);
      }, osc.SerialPort = function(t) {
          this.on("open", this.listen.bind(this)), osc.SLIPPort.call(this, t), this.connectionId = this.options.connectionId, 
          this.connectionId && this.emit("open", this.connectionId);
      };
      var t = osc.SerialPort.prototype = Object.create(osc.SLIPPort.prototype);
      t.constructor = osc.SerialPort, t.open = function() {
          var t = this, e = {
              bitrate: t.options.bitrate
          };
          chrome.serial.connect(this.options.devicePath, e, function(e) {
              t.connectionId = e.connectionId, t.emit("open", e);
          });
      }, t.listen = function() {
          osc.listenToTransport(this, chrome.serial, "connectionId");
      }, t.sendRaw = function(t) {
          if (this.connectionId) {
              var e = this;
              chrome.serial.send(this.connectionId, t.buffer, function(t, r) {
                  r && e.emit("error", r + ". Total bytes sent: " + t);
              });
          } else osc.fireClosedPortSendError(this);
      }, t.close = function() {
          if (this.connectionId) {
              var t = this;
              chrome.serial.disconnect(this.connectionId, function(e) {
                  e && t.emit("close");
              });
          }
      }, osc.UDPPort = function(t) {
          osc.Port.call(this, t);
          var e = this.options;
          e.localAddress = e.localAddress || "127.0.0.1", e.localPort = void 0 !== e.localPort ? e.localPort : 57121, 
          this.on("open", this.listen.bind(this)), this.socketId = e.socketId, this.socketId && this.emit("open", 0);
      }, (t = osc.UDPPort.prototype = Object.create(osc.Port.prototype)).constructor = osc.UDPPort, 
      t.open = function() {
          if (!this.socketId) {
              var t = this.options, e = {
                  persistent: t.persistent,
                  name: t.name,
                  bufferSize: t.bufferSize
              }, r = this;
              chrome.sockets.udp.create(e, function(t) {
                  r.socketId = t.socketId, r.bindSocket();
              });
          }
      }, t.bindSocket = function() {
          var t = this, e = this.options;
          void 0 !== e.broadcast && chrome.sockets.udp.setBroadcast(this.socketId, e.broadcast, function(e) {
              e < 0 && t.emit("error", new Error("An error occurred while setting the socket's broadcast flag. Result code: " + e));
          }), void 0 !== e.multicastTTL && chrome.sockets.udp.setMulticastTimeToLive(this.socketId, e.multicastTTL, function(e) {
              e < 0 && t.emit("error", new Error("An error occurred while setting the socket's multicast time to live flag. Result code: " + e));
          }), chrome.sockets.udp.bind(this.socketId, e.localAddress, e.localPort, function(e) {
              e > 0 ? osc.emitNetworkError(t, e) : t.emit("open", e);
          });
      }, t.listen = function() {
          var t = this.options;
          osc.listenToTransport(this, chrome.sockets.udp, "socketId"), t.multicastMembership && ("string" == typeof t.multicastMembership && (t.multicastMembership = [ t.multicastMembership ]), 
          t.multicastMembership.forEach(function(t) {
              chrome.sockets.udp.joinGroup(this.socketId, t, function(e) {
                  e < 0 && this.emit("error", new Error("There was an error while trying to join the multicast group " + t + ". Result code: " + e));
              });
          }));
      }, t.sendRaw = function(t, e, r) {
          if (this.socketId) {
              var n = this.options, i = this;
              e = e || n.remoteAddress, r = void 0 !== r ? r : n.remotePort, chrome.sockets.udp.send(this.socketId, t.buffer, e, r, function(t) {
                  t || i.emit("error", "There was an unknown error while trying to send a UDP message. Have you declared the appropriate udp send permissions in your application's manifest file?"), 
                  t.resultCode > 0 && osc.emitNetworkError(i, t.resultCode);
              });
          } else osc.fireClosedPortSendError(this);
      }, t.close = function() {
          if (this.socketId) {
              var t = this;
              chrome.sockets.udp.close(this.socketId, function() {
                  t.emit("close");
              });
          }
      };
  }();