/***
P R O C E S S I N G . J S - 1.4.1
a port of the Processing visualization language
Processing.js is licensed under the MIT License, see LICENSE.
For a list of copyright holders, please refer to AUTHORS.
http://processingjs.org
***/
(function(D, d, q, t) {
var G = function() {};
var s = function() {
if ("console" in D) {
return function(N) {
D.console.log("Processing.js: " + N)
}
}
return G
}();
var w = function(N) {
var O = new XMLHttpRequest;
O.open("GET", N, false);
if (O.overrideMimeType) {
O.overrideMimeType("text/plain")
}
O.setRequestHeader("If-Modified-Since", "Fri, 01 Jan 1960 00:00:00 GMT");
O.send(null);
if (O.status !== 200 && O.status !== 0) {
throw "XMLHttpRequest failed, status code " + O.status
}
return O.responseText
};
var n = "document" in this && !("fake" in this.document);
d.head = d.head || d.getElementsByTagName("head")[0];
function C(N, O) {
if (N in D) {
return D[N]
}
if (typeof D[O] === "function") {
return D[O]
}
return function(Q) {
if (Q instanceof Array) {
return Q
}
if (typeof Q === "number") {
var P = [];
P.length = Q;
return P
}
}
}
if (d.documentMode >= 9 && !d.doctype) {
throw "The doctype directive is missing. The recommended doctype in Internet Explorer is the HTML5 doctype: <!DOCTYPE html>"
}
var e = C("Float32Array", "WebGLFloatArray"),
K = C("Int32Array", "WebGLIntArray"),
y = C("Uint16Array", "WebGLUnsignedShortArray"),
b = C("Uint8Array", "WebGLUnsignedByteArray");
var B = {
X: 0,
Y: 1,
Z: 2,
R: 3,
G: 4,
B: 5,
A: 6,
U: 7,
V: 8,
NX: 9,
NY: 10,
NZ: 11,
EDGE: 12,
SR: 13,
SG: 14,
SB: 15,
SA: 16,
SW: 17,
TX: 18,
TY: 19,
TZ: 20,
VX: 21,
VY: 22,
VZ: 23,
VW: 24,
AR: 25,
AG: 26,
AB: 27,
DR: 3,
DG: 4,
DB: 5,
DA: 6,
SPR: 28,
SPG: 29,
SPB: 30,
SHINE: 31,
ER: 32,
EG: 33,
EB: 34,
BEEN_LIT: 35,
VERTEX_FIELD_COUNT: 36,
P2D: 1,
JAVA2D: 1,
WEBGL: 2,
P3D: 2,
OPENGL: 2,
PDF: 0,
DXF: 0,
OTHER: 0,
WINDOWS: 1,
MAXOSX: 2,
LINUX: 3,
EPSILON: 0.0001,
MAX_FLOAT: 3.4028235e+38,
MIN_FLOAT: -3.4028235e+38,
MAX_INT: 2147483647,
MIN_INT: -2147483648,
PI: q.PI,
TWO_PI: 2 * q.PI,
HALF_PI: q.PI / 2,
THIRD_PI: q.PI / 3,
QUARTER_PI: q.PI / 4,
DEG_TO_RAD: q.PI / 180,
RAD_TO_DEG: 180 / q.PI,
WHITESPACE: " \t\n\r\u000c\u00a0",
RGB: 1,
ARGB: 2,
HSB: 3,
ALPHA: 4,
CMYK: 5,
TIFF: 0,
TARGA: 1,
JPEG: 2,
GIF: 3,
BLUR: 11,
GRAY: 12,
INVERT: 13,
OPAQUE: 14,
POSTERIZE: 15,
THRESHOLD: 16,
ERODE: 17,
DILATE: 18,
REPLACE: 0,
BLEND: 1 << 0,
ADD: 1 << 1,
SUBTRACT: 1 << 2,
LIGHTEST: 1 << 3,
DARKEST: 1 << 4,
DIFFERENCE: 1 << 5,
EXCLUSION: 1 << 6,
MULTIPLY: 1 << 7,
SCREEN: 1 << 8,
OVERLAY: 1 << 9,
HARD_LIGHT: 1 << 10,
SOFT_LIGHT: 1 << 11,
DODGE: 1 << 12,
BURN: 1 << 13,
ALPHA_MASK: 4278190080,
RED_MASK: 16711680,
GREEN_MASK: 65280,
BLUE_MASK: 255,
CUSTOM: 0,
ORTHOGRAPHIC: 2,
PERSPECTIVE: 3,
POINT: 2,
POINTS: 2,
LINE: 4,
LINES: 4,
TRIANGLE: 8,
TRIANGLES: 9,
TRIANGLE_STRIP: 10,
TRIANGLE_FAN: 11,
QUAD: 16,
QUADS: 16,
QUAD_STRIP: 17,
POLYGON: 20,
PATH: 21,
RECT: 30,
ELLIPSE: 31,
ARC: 32,
SPHERE: 40,
BOX: 41,
GROUP: 0,
PRIMITIVE: 1,
GEOMETRY: 3,
VERTEX: 0,
BEZIER_VERTEX: 1,
CURVE_VERTEX: 2,
BREAK: 3,
CLOSESHAPE: 4,
OPEN: 1,
CLOSE: 2,
CORNER: 0,
CORNERS: 1,
RADIUS: 2,
CENTER_RADIUS: 2,
CENTER: 3,
DIAMETER: 3,
CENTER_DIAMETER: 3,
BASELINE: 0,
TOP: 101,
BOTTOM: 102,
NORMAL: 1,
NORMALIZED: 1,
IMAGE: 2,
MODEL: 4,
SHAPE: 5,
SQUARE: "butt",
ROUND: "round",
PROJECT: "square",
MITER: "miter",
BEVEL: "bevel",
AMBIENT: 0,
DIRECTIONAL: 1,
SPOT: 3,
BACKSPACE: 8,
TAB: 9,
ENTER: 10,
RETURN: 13,
ESC: 27,
DELETE: 127,
CODED: 65535,
SHIFT: 16,
CONTROL: 17,
ALT: 18,
CAPSLK: 20,
PGUP: 33,
PGDN: 34,
END: 35,
HOME: 36,
LEFT: 37,
UP: 38,
RIGHT: 39,
DOWN: 40,
F1: 112,
F2: 113,
F3: 114,
F4: 115,
F5: 116,
F6: 117,
F7: 118,
F8: 119,
F9: 120,
F10: 121,
F11: 122,
F12: 123,
NUMLK: 144,
META: 157,
INSERT: 155,
ARROW: "default",
CROSS: "crosshair",
HAND: "pointer",
MOVE: "move",
TEXT: "text",
WAIT: "wait",
NOCURSOR: "url('data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='), auto",
DISABLE_OPENGL_2X_SMOOTH: 1,
ENABLE_OPENGL_2X_SMOOTH: -1,
ENABLE_OPENGL_4X_SMOOTH: 2,
ENABLE_NATIVE_FONTS: 3,
DISABLE_DEPTH_TEST: 4,
ENABLE_DEPTH_TEST: -4,
ENABLE_DEPTH_SORT: 5,
DISABLE_DEPTH_SORT: -5,
DISABLE_OPENGL_ERROR_REPORT: 6,
ENABLE_OPENGL_ERROR_REPORT: -6,
ENABLE_ACCURATE_TEXTURES: 7,
DISABLE_ACCURATE_TEXTURES: -7,
HINT_COUNT: 10,
SINCOS_LENGTH: 720,
PRECISIONB: 15,
PRECISIONF: 1 << 15,
PREC_MAXVAL: (1 << 15) - 1,
PREC_ALPHA_SHIFT: 24 - 15,
PREC_RED_SHIFT: 16 - 15,
NORMAL_MODE_AUTO: 0,
NORMAL_MODE_SHAPE: 1,
NORMAL_MODE_VERTEX: 2,
MAX_LIGHTS: 8
};
function h(P) {
if (typeof P === "string") {
var O = 0;
for (var N = 0; N < P.length; ++N) {
O = O * 31 + P.charCodeAt(N) & 4294967295
}
return O
}
if (typeof P !== "object") {
return P & 4294967295
}
if (P.hashCode instanceof Function) {
return P.hashCode()
}
if (P.$id === t) {
P.$id = q.floor(q.random() * 65536) - 32768 << 16 | q.floor(q.random() * 65536)
}
return P.$id
}
function r(O, N) {
if (O === null || N === null) {
return O === null && N === null
}
if (typeof O === "string") {
return O === N
}
if (typeof O !== "object") {
return O === N
}
if (O.equals instanceof Function) {
return O.equals(N)
}
return O === N
}
var o = function(O) {
if (O.iterator instanceof Function) {
return O.iterator()
}
if (O instanceof Array) {
var N = -1;
this.hasNext = function() {
return ++N < O.length
};
this.next = function() {
return O[N]
}
} else {
throw "Unable to iterate: " + O
}
};
var f = function() {
function O(Q) {
var P = 0;
this.hasNext = function() {
return P < Q.length
};
this.next = function() {
return Q[P++]
};
this.remove = function() {
Q.splice(P, 1)
}
}
function N(P) {
var Q;
if (P instanceof N) {
Q = P.toArray()
} else {
Q = [];
if (typeof P === "number") {
Q.length = P > 0 ? P : 0
}
}
this.get = function(R) {
return Q[R]
};
this.contains = function(R) {
return this.indexOf(R) > -1
};
this.indexOf = function(T) {
for (var S = 0, R = Q.length; S < R; ++S) {
if (r(T, Q[S])) {
return S
}
}
return -1
};
this.lastIndexOf = function(S) {
for (var R = Q.length - 1; R >= 0; --R) {
if (r(S, Q[R])) {
return R
}
}
return -1
};
this.add = function() {
if (arguments.length === 1) {
Q.push(arguments[0])
} else {
if (arguments.length === 2) {
var R = arguments[0];
if (typeof R === "number") {
if (R >= 0 && R <= Q.length) {
Q.splice(R, 0, arguments[1])
} else {
throw R + " is not a valid index"
}
} else {
throw typeof R + " is not a number"
}
} else {
throw "Please use the proper number of parameters."
}
}
};
this.addAll = function(S, R) {
var T;
if (typeof S === "number") {
if (S < 0 || S > Q.length) {
throw "Index out of bounds for addAll: " + S + " greater or equal than " + Q.length
}
T = new o(R);
while (T.hasNext()) {
Q.splice(S++, 0, T.next())
}
} else {
T = new o(S);
while (T.hasNext()) {
Q.push(T.next())
}
}
};
this.set = function() {
if (arguments.length === 2) {
var R = arguments[0];
if (typeof R === "number") {
if (R >= 0 && R < Q.length) {
Q.splice(R, 1, arguments[1])
} else {
throw R + " is not a valid index."
}
} else {
throw typeof R + " is not a number"
}
} else {
throw "Please use the proper number of parameters."
}
};
this.size = function() {
return Q.length
};
this.clear = function() {
Q.length = 0
};
this.remove = function(R) {
if (typeof R === "number") {
return Q.splice(R, 1)[0]
}
R = this.indexOf(R);
if (R > -1) {
Q.splice(R, 1);
return true
}
return false
};
this.removeAll = function(V) {
var S, R, U, T = new N;
T.addAll(this);
this.clear();
for (S = 0, R = 0; S < T.size(); S++) {
U = T.get(S);
if (!V.contains(U)) {
this.add(R++, U)
}
}
if (this.size() < T.size()) {
return true
}
return false
};
this.isEmpty = function() {
return !Q.length
};
this.clone = function() {
return new N(this)
};
this.toArray = function() {
return Q.slice(0)
};
this.iterator = function() {
return new O(Q)
}
}
return N
}();
var x = function() {
function N() {
if (arguments.length === 1 && arguments[0] instanceof N) {
return arguments[0].clone()
}
var W = arguments.length > 0 ? arguments[0] : 16;
var X = arguments.length > 1 ? arguments[1] : 0.75;
var Q = [];
Q.length = W;
var S = 0;
var O = this;
function U(Z) {
var Y = h(Z) % Q.length;
return Y < 0 ? Q.length + Y : Y
}
function R() {
if (S <= X * Q.length) {
return
}
var ab = [];
for (var aa = 0; aa < Q.length; ++aa) {
if (Q[aa] !== t) {
ab = ab.concat(Q[aa])
}
}
var ac = Q.length * 2;
Q = [];
Q.length = ac;
for (var Z = 0; Z < ab.length; ++Z) {
var Y = U(ab[Z].key);
var ad = Q[Y];
if (ad === t) {
Q[Y] = ad = []
}
ad.push(ab[Z])
}
}
function P(ad, ae) {
var Y = 0;
var ac = -1;
var ab = false;
var aa;
function Z() {
while (!ab) {
++ac;
if (Y >= Q.length) {
ab = true
} else {
if (Q[Y] === t || ac >= Q[Y].length) {
ac = -1;
++Y
} else {
return
}
}
}
}
this.hasNext = function() {
return !ab
};
this.next = function() {
aa = ad(Q[Y][ac]);
Z();
return aa
};
this.remove = function() {
if (aa !== t) {
ae(aa);
--ac;
Z()
}
};
Z()
}
function V(Y, Z, aa) {
this.clear = function() {
O.clear()
};
this.contains = function(ab) {
return Z(ab)
};
this.containsAll = function(ac) {
var ab = ac.iterator();
while (ab.hasNext()) {
if (!this.contains(ab.next())) {
return false
}
}
return true
};
this.isEmpty = function() {
return O.isEmpty()
};
this.iterator = function() {
return new P(Y, aa)
};
this.remove = function(ab) {
if (this.contains(ab)) {
aa(ab);
return true
}
return false
};
this.removeAll = function(ae) {
var ab = ae.iterator();
var ad = false;
while (ab.hasNext()) {
var ac = ab.next();
if (this.contains(ac)) {
aa(ac);
ad = true
}
}
return true
};
this.retainAll = function(af) {
var ad = this.iterator();
var ac = [];
while (ad.hasNext()) {
var ae = ad.next();
if (!af.contains(ae)) {
ac.push(ae)
}
}
for (var ab = 0; ab < ac.length; ++ab) {
aa(ac[ab])
}
return ac.length > 0
};
this.size = function() {
return O.size()
};
this.toArray = function() {
var ab = [];
var ac = this.iterator();
while (ac.hasNext()) {
ab.push(ac.next())
}
return ab
}
}
function T(Y) {
this._isIn = function(Z) {
return Z === O && Y.removed === t
};
this.equals = function(Z) {
return r(Y.key, Z.getKey())
};
this.getKey = function() {
return Y.key
};
this.getValue = function() {
return Y.value
};
this.hashCode = function(Z) {
return h(Y.key)
};
this.setValue = function(aa) {
var Z = Y.value;
Y.value = aa;
return Z
}
}
this.clear = function() {
S = 0;
Q = [];
Q.length = W
};
this.clone = function() {
var Y = new N;
Y.putAll(this);
return Y
};
this.containsKey = function(aa) {
var Y = U(aa);
var ab = Q[Y];
if (ab === t) {
return false
}
for (var Z = 0; Z < ab.length; ++Z) {
if (r(ab[Z].key, aa)) {
return true
}
}
return false
};
this.containsValue = function(aa) {
for (var Z = 0; Z < Q.length; ++Z) {
var ab = Q[Z];
if (ab === t) {
continue
}
for (var Y = 0; Y < ab.length; ++Y) {
if (r(ab[Y].value, aa)) {
return true
}
}
}
return false
};
this.entrySet = function() {
return new V(function(Y) {
return new T(Y)
}, function(Y) {
return Y instanceof T && Y._isIn(O)
}, function(Y) {
return O.remove(Y.getKey())
})
};
this.get = function(aa) {
var Y = U(aa);
var ab = Q[Y];
if (ab === t) {
return null
}
for (var Z = 0; Z < ab.length; ++Z) {
if (r(ab[Z].key, aa)) {
return ab[Z].value
}
}
return null
};
this.isEmpty = function() {
return S === 0
};
this.keySet = function() {
return new V(function(Y) {
return Y.key
}, function(Y) {
return O.containsKey(Y)
}, function(Y) {
return O.remove(Y)
})
};
this.values = function() {
return new V(function(Y) {
return Y.value
}, function(Y) {
return O.containsValue(Y)
}, function(Y) {
return O.removeByValue(Y)
})
};
this.put = function(aa, ac) {
var Y = U(aa);
var ad = Q[Y];
if (ad === t) {
++S;
Q[Y] = [{
key: aa,
value: ac
}];
R();
return null
}
for (var Z = 0; Z < ad.length; ++Z) {
if (r(ad[Z].key, aa)) {
var ab = ad[Z].value;
ad[Z].value = ac;
return ab
}
}++S;
ad.push({
key: aa,
value: ac
});
R();
return null
};
this.putAll = function(Y) {
var Z = Y.entrySet().iterator();
while (Z.hasNext()) {
var aa = Z.next();
this.put(aa.getKey(), aa.getValue())
}
};
this.remove = function(aa) {
var Y = U(aa);
var ac = Q[Y];
if (ac === t) {
return null
}
for (var Z = 0; Z < ac.length; ++Z) {
if (r(ac[Z].key, aa)) {
--S;
var ab = ac[Z].value;
ac[Z].removed = true;
if (ac.length > 1) {
ac.splice(Z, 1)
} else {
Q[Y] = t
}
return ab
}
}
return null
};
this.removeByValue = function(aa) {
var ac, Z, Y, ab;
for (ac in Q) {
if (Q.hasOwnProperty(ac)) {
for (Z = 0, Y = Q[ac].length; Z < Y; Z++) {
ab = Q[ac][Z];
if (ab.value === aa) {
Q[ac].splice(Z, 1);
return true
}
}
}
}
return false
};
this.size = function() {
return S
}
}
return N
}();
var A = function() {
function N(Q, S, R) {
this.x = Q || 0;
this.y = S || 0;
this.z = R || 0
}
N.dist = function(R, Q) {
return R.dist(Q)
};
N.dot = function(R, Q) {
return R.dot(Q)
};
N.cross = function(R, Q) {
return R.cross(Q)
};
N.angleBetween = function(R, Q) {
return q.acos(R.dot(Q) / (R.mag() * Q.mag()))
};
N.prototype = {
set: function(Q, S, R) {
if (arguments.length === 1) {
this.set(Q.x || Q[0] || 0, Q.y || Q[1] || 0, Q.z || Q[2] || 0)
} else {
this.x = Q;
this.y = S;
this.z = R
}
},
get: function() {
return new N(this.x, this.y, this.z)
},
mag: function() {
var Q = this.x,
S = this.y,
R = this.z;
return q.sqrt(Q * Q + S * S + R * R)
},
add: function(Q, S, R) {
if (arguments.length === 1) {
this.x += Q.x;
this.y += Q.y;
this.z += Q.z
} else {
this.x += Q;
this.y += S;
this.z += R
}
},
sub: function(Q, S, R) {
if (arguments.length === 1) {
this.x -= Q.x;
this.y -= Q.y;
this.z -= Q.z
} else {
this.x -= Q;
this.y -= S;
this.z -= R
}
},
mult: function(Q) {
if (typeof Q === "number") {
this.x *= Q;
this.y *= Q;
this.z *= Q
} else {
this.x *= Q.x;
this.y *= Q.y;
this.z *= Q.z
}
},
div: function(Q) {
if (typeof Q === "number") {
this.x /= Q;
this.y /= Q;
this.z /= Q
} else {
this.x /= Q.x;
this.y /= Q.y;
this.z /= Q.z
}
},
dist: function(T) {
var S = this.x - T.x,
R = this.y - T.y,
Q = this.z - T.z;
return q.sqrt(S * S + R * R + Q * Q)
},
dot: function(Q, S, R) {
if (arguments.length === 1) {
return this.x * Q.x + this.y * Q.y + this.z * Q.z
}
return this.x * Q + this.y * S + this.z * R
},
cross: function(R) {
var Q = this.x,
T = this.y,
S = this.z;
return new N(T * R.z - R.y * S, S * R.x - R.z * Q, Q * R.y - R.x * T)
},
normalize: function() {
var Q = this.mag();
if (Q > 0) {
this.div(Q)
}
},
limit: function(Q) {
if (this.mag() > Q) {
this.normalize();
this.mult(Q)
}
},
heading2D: function() {
return -q.atan2(-this.y, this.x)
},
toString: function() {
return "[" + this.x + ", " + this.y + ", " + this.z + "]"
},
array: function() {
return [this.x, this.y, this.z]
}
};
function O(Q) {
return function(T, S) {
var R = T.get();
R[Q](S);
return R
}
}
for (var P in N.prototype) {
if (N.prototype.hasOwnProperty(P) && !N.hasOwnProperty(P)) {
N[P] = O(P)
}
}
return N
}();
function M() {}
M.prototype = B;
var g = new M;
g.ArrayList = f;
g.HashMap = x;
g.PVector = A;
g.ObjectIterator = o;
g.PConstants = B;
g.defineProperty = function(O, N, P) {
if ("defineProperty" in Object) {
Object.defineProperty(O, N, P)
} else {
if (P.hasOwnProperty("get")) {
O.__defineGetter__(N, P.get)
}
if (P.hasOwnProperty("set")) {
O.__defineSetter__(N, P.set)
}
}
};
function m(O, N, R) {
if (!O.hasOwnProperty(N) || typeof O[N] !== "function") {
O[N] = R;
return
}
var Q = O[N];
if ("$overloads" in Q) {
Q.$defaultOverload = R;
return
}
if (!("$overloads" in R) && Q.length === R.length) {
return
}
var T, P;
if ("$overloads" in R) {
T = R.$overloads.slice(0);
T[Q.length] = Q;
P = R.$defaultOverload
} else {
T = [];
T[R.length] = R;
T[Q.length] = Q;
P = Q
}
var S = function() {
var U = S.$overloads[arguments.length] || ("$methodArgsIndex" in S && arguments.length > S.$methodArgsIndex ? S.$overloads[S.$methodArgsIndex] : null) || S.$defaultOverload;
return U.apply(this, arguments)
};
S.$overloads = T;
if ("$methodArgsIndex" in R) {
S.$methodArgsIndex = R.$methodArgsIndex
}
S.$defaultOverload = P;
S.name = N;
O[N] = S
}
function i(Q, P) {
function R(S) {
g.defineProperty(Q, S, {
get: function() {
return P[S]
},
set: function(T) {
P[S] = T
},
enumerable: true
})
}
var O = [];
for (var N in P) {
if (typeof P[N] === "function") {
m(Q, N, P[N])
} else {
if (N.charAt(0) !== "$" && !(N in Q)) {
O.push(N)
}
}
}
while (O.length > 0) {
R(O.shift())
}
Q.$super = P
}
g.extendClassChain = function(O) {
var P = [O];
for (var N = O.$upcast; N; N = N.$upcast) {
i(N, O);
P.push(N);
O = N
}
while (P.length > 0) {
P.pop().$self = O
}
};
g.extendStaticMembers = function(N, O) {
i(N, O)
};
g.extendInterfaceMembers = function(N, O) {
i(N, O)
};
g.addMethod = function(Q, P, S, R) {
var N = Q[P];
if (N || R) {
var O = S.length;
if ("$overloads" in N) {
N.$overloads[O] = S
} else {
var T = function() {
var V = T.$overloads[arguments.length] || ("$methodArgsIndex" in T && arguments.length > T.$methodArgsIndex ? T.$overloads[T.$methodArgsIndex] : null) || T.$defaultOverload;
return V.apply(this, arguments)
};
var U = [];
if (N) {
U[N.length] = N
}
U[O] = S;
T.$overloads = U;
T.$defaultOverload = N || S;
if (R) {
T.$methodArgsIndex = O
}
T.name = P;
Q[P] = T
}
} else {
Q[P] = S
}
};
function l(N) {
if (typeof N !== "string") {
return false
}
return ["byte", "int", "char", "color", "float", "long", "double"].indexOf(N) !== -1
}
g.createJavaArray = function(S, T) {
var O = null,
P = null;
if (typeof S === "string") {
if (S === "boolean") {
P = false
} else {
if (l(S)) {
P = 0
}
}
}
if (typeof T[0] === "number") {
var N = 0 | T[0];
if (T.length <= 1) {
O = [];
O.length = N;
for (var R = 0; R < N; ++R) {
O[R] = P
}
} else {
O = [];
var U = T.slice(1);
for (var Q = 0; Q < N; ++Q) {
O.push(g.createJavaArray(S, U))
}
}
}
return O
};
var E = {
aliceblue: "#f0f8ff",
antiquewhite: "#faebd7",
aqua: "#00ffff",
aquamarine: "#7fffd4",
azure: "#f0ffff",
beige: "#f5f5dc",
bisque: "#ffe4c4",
black: "#000000",
blanchedalmond: "#ffebcd",
blue: "#0000ff",
blueviolet: "#8a2be2",
brown: "#a52a2a",
burlywood: "#deb887",
cadetblue: "#5f9ea0",
chartreuse: "#7fff00",
chocolate: "#d2691e",
coral: "#ff7f50",
cornflowerblue: "#6495ed",
cornsilk: "#fff8dc",
crimson: "#dc143c",
cyan: "#00ffff",
darkblue: "#00008b",
darkcyan: "#008b8b",
darkgoldenrod: "#b8860b",
darkgray: "#a9a9a9",
darkgreen: "#006400",
darkkhaki: "#bdb76b",
darkmagenta: "#8b008b",
darkolivegreen: "#556b2f",
darkorange: "#ff8c00",
darkorchid: "#9932cc",
darkred: "#8b0000",
darksalmon: "#e9967a",
darkseagreen: "#8fbc8f",
darkslateblue: "#483d8b",
darkslategray: "#2f4f4f",
darkturquoise: "#00ced1",
darkviolet: "#9400d3",
deeppink: "#ff1493",
deepskyblue: "#00bfff",
dimgray: "#696969",
dodgerblue: "#1e90ff",
firebrick: "#b22222",
floralwhite: "#fffaf0",
forestgreen: "#228b22",
fuchsia: "#ff00ff",
gainsboro: "#dcdcdc",
ghostwhite: "#f8f8ff",
gold: "#ffd700",
goldenrod: "#daa520",
gray: "#808080",
green: "#008000",
greenyellow: "#adff2f",
honeydew: "#f0fff0",
hotpink: "#ff69b4",
indianred: "#cd5c5c",
indigo: "#4b0082",
ivory: "#fffff0",
khaki: "#f0e68c",
lavender: "#e6e6fa",
lavenderblush: "#fff0f5",
lawngreen: "#7cfc00",
lemonchiffon: "#fffacd",
lightblue: "#add8e6",
lightcoral: "#f08080",
lightcyan: "#e0ffff",
lightgoldenrodyellow: "#fafad2",
lightgrey: "#d3d3d3",
lightgreen: "#90ee90",
lightpink: "#ffb6c1",
lightsalmon: "#ffa07a",
lightseagreen: "#20b2aa",
lightskyblue: "#87cefa",
lightslategray: "#778899",
lightsteelblue: "#b0c4de",
lightyellow: "#ffffe0",
lime: "#00ff00",
limegreen: "#32cd32",
linen: "#faf0e6",
magenta: "#ff00ff",
maroon: "#800000",
mediumaquamarine: "#66cdaa",
mediumblue: "#0000cd",
mediumorchid: "#ba55d3",
mediumpurple: "#9370d8",
mediumseagreen: "#3cb371",
mediumslateblue: "#7b68ee",
mediumspringgreen: "#00fa9a",
mediumturquoise: "#48d1cc",
mediumvioletred: "#c71585",
midnightblue: "#191970",
mintcream: "#f5fffa",
mistyrose: "#ffe4e1",
moccasin: "#ffe4b5",
navajowhite: "#ffdead",
navy: "#000080",
oldlace: "#fdf5e6",
olive: "#808000",
olivedrab: "#6b8e23",
orange: "#ffa500",
orangered: "#ff4500",
orchid: "#da70d6",
palegoldenrod: "#eee8aa",
palegreen: "#98fb98",
paleturquoise: "#afeeee",
palevioletred: "#d87093",
papayawhip: "#ffefd5",
peachpuff: "#ffdab9",
peru: "#cd853f",
pink: "#ffc0cb",
plum: "#dda0dd",
powderblue: "#b0e0e6",
purple: "#800080",
red: "#ff0000",
rosybrown: "#bc8f8f",
royalblue: "#4169e1",
saddlebrown: "#8b4513",
salmon: "#fa8072",
sandybrown: "#f4a460",
seagreen: "#2e8b57",
seashell: "#fff5ee",
sienna: "#a0522d",
silver: "#c0c0c0",
skyblue: "#87ceeb",
slateblue: "#6a5acd",
slategray: "#708090",
snow: "#fffafa",
springgreen: "#00ff7f",
steelblue: "#4682b4",
tan: "#d2b48c",
teal: "#008080",
thistle: "#d8bfd8",
tomato: "#ff6347",
turquoise: "#40e0d0",
violet: "#ee82ee",
wheat: "#f5deb3",
white: "#ffffff",
whitesmoke: "#f5f5f5",
yellow: "#ffff00",
yellowgreen: "#9acd32"
};
(function(O) {
var R = ("open() createOutput() createInput() BufferedReader selectFolder() dataPath() createWriter() selectOutput() beginRecord() saveStream() endRecord() selectInput() saveBytes() createReader() beginRaw() endRaw() PrintWriter delay()").split(" "),
Q = R.length,
N, S;
function P(T) {
return function() {
throw "Processing.js does not support " + T + "."
}
}
while (Q--) {
N = R[Q];
S = N.replace("()", "");
O[S] = P(N)
}
})(g);
g.defineProperty(g, "screenWidth", {
get: function() {
return D.innerWidth
}
});
g.defineProperty(g, "screenHeight", {
get: function() {
return D.innerHeight
}
});
g.defineProperty(g, "online", {
get: function() {
return true
}
});
var k = [];
var J = {};
var L = function(N) {
k.splice(J[N], 1);
delete J[N]
};
var a = function(N) {
if (N.externals.canvas.id === t || !N.externals.canvas.id.length) {
N.externals.canvas.id = "__processing" + k.length
}
J[N.externals.canvas.id] = k.length;
k.push(N)
};
function p(X) {
var Q = 250,
ae = X.size / Q,
N = d.createElement("canvas");
N.width = 2 * Q;
N.height = 2 * Q;
N.style.opacity = 0;
var W = X.getCSSDefinition(Q + "px", "normal"),
Y = N.getContext("2d");
Y.font = W;
var ac = "dbflkhyjqpg";
N.width = Y.measureText(ac).width;
Y.font = W;
var T = d.createElement("div");
T.style.position = "absolute";
T.style.opacity = 0;
T.style.fontFamily = '"' + X.name + '"';
T.style.fontSize = Q + "px";
T.innerHTML = ac + "<br/>" + ac;
d.body.appendChild(T);
var U = N.width,
ab = N.height,
V = ab / 2;
Y.fillStyle = "white";
Y.fillRect(0, 0, U, ab);
Y.fillStyle = "black";
Y.fillText(ac, 0, V);
var P = Y.getImageData(0, 0, U, ab).data;
var Z = 0,
S = U * 4,
aa = P.length;
while (++Z < aa && P[Z] === 255) {
G()
}
var R = q.round(Z / S);
Z = aa - 1;
while (--Z > 0 && P[Z] === 255) {
G()
}
var ad = q.round(Z / S);
X.ascent = ae * (V - R);
X.descent = ae * (ad - V);
if (d.defaultView.getComputedStyle) {
var O = d.defaultView.getComputedStyle(T, null).getPropertyValue("height");
O = ae * O.replace("px", "");
if (O >= X.size * 2) {
X.leading = q.round(O / 2)
}
}
d.body.removeChild(T);
if (X.caching) {
return Y
}
}
function H(N, O) {
if (N === t) {
N = ""
}
this.name = N;
if (O === t) {
O = 0
}
this.size = O;
this.glyph = false;
this.ascent = 0;
this.descent = 0;
this.leading = 1.2 * O;
var R = N.indexOf(" Italic Bold");
if (R !== -1) {
N = N.substring(0, R)
}
this.style = "normal";
var Q = N.indexOf(" Italic");
if (Q !== -1) {
N = N.substring(0, Q);
this.style = "italic"
}
this.weight = "normal";
var P = N.indexOf(" Bold");
if (P !== -1) {
N = N.substring(0, P);
this.weight = "bold"
}
this.family = "sans-serif";
if (N !== t) {
switch (N) {
case "sans-serif":
case "serif":
case "monospace":
case "fantasy":
case "cursive":
this.family = N;
break;
default:
this.family = '"' + N + '", sans-serif';
break
}
}
this.context2d = p(this);
this.css = this.getCSSDefinition();
if (this.context2d) {
this.context2d.font = this.css
}
}
H.prototype.caching = true;
H.prototype.getCSSDefinition = function(P, N) {
if (P === t) {
P = this.size + "px"
}
if (N === t) {
N = this.leading + "px"
}
var O = [this.style, "normal", this.weight, P + "/" + N, this.family];
return O.join(" ")
};
H.prototype.measureTextWidth = function(N) {
return this.context2d.measureText(N).width
};
H.prototype.measureTextWidthFallback = function(P) {
var O = d.createElement("canvas"),
N = O.getContext("2d");
N.font = this.css;
return N.measureText(P).width
};
H.PFontCache = {
length: 0
};
H.get = function(Q, R) {
R = (R * 10 + 0.5 | 0) / 10;
var O = H.PFontCache,
N = Q + "/" + R;
if (!O[N]) {
O[N] = new H(Q, R);
O.length++;
if (O.length === 50) {
H.prototype.measureTextWidth = H.prototype.measureTextWidthFallback;
H.prototype.caching = false;
var P;
for (P in O) {
if (P !== "length") {
O[P].context2d = null
}
}
return new H(Q, R)
}
if (O.length === 400) {
H.PFontCache = {};
H.get = H.getFallback;
return new H(Q, R)
}
}
return O[N]
};
H.getFallback = function(N, O) {
return new H(N, O)
};
H.list = function() {
return ["sans-serif", "serif", "monospace", "fantasy", "cursive"]
};
H.preloading = {
template: {},
initialized: false,
initialize: function() {
var P = function() {
var R = "#E3KAI2wAgT1MvMg7Eo3VmNtYX7ABi3CxnbHlm7Abw3kaGVhZ7ACs3OGhoZWE7A53CRobXR47AY3AGbG9jYQ7G03Bm1heH7ABC3CBuYW1l7Ae3AgcG9zd7AI3AE#B3AQ2kgTY18PPPUACwAg3ALSRoo3#yld0xg32QAB77#E777773B#E3C#I#Q77773E#Q7777777772CMAIw7AB77732B#M#Q3wAB#g3B#E#E2BB//82BB////w#B7#gAEg3E77x2B32B#E#Q#MTcBAQ32gAe#M#QQJ#E32M#QQJ#I#g32Q77#";
var Q = function(S) {
return "AAAAAAAA".substr(~~S ? 7 - S : 6)
};
return R.replace(/[#237]/g, Q)
};
var N = d.createElement("style");
N.setAttribute("type", "text/css");
N.innerHTML = '@font-face {\n font-family: "PjsEmptyFont";\n src: url(\'data:application/x-font-ttf;base64,' + P() + "')\n format('truetype');\n}";
d.head.appendChild(N);
var O = d.createElement("span");
O.style.cssText = 'position: absolute; top: 0; left: 0; opacity: 0; font-family: "PjsEmptyFont", fantasy;';
O.innerHTML = "AAAAAAAA";
d.body.appendChild(O);
this.template = O;
this.initialized = true
},
getElementWidth: function(N) {
return d.defaultView.getComputedStyle(N, "").getPropertyValue("width")
},
timeAttempted: 0,
pending: function(R) {
if (!this.initialized) {
this.initialize()
}
var P, N, Q = this.getElementWidth(this.template);
for (var O = 0; O < this.fontList.length; O++) {
P = this.fontList[O];
N = this.getElementWidth(P);
if (this.timeAttempted < 4000 && N === Q) {
this.timeAttempted += R;
return true
} else {
d.body.removeChild(P);
this.fontList.splice(O--, 1);
this.timeAttempted = 0
}
}
if (this.fontList.length === 0) {
return false
}
return true
},
fontList: [],
addedList: {},
add: function(N) {
if (!this.initialized) {
this.initialize()
}
var R = typeof N === "object" ? N.fontFace : N,
Q = typeof N === "object" ? N.url : N;
if (this.addedList[R]) {
return
}
var P = d.createElement("style");
P.setAttribute("type", "text/css");
P.innerHTML = "@font-face{\n font-family: '" + R + "';\n src: url('" + Q + "');\n}\n";
d.head.appendChild(P);
this.addedList[R] = true;
var O = d.createElement("span");
O.style.cssText = "position: absolute; top: 0; left: 0; opacity: 0;";
O.style.fontFamily = '"' + R + '", "PjsEmptyFont", fantasy';
O.innerHTML = "AAAAAAAA";
d.body.appendChild(O);
this.fontList.push(O)
}
};
g.PFont = H;
var F = this.Processing = function(be, ba) {
if (!(this instanceof F)) {
throw "called Processing constructor as if it were a function: missing 'new'."
}
var ae, cV = be === t && ba === t;
if (cV) {
ae = d.createElement("canvas")
} else {
ae = typeof be === "string" ? d.getElementById(be) : be
} if (!(ae instanceof HTMLCanvasElement)) {
throw "called Processing constructor without passing canvas element reference or id."
}
function dw(ea) {
F.debug("Unimplemented - " + ea)
}
var cW = this;
cW.externals = {
canvas: ae,
context: t,
sketch: t
};
cW.name = "Processing.js Instance";
cW.use3DContext = false;
cW.focused = false;
cW.breakShape = false;
cW.glyphTable = {};
cW.pmouseX = 0;
cW.pmouseY = 0;
cW.mouseX = 0;
cW.mouseY = 0;
cW.mouseButton = 0;
cW.mouseScroll = 0;
cW.mouseClicked = t;
cW.mouseDragged = t;
cW.mouseMoved = t;
cW.mousePressed = t;
cW.mouseReleased = t;
cW.mouseScrolled = t;
cW.mouseOver = t;
cW.mouseOut = t;
cW.touchStart = t;
cW.touchEnd = t;
cW.touchMove = t;
cW.touchCancel = t;
cW.key = t;
cW.keyCode = t;
cW.keyPressed = G;
cW.keyReleased = G;
cW.keyTyped = G;
cW.draw = t;
cW.setup = t;
cW.__mousePressed = false;
cW.__keyPressed = false;
cW.__frameRate = 60;
cW.frameCount = 0;
cW.width = 100;
cW.height = 100;
var d8, cQ, dY, bD = true,
aH = true,
bo = [1, 1, 1, 1],
a1 = 4294967295,
aq = true,
ce = true,
c0 = [0, 0, 0, 1],
cv = 4278190080,
b3 = true,
dW = 1,
ax = false,
dO = false,
aC = true,
b4 = 0,
bK = 0,
cN = 3,
a8 = 0,
a7 = 0,
a6 = 0,
a2 = 0,
dU = 60,
az = 1000 / dU,
Z = "default",
ck = ae.style.cursor,
dR = 20,
cj = 0,
d6 = [],
aJ = 0,
Q = 20,
cM = false,
a4 = -3355444,
cy = 20,
bU = 255,
bJ = 255,
bI = 255,
bG = 255,
cZ = false,
aK = false,
dN = 0,
d5 = 0,
cY = 1,
bf = null,
bw = null,
a5 = false,
dq = Date.now(),
dt = dq,
P = 0,
cE, c3, aQ, aL, bz, cd, U, dC = {
attributes: {},
locations: {}
},
dx, dQ, bT, bh, cJ, dk, aB, b2, bg, b8, at, aG, bC, aw, af, c7, bS, cs = {
width: 0,
height: 0
},
d4 = 2,
dT = false,
cH, ac, R, N = 37,
c1 = 0,
cI = 4,
Y = "Arial",
d0 = 12,
a3 = 9,
dA = 2,
d7 = 14,
W = H.get(Y, d0),
aj, cn = null,
dV = false,
d3, bZ = 1000,
ag = [],
dI = null,
dX = [16, 17, 18, 20, 33, 34, 35, 36, 37, 38, 39, 40, 144, 155, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 157];
var ad, dp, aU, bX;
if (d.defaultView && d.defaultView.getComputedStyle) {
ad = parseInt(d.defaultView.getComputedStyle(ae, null)["paddingLeft"], 10) || 0;
dp = parseInt(d.defaultView.getComputedStyle(ae, null)["paddingTop"], 10) || 0;
aU = parseInt(d.defaultView.getComputedStyle(ae, null)["borderLeftWidth"], 10) || 0;
bX = parseInt(d.defaultView.getComputedStyle(ae, null)["borderTopWidth"], 10) || 0
}
var dL = 0;
var bL = 0,
bM = 0,
bt = [],
bs = [],
br = [],
ah = new e(720),
bl = new e(720),
cF, cA;
var bV, ch, dJ, aT, am, da, ab, db, ap = false,
ci = false,
cK = 60 * (q.PI / 180),
dl = cW.width / 2,
dj = cW.height / 2,
di = dj / q.tan(cK / 2),
a0 = di / 10,
av = di * 10,
b5 = cW.width / cW.height;
var bb = [],
cb = [],
c2 = 0,
dP = false,
aa = false,
du = true;
var S = 0;
var bm = [];
var dh = new e([0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5]);
var bH = new e([0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5]);
var df = new e([0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]);
var ak = new e([0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0]);
var ai = new e([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]);
var aO = "varying vec4 vFrontColor;attribute vec3 aVertex;attribute vec4 aColor;uniform mat4 uView;uniform mat4 uProjection;uniform float uPointSize;void main(void) { vFrontColor = aColor; gl_PointSize = uPointSize; gl_Position = uProjection * uView * vec4(aVertex, 1.0);}";
var bQ = "#ifdef GL_ES\nprecision highp float;\n#endif\nvarying vec4 vFrontColor;uniform bool uSmooth;void main(void){ if(uSmooth == true){ float dist = distance(gl_PointCoord, vec2(0.5)); if(dist > 0.5){ discard; } } gl_FragColor = vFrontColor;}";
var dE = "varying vec4 vFrontColor;attribute vec3 aVertex;attribute vec2 aTextureCoord;uniform vec4 uColor;uniform mat4 uModel;uniform mat4 uView;uniform mat4 uProjection;uniform float uPointSize;varying vec2 vTextureCoord;void main(void) { gl_PointSize = uPointSize; vFrontColor = uColor; gl_Position = uProjection * uView * uModel * vec4(aVertex, 1.0); vTextureCoord = aTextureCoord;}";
var aW = "#ifdef GL_ES\nprecision highp float;\n#endif\nvarying vec4 vFrontColor;varying vec2 vTextureCoord;uniform sampler2D uSampler;uniform int uIsDrawingText;uniform bool uSmooth;void main(void){ if(uSmooth == true){ float dist = distance(gl_PointCoord, vec2(0.5)); if(dist > 0.5){ discard; } } if(uIsDrawingText == 1){ float alpha = texture2D(uSampler, vTextureCoord).a; gl_FragColor = vec4(vFrontColor.rgb * alpha, alpha); } else{ gl_FragColor = vFrontColor; }}";
var bA = /Windows/.test(navigator.userAgent);
var dn = "varying vec4 vFrontColor;attribute vec3 aVertex;attribute vec3 aNormal;attribute vec4 aColor;attribute vec2 aTexture;varying vec2 vTexture;uniform vec4 uColor;uniform bool uUsingMat;uniform vec3 uSpecular;uniform vec3 uMaterialEmissive;uniform vec3 uMaterialAmbient;uniform vec3 uMaterialSpecular;uniform float uShininess;uniform mat4 uModel;uniform mat4 uView;uniform mat4 uProjection;uniform mat4 uNormalTransform;uniform int uLightCount;uniform vec3 uFalloff;struct Light { int type; vec3 color; vec3 position; vec3 direction; float angle; vec3 halfVector; float concentration;};uniform Light uLights0;uniform Light uLights1;uniform Light uLights2;uniform Light uLights3;uniform Light uLights4;uniform Light uLights5;uniform Light uLights6;uniform Light uLights7;Light getLight(int index){ if(index == 0) return uLights0; if(index == 1) return uLights1; if(index == 2) return uLights2; if(index == 3) return uLights3; if(index == 4) return uLights4; if(index == 5) return uLights5; if(index == 6) return uLights6; return uLights7;}void AmbientLight( inout vec3 totalAmbient, in vec3 ecPos, in Light light ) { float d = length( light.position - ecPos ); float attenuation = 1.0 / ( uFalloff[0] + ( uFalloff[1] * d ) + ( uFalloff[2] * d * d )); totalAmbient += light.color * attenuation;}void DirectionalLight( inout vec3 col, inout vec3 spec, in vec3 vertNormal, in vec3 ecPos, in Light light ) { float powerFactor = 0.0; float nDotVP = max(0.0, dot( vertNormal, normalize(-light.position) )); float nDotVH = max(0.0, dot( vertNormal, normalize(-light.position-normalize(ecPos) ))); if( nDotVP != 0.0 ){ powerFactor = pow( nDotVH, uShininess ); } col += light.color * nDotVP; spec += uSpecular * powerFactor;}void PointLight( inout vec3 col, inout vec3 spec, in vec3 vertNormal, in vec3 ecPos, in Light light ) { float powerFactor; vec3 VP = light.position - ecPos; float d = length( VP ); VP = normalize( VP ); float attenuation = 1.0 / ( uFalloff[0] + ( uFalloff[1] * d ) + ( uFalloff[2] * d * d )); float nDotVP = max( 0.0, dot( vertNormal, VP )); vec3 halfVector = normalize( VP - normalize(ecPos) ); float nDotHV = max( 0.0, dot( vertNormal, halfVector )); if( nDotVP == 0.0 ) { powerFactor = 0.0; } else { powerFactor = pow( nDotHV, uShininess ); } spec += uSpecular * powerFactor * attenuation; col += light.color * nDotVP * attenuation;}void SpotLight( inout vec3 col, inout vec3 spec, in vec3 vertNormal, in vec3 ecPos, in Light light ) { float spotAttenuation; float powerFactor = 0.0; vec3 VP = light.position - ecPos; vec3 ldir = normalize( -light.direction ); float d = length( VP ); VP = normalize( VP ); float attenuation = 1.0 / ( uFalloff[0] + ( uFalloff[1] * d ) + ( uFalloff[2] * d * d ) ); float spotDot = dot( VP, ldir );" + (bA ? " spotAttenuation = 1.0; " : " if( spotDot > cos( light.angle ) ) { spotAttenuation = pow( spotDot, light.concentration ); } else{ spotAttenuation = 0.0; } attenuation *= spotAttenuation;") + " float nDotVP = max( 0.0, dot( vertNormal, VP ) ); vec3 halfVector = normalize( VP - normalize(ecPos) ); float nDotHV = max( 0.0, dot( vertNormal, halfVector ) ); if( nDotVP != 0.0 ) { powerFactor = pow( nDotHV, uShininess ); } spec += uSpecular * powerFactor * attenuation; col += light.color * nDotVP * attenuation;}void main(void) { vec3 finalAmbient = vec3( 0.0 ); vec3 finalDiffuse = vec3( 0.0 ); vec3 finalSpecular = vec3( 0.0 ); vec4 col = uColor; if ( uColor[0] == -1.0 ){ col = aColor; } vec3 norm = normalize(vec3( uNormalTransform * vec4( aNormal, 0.0 ) )); vec4 ecPos4 = uView * uModel * vec4(aVertex, 1.0); vec3 ecPos = (vec3(ecPos4))/ecPos4.w; if( uLightCount == 0 ) { vFrontColor = col + vec4(uMaterialSpecular, 1.0); } else { for( int i = 0; i < 8; i++ ) { Light l = getLight(i); if( i >= uLightCount ){ break; } if( l.type == 0 ) { AmbientLight( finalAmbient, ecPos, l ); } else if( l.type == 1 ) { DirectionalLight( finalDiffuse, finalSpecular, norm, ecPos, l ); } else if( l.type == 2 ) { PointLight( finalDiffuse, finalSpecular, norm, ecPos, l ); } else { SpotLight( finalDiffuse, finalSpecular, norm, ecPos, l ); } } if( uUsingMat == false ) { vFrontColor = vec4( vec3( col ) * finalAmbient + vec3( col ) * finalDiffuse + vec3( col ) * finalSpecular, col[3] ); } else{ vFrontColor = vec4( uMaterialEmissive + (vec3(col) * uMaterialAmbient * finalAmbient ) + (vec3(col) * finalDiffuse) + (uMaterialSpecular * finalSpecular), col[3] ); } } vTexture.xy = aTexture.xy; gl_Position = uProjection * uView * uModel * vec4( aVertex, 1.0 );}";
var aF = "#ifdef GL_ES\nprecision highp float;\n#endif\nvarying vec4 vFrontColor;uniform sampler2D uSampler;uniform bool uUsingTexture;varying vec2 vTexture;void main(void){ if( uUsingTexture ){ gl_FragColor = vec4(texture2D(uSampler, vTexture.xy)) * vFrontColor; } else{ gl_FragColor = vFrontColor; }}";
function d2(ec, eb, ee, ed) {
var ea = dC.locations[ec];
if (ea === t) {
ea = d8.getUniformLocation(eb, ee);
dC.locations[ec] = ea
}
if (ea !== null) {
if (ed.length === 4) {
d8.uniform4fv(ea, ed)
} else {
if (ed.length === 3) {
d8.uniform3fv(ea, ed)
} else {
if (ed.length === 2) {
d8.uniform2fv(ea, ed)
} else {
d8.uniform1f(ea, ed)
}
}
}
}
}
function dZ(ec, eb, ee, ed) {
var ea = dC.locations[ec];
if (ea === t) {
ea = d8.getUniformLocation(eb, ee);
dC.locations[ec] = ea
}
if (ea !== null) {
if (ed.length === 4) {
d8.uniform4iv(ea, ed)
} else {
if (ed.length === 3) {
d8.uniform3iv(ea, ed)
} else {
if (ed.length === 2) {
d8.uniform2iv(ea, ed)
} else {
d8.uniform1i(ea, ed)
}
}
}
}
}
function a9(ee, ec, ef, ed, eb) {
var ea = dC.locations[ee];
if (ea === t) {
ea = d8.getUniformLocation(ec, ef);
dC.locations[ee] = ea
}
if (ea !== -1) {
if (eb.length === 16) {
d8.uniformMatrix4fv(ea, ed, eb)
} else {
if (eb.length === 9) {
d8.uniformMatrix3fv(ea, ed, eb)
} else {
d8.uniformMatrix2fv(ea, ed, eb)
}
}
}
}
function dc(ee, ec, ef, eb, ed) {
var ea = dC.attributes[ee];
if (ea === t) {
ea = d8.getAttribLocation(ec, ef);
dC.attributes[ee] = ea
}
if (ea !== -1) {
d8.bindBuffer(d8.ARRAY_BUFFER, ed);
d8.vertexAttribPointer(ea, eb, d8.FLOAT, false, 0, 0);
d8.enableVertexAttribArray(ea)
}
}
function cg(ec, eb, ed) {
var ea = dC.attributes[ec];
if (ea === t) {
ea = d8.getAttribLocation(eb, ed);
dC.attributes[ec] = ea
}
if (ea !== -1) {
d8.disableVertexAttribArray(ea)
}
}
var bF = function(ec, ee, eb) {
var ef = ec.createShader(ec.VERTEX_SHADER);
ec.shaderSource(ef, ee);
ec.compileShader(ef);
if (!ec.getShaderParameter(ef, ec.COMPILE_STATUS)) {
throw ec.getShaderInfoLog(ef)
}
var ed = ec.createShader(ec.FRAGMENT_SHADER);
ec.shaderSource(ed, eb);
ec.compileShader(ed);
if (!ec.getShaderParameter(ed, ec.COMPILE_STATUS)) {
throw ec.getShaderInfoLog(ed)
}
var ea = ec.createProgram();
ec.attachShader(ea, ef);
ec.attachShader(ea, ed);
ec.linkProgram(ea);
if (!ec.getProgramParameter(ea, ec.LINK_STATUS)) {
throw "Error linking shaders."
}
return ea
};
var aZ = function(ea, ee, eb, ed, ec) {
return {
x: ea,
y: ee,
w: eb,
h: ed
}
};
var bk = aZ;
var b1 = function(ea, ee, eb, ed, ec) {
return {
x: ea,
y: ee,
w: ec ? eb : eb - ea,
h: ec ? ed : ed - ee
}
};
var aN = function(ea, ee, eb, ed, ec) {
return {
x: ea - eb / 2,
y: ee - ed / 2,
w: eb,
h: ed
}
};
var ds = function() {};
var bR = function() {};
var bB = function() {};
var ca = function() {};
bR.prototype = new ds;
bR.prototype.constructor = bR;
bB.prototype = new ds;
bB.prototype.constructor = bB;
ca.prototype = new ds;
ca.prototype.constructor = ca;
ds.prototype.a3DOnlyFunction = G;
var cl = {};
var bP = cW.Character = function(ea) {
if (typeof ea === "string" && ea.length === 1) {
this.code = ea.charCodeAt(0)
} else {
if (typeof ea === "number") {
this.code = ea
} else {
if (ea instanceof bP) {
this.code = ea
} else {
this.code = NaN
}
}
}
return cl[this.code] === t ? cl[this.code] = this : cl[this.code]
};
bP.prototype.toString = function() {
return String.fromCharCode(this.code)
};
bP.prototype.valueOf = function() {
return this.code
};
var O = cW.PShape = function(ea) {
this.family = ea || 0;
this.visible = true;
this.style = true;
this.children = [];
this.nameTable = [];
this.params = [];
this.name = "";
this.image = null;
this.matrix = null;
this.kind = null;
this.close = null;
this.width = null;
this.height = null;
this.parent = null
};
O.prototype = {
isVisible: function() {
return this.visible
},
setVisible: function(ea) {
this.visible = ea
},
disableStyle: function() {
this.style = false;
for (var eb = 0, ea = this.children.length; eb < ea; eb++) {
this.children[eb].disableStyle()
}
},
enableStyle: function() {
this.style = true;
for (var eb = 0, ea = this.children.length; eb < ea; eb++) {
this.children[eb].enableStyle()
}
},
getFamily: function() {
return this.family
},
getWidth: function() {
return this.width
},
getHeight: function() {
return this.height
},
setName: function(ea) {
this.name = ea
},
getName: function() {
return this.name
},
draw: function(ea) {
ea = ea || cW;
if (this.visible) {
this.pre(ea);
this.drawImpl(ea);
this.post(ea)
}
},
drawImpl: function(ea) {
if (this.family === 0) {
this.drawGroup(ea)
} else {
if (this.family === 1) {
this.drawPrimitive(ea)
} else {
if (this.family === 3) {
this.drawGeometry(ea)
} else {
if (this.family === 21) {
this.drawPath(ea)
}
}
}
}
},
drawPath: function(ec) {
var ed, eb;
if (this.vertices.length === 0) {
return
}
ec.beginShape();
if (this.vertexCodes.length === 0) {
if (this.vertices[0].length === 2) {
for (ed = 0, eb = this.vertices.length; ed < eb; ed++) {
ec.vertex(this.vertices[ed][0], this.vertices[ed][1])
}
} else {
for (ed = 0, eb = this.vertices.length; ed < eb; ed++) {
ec.vertex(this.vertices[ed][0], this.vertices[ed][1], this.vertices[ed][2])
}
}
} else {
var ea = 0;
if (this.vertices[0].length === 2) {
for (ed = 0, eb = this.vertexCodes.length; ed < eb; ed++) {
if (this.vertexCodes[ed] === 0) {
ec.vertex(this.vertices[ea][0], this.vertices[ea][1], this.vertices[ea]["moveTo"]);
ec.breakShape = false;
ea++
} else {
if (this.vertexCodes[ed] === 1) {
ec.bezierVertex(this.vertices[ea + 0][0], this.vertices[ea + 0][1], this.vertices[ea + 1][0], this.vertices[ea + 1][1], this.vertices[ea + 2][0], this.vertices[ea + 2][1]);
ea += 3
} else {
if (this.vertexCodes[ed] === 2) {
ec.curveVertex(this.vertices[ea][0], this.vertices[ea][1]);
ea++
} else {
if (this.vertexCodes[ed] === 3) {
ec.breakShape = true
}
}
}
}
}
} else {
for (ed = 0, eb = this.vertexCodes.length; ed < eb; ed++) {
if (this.vertexCodes[ed] === 0) {
ec.vertex(this.vertices[ea][0], this.vertices[ea][1], this.vertices[ea][2]);
if (this.vertices[ea]["moveTo"] === true) {
bb[bb.length - 1]["moveTo"] = true
} else {
if (this.vertices[ea]["moveTo"] === false) {
bb[bb.length - 1]["moveTo"] = false
}
}
ec.breakShape = false
} else {
if (this.vertexCodes[ed] === 1) {
ec.bezierVertex(this.vertices[ea + 0][0], this.vertices[ea + 0][1], this.vertices[ea + 0][2], this.vertices[ea + 1][0], this.vertices[ea + 1][1], this.vertices[ea + 1][2], this.vertices[ea + 2][0], this.vertices[ea + 2][1], this.vertices[ea + 2][2]);
ea += 3
} else {
if (this.vertexCodes[ed] === 2) {
ec.curveVertex(this.vertices[ea][0], this.vertices[ea][1], this.vertices[ea][2]);
ea++
} else {
if (this.vertexCodes[ed] === 3) {
ec.breakShape = true
}
}
}
}
}
}
}
ec.endShape(this.close ? 2 : 1)
},
drawGeometry: function(ec) {
var ed, eb;
ec.beginShape(this.kind);
if (this.style) {
for (ed = 0, eb = this.vertices.length; ed < eb; ed++) {
ec.vertex(this.vertices[ed])
}
} else {
for (ed = 0, eb = this.vertices.length; ed < eb; ed++) {
var ea = this.vertices[ed];
if (ea[2] === 0) {
ec.vertex(ea[0], ea[1])
} else {
ec.vertex(ea[0], ea[1], ea[2])
}
}
}
ec.endShape()
},
drawGroup: function(eb) {
for (var ec = 0, ea = this.children.length; ec < ea; ec++) {
this.children[ec].draw(eb)
}
},
drawPrimitive: function(ea) {
if (this.kind === 2) {
ea.point(this.params[0], this.params[1])
} else {
if (this.kind === 4) {
if (this.params.length === 4) {
ea.line(this.params[0], this.params[1], this.params[2], this.params[3])
} else {
ea.line(this.params[0], this.params[1], this.params[2], this.params[3], this.params[4], this.params[5])
}
} else {
if (this.kind === 8) {
ea.triangle(this.params[0], this.params[1], this.params[2], this.params[3], this.params[4], this.params[5])
} else {
if (this.kind === 16) {
ea.quad(this.params[0], this.params[1], this.params[2], this.params[3], this.params[4], this.params[5], this.params[6], this.params[7])
} else {
if (this.kind === 30) {
if (this.image !== null) {
var ee = bk;
ea.imageMode(0);
ea.image(this.image, this.params[0], this.params[1], this.params[2], this.params[3]);
bk = ee
} else {
var eb = bK;
ea.rectMode(0);
ea.rect(this.params[0], this.params[1], this.params[2], this.params[3]);
bK = eb
}
} else {
if (this.kind === 31) {
var ec = cN;
ea.ellipseMode(0);
ea.ellipse(this.params[0], this.params[1], this.params[2], this.params[3]);
cN = ec
} else {
if (this.kind === 32) {
var ed = cN;
ea.ellipseMode(0);
ea.arc(this.params[0], this.params[1], this.params[2], this.params[3], this.params[4], this.params[5]);
cN = ed
} else {
if (this.kind === 41) {
if (this.params.length === 1) {
ea.box(this.params[0])
} else {
ea.box(this.params[0], this.params[1], this.params[2])
}
} else {
if (this.kind === 40) {
ea.sphere(this.params[0])
}
}
}
}
}
}
}
}
}
},
pre: function(ea) {
if (this.matrix) {
ea.pushMatrix();
ea.transform(this.matrix)
}
if (this.style) {
ea.pushStyle();
this.styles(ea)
}
},
post: function(ea) {
if (this.matrix) {
ea.popMatrix()
}
if (this.style) {
ea.popStyle()
}
},
styles: function(ea) {
if (this.stroke) {
ea.stroke(this.strokeColor);
ea.strokeWeight(this.strokeWeight);
ea.strokeCap(this.strokeCap);
ea.strokeJoin(this.strokeJoin)
} else {
ea.noStroke()
} if (this.fill) {
ea.fill(this.fillColor)
} else {
ea.noFill()
}
},
getChild: function(ed) {
var eb, ea;
if (typeof ed === "number") {
return this.children[ed]
}
var ec;
if (ed === "" || this.name === ed) {
return this
}
if (this.nameTable.length > 0) {
for (eb = 0, ea = this.nameTable.length; eb < ea || ec; eb++) {
if (this.nameTable[eb].getName === ed) {
ec = this.nameTable[eb];
break
}
}
if (ec) {
return ec
}
}
for (eb = 0, ea = this.children.length; eb < ea; eb++) {
ec = this.children[eb].getChild(ed);
if (ec) {
return ec
}
}
return null
},
getChildCount: function() {
return this.children.length
},
addChild: function(ea) {
this.children.push(ea);
ea.parent = this;
if (ea.getName() !== null) {
this.addName(ea.getName(), ea)
}
},
addName: function(eb, ea) {
if (this.parent !== null) {
this.parent.addName(eb, ea)
} else {
this.nameTable.push([eb, ea])
}
},
translate: function() {
if (arguments.length === 2) {
this.checkMatrix(2);
this.matrix.translate(arguments[0], arguments[1])
} else {
this.checkMatrix(3);
this.matrix.translate(arguments[0], arguments[1], 0)
}
},
checkMatrix: function(ea) {
if (this.matrix === null) {
if (ea === 2) {
this.matrix = new cW.PMatrix2D
} else {
this.matrix = new cW.PMatrix3D
}
} else {
if (ea === 3 && this.matrix instanceof cW.PMatrix2D) {
this.matrix = new cW.PMatrix3D
}
}
},
rotateX: function(ea) {
this.rotate(ea, 1, 0, 0)
},
rotateY: function(ea) {
this.rotate(ea, 0, 1, 0)
},
rotateZ: function(ea) {
this.rotate(ea, 0, 0, 1)
},
rotate: function() {
if (arguments.length === 1) {
this.checkMatrix(2);
this.matrix.rotate(arguments[0])
} else {
this.checkMatrix(3);
this.matrix.rotate(arguments[0], arguments[1], arguments[2], arguments[3])
}
},
scale: function() {
if (arguments.length === 2) {
this.checkMatrix(2);
this.matrix.scale(arguments[0], arguments[1])
} else {
if (arguments.length === 3) {
this.checkMatrix(2);
this.matrix.scale(arguments[0], arguments[1], arguments[2])
} else {
this.checkMatrix(2);
this.matrix.scale(arguments[0])
}
}
},
resetMatrix: function() {
this.checkMatrix(2);
this.matrix.reset()
},
applyMatrix: function(ea) {
if (arguments.length === 1) {
this.applyMatrix(ea.elements[0], ea.elements[1], 0, ea.elements[2], ea.elements[3], ea.elements[4], 0, ea.elements[5], 0, 0, 1, 0, 0, 0, 0, 1)
} else {
if (arguments.length === 6) {
this.checkMatrix(2);
this.matrix.apply(arguments[0], arguments[1], arguments[2], 0, arguments[3], arguments[4], arguments[5], 0, 0, 0, 1, 0, 0, 0, 0, 1)
} else {
if (arguments.length === 16) {
this.checkMatrix(3);
this.matrix.apply(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9], arguments[10], arguments[11], arguments[12], arguments[13], arguments[14], arguments[15])
}
}
}
}
};
var cr = cW.PShapeSVG = function() {
cW.PShape.call(this);
if (arguments.length === 1) {
this.element = arguments[0];
this.vertexCodes = [];
this.vertices = [];
this.opacity = 1;
this.stroke = false;
this.strokeColor = 4278190080;
this.strokeWeight = 1;
this.strokeCap = "butt";
this.strokeJoin = "miter";
this.strokeGradient = null;
this.strokeGradientPaint = null;
this.strokeName = null;
this.strokeOpacity = 1;
this.fill = true;
this.fillColor = 4278190080;
this.fillGradient = null;
this.fillGradientPaint = null;
this.fillName = null;
this.fillOpacity = 1;
if (this.element.getName() !== "svg") {
throw "root is not <svg>, it's <" + this.element.getName() + ">"
}
} else {
if (arguments.length === 2) {
if (typeof arguments[1] === "string") {
if (arguments[1].indexOf(".svg") > -1) {
this.element = new cW.XMLElement(cW, arguments[1]);
this.vertexCodes = [];
this.vertices = [];
this.opacity = 1;
this.stroke = false;
this.strokeColor = 4278190080;
this.strokeWeight = 1;
this.strokeCap = "butt";
this.strokeJoin = "miter";
this.strokeGradient = "";
this.strokeGradientPaint = "";
this.strokeName = "";
this.strokeOpacity = 1;
this.fill = true;
this.fillColor = 4278190080;
this.fillGradient = null;
this.fillGradientPaint = null;
this.fillOpacity = 1
}
} else {
if (arguments[0]) {
this.element = arguments[1];
this.vertexCodes = arguments[0].vertexCodes.slice();
this.vertices = arguments[0].vertices.slice();
this.stroke = arguments[0].stroke;
this.strokeColor = arguments[0].strokeColor;
this.strokeWeight = arguments[0].strokeWeight;
this.strokeCap = arguments[0].strokeCap;
this.strokeJoin = arguments[0].strokeJoin;
this.strokeGradient = arguments[0].strokeGradient;
this.strokeGradientPaint = arguments[0].strokeGradientPaint;
this.strokeName = arguments[0].strokeName;
this.fill = arguments[0].fill;
this.fillColor = arguments[0].fillColor;
this.fillGradient = arguments[0].fillGradient;
this.fillGradientPaint = arguments[0].fillGradientPaint;
this.fillName = arguments[0].fillName;
this.strokeOpacity = arguments[0].strokeOpacity;
this.fillOpacity = arguments[0].fillOpacity;
this.opacity = arguments[0].opacity
}
}
}
}
this.name = this.element.getStringAttribute("id");
var ea = this.element.getStringAttribute("display", "inline");
this.visible = ea !== "none";
var ef = this.element.getAttribute("transform");
if (ef) {
this.matrix = this.parseMatrix(ef)
}
var ec = this.element.getStringAttribute("viewBox");
if (ec !== null) {
var ee = ec.split(" ");
this.width = ee[2];
this.height = ee[3]
}
var eb = this.element.getStringAttribute("width");
var ed = this.element.getStringAttribute("height");
if (eb !== null) {
this.width = this.parseUnitSize(eb);
this.height = this.parseUnitSize(ed)
} else {
if (this.width === 0 || this.height === 0) {
this.width = 1;
this.height = 1;
throw "The width and/or height is not readable in the <svg> tag of this file."
}
}
this.parseColors(this.element);
this.parseChildren(this.element)
};
cr.prototype = new O;
cr.prototype.parseMatrix = function() {
function ea(ec) {
var eb = [];
ec.replace(/\((.*?)\)/, function() {
return function(ed, ee) {
eb = ee.replace(/,+/g, " ").split(/\s+/)
}
}());
return eb
}
return function(ei) {
this.checkMatrix(2);
var eb = [];
ei.replace(/\s*(\w+)\((.*?)\)/g, function(el) {
eb.push(cW.trim(el))
});
if (eb.length === 0) {
return null
}
for (var eg = 0, ee = eb.length; eg < ee; eg++) {
var ec = ea(eb[eg]);
if (eb[eg].indexOf("matrix") !== -1) {
this.matrix.set(ec[0], ec[2], ec[4], ec[1], ec[3], ec[5])
} else {
if (eb[eg].indexOf("translate") !== -1) {
var eh = ec[0];
var ef = ec.length === 2 ? ec[1] : 0;
this.matrix.translate(eh, ef)
} else {
if (eb[eg].indexOf("scale") !== -1) {
var ek = ec[0];
var ej = ec.length === 2 ? ec[1] : ec[0];
this.matrix.scale(ek, ej)
} else {
if (eb[eg].indexOf("rotate") !== -1) {
var ed = ec[0];
if (ec.length === 1) {
this.matrix.rotate(cW.radians(ed))
} else {
if (ec.length === 3) {
this.matrix.translate(ec[1], ec[2]);
this.matrix.rotate(cW.radians(ec[0]));
this.matrix.translate(-ec[1], -ec[2])
}
}
} else {
if (eb[eg].indexOf("skewX") !== -1) {
this.matrix.skewX(parseFloat(ec[0]))
} else {
if (eb[eg].indexOf("skewY") !== -1) {
this.matrix.skewY(ec[0])
} else {
if (eb[eg].indexOf("shearX") !== -1) {
this.matrix.shearX(ec[0])
} else {
if (eb[eg].indexOf("shearY") !== -1) {
this.matrix.shearY(ec[0])
}
}
}
}
}
}
}
}
}
return this.matrix
}
}();
cr.prototype.parseChildren = function(ef) {
var eb = ef.getChildren();
var ee = new cW.PShape;
for (var ed = 0, ec = eb.length; ed < ec; ed++) {
var ea = this.parseChild(eb[ed]);
if (ea) {
ee.addChild(ea)
}
}
this.children.push(ee)
};
cr.prototype.getName = function() {
return this.name
};
cr.prototype.parseChild = function(ec) {
var eb = ec.getName();
var ea;
if (eb === "g") {
ea = new cr(this, ec)
} else {
if (eb === "defs") {
ea = new cr(this, ec)
} else {
if (eb === "line") {
ea = new cr(this, ec);
ea.parseLine()
} else {
if (eb === "circle") {
ea = new cr(this, ec);
ea.parseEllipse(true)
} else {
if (eb === "ellipse") {
ea = new cr(this, ec);
ea.parseEllipse(false)
} else {
if (eb === "rect") {
ea = new cr(this, ec);
ea.parseRect()
} else {
if (eb === "polygon") {
ea = new cr(this, ec);
ea.parsePoly(true)
} else {
if (eb === "polyline") {
ea = new cr(this, ec);
ea.parsePoly(false)
} else {
if (eb === "path") {
ea = new cr(this, ec);
ea.parsePath()
} else {
if (eb === "radialGradient") {
dw("PShapeSVG.prototype.parseChild, name = radialGradient")
} else {
if (eb === "linearGradient") {
dw("PShapeSVG.prototype.parseChild, name = linearGradient")
} else {
if (eb === "text") {
dw("PShapeSVG.prototype.parseChild, name = text")
} else {
if (eb === "filter") {
dw("PShapeSVG.prototype.parseChild, name = filter")
} else {
if (eb === "mask") {
dw("PShapeSVG.prototype.parseChild, name = mask")
} else {
G()
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return ea
};
cr.prototype.parsePath = function() {
this.family = 21;
this.kind = 0;
var ef = [];
var ez;
var ey = cW.trim(this.element.getStringAttribute("d").replace(/[\s,]+/g, " "));
if (ey === null) {
return
}
ey = cW.__toCharArray(ey);
var ed = 0,
ec = 0,
ek = 0,
ei = 0,
ej = 0,
eh = 0,
eq = 0,
ep = 0,
eb = 0,
ea = 0,
em = 0,
el = 0,
eo = 0,
en = 0,
ex = 0,
et = 0;
var er = "";
var ev = [];
var ew = false;
var eg;
var ee;
var eu, es;
while (ex < ey.length) {
et = ey[ex].valueOf();
if (et >= 65 && et <= 90 || et >= 97 && et <= 122) {
eu = ex;
ex++;
if (ex < ey.length) {
ev = [];
et = ey[ex].valueOf();
while (!(et >= 65 && et <= 90 || et >= 97 && et <= 100 || et >= 102 && et <= 122) && ew === false) {
if (et === 32) {
if (er !== "") {
ev.push(parseFloat(er));
er = ""
}
ex++
} else {
if (et === 45) {
if (ey[ex - 1].valueOf() === 101) {
er += ey[ex].toString();
ex++
} else {
if (er !== "") {
ev.push(parseFloat(er))
}
er = ey[ex].toString();
ex++
}
} else {
er += ey[ex].toString();
ex++
}
} if (ex === ey.length) {
ew = true
} else {
et = ey[ex].valueOf()
}
}
}
if (er !== "") {
ev.push(parseFloat(er));
er = ""
}
ee = ey[eu];
et = ee.valueOf();
if (et === 77) {
if (ev.length >= 2 && ev.length % 2 === 0) {
ed = ev[0];
ec = ev[1];
this.parsePathMoveto(ed, ec);
if (ev.length > 2) {
for (eu = 2, es = ev.length; eu < es; eu += 2) {
ed = ev[eu];
ec = ev[eu + 1];
this.parsePathLineto(ed, ec)
}
}
}
} else {
if (et === 109) {
if (ev.length >= 2 && ev.length % 2 === 0) {
ed += ev[0];
ec += ev[1];
this.parsePathMoveto(ed, ec);
if (ev.length > 2) {
for (eu = 2, es = ev.length; eu < es; eu += 2) {
ed += ev[eu];
ec += ev[eu + 1];
this.parsePathLineto(ed, ec)
}
}
}
} else {
if (et === 76) {
if (ev.length >= 2 && ev.length % 2 === 0) {
for (eu = 0, es = ev.length; eu < es; eu += 2) {
ed = ev[eu];
ec = ev[eu + 1];
this.parsePathLineto(ed, ec)
}
}
} else {
if (et === 108) {
if (ev.length >= 2 && ev.length % 2 === 0) {
for (eu = 0, es = ev.length; eu < es; eu += 2) {
ed += ev[eu];
ec += ev[eu + 1];
this.parsePathLineto(ed, ec)
}
}
} else {
if (et === 72) {
for (eu = 0, es = ev.length; eu < es; eu++) {
ed = ev[eu];
this.parsePathLineto(ed, ec)
}
} else {
if (et === 104) {
for (eu = 0, es = ev.length; eu < es; eu++) {
ed += ev[eu];
this.parsePathLineto(ed, ec)
}
} else {
if (et === 86) {
for (eu = 0, es = ev.length; eu < es; eu++) {
ec = ev[eu];
this.parsePathLineto(ed, ec)
}
} else {
if (et === 118) {
for (eu = 0, es = ev.length; eu < es; eu++) {
ec += ev[eu];
this.parsePathLineto(ed, ec)
}
} else {
if (et === 67) {
if (ev.length >= 6 && ev.length % 6 === 0) {
for (eu = 0, es = ev.length; eu < es; eu += 6) {
ej = ev[eu];
eq = ev[eu + 1];
eh = ev[eu + 2];
ep = ev[eu + 3];
eb = ev[eu + 4];
ea = ev[eu + 5];
this.parsePathCurveto(ej, eq, eh, ep, eb, ea);
ed = eb;
ec = ea
}
}
} else {
if (et === 99) {
if (ev.length >= 6 && ev.length % 6 === 0) {
for (eu = 0, es = ev.length; eu < es; eu += 6) {
ej = ed + ev[eu];
eq = ec + ev[eu + 1];
eh = ed + ev[eu + 2];
ep = ec + ev[eu + 3];
eb = ed + ev[eu + 4];
ea = ec + ev[eu + 5];
this.parsePathCurveto(ej, eq, eh, ep, eb, ea);
ed = eb;
ec = ea
}
}
} else {
if (et === 83) {
if (ev.length >= 4 && ev.length % 4 === 0) {
for (eu = 0, es = ev.length; eu < es; eu += 4) {
if (eg.toLowerCase() === "c" || eg.toLowerCase() === "s") {
em = this.vertices[this.vertices.length - 2][0];
el = this.vertices[this.vertices.length - 2][1];
eo = this.vertices[this.vertices.length - 1][0];
en = this.vertices[this.vertices.length - 1][1];
ej = eo + (eo - em);
eq = en + (en - el)
} else {
ej = this.vertices[this.vertices.length - 1][0];
eq = this.vertices[this.vertices.length - 1][1]
}
eh = ev[eu];
ep = ev[eu + 1];
eb = ev[eu + 2];
ea = ev[eu + 3];
this.parsePathCurveto(ej, eq, eh, ep, eb, ea);
ed = eb;
ec = ea
}
}
} else {
if (et === 115) {
if (ev.length >= 4 && ev.length % 4 === 0) {
for (eu = 0, es = ev.length; eu < es; eu += 4) {
if (eg.toLowerCase() === "c" || eg.toLowerCase() === "s") {
em = this.vertices[this.vertices.length - 2][0];
el = this.vertices[this.vertices.length - 2][1];
eo = this.vertices[this.vertices.length - 1][0];
en = this.vertices[this.vertices.length - 1][1];
ej = eo + (eo - em);
eq = en + (en - el)
} else {
ej = this.vertices[this.vertices.length - 1][0];
eq = this.vertices[this.vertices.length - 1][1]
}
eh = ed + ev[eu];
ep = ec + ev[eu + 1];
eb = ed + ev[eu + 2];
ea = ec + ev[eu + 3];
this.parsePathCurveto(ej, eq, eh, ep, eb, ea);
ed = eb;
ec = ea
}
}
} else {
if (et === 81) {
if (ev.length >= 4 && ev.length % 4 === 0) {
for (eu = 0, es = ev.length; eu < es; eu += 4) {
ek = ev[eu];
ei = ev[eu + 1];
eb = ev[eu + 2];
ea = ev[eu + 3];
this.parsePathQuadto(ed, ec, ek, ei, eb, ea);
ed = eb;
ec = ea
}
}
} else {
if (et === 113) {
if (ev.length >= 4 && ev.length % 4 === 0) {
for (eu = 0, es = ev.length; eu < es; eu += 4) {
ek = ed + ev[eu];
ei = ec + ev[eu + 1];
eb = ed + ev[eu + 2];
ea = ec + ev[eu + 3];
this.parsePathQuadto(ed, ec, ek, ei, eb, ea);
ed = eb;
ec = ea
}
}
} else {
if (et === 84) {
if (ev.length >= 2 && ev.length % 2 === 0) {
for (eu = 0, es = ev.length; eu < es; eu += 2) {
if (eg.toLowerCase() === "q" || eg.toLowerCase() === "t") {
em = this.vertices[this.vertices.length - 2][0];
el = this.vertices[this.vertices.length - 2][1];
eo = this.vertices[this.vertices.length - 1][0];
en = this.vertices[this.vertices.length - 1][1];
ek = eo + (eo - em);
ei = en + (en - el)
} else {
ek = ed;
ei = ec
}
eb = ev[eu];
ea = ev[eu + 1];
this.parsePathQuadto(ed, ec, ek, ei, eb, ea);
ed = eb;
ec = ea
}
}
} else {
if (et === 116) {
if (ev.length >= 2 && ev.length % 2 === 0) {
for (eu = 0, es = ev.length; eu < es; eu += 2) {
if (eg.toLowerCase() === "q" || eg.toLowerCase() === "t") {
em = this.vertices[this.vertices.length - 2][0];
el = this.vertices[this.vertices.length - 2][1];
eo = this.vertices[this.vertices.length - 1][0];
en = this.vertices[this.vertices.length - 1][1];
ek = eo + (eo - em);
ei = en + (en - el)
} else {
ek = ed;
ei = ec
}
eb = ed + ev[eu];
ea = ec + ev[eu + 1];
this.parsePathQuadto(ed, ec, ek, ei, eb, ea);
ed = eb;
ec = ea
}
}
} else {
if (et === 90 || et === 122) {
this.close = true
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
eg = ee.toString()
} else {
ex++
}
}
};
cr.prototype.parsePathQuadto = function(ec, ee, ea, ef, eb, ed) {
if (this.vertices.length > 0) {
this.parsePathCode(1);
this.parsePathVertex(ec + (ea - ec) * 2 / 3, ee + (ef - ee) * 2 / 3);
this.parsePathVertex(eb + (ea - eb) * 2 / 3, ed + (ef - ed) * 2 / 3);
this.parsePathVertex(eb, ed)
} else {
throw "Path must start with M/m"
}
};
cr.prototype.parsePathCurveto = function(ed, ef, eb, ee, ea, ec) {
if (this.vertices.length > 0) {
this.parsePathCode(1);
this.parsePathVertex(ed, ef);
this.parsePathVertex(eb, ee);
this.parsePathVertex(ea, ec)
} else {
throw "Path must start with M/m"
}
};
cr.prototype.parsePathLineto = function(eb, ea) {
if (this.vertices.length > 0) {
this.parsePathCode(0);
this.parsePathVertex(eb, ea);
this.vertices[this.vertices.length - 1]["moveTo"] = false
} else {
throw "Path must start with M/m"
}
};
cr.prototype.parsePathMoveto = function(eb, ea) {
if (this.vertices.length > 0) {
this.parsePathCode(3)
}
this.parsePathCode(0);
this.parsePathVertex(eb, ea);
this.vertices[this.vertices.length - 1]["moveTo"] = true
};
cr.prototype.parsePathVertex = function(ea, ec) {
var eb = [];
eb[0] = ea;
eb[1] = ec;
this.vertices.push(eb)
};
cr.prototype.parsePathCode = function(ea) {
this.vertexCodes.push(ea)
};
cr.prototype.parsePoly = function(ee) {
this.family = 21;
this.close = ee;
var eb = cW.trim(this.element.getStringAttribute("points").replace(/[,\s]+/g, " "));
if (eb !== null) {
var ea = eb.split(" ");
if (ea.length % 2 === 0) {
for (var ed = 0, ec = ea.length; ed < ec; ed++) {
var ef = [];
ef[0] = ea[ed];
ef[1] = ea[++ed];
this.vertices.push(ef)
}
} else {
throw "Error parsing polygon points: odd number of coordinates provided"
}
}
};
cr.prototype.parseRect = function() {
this.kind = 30;
this.family = 1;
this.params = [];
this.params[0] = this.element.getFloatAttribute("x");
this.params[1] = this.element.getFloatAttribute("y");
this.params[2] = this.element.getFloatAttribute("width");
this.params[3] = this.element.getFloatAttribute("height");
if (this.params[2] < 0 || this.params[3] < 0) {
throw "svg error: negative width or height found while parsing <rect>"
}
};
cr.prototype.parseEllipse = function(ec) {
this.kind = 31;
this.family = 1;
this.params = [];
this.params[0] = this.element.getFloatAttribute("cx") | 0;
this.params[1] = this.element.getFloatAttribute("cy") | 0;
var eb, ea;
if (ec) {
eb = ea = this.element.getFloatAttribute("r");
if (eb < 0) {
throw "svg error: negative radius found while parsing <circle>"
}
} else {
eb = this.element.getFloatAttribute("rx");
ea = this.element.getFloatAttribute("ry");
if (eb < 0 || ea < 0) {
throw "svg error: negative x-axis radius or y-axis radius found while parsing <ellipse>"
}
}
this.params[0] -= eb;
this.params[1] -= ea;
this.params[2] = eb * 2;
this.params[3] = ea * 2
};
cr.prototype.parseLine = function() {
this.kind = 4;
this.family = 1;
this.params = [];
this.params[0] = this.element.getFloatAttribute("x1");
this.params[1] = this.element.getFloatAttribute("y1");
this.params[2] = this.element.getFloatAttribute("x2");
this.params[3] = this.element.getFloatAttribute("y2")
};
cr.prototype.parseColors = function(ec) {
if (ec.hasAttribute("opacity")) {
this.setOpacity(ec.getAttribute("opacity"))
}
if (ec.hasAttribute("stroke")) {
this.setStroke(ec.getAttribute("stroke"))
}
if (ec.hasAttribute("stroke-width")) {
this.setStrokeWeight(ec.getAttribute("stroke-width"))
}
if (ec.hasAttribute("stroke-linejoin")) {
this.setStrokeJoin(ec.getAttribute("stroke-linejoin"))
}
if (ec.hasAttribute("stroke-linecap")) {
this.setStrokeCap(ec.getStringAttribute("stroke-linecap"))
}
if (ec.hasAttribute("fill")) {
this.setFill(ec.getStringAttribute("fill"))
}
if (ec.hasAttribute("style")) {
var ef = ec.getStringAttribute("style");
var ed = ef.toString().split(";");
for (var eb = 0, ea = ed.length; eb < ea; eb++) {
var ee = cW.trim(ed[eb].split(":"));
if (ee[0] === "fill") {
this.setFill(ee[1])
} else {
if (ee[0] === "fill-opacity") {
this.setFillOpacity(ee[1])
} else {
if (ee[0] === "stroke") {
this.setStroke(ee[1])
} else {
if (ee[0] === "stroke-width") {
this.setStrokeWeight(ee[1])
} else {
if (ee[0] === "stroke-linecap") {
this.setStrokeCap(ee[1])
} else {
if (ee[0] === "stroke-linejoin") {
this.setStrokeJoin(ee[1])
} else {
if (ee[0] === "stroke-opacity") {
this.setStrokeOpacity(ee[1])
} else {
if (ee[0] === "opacity") {
this.setOpacity(ee[1])
}
}
}
}
}
}
}
}
}
}
};
cr.prototype.setFillOpacity = function(ea) {
this.fillOpacity = parseFloat(ea);
this.fillColor = this.fillOpacity * 255 << 24 | this.fillColor & 16777215
};
cr.prototype.setFill = function(ea) {
var eb = this.fillColor & 4278190080;
if (ea === "none") {
this.fill = false
} else {
if (ea.indexOf("#") === 0) {
this.fill = true;
if (ea.length === 4) {
ea = ea.replace(/#(.)(.)(.)/, "#$1$1$2$2$3$3")
}
this.fillColor = eb | parseInt(ea.substring(1), 16) & 16777215
} else {
if (ea.indexOf("rgb") === 0) {
this.fill = true;
this.fillColor = eb | this.parseRGB(ea)
} else {
if (ea.indexOf("url(#") === 0) {
this.fillName = ea.substring(5, ea.length - 1)
} else {
if (E[ea]) {
this.fill = true;
this.fillColor = eb | parseInt(E[ea].substring(1), 16) & 16777215
}
}
}
}
}
};
cr.prototype.setOpacity = function(ea) {
this.strokeColor = parseFloat(ea) * 255 << 24 | this.strokeColor & 16777215;
this.fillColor = parseFloat(ea) * 255 << 24 | this.fillColor & 16777215
};
cr.prototype.setStroke = function(ea) {
var eb = this.strokeColor & 4278190080;
if (ea === "none") {
this.stroke = false
} else {
if (ea.charAt(0) === "#") {
this.stroke = true;
if (ea.length === 4) {
ea = ea.replace(/#(.)(.)(.)/, "#$1$1$2$2$3$3")
}
this.strokeColor = eb | parseInt(ea.substring(1), 16) & 16777215
} else {
if (ea.indexOf("rgb") === 0) {
this.stroke = true;
this.strokeColor = eb | this.parseRGB(ea)
} else {
if (ea.indexOf("url(#") === 0) {
this.strokeName = ea.substring(5, ea.length - 1)
} else {
if (E[ea]) {
this.stroke = true;
this.strokeColor = eb | parseInt(E[ea].substring(1), 16) & 16777215
}
}
}
}
}
};
cr.prototype.setStrokeWeight = function(ea) {
this.strokeWeight = this.parseUnitSize(ea)
};
cr.prototype.setStrokeJoin = function(ea) {
if (ea === "miter") {
this.strokeJoin = "miter"
} else {
if (ea === "round") {
this.strokeJoin = "round"
} else {
if (ea === "bevel") {
this.strokeJoin = "bevel"
}
}
}
};
cr.prototype.setStrokeCap = function(ea) {
if (ea === "butt") {
this.strokeCap = "butt"
} else {
if (ea === "round") {
this.strokeCap = "round"
} else {
if (ea === "square") {
this.strokeCap = "square"
}
}
}
};
cr.prototype.setStrokeOpacity = function(ea) {
this.strokeOpacity = parseFloat(ea);
this.strokeColor = this.strokeOpacity * 255 << 24 | this.strokeColor & 16777215
};
cr.prototype.parseRGB = function(eb) {
var ec = eb.substring(eb.indexOf("(") + 1, eb.indexOf(")"));
var ea = ec.split(", ");
return ea[0] << 16 | ea[1] << 8 | ea[2]
};
cr.prototype.parseUnitSize = function(eb) {
var ea = eb.length - 2;
if (ea < 0) {
return eb
}
if (eb.indexOf("pt") === ea) {
return parseFloat(eb.substring(0, ea)) * 1.25
}
if (eb.indexOf("pc") === ea) {
return parseFloat(eb.substring(0, ea)) * 15
}
if (eb.indexOf("mm") === ea) {
return parseFloat(eb.substring(0, ea)) * 3.543307
}
if (eb.indexOf("cm") === ea) {
return parseFloat(eb.substring(0, ea)) * 35.43307
}
if (eb.indexOf("in") === ea) {
return parseFloat(eb.substring(0, ea)) * 90
}
if (eb.indexOf("px") === ea) {
return parseFloat(eb.substring(0, ea))
}
return parseFloat(eb)
};
cW.shape = function(ec, eb, ee, ed, ea) {
if (arguments.length >= 1 && arguments[0] !== null) {
if (ec.isVisible()) {
cW.pushMatrix();
if (S === 3) {
if (arguments.length === 5) {
cW.translate(eb - ed / 2, ee - ea / 2);
cW.scale(ed / ec.getWidth(), ea / ec.getHeight())
} else {
if (arguments.length === 3) {
cW.translate(eb - ec.getWidth() / 2, -ec.getHeight() / 2)
} else {
cW.translate(-ec.getWidth() / 2, -ec.getHeight() / 2)
}
}
} else {
if (S === 0) {
if (arguments.length === 5) {
cW.translate(eb, ee);
cW.scale(ed / ec.getWidth(), ea / ec.getHeight())
} else {
if (arguments.length === 3) {
cW.translate(eb, ee)
}
}
} else {
if (S === 1) {
if (arguments.length === 5) {
ed -= eb;
ea -= ee;
cW.translate(eb, ee);
cW.scale(ed / ec.getWidth(), ea / ec.getHeight())
} else {
if (arguments.length === 3) {
cW.translate(eb, ee)
}
}
}
}
}
ec.draw(cW);
if (arguments.length === 1 && S === 3 || arguments.length > 1) {
cW.popMatrix()
}
}
}
};
cW.shapeMode = function(ea) {
S = ea
};
cW.loadShape = function(ea) {
if (arguments.length === 1) {
if (ea.indexOf(".svg") > -1) {
return new cr(null, ea)
}
}
return null
};
var cT = function(ee, ed, ea, eb, ec) {
this.fullName = ee || "";
this.name = ed || "";
this.namespace = ea || "";
this.value = eb;
this.type = ec
};
cT.prototype = {
getName: function() {
return this.name
},
getFullName: function() {
return this.fullName
},
getNamespace: function() {
return this.namespace
},
getValue: function() {
return this.value
},
getType: function() {
return this.type
},
setValue: function(ea) {
this.value = ea
}
};
var b9 = cW.XMLElement = function(ea, ec, ed, eb) {
this.attributes = [];
this.children = [];
this.fullName = null;
this.name = null;
this.namespace = "";
this.content = null;
this.parent = null;
this.lineNr = "";
this.systemID = "";
this.type = "ELEMENT";
if (ea) {
if (typeof ea === "string") {
if (ec === t && ea.indexOf("<") > -1) {
this.parse(ea)
} else {
this.fullName = ea;
this.namespace = ec;
this.systemId = ed;
this.lineNr = eb
}
} else {
this.parse(ec)
}
}
};
b9.prototype = {
parse: function(ea) {
var ec;
try {
var ee = ea.substring(ea.length - 4);
if (ee === ".xml" || ee === ".svg") {
ea = w(ea)
}
ec = (new DOMParser).parseFromString(ea, "text/xml");
var eb = ec.documentElement;
if (eb) {
this.parseChildrenRecursive(null, eb)
} else {
throw "Error loading document"
}
return this
} catch (ed) {
throw ed
}
},
parseChildrenRecursive: function(ei, eg) {
var ef, eb, eh, ee, ed, ea;
if (!ei) {
this.fullName = eg.localName;
this.name = eg.nodeName;
ef = this
} else {
ef = new b9(eg.nodeName);
ef.parent = ei
} if (eg.nodeType === 3 && eg.textContent !== "") {
return this.createPCDataElement(eg.textContent)
}
if (eg.nodeType === 4) {
return this.createCDataElement(eg.textContent)
}
if (eg.attributes) {
for (ee = 0, ed = eg.attributes.length; ee < ed; ee++) {
eh = eg.attributes[ee];
eb = new cT(eh.getname, eh.nodeName, eh.namespaceURI, eh.nodeValue, eh.nodeType);
ef.attributes.push(eb)
}
}
if (eg.childNodes) {
for (ee = 0, ed = eg.childNodes.length; ee < ed; ee++) {
var ec = eg.childNodes[ee];
ea = ef.parseChildrenRecursive(ef, ec);
if (ea !== null) {
ef.children.push(ea)
}
}
}
return ef
},
createElement: function(eb, ec, ed, ea) {
if (ed === t) {
return new b9(eb, ec)
}
return new b9(eb, ec, ed, ea)
},
createPCDataElement: function(eb, ea) {
if (eb.replace(/^\s+$/g, "") === "") {
return null
}
var ec = new b9;
ec.type = "TEXT";
ec.content = eb;
return ec
},
createCDataElement: function(ec) {
var ed = this.createPCDataElement(ec);
if (ed === null) {
return null
}
ed.type = "CDATA";
var eb = {
"<": "<",
">": ">",
"'": "'",
'"': """
},
ea;
for (ea in eb) {
if (!Object.hasOwnProperty(eb, ea)) {
ec = ec.replace(new RegExp(ea, "g"), eb[ea])
}
}
ed.cdata = ec;
return ed
},
hasAttribute: function() {
if (arguments.length === 1) {
return this.getAttribute(arguments[0]) !== null
}
if (arguments.length === 2) {
return this.getAttribute(arguments[0], arguments[1]) !== null
}
},
equals: function(ef) {
if (!(ef instanceof b9)) {
return false
}
var ec, eb;
if (this.fullName !== ef.fullName) {
return false
}
if (this.attributes.length !== ef.getAttributeCount()) {
return false
}
if (this.attributes.length !== ef.attributes.length) {
return false
}
var ej, eh, ea, eg, ei;
for (ec = 0, eb = this.attributes.length; ec < eb; ec++) {
ej = this.attributes[ec].getName();
eh = this.attributes[ec].getNamespace();
ei = ef.findAttribute(ej, eh);
if (ei === null) {
return false
}
if (this.attributes[ec].getValue() !== ei.getValue()) {
return false
}
if (this.attributes[ec].getType() !== ei.getType()) {
return false
}
}
if (this.children.length !== ef.getChildCount()) {
return false
}
if (this.children.length > 0) {
var ee, ed;
for (ec = 0, eb = this.children.length; ec < eb; ec++) {
ee = this.getChild(ec);
ed = ef.getChild(ec);
if (!ee.equals(ed)) {
return false
}
}
return true
}
return this.content === ef.content
},
getContent: function() {
if (this.type === "TEXT" || this.type === "CDATA") {
return this.content
}
var ea = this.children;
if (ea.length === 1 && (ea[0].type === "TEXT" || ea[0].type === "CDATA")) {
return ea[0].content
}
return null
},
getAttribute: function() {
var ea;
if (arguments.length === 2) {
ea = this.findAttribute(arguments[0]);
if (ea) {
return ea.getValue()
}
return arguments[1]
} else {
if (arguments.length === 1) {
ea = this.findAttribute(arguments[0]);
if (ea) {
return ea.getValue()
}
return null
} else {
if (arguments.length === 3) {
ea = this.findAttribute(arguments[0], arguments[1]);
if (ea) {
return ea.getValue()
}
return arguments[2]
}
}
}
},
getStringAttribute: function() {
if (arguments.length === 1) {
return this.getAttribute(arguments[0])
}
if (arguments.length === 2) {
return this.getAttribute(arguments[0], arguments[1])
}
return this.getAttribute(arguments[0], arguments[1], arguments[2])
},
getString: function(ea) {
return this.getStringAttribute(ea)
},
getFloatAttribute: function() {
if (arguments.length === 1) {
return parseFloat(this.getAttribute(arguments[0], 0))
}
if (arguments.length === 2) {
return this.getAttribute(arguments[0], arguments[1])
}
return this.getAttribute(arguments[0], arguments[1], arguments[2])
},
getFloat: function(ea) {
return this.getFloatAttribute(ea)
},
getIntAttribute: function() {
if (arguments.length === 1) {
return this.getAttribute(arguments[0], 0)
}
if (arguments.length === 2) {
return this.getAttribute(arguments[0], arguments[1])
}
return this.getAttribute(arguments[0], arguments[1], arguments[2])
},
getInt: function(ea) {
return this.getIntAttribute(ea)
},
hasChildren: function() {
return this.children.length > 0
},
addChild: function(ea) {
if (ea !== null) {
ea.parent = this;
this.children.push(ea)
}
},
insertChild: function(ec, ea) {
if (ec) {
if (ec.getLocalName() === null && !this.hasChildren()) {
var eb = this.children[this.children.length - 1];
if (eb.getLocalName() === null) {
eb.setContent(eb.getContent() + ec.getContent());
return
}
}
ec.parent = this;
this.children.splice(ea, 0, ec)
}
},
getChild: function(eb) {
if (typeof eb === "number") {
return this.children[eb]
}
if (eb.indexOf("/") !== -1) {
return this.getChildRecursive(eb.split("/"), 0)
}
var ea, ee;
for (var ed = 0, ec = this.getChildCount(); ed < ec; ed++) {
ea = this.getChild(ed);
ee = ea.getName();
if (ee !== null && ee === eb) {
return ea
}
}
return null
},
getChildren: function() {
if (arguments.length === 1) {
if (typeof arguments[0] === "number") {
return this.getChild(arguments[0])
}
if (arguments[0].indexOf("/") !== -1) {
return this.getChildrenRecursive(arguments[0].split("/"), 0)
}
var ee = [];
var ea, ed;
for (var ec = 0, eb = this.getChildCount(); ec < eb; ec++) {
ea = this.getChild(ec);
ed = ea.getName();
if (ed !== null && ed === arguments[0]) {
ee.push(ea)
}
}
return ee
}
return this.children
},
getChildCount: function() {
return this.children.length
},
getChildRecursive: function(eb, eg) {
if (eg === eb.length) {
return this
}
var ea, ef, ee = eb[eg];
for (var ed = 0, ec = this.getChildCount(); ed < ec; ed++) {
ea = this.getChild(ed);
ef = ea.getName();
if (ef !== null && ef === ee) {
return ea.getChildRecursive(eb, eg + 1)
}
}
return null
},
getChildrenRecursive: function(ea, ee) {
if (ee === ea.length - 1) {
return this.getChildren(ea[ee])
}
var ed = this.getChildren(ea[ee]);
var ec = [];
for (var eb = 0; eb < ed.length; eb++) {
ec = ec.concat(ed[eb].getChildrenRecursive(ea, ee + 1))
}
return ec
},
isLeaf: function() {
return !this.hasChildren()
},
listChildren: function() {
var ea = [];
for (var ec = 0, eb = this.children.length; ec < eb; ec++) {
ea.push(this.getChild(ec).getName())
}
return ea
},
removeAttribute: function(eb, ed) {
this.namespace = ed || "";
for (var ec = 0, ea = this.attributes.length; ec < ea; ec++) {
if (this.attributes[ec].getName() === eb && this.attributes[ec].getNamespace() === this.namespace) {
this.attributes.splice(ec, 1);
break
}
}
},
removeChild: function(ec) {
if (ec) {
for (var eb = 0, ea = this.children.length; eb < ea; eb++) {
if (this.children[eb].equals(ec)) {
this.children.splice(eb, 1);
break
}
}
}
},
removeChildAtIndex: function(ea) {
if (this.children.length > ea) {
this.children.splice(ea, 1)
}
},
findAttribute: function(eb, ed) {
this.namespace = ed || "";
for (var ec = 0, ea = this.attributes.length; ec < ea; ec++) {
if (this.attributes[ec].getName() === eb && this.attributes[ec].getNamespace() === this.namespace) {
return this.attributes[ec]
}
}
return null
},
setAttribute: function() {
var ea;
if (arguments.length === 3) {
var ec = arguments[0].indexOf(":");
var eb = arguments[0].substring(ec + 1);
ea = this.findAttribute(eb, arguments[1]);
if (ea) {
ea.setValue(arguments[2])
} else {
ea = new cT(arguments[0], eb, arguments[1], arguments[2], "CDATA");
this.attributes.push(ea)
}
} else {
ea = this.findAttribute(arguments[0]);
if (ea) {
ea.setValue(arguments[1])
} else {
ea = new cT(arguments[0], arguments[0], null, arguments[1], "CDATA");
this.attributes.push(ea)
}
}
},
setString: function(ea, eb) {
this.setAttribute(ea, eb)
},
setInt: function(ea, eb) {
this.setAttribute(ea, eb)
},
setFloat: function(ea, eb) {
this.setAttribute(ea, eb)
},
setContent: function(ea) {
if (this.children.length > 0) {
F.debug("Tried to set content for XMLElement with children")
}
this.content = ea
},
setName: function() {
if (arguments.length === 1) {
this.name = arguments[0];
this.fullName = arguments[0];
this.namespace = null
} else {
var ea = arguments[0].indexOf(":");
if (arguments[1] === null || ea < 0) {
this.name = arguments[0]
} else {
this.name = arguments[0].substring(ea + 1)
}
this.fullName = arguments[0];
this.namespace = arguments[1]
}
},
getName: function() {
return this.fullName
},
getLocalName: function() {
return this.name
},
getAttributeCount: function() {
return this.attributes.length
},
toString: function() {
if (this.type === "TEXT") {
return this.content
}
if (this.type === "CDATA") {
return this.cdata
}
var ec = this.fullName;
var ed = "<" + ec;
var eb, ee;
for (eb = 0; eb < this.attributes.length; eb++) {
var ea = this.attributes[eb];
ed += " " + ea.getName() + '="' + ea.getValue() + '"'
}
if (this.children.length === 0) {
if (this.content === "") {
ed += "/>"
} else {
ed += ">" + this.content + "</" + ec + ">"
}
} else {
ed += ">";
for (ee = 0; ee < this.children.length; ee++) {
ed += this.children[ee].toString()
}
ed += "</" + ec + ">"
}
return ed
}
};
b9.parse = function(eb) {
var ea = new b9;
ea.parse(eb);
return ea
};
var dg = cW.XML = cW.XMLElement;
cW.loadXML = function(ea) {
return new dg(cW, ea)
};
var cm = function(ed) {
var ea = 0;
for (var eb = 0; eb < ed.length; eb++) {
if (eb !== 0) {
ea = q.max(ea, q.abs(ed[eb]))
} else {
ea = q.abs(ed[eb])
}
}
var ec = (ea + "").indexOf(".");
if (ec === 0) {
ec = 1
} else {
if (ec === -1) {
ec = (ea + "").length
}
}
return ec
};
var aX = cW.PMatrix2D = function() {
if (arguments.length === 0) {
this.reset()
} else {
if (arguments.length === 1 && arguments[0] instanceof aX) {
this.set(arguments[0].array())
} else {
if (arguments.length === 6) {
this.set(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5])
}
}
}
};
aX.prototype = {
set: function() {
if (arguments.length === 6) {
var ea = arguments;
this.set([ea[0], ea[1], ea[2], ea[3], ea[4], ea[5]])
} else {
if (arguments.length === 1 && arguments[0] instanceof aX) {
this.elements = arguments[0].array()
} else {
if (arguments.length === 1 && arguments[0] instanceof Array) {
this.elements = arguments[0].slice()
}
}
}
},
get: function() {
var ea = new aX;
ea.set(this.elements);
return ea
},
reset: function() {
this.set([1, 0, 0, 0, 1, 0])
},
array: function aE() {
return this.elements.slice()
},
translate: function(eb, ea) {
this.elements[2] = eb * this.elements[0] + ea * this.elements[1] + this.elements[2];
this.elements[5] = eb * this.elements[3] + ea * this.elements[4] + this.elements[5]
},
invTranslate: function(eb, ea) {
this.translate(-eb, -ea)
},
transpose: function() {},
mult: function(eb, ec) {
var ea, ed;
if (eb instanceof A) {
ea = eb.x;
ed = eb.y;
if (!ec) {
ec = new A
}
} else {
if (eb instanceof Array) {
ea = eb[0];
ed = eb[1];
if (!ec) {
ec = []
}
}
} if (ec instanceof Array) {
ec[0] = this.elements[0] * ea + this.elements[1] * ed + this.elements[2];
ec[1] = this.elements[3] * ea + this.elements[4] * ed + this.elements[5]
} else {
if (ec instanceof A) {
ec.x = this.elements[0] * ea + this.elements[1] * ed + this.elements[2];
ec.y = this.elements[3] * ea + this.elements[4] * ed + this.elements[5];
ec.z = 0
}
}
return ec
},
multX: function(ea, eb) {
return ea * this.elements[0] + eb * this.elements[1] + this.elements[2]
},
multY: function(ea, eb) {
return ea * this.elements[3] + eb * this.elements[4] + this.elements[5]
},
skewX: function(ea) {
this.apply(1, 0, 1, ea, 0, 0)
},
skewY: function(ea) {
this.apply(1, 0, 1, 0, ea, 0)
},
shearX: function(ea) {
this.apply(1, 0, 1, q.tan(ea), 0, 0)
},
shearY: function(ea) {
this.apply(1, 0, 1, 0, q.tan(ea), 0)
},
determinant: function() {
return this.elements[0] * this.elements[4] - this.elements[1] * this.elements[3]
},
invert: function() {
var ef = this.determinant();
if (q.abs(ef) > -2147483648) {
var eb = this.elements[0];
var eg = this.elements[1];
var ee = this.elements[2];
var ed = this.elements[3];
var ec = this.elements[4];
var ea = this.elements[5];
this.elements[0] = ec / ef;
this.elements[3] = -ed / ef;
this.elements[1] = -eg / ef;
this.elements[4] = eb / ef;
this.elements[2] = (eg * ea - ec * ee) / ef;
this.elements[5] = (ed * ee - eb * ea) / ef;
return true
}
return false
},
scale: function(eb, ea) {
if (eb && !ea) {
ea = eb
}
if (eb && ea) {
this.elements[0] *= eb;
this.elements[1] *= ea;
this.elements[3] *= eb;
this.elements[4] *= ea
}
},
invScale: function(eb, ea) {
if (eb && !ea) {
ea = eb
}
this.scale(1 / eb, 1 / ea)
},
apply: function() {
var ec;
if (arguments.length === 1 && arguments[0] instanceof aX) {
ec = arguments[0].array()
} else {
if (arguments.length === 6) {
ec = Array.prototype.slice.call(arguments)
} else {
if (arguments.length === 1 && arguments[0] instanceof Array) {
ec = arguments[0]
}
}
}
var ea = [0, 0, this.elements[2], 0, 0, this.elements[5]];
var ed = 0;
for (var ee = 0; ee < 2; ee++) {
for (var eb = 0; eb < 3; eb++, ed++) {
ea[ed] += this.elements[ee * 3 + 0] * ec[eb + 0] + this.elements[ee * 3 + 1] * ec[eb + 3]
}
}
this.elements = ea.slice()
},
preApply: function() {
var eb;
if (arguments.length === 1 && arguments[0] instanceof aX) {
eb = arguments[0].array()
} else {
if (arguments.length === 6) {
eb = Array.prototype.slice.call(arguments)
} else {
if (arguments.length === 1 && arguments[0] instanceof Array) {
eb = arguments[0]
}
}
}
var ea = [0, 0, eb[2], 0, 0, eb[5]];
ea[2] = eb[2] + this.elements[2] * eb[0] + this.elements[5] * eb[1];
ea[5] = eb[5] + this.elements[2] * eb[3] + this.elements[5] * eb[4];
ea[0] = this.elements[0] * eb[0] + this.elements[3] * eb[1];
ea[3] = this.elements[0] * eb[3] + this.elements[3] * eb[4];
ea[1] = this.elements[1] * eb[0] + this.elements[4] * eb[1];
ea[4] = this.elements[1] * eb[3] + this.elements[4] * eb[4];
this.elements = ea.slice()
},
rotate: function(ec) {
var ee = q.cos(ec);
var ea = q.sin(ec);
var ed = this.elements[0];
var eb = this.elements[1];
this.elements[0] = ee * ed + ea * eb;
this.elements[1] = -ea * ed + ee * eb;
ed = this.elements[3];
eb = this.elements[4];
this.elements[3] = ee * ed + ea * eb;
this.elements[4] = -ea * ed + ee * eb
},
rotateZ: function(ea) {
this.rotate(ea)
},
invRotateZ: function(ea) {
this.rotateZ(ea - q.PI)
},
print: function() {
var eb = cm(this.elements);
var ea = "" + cW.nfs(this.elements[0], eb, 4) + " " + cW.nfs(this.elements[1], eb, 4) + " " + cW.nfs(this.elements[2], eb, 4) + "\n" + cW.nfs(this.elements[3], eb, 4) + " " + cW.nfs(this.elements[4], eb, 4) + " " + cW.nfs(this.elements[5], eb, 4) + "\n\n";
cW.println(ea)
}
};
var aP = cW.PMatrix3D = function() {
this.reset()
};
aP.prototype = {
set: function() {
if (arguments.length === 16) {
this.elements = Array.prototype.slice.call(arguments)
} else {
if (arguments.length === 1 && arguments[0] instanceof aP) {
this.elements = arguments[0].array()
} else {
if (arguments.length === 1 && arguments[0] instanceof Array) {
this.elements = arguments[0].slice()
}
}
}
},
get: function() {
var ea = new aP;
ea.set(this.elements);
return ea
},
reset: function() {
this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
},
array: function aE() {
return this.elements.slice()
},
translate: function(eb, ea, ec) {
if (ec === t) {
ec = 0
}
this.elements[3] += eb * this.elements[0] + ea * this.elements[1] + ec * this.elements[2];
this.elements[7] += eb * this.elements[4] + ea * this.elements[5] + ec * this.elements[6];
this.elements[11] += eb * this.elements[8] + ea * this.elements[9] + ec * this.elements[10];
this.elements[15] += eb * this.elements[12] + ea * this.elements[13] + ec * this.elements[14]
},
transpose: function() {
var ea = this.elements[4];
this.elements[4] = this.elements[1];
this.elements[1] = ea;
ea = this.elements[8];
this.elements[8] = this.elements[2];
this.elements[2] = ea;
ea = this.elements[6];
this.elements[6] = this.elements[9];
this.elements[9] = ea;
ea = this.elements[3];
this.elements[3] = this.elements[12];
this.elements[12] = ea;
ea = this.elements[7];
this.elements[7] = this.elements[13];
this.elements[13] = ea;
ea = this.elements[11];
this.elements[11] = this.elements[14];
this.elements[14] = ea
},
mult: function(ec, ed) {
var ea, ef, ee, eb;
if (ec instanceof A) {
ea = ec.x;
ef = ec.y;
ee = ec.z;
eb = 1;
if (!ed) {
ed = new A
}
} else {
if (ec instanceof Array) {
ea = ec[0];
ef = ec[1];
ee = ec[2];
eb = ec[3] || 1;
if (!ed || ed.length !== 3 && ed.length !== 4) {
ed = [0, 0, 0]
}
}
} if (ed instanceof Array) {
if (ed.length === 3) {
ed[0] = this.elements[0] * ea + this.elements[1] * ef + this.elements[2] * ee + this.elements[3];
ed[1] = this.elements[4] * ea + this.elements[5] * ef + this.elements[6] * ee + this.elements[7];
ed[2] = this.elements[8] * ea + this.elements[9] * ef + this.elements[10] * ee + this.elements[11]
} else {
if (ed.length === 4) {
ed[0] = this.elements[0] * ea + this.elements[1] * ef + this.elements[2] * ee + this.elements[3] * eb;
ed[1] = this.elements[4] * ea + this.elements[5] * ef + this.elements[6] * ee + this.elements[7] * eb;
ed[2] = this.elements[8] * ea + this.elements[9] * ef + this.elements[10] * ee + this.elements[11] * eb;
ed[3] = this.elements[12] * ea + this.elements[13] * ef + this.elements[14] * ee + this.elements[15] * eb
}
}
}
if (ed instanceof A) {
ed.x = this.elements[0] * ea + this.elements[1] * ef + this.elements[2] * ee + this.elements[3];
ed.y = this.elements[4] * ea + this.elements[5] * ef + this.elements[6] * ee + this.elements[7];
ed.z = this.elements[8] * ea + this.elements[9] * ef + this.elements[10] * ee + this.elements[11]
}
return ed
},
preApply: function() {
var ec;
if (arguments.length === 1 && arguments[0] instanceof aP) {
ec = arguments[0].array()
} else {
if (arguments.length === 16) {
ec = Array.prototype.slice.call(arguments)
} else {
if (arguments.length === 1 && arguments[0] instanceof Array) {
ec = arguments[0]
}
}
}
var ea = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var ed = 0;
for (var ee = 0; ee < 4; ee++) {
for (var eb = 0; eb < 4; eb++, ed++) {
ea[ed] += this.elements[eb + 0] * ec[ee * 4 + 0] + this.elements[eb + 4] * ec[ee * 4 + 1] + this.elements[eb + 8] * ec[ee * 4 + 2] + this.elements[eb + 12] * ec[ee * 4 + 3]
}
}
this.elements = ea.slice()
},
apply: function() {
var ec;
if (arguments.length === 1 && arguments[0] instanceof aP) {
ec = arguments[0].array()
} else {
if (arguments.length === 16) {
ec = Array.prototype.slice.call(arguments)
} else {
if (arguments.length === 1 && arguments[0] instanceof Array) {
ec = arguments[0]
}
}
}
var ea = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var ed = 0;
for (var ee = 0; ee < 4; ee++) {
for (var eb = 0; eb < 4; eb++, ed++) {
ea[ed] += this.elements[ee * 4 + 0] * ec[eb + 0] + this.elements[ee * 4 + 1] * ec[eb + 4] + this.elements[ee * 4 + 2] * ec[eb + 8] + this.elements[ee * 4 + 3] * ec[eb + 12]
}
}
this.elements = ea.slice()
},
rotate: function(ee, ea, eg, ed) {
if (!eg) {
this.rotateZ(ee)
} else {
var ef = cW.cos(ee);
var ec = cW.sin(ee);
var eb = 1 - ef;
this.apply(eb * ea * ea + ef, eb * ea * eg - ec * ed, eb * ea * ed + ec * eg, 0, eb * ea * eg + ec * ed, eb * eg * eg + ef, eb * eg * ed - ec * ea, 0, eb * ea * ed - ec * eg, eb * eg * ed + ec * ea, eb * ed * ed + ef, 0, 0, 0, 0, 1)
}
},
invApply: function() {
if (ab === t) {
ab = new aP
}
var ea = arguments;
ab.set(ea[0], ea[1], ea[2], ea[3], ea[4], ea[5], ea[6], ea[7], ea[8], ea[9], ea[10], ea[11], ea[12], ea[13], ea[14], ea[15]);
if (!ab.invert()) {
return false
}
this.preApply(ab);
return true
},
rotateX: function(eb) {
var ec = cW.cos(eb);
var ea = cW.sin(eb);
this.apply([1, 0, 0, 0, 0, ec, -ea, 0, 0, ea, ec, 0, 0, 0, 0, 1])
},
rotateY: function(eb) {
var ec = cW.cos(eb);
var ea = cW.sin(eb);
this.apply([ec, 0, ea, 0, 0, 1, 0, 0, -ea, 0, ec, 0, 0, 0, 0, 1])
},
rotateZ: function(eb) {
var ec = q.cos(eb);
var ea = q.sin(eb);
this.apply([ec, -ea, 0, 0, ea, ec, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])
},
scale: function(ec, eb, ea) {
if (ec && !eb && !ea) {
eb = ea = ec
} else {
if (ec && eb && !ea) {
ea = 1
}
} if (ec && eb && ea) {
this.elements[0] *= ec;
this.elements[1] *= eb;
this.elements[2] *= ea;
this.elements[4] *= ec;
this.elements[5] *= eb;
this.elements[6] *= ea;
this.elements[8] *= ec;
this.elements[9] *= eb;
this.elements[10] *= ea;
this.elements[12] *= ec;
this.elements[13] *= eb;
this.elements[14] *= ea
}
},
skewX: function(eb) {
var ea = q.tan(eb);
this.apply(1, ea, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
},
skewY: function(eb) {
var ea = q.tan(eb);
this.apply(1, 0, 0, 0, ea, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
},
shearX: function(eb) {
var ea = q.tan(eb);
this.apply(1, ea, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
},
shearY: function(eb) {
var ea = q.tan(eb);
this.apply(1, 0, 0, 0, ea, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
},
multX: function(ea, ed, ec, eb) {
if (!ec) {
return this.elements[0] * ea + this.elements[1] * ed + this.elements[3]
}
if (!eb) {
return this.elements[0] * ea + this.elements[1] * ed + this.elements[2] * ec + this.elements[3]
}
return this.elements[0] * ea + this.elements[1] * ed + this.elements[2] * ec + this.elements[3] * eb
},
multY: function(ea, ed, ec, eb) {
if (!ec) {
return this.elements[4] * ea + this.elements[5] * ed + this.elements[7]
}
if (!eb) {
return this.elements[4] * ea + this.elements[5] * ed + this.elements[6] * ec + this.elements[7]
}
return this.elements[4] * ea + this.elements[5] * ed + this.elements[6] * ec + this.elements[7] * eb
},
multZ: function(ea, ed, ec, eb) {
if (!eb) {
return this.elements[8] * ea + this.elements[9] * ed + this.elements[10] * ec + this.elements[11]
}
return this.elements[8] * ea + this.elements[9] * ed + this.elements[10] * ec + this.elements[11] * eb
},
multW: function(ea, ed, ec, eb) {
if (!eb) {
return this.elements[12] * ea + this.elements[13] * ed + this.elements[14] * ec + this.elements[15]
}
return this.elements[12] * ea + this.elements[13] * ed + this.elements[14] * ec + this.elements[15] * eb
},
invert: function() {
var ej = this.elements[0] * this.elements[5] - this.elements[1] * this.elements[4];
var ei = this.elements[0] * this.elements[6] - this.elements[2] * this.elements[4];
var eh = this.elements[0] * this.elements[7] - this.elements[3] * this.elements[4];
var eg = this.elements[1] * this.elements[6] - this.elements[2] * this.elements[5];
var ef = this.elements[1] * this.elements[7] - this.elements[3] * this.elements[5];
var ee = this.elements[2] * this.elements[7] - this.elements[3] * this.elements[6];
var ed = this.elements[8] * this.elements[13] - this.elements[9] * this.elements[12];
var ec = this.elements[8] * this.elements[14] - this.elements[10] * this.elements[12];
var eb = this.elements[8] * this.elements[15] - this.elements[11] * this.elements[12];
var eo = this.elements[9] * this.elements[14] - this.elements[10] * this.elements[13];
var em = this.elements[9] * this.elements[15] - this.elements[11] * this.elements[13];
var el = this.elements[10] * this.elements[15] - this.elements[11] * this.elements[14];
var en = ej * el - ei * em + eh * eo + eg * eb - ef * ec + ee * ed;
if (q.abs(en) <= 1e-9) {
return false
}
var ek = [];
ek[0] = +this.elements[5] * el - this.elements[6] * em + this.elements[7] * eo;
ek[4] = -this.elements[4] * el + this.elements[6] * eb - this.elements[7] * ec;
ek[8] = +this.elements[4] * em - this.elements[5] * eb + this.elements[7] * ed;
ek[12] = -this.elements[4] * eo + this.elements[5] * ec - this.elements[6] * ed;
ek[1] = -this.elements[1] * el + this.elements[2] * em - this.elements[3] * eo;
ek[5] = +this.elements[0] * el - this.elements[2] * eb + this.elements[3] * ec;
ek[9] = -this.elements[0] * em + this.elements[1] * eb - this.elements[3] * ed;
ek[13] = +this.elements[0] * eo - this.elements[1] * ec + this.elements[2] * ed;
ek[2] = +this.elements[13] * ee - this.elements[14] * ef + this.elements[15] * eg;
ek[6] = -this.elements[12] * ee + this.elements[14] * eh - this.elements[15] * ei;
ek[10] = +this.elements[12] * ef - this.elements[13] * eh + this.elements[15] * ej;
ek[14] = -this.elements[12] * eg + this.elements[13] * ei - this.elements[14] * ej;
ek[3] = -this.elements[9] * ee + this.elements[10] * ef - this.elements[11] * eg;
ek[7] = +this.elements[8] * ee - this.elements[10] * eh + this.elements[11] * ei;
ek[11] = -this.elements[8] * ef + this.elements[9] * eh - this.elements[11] * ej;
ek[15] = +this.elements[8] * eg - this.elements[9] * ei + this.elements[10] * ej;
var ea = 1 / en;
ek[0] *= ea;
ek[1] *= ea;
ek[2] *= ea;
ek[3] *= ea;
ek[4] *= ea;
ek[5] *= ea;
ek[6] *= ea;
ek[7] *= ea;
ek[8] *= ea;
ek[9] *= ea;
ek[10] *= ea;
ek[11] *= ea;
ek[12] *= ea;
ek[13] *= ea;
ek[14] *= ea;
ek[15] *= ea;
this.elements = ek.slice();
return true
},
toString: function() {
var eb = "";
for (var ea = 0; ea < 15; ea++) {
eb += this.elements[ea] + ", "
}
eb += this.elements[15];
return eb
},
print: function() {
var eb = cm(this.elements);
var ea = "" + cW.nfs(this.elements[0], eb, 4) + " " + cW.nfs(this.elements[1], eb, 4) + " " + cW.nfs(this.elements[2], eb, 4) + " " + cW.nfs(this.elements[3], eb, 4) + "\n" + cW.nfs(this.elements[4], eb, 4) + " " + cW.nfs(this.elements[5], eb, 4) + " " + cW.nfs(this.elements[6], eb, 4) + " " + cW.nfs(this.elements[7], eb, 4) + "\n" + cW.nfs(this.elements[8], eb, 4) + " " + cW.nfs(this.elements[9], eb, 4) + " " + cW.nfs(this.elements[10], eb, 4) + " " + cW.nfs(this.elements[11], eb, 4) + "\n" + cW.nfs(this.elements[12], eb, 4) + " " + cW.nfs(this.elements[13], eb, 4) + " " + cW.nfs(this.elements[14], eb, 4) + " " + cW.nfs(this.elements[15], eb, 4) + "\n\n";
cW.println(ea)
},
invTranslate: function(eb, ea, ec) {
this.preApply(1, 0, 0, -eb, 0, 1, 0, -ea, 0, 0, 1, -ec, 0, 0, 0, 1)
},
invRotateX: function(eb) {
var ec = q.cos(-eb);
var ea = q.sin(-eb);
this.preApply([1, 0, 0, 0, 0, ec, -ea, 0, 0, ea, ec, 0, 0, 0, 0, 1])
},
invRotateY: function(eb) {
var ec = q.cos(-eb);
var ea = q.sin(-eb);
this.preApply([ec, 0, ea, 0, 0, 1, 0, 0, -ea, 0, ec, 0, 0, 0, 0, 1])
},
invRotateZ: function(eb) {
var ec = q.cos(-eb);
var ea = q.sin(-eb);
this.preApply([ec, -ea, 0, 0, ea, ec, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])
},
invScale: function(ea, ec, eb) {
this.preApply([1 / ea, 0, 0, 0, 0, 1 / ec, 0, 0, 0, 0, 1 / eb, 0, 0, 0, 0, 1])
}
};
var V = cW.PMatrixStack = function() {
this.matrixStack = []
};
V.prototype.load = function() {
var ea = dY.$newPMatrix();
if (arguments.length === 1) {
ea.set(arguments[0])
} else {
ea.set(arguments)
}
this.matrixStack.push(ea)
};
bR.prototype.$newPMatrix = function() {
return new aX
};
bB.prototype.$newPMatrix = function() {
return new aP
};
V.prototype.push = function() {
this.matrixStack.push(this.peek())
};
V.prototype.pop = function() {
return this.matrixStack.pop()
};
V.prototype.peek = function() {
var ea = dY.$newPMatrix();
ea.set(this.matrixStack[this.matrixStack.length - 1]);
return ea
};
V.prototype.mult = function(ea) {
this.matrixStack[this.matrixStack.length - 1].apply(ea)
};
cW.split = function(eb, ea) {
return eb.split(ea)
};
cW.splitTokens = function(eg, ef) {
if (ef === t) {
return eg.split(/\s+/g)
}
var ed = ef.split(/()/g),
eb = "",
ea = eg.length,
ec, eh, ee = [];
for (ec = 0; ec < ea; ec++) {
eh = eg[ec];
if (ed.indexOf(eh) > -1) {
if (eb !== "") {
ee.push(eb)
}
eb = ""
} else {
eb += eh
}
}
if (eb !== "") {
ee.push(eb)
}
return ee
};
cW.append = function(eb, ea) {
eb[eb.length] = ea;
return eb
};
cW.concat = function(eb, ea) {
return eb.concat(ea)
};
cW.sort = function(ef, ed) {
var eb = [];
if (ef.length > 0) {
var ee = ed > 0 ? ed : ef.length;
for (var ec = 0; ec < ee; ec++) {
eb.push(ef[ec])
}
if (typeof ef[0] === "string") {
eb.sort()
} else {
eb.sort(function(eh, eg) {
return eh - eg
})
} if (ed > 0) {
for (var ea = eb.length; ea < ef.length; ea++) {
eb.push(ef[ea])
}
}
}
return eb
};
cW.splice = function(ee, ed, eb) {
if (ed.length === 0) {
return ee
}
if (ed instanceof Array) {
for (var ec = 0, ea = eb; ec < ed.length; ea++, ec++) {
ee.splice(ea, 0, ed[ec])
}
} else {
ee.splice(eb, 0, ed)
}
return ee
};
cW.subset = function(ed, ec, eb) {
var ea = eb !== t ? ec + eb : ed.length;
return ed.slice(ec, ea)
};
cW.join = function(eb, ea) {
return eb.join(ea)
};
cW.shorten = function(ed) {
var eb = [];
var ea = ed.length;
for (var ec = 0; ec < ea; ec++) {
eb[ec] = ed[ec]
}
eb.pop();
return eb
};
cW.expand = function(ec, ed) {
var eb = ec.slice(0),
ea = ed || ec.length * 2;
eb.length = ea;
return eb
};
cW.arrayCopy = function() {
var eg, ee = 0,
ec, eb = 0,
ef;
if (arguments.length === 2) {
eg = arguments[0];
ec = arguments[1];
ef = eg.length
} else {
if (arguments.length === 3) {
eg = arguments[0];
ec = arguments[1];
ef = arguments[2]
} else {
if (arguments.length === 5) {
eg = arguments[0];
ee = arguments[1];
ec = arguments[2];
eb = arguments[3];
ef = arguments[4]
}
}
}
for (var ed = ee, ea = eb; ed < ef + ee; ed++, ea++) {
if (ec[ea] !== t) {
ec[ea] = eg[ed]
} else {
throw "array index out of bounds exception"
}
}
};
cW.reverse = function(ea) {
return ea.reverse()
};
cW.mix = function(eb, ea, ec) {
return eb + ((ea - eb) * ec >> 8)
};
cW.peg = function(ea) {
return ea < 0 ? 0 : ea > 255 ? 255 : ea
};
cW.modes = function() {
var ef = 4278190080,
ec = 16711680,
eb = 65280,
ee = 255,
ed = q.min,
ea = q.max;
function eg(el, eo, ek, et, ev, eu, em, eq, ep, ei, ej) {
var es = ed(((el & 4278190080) >>> 24) + eo, 255) << 24;
var eh = ek + ((ep - ek) * eo >> 8);
eh = (eh < 0 ? 0 : eh > 255 ? 255 : eh) << 16;
var en = et + ((ei - et) * eo >> 8);
en = (en < 0 ? 0 : en > 255 ? 255 : en) << 8;
var er = ev + ((ej - ev) * eo >> 8);
er = er < 0 ? 0 : er > 255 ? 255 : er;
return es | eh | en | er
}
return {
replace: function(ei, eh) {
return eh
},
blend: function(ej, ei) {
var el = (ei & ef) >>> 24,
eh = ej & ec,
en = ej & eb,
ep = ej & ee,
eo = ei & ec,
ek = ei & eb,
em = ei & ee;
return ed(((ej & ef) >>> 24) + el, 255) << 24 | eh + ((eo - eh) * el >> 8) & ec | en + ((ek - en) * el >> 8) & eb | ep + ((em - ep) * el >> 8) & ee
},
add: function(ei, eh) {
var ej = (eh & ef) >>> 24;
return ed(((ei & ef) >>> 24) + ej, 255) << 24 | ed((ei & ec) + ((eh & ec) >> 8) * ej, ec) & ec | ed((ei & eb) + ((eh & eb) >> 8) * ej, eb) & eb | ed((ei & ee) + ((eh & ee) * ej >> 8), ee)
},
subtract: function(ei, eh) {
var ej = (eh & ef) >>> 24;
return ed(((ei & ef) >>> 24) + ej, 255) << 24 | ea((ei & ec) - ((eh & ec) >> 8) * ej, eb) & ec | ea((ei & eb) - ((eh & eb) >> 8) * ej, ee) & eb | ea((ei & ee) - ((eh & ee) * ej >> 8), 0)
},
lightest: function(ei, eh) {
var ej = (eh & ef) >>> 24;
return ed(((ei & ef) >>> 24) + ej, 255) << 24 | ea(ei & ec, ((eh & ec) >> 8) * ej) & ec | ea(ei & eb, ((eh & eb) >> 8) * ej) & eb | ea(ei & ee, (eh & ee) * ej >> 8)
},
darkest: function(ej, ei) {
var el = (ei & ef) >>> 24,
eh = ej & ec,
en = ej & eb,
ep = ej & ee,
eo = ed(ej & ec, ((ei & ec) >> 8) * el),
ek = ed(ej & eb, ((ei & eb) >> 8) * el),
em = ed(ej & ee, (ei & ee) * el >> 8);
return ed(((ej & ef) >>> 24) + el, 255) << 24 | eh + ((eo - eh) * el >> 8) & ec | en + ((ek - en) * el >> 8) & eb | ep + ((em - ep) * el >> 8) & ee
},
difference: function(el, ek) {
var en = (ek & ef) >>> 24,
ej = (el & ec) >> 16,
eq = (el & eb) >> 8,
es = el & ee,
er = (ek & ec) >> 16,
em = (ek & eb) >> 8,
ep = ek & ee,
eo = ej > er ? ej - er : er - ej,
eh = eq > em ? eq - em : em - eq,
ei = es > ep ? es - ep : ep - es;
return eg(el, en, ej, eq, es, er, em, ep, eo, eh, ei)
},
exclusion: function(el, ek) {
var en = (ek & ef) >>> 24,
ej = (el & ec) >> 16,
eq = (el & eb) >> 8,
es = el & ee,
er = (ek & ec) >> 16,
em = (ek & eb) >> 8,
ep = ek & ee,
eo = ej + er - (ej * er >> 7),
eh = eq + em - (eq * em >> 7),
ei = es + ep - (es * ep >> 7);
return eg(el, en, ej, eq, es, er, em, ep, eo, eh, ei)
},
multiply: function(el, ek) {
var en = (ek & ef) >>> 24,
ej = (el & ec) >> 16,
eq = (el & eb) >> 8,
es = el & ee,
er = (ek & ec) >> 16,
em = (ek & eb) >> 8,
ep = ek & ee,
eo = ej * er >> 8,
eh = eq * em >> 8,
ei = es * ep >> 8;
return eg(el, en, ej, eq, es, er, em, ep, eo, eh, ei)
},
screen: function(el, ek) {
var en = (ek & ef) >>> 24,
ej = (el & ec) >> 16,
eq = (el & eb) >> 8,
es = el & ee,
er = (ek & ec) >> 16,
em = (ek & eb) >> 8,
ep = ek & ee,
eo = 255 - ((255 - ej) * (255 - er) >> 8),
eh = 255 - ((255 - eq) * (255 - em) >> 8),
ei = 255 - ((255 - es) * (255 - ep) >> 8);
return eg(el, en, ej, eq, es, er, em, ep, eo, eh, ei)
},
hard_light: function(el, ek) {
var en = (ek & ef) >>> 24,
ej = (el & ec) >> 16,
eq = (el & eb) >> 8,
es = el & ee,
er = (ek & ec) >> 16,
em = (ek & eb) >> 8,
ep = ek & ee,
eo = er < 128 ? ej * er >> 7 : 255 - ((255 - ej) * (255 - er) >> 7),
eh = em < 128 ? eq * em >> 7 : 255 - ((255 - eq) * (255 - em) >> 7),
ei = ep < 128 ? es * ep >> 7 : 255 - ((255 - es) * (255 - ep) >> 7);
return eg(el, en, ej, eq, es, er, em, ep, eo, eh, ei)
},
soft_light: function(el, ek) {
var en = (ek & ef) >>> 24,
ej = (el & ec) >> 16,
eq = (el & eb) >> 8,
es = el & ee,
er = (ek & ec) >> 16,
em = (ek & eb) >> 8,
ep = ek & ee,
eo = (ej * er >> 7) + (ej * ej >> 8) - (ej * ej * er >> 15),
eh = (eq * em >> 7) + (eq * eq >> 8) - (eq * eq * em >> 15),
ei = (es * ep >> 7) + (es * es >> 8) - (es * es * ep >> 15);
return eg(el, en, ej, eq, es, er, em, ep, eo, eh, ei)
},
overlay: function(el, ek) {
var en = (ek & ef) >>> 24,
ej = (el & ec) >> 16,
eq = (el & eb) >> 8,
es = el & ee,
er = (ek & ec) >> 16,
em = (ek & eb) >> 8,
ep = ek & ee,
eo = ej < 128 ? ej * er >> 7 : 255 - ((255 - ej) * (255 - er) >> 7),
eh = eq < 128 ? eq * em >> 7 : 255 - ((255 - eq) * (255 - em) >> 7),
ei = es < 128 ? es * ep >> 7 : 255 - ((255 - es) * (255 - ep) >> 7);
return eg(el, en, ej, eq, es, er, em, ep, eo, eh, ei)
},
dodge: function(el, ek) {
var en = (ek & ef) >>> 24,
ej = (el & ec) >> 16,
eq = (el & eb) >> 8,
es = el & ee,
er = (ek & ec) >> 16,
em = (ek & eb) >> 8,
ep = ek & ee;
var eo = 255;
if (er !== 255) {
eo = (ej << 8) / (255 - er);
eo = eo < 0 ? 0 : eo > 255 ? 255 : eo
}
var eh = 255;
if (em !== 255) {
eh = (eq << 8) / (255 - em);
eh = eh < 0 ? 0 : eh > 255 ? 255 : eh
}
var ei = 255;
if (ep !== 255) {
ei = (es << 8) / (255 - ep);
ei = ei < 0 ? 0 : ei > 255 ? 255 : ei
}
return eg(el, en, ej, eq, es, er, em, ep, eo, eh, ei)
},
burn: function(el, ek) {
var en = (ek & ef) >>> 24,
ej = (el & ec) >> 16,
eq = (el & eb) >> 8,
es = el & ee,
er = (ek & ec) >> 16,
em = (ek & eb) >> 8,
ep = ek & ee;
var eo = 0;
if (er !== 0) {
eo = (255 - ej << 8) / er;
eo = 255 - (eo < 0 ? 0 : eo > 255 ? 255 : eo)
}
var eh = 0;
if (em !== 0) {
eh = (255 - eq << 8) / em;
eh = 255 - (eh < 0 ? 0 : eh > 255 ? 255 : eh)
}
var ei = 0;
if (ep !== 0) {
ei = (255 - es << 8) / ep;
ei = 255 - (ei < 0 ? 0 : ei > 255 ? 255 : ei)
}
return eg(el, en, ej, eq, es, er, em, ep, eo, eh, ei)
}
}
}();
function dH(ef, ee, ec, eb) {
var ea, ed, eh, ei;
if (cY === 3) {
var eg = cW.color.toRGB(ef, ee, ec);
ea = eg[0];
ed = eg[1];
eh = eg[2]
} else {
ea = q.round(255 * (ef / bJ));
ed = q.round(255 * (ee / bI));
eh = q.round(255 * (ec / bG))
}
ei = q.round(255 * (eb / bU));
ea = ea < 0 ? 0 : ea;
ed = ed < 0 ? 0 : ed;
eh = eh < 0 ? 0 : eh;
ei = ei < 0 ? 0 : ei;
ea = ea > 255 ? 255 : ea;
ed = ed > 255 ? 255 : ed;
eh = eh > 255 ? 255 : eh;
ei = ei > 255 ? 255 : ei;
return ei << 24 & 4278190080 | ea << 16 & 16711680 | ed << 8 & 65280 | eh & 255
}
function dK(ea, ec) {
var eb;
if (ea & 4278190080) {
eb = q.round(255 * (ec / bU));
eb = eb > 255 ? 255 : eb;
eb = eb < 0 ? 0 : eb;
return ea - (ea & 4278190080) + (eb << 24 & 4278190080)
}
if (cY === 1) {
return dH(ea, ea, ea, ec)
}
if (cY === 3) {
return dH(0, 0, ea / bJ * bG, ec)
}
}
function dM(ea) {
if (ea <= bJ && ea >= 0) {
if (cY === 1) {
return dH(ea, ea, ea, bU)
}
if (cY === 3) {
return dH(0, 0, ea / bJ * bG, bU)
}
}
if (ea) {
if (ea > 2147483647) {
ea -= 4294967296
}
return ea
}
}
cW.color = function(ea, ed, ec, eb) {
if (ea !== t && ed !== t && ec !== t && eb !== t) {
return dH(ea, ed, ec, eb)
}
if (ea !== t && ed !== t && ec !== t) {
return dH(ea, ed, ec, bU)
}
if (ea !== t && ed !== t) {
return dK(ea, ed)
}
if (typeof ea === "number") {
return dM(ea)
}
return dH(bJ, bI, bG, bU)
};
cW.color.toString = function(ea) {
return "rgba(" + ((ea >> 16) & 255) + "," + ((ea >> 8) & 255) + "," + (ea & 255) + "," + ((ea >> 24) & 255) / 255 + ")"
};
cW.color.toInt = function(ed, ec, ea, eb) {
return eb << 24 & 4278190080 | ed << 16 & 16711680 | ec << 8 & 65280 | ea & 255
};
cW.color.toArray = function(ea) {
return [(ea >> 16) & 255, (ea >> 8) & 255, ea & 255, (ea >> 24) & 255]
};
cW.color.toGLArray = function(ea) {
return [((ea & 16711680) >>> 16) / 255, ((ea >> 8) & 255) / 255, (ea & 255) / 255, ((ea >> 24) & 255) / 255]
};
cW.color.toRGB = function(ec, ei, ef) {
ec = ec > bJ ? bJ : ec;
ei = ei > bI ? bI : ei;
ef = ef > bG ? bG : ef;
ec = ec / bJ * 360;
ei = ei / bI * 100;
ef = ef / bG * 100;
var eh = q.round(ef / 100 * 255);
if (ei === 0) {
return [eh, eh, eh]
}
var ed = ec % 360;
var ee = ed % 60;
var eb = q.round(ef * (100 - ei) / 10000 * 255);
var ea = q.round(ef * (6000 - ei * ee) / 600000 * 255);
var eg = q.round(ef * (6000 - ei * (60 - ee)) / 600000 * 255);
switch (q.floor(ed / 60)) {
case 0:
return [eh, eg, eb];
case 1:
return [ea, eh, eb];
case 2:
return [eb, eh, eg];
case 3:
return [eb, ea, eh];
case 4:
return [eg, eb, eh];
case 5:
return [eh, eb, ea]
}
};
function aS(eh) {
var eg, ef, eb;
eg = ((eh >> 16) & 255) / 255;
ef = ((eh >> 8) & 255) / 255;
eb = (eh & 255) / 255;
var ea = cW.max(cW.max(eg, ef), eb),
ed = cW.min(cW.min(eg, ef), eb),
ec, ee;
if (ed === ea) {
return [0, 0, ea * bG]
}
ee = (ea - ed) / ea;
if (eg === ea) {
ec = (ef - eb) / (ea - ed)
} else {
if (ef === ea) {
ec = 2 + (eb - eg) / (ea - ed)
} else {
ec = 4 + (eg - ef) / (ea - ed)
}
}
ec /= 6;
if (ec < 0) {
ec += 1
} else {
if (ec > 1) {
ec -= 1
}
}
return [ec * bJ, ee * bI, ea * bG]
}
cW.brightness = function(ea) {
return aS(ea)[2]
};
cW.saturation = function(ea) {
return aS(ea)[1]
};
cW.hue = function(ea) {
return aS(ea)[0]
};
cW.red = function(ea) {
return ((ea >> 16) & 255) / 255 * bJ
};
cW.green = function(ea) {
return ((ea & 65280) >>> 8) / 255 * bI
};
cW.blue = function(ea) {
return (ea & 255) / 255 * bG
};
cW.alpha = function(ea) {
return ((ea >> 24) & 255) / 255 * bU
};
cW.lerpColor = function(em, el, ef) {
var ek, eq, er, es, eo, ea, eg, eu, en, ev, ee, et;
var ei, eh, eb, ep, ej;
var ed = cW.color(em);
var ec = cW.color(el);
if (cY === 3) {
ei = aS(ed);
eu = ((ed >> 24) & 255) / bU;
eh = aS(ec);
et = ((ec & 4278190080) >>> 24) / bU;
ep = cW.lerp(ei[0], eh[0], ef);
ej = cW.lerp(ei[1], eh[1], ef);
er = cW.lerp(ei[2], eh[2], ef);
eb = cW.color.toRGB(ep, ej, er);
es = cW.lerp(eu, et, ef) * bU;
return es << 24 & 4278190080 | (eb[0] & 255) << 16 | (eb[1] & 255) << 8 | eb[2] & 255
}
eo = (ed >> 16) & 255;
ea = (ed >> 8) & 255;
eg = ed & 255;
eu = ((ed >> 24) & 255) / bU;
en = (ec & 16711680) >>> 16;
ev = (ec >> 8) & 255;
ee = ec & 255;
et = ((ec >> 24) & 255) / bU;
ek = cW.lerp(eo, en, ef) | 0;
eq = cW.lerp(ea, ev, ef) | 0;
er = cW.lerp(eg, ee, ef) | 0;
es = cW.lerp(eu, et, ef) * bU;
return es << 24 & 4278190080 | ek << 16 & 16711680 | eq << 8 & 65280 | er & 255
};
cW.colorMode = function() {
cY = arguments[0];
if (arguments.length > 1) {
bJ = arguments[1];
bI = arguments[2] || arguments[1];
bG = arguments[3] || arguments[1];
bU = arguments[4] || arguments[1]
}
};
cW.blendColor = function(eb, ea, ec) {
if (ec === 0) {
return cW.modes.replace(eb, ea)
} else {
if (ec === 1) {
return cW.modes.blend(eb, ea)
} else {
if (ec === 2) {
return cW.modes.add(eb, ea)
} else {
if (ec === 4) {
return cW.modes.subtract(eb, ea)
} else {
if (ec === 8) {
return cW.modes.lightest(eb, ea)
} else {
if (ec === 16) {
return cW.modes.darkest(eb, ea)
} else {
if (ec === 32) {
return cW.modes.difference(eb, ea)
} else {
if (ec === 64) {
return cW.modes.exclusion(eb, ea)
} else {
if (ec === 128) {
return cW.modes.multiply(eb, ea)
} else {
if (ec === 256) {
return cW.modes.screen(eb, ea)
} else {
if (ec === 1024) {
return cW.modes.hard_light(eb, ea)
} else {
if (ec === 2048) {
return cW.modes.soft_light(eb, ea)
} else {
if (ec === 512) {
return cW.modes.overlay(eb, ea)
} else {
if (ec === 4096) {
return cW.modes.dodge(eb, ea)
} else {
if (ec === 8192) {
return cW.modes.burn(eb, ea)
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
};
function aD() {
d8.save()
}
function cP() {
d8.restore();
b3 = true;
aq = true
}
cW.printMatrix = function() {
dJ.print()
};
bR.prototype.translate = function(ea, eb) {
dJ.translate(ea, eb);
aT.invTranslate(ea, eb);
d8.translate(ea, eb)
};
bB.prototype.translate = function(ea, ec, eb) {
dJ.translate(ea, ec, eb);
aT.invTranslate(ea, ec, eb)
};
bR.prototype.scale = function(ea, eb) {
dJ.scale(ea, eb);
aT.invScale(ea, eb);
d8.scale(ea, eb || ea)
};
bB.prototype.scale = function(ea, ec, eb) {
dJ.scale(ea, ec, eb);
aT.invScale(ea, ec, eb)
};
bR.prototype.transform = function(eb) {
var ea = eb.array();
d8.transform(ea[0], ea[3], ea[1], ea[4], ea[2], ea[5])
};
bB.prototype.transformm = function(ea) {
throw "p.transform is currently not supported in 3D mode"
};
bR.prototype.pushMatrix = function() {
am.load(dJ);
da.load(aT);
aD()
};
bB.prototype.pushMatrix = function() {
am.load(dJ);
da.load(aT)
};
bR.prototype.popMatrix = function() {
dJ.set(am.pop());
aT.set(da.pop());
cP()
};
bB.prototype.popMatrix = function() {
dJ.set(am.pop());
aT.set(da.pop())
};
bR.prototype.resetMatrix = function() {
dJ.reset();
aT.reset();
d8.setTransform(1, 0, 0, 1, 0, 0)
};
bB.prototype.resetMatrix = function() {
dJ.reset();
aT.reset()
};
ds.prototype.applyMatrix = function() {
var ea = arguments;
dJ.apply(ea[0], ea[1], ea[2], ea[3], ea[4], ea[5], ea[6], ea[7], ea[8], ea[9], ea[10], ea[11], ea[12], ea[13], ea[14], ea[15]);
aT.invApply(ea[0], ea[1], ea[2], ea[3], ea[4], ea[5], ea[6], ea[7], ea[8], ea[9], ea[10], ea[11], ea[12], ea[13], ea[14], ea[15])
};
bR.prototype.applyMatrix = function() {
var ea = arguments;
for (var eb = ea.length; eb < 16; eb++) {
ea[eb] = 0
}
ea[10] = ea[15] = 1;
ds.prototype.applyMatrix.apply(this, ea)
};
cW.rotateX = function(ea) {
dJ.rotateX(ea);
aT.invRotateX(ea)
};
bR.prototype.rotateZ = function() {
throw "rotateZ() is not supported in 2D mode. Use rotate(float) instead."
};
bB.prototype.rotateZ = function(ea) {
dJ.rotateZ(ea);
aT.invRotateZ(ea)
};
cW.rotateY = function(ea) {
dJ.rotateY(ea);
aT.invRotateY(ea)
};
bR.prototype.rotate = function(ea) {
dJ.rotateZ(ea);
aT.invRotateZ(ea);
d8.rotate(ea)
};
bB.prototype.rotate = function(ea) {
cW.rotateZ(ea)
};
bR.prototype.shearX = function(ea) {
dJ.shearX(ea);
d8.transform(1, 0, ea, 1, 0, 0)
};
bB.prototype.shearX = function(ea) {
dJ.shearX(ea)
};
bR.prototype.shearY = function(ea) {
dJ.shearY(ea);
d8.transform(1, ea, 0, 1, 0, 0)
};
bB.prototype.shearY = function(ea) {
dJ.shearY(ea)
};
cW.pushStyle = function() {
aD();
cW.pushMatrix();
var ea = {
doFill: aH,
currentFillColor: a1,
doStroke: ce,
currentStrokeColor: cv,
curTint: bf,
curRectMode: bK,
curColorMode: cY,
colorModeX: bJ,
colorModeZ: bG,
colorModeY: bI,
colorModeA: bU,
curTextFont: W,
horizontalTextAlignment: N,
verticalTextAlignment: c1,
textMode: cI,
curFontName: Y,
curTextSize: d0,
curTextAscent: a3,
curTextDescent: dA,
curTextLeading: d7
};
bm.push(ea)
};
cW.popStyle = function() {
var ea = bm.pop();
if (ea) {
cP();
cW.popMatrix();
aH = ea.doFill;
a1 = ea.currentFillColor;
ce = ea.doStroke;
cv = ea.currentStrokeColor;
bf = ea.curTint;
bK = ea.curRectMode;
cY = ea.curColorMode;
bJ = ea.colorModeX;
bG = ea.colorModeZ;
bI = ea.colorModeY;
bU = ea.colorModeA;
W = ea.curTextFont;
Y = ea.curFontName;
d0 = ea.curTextSize;
N = ea.horizontalTextAlignment;
c1 = ea.verticalTextAlignment;
cI = ea.textMode;
a3 = ea.curTextAscent;
dA = ea.curTextDescent;
d7 = ea.curTextLeading
} else {
throw "Too many popStyle() without enough pushStyle()"
}
};
cW.year = function() {
return (new Date).getFullYear()
};
cW.month = function() {
return (new Date).getMonth() + 1
};
cW.day = function() {
return (new Date).getDate()
};
cW.hour = function() {
return (new Date).getHours()
};
cW.minute = function() {
return (new Date).getMinutes()
};
cW.second = function() {
return (new Date).getSeconds()
};
cW.millis = function() {
return Date.now() - dq
};
function ct() {
var ea = (Date.now() - dt) / 1000;
P++;
var eb = P / ea;
if (ea > 0.5) {
dt = Date.now();
P = 0;
cW.__frameRate = eb
}
cW.frameCount++
}
bR.prototype.redraw = function() {
ct();
d8.lineWidth = dW;
var ea = cW.pmouseX,
eb = cW.pmouseY;
cW.pmouseX = dN;
cW.pmouseY = d5;
aD();
cW.draw();
cP();
dN = cW.mouseX;
d5 = cW.mouseY;
cW.pmouseX = ea;
cW.pmouseY = eb
};
bB.prototype.redraw = function() {
ct();
var ea = cW.pmouseX,
eb = cW.pmouseY;
cW.pmouseX = dN;
cW.pmouseY = d5;
d8.clear(d8.DEPTH_BUFFER_BIT);
dC = {
attributes: {},
locations: {}
};
cW.noLights();
cW.lightFalloff(1, 0, 0);
cW.shininess(1);
cW.ambient(255, 255, 255);
cW.specular(0, 0, 0);
cW.emissive(0, 0, 0);
cW.camera();
cW.draw();
dN = cW.mouseX;
d5 = cW.mouseY;
cW.pmouseX = ea;
cW.pmouseY = eb
};
cW.noLoop = function() {
aC = false;
ax = false;
clearInterval(b4);
cQ.onPause()
};
cW.loop = function() {
if (ax) {
return
}
dt = Date.now();
P = 0;
b4 = D.setInterval(function() {
try {
cQ.onFrameStart();
cW.redraw();
cQ.onFrameEnd()
} catch (ea) {
D.clearInterval(b4);
throw ea
}
}, az);
aC = true;
ax = true;
cQ.onLoop()
};
cW.frameRate = function(ea) {
dU = ea;
az = 1000 / dU;
if (aC) {
cW.noLoop();
cW.loop()
}
};
var au = [];
function bO(ec, eb, ea) {
if (ec.addEventListener) {
ec.addEventListener(eb, ea, false)
} else {
ec.attachEvent("on" + eb, ea)
}
au.push({
elem: ec,
type: eb,
fn: ea
})
}
function de(ea) {
var ed = ea.elem,
ec = ea.type,
eb = ea.fn;
if (ed.removeEventListener) {
ed.removeEventListener(ec, eb, false)
} else {
if (ed.detachEvent) {
ed.detachEvent("on" + ec, eb)
}
}
}
cW.exit = function() {
D.clearInterval(b4);
L(cW.externals.canvas.id);
delete ae.onmousedown;
for (var eb in F.lib) {
if (F.lib.hasOwnProperty(eb)) {
if (F.lib[eb].hasOwnProperty("detach")) {
F.lib[eb].detach(cW)
}
}
}
var ea = au.length;
while (ea--) {
de(au[ea])
}
cQ.onExit()
};
cW.cursor = function() {
if (arguments.length > 1 || arguments.length === 1 && arguments[0] instanceof cW.PImage) {
var ed = arguments[0],
ea, ef;
if (arguments.length >= 3) {
ea = arguments[1];
ef = arguments[2];
if (ea < 0 || ef < 0 || ef >= ed.height || ea >= ed.width) {
throw "x and y must be non-negative and less than the dimensions of the image"
}
} else {
ea = ed.width >>> 1;
ef = ed.height >>> 1
}
var eb = ed.toDataURL();
var ec = 'url("' + eb + '") ' + ea + " " + ef + ", default";
Z = ae.style.cursor = ec
} else {
if (arguments.length === 1) {
var ee = arguments[0];
Z = ae.style.cursor = ee
} else {
Z = ae.style.cursor = ck
}
}
};
cW.noCursor = function() {
Z = ae.style.cursor = B.NOCURSOR
};
cW.link = function(ea, eb) {
if (eb !== t) {
D.open(ea, eb)
} else {
D.location = ea
}
};
cW.beginDraw = G;
cW.endDraw = G;
bR.prototype.toImageData = function(ea, ed, eb, ec) {
ea = ea !== t ? ea : 0;
ed = ed !== t ? ed : 0;
eb = eb !== t ? eb : cW.width;
ec = ec !== t ? ec : cW.height;
return d8.getImageData(ea, ed, eb, ec)
};
bB.prototype.toImageData = function(ei, eh, ej, ee) {
ei = ei !== t ? ei : 0;
eh = eh !== t ? eh : 0;
ej = ej !== t ? ej : cW.width;
ee = ee !== t ? ee : cW.height;
var eg = d.createElement("canvas"),
ek = eg.getContext("2d"),
ed = ek.createImageData(ej, ee),
eb = new b(ej * ee * 4);
d8.readPixels(ei, eh, ej, ee, d8.RGBA, d8.UNSIGNED_BYTE, eb);
for (var ec = 0, ef = eb.length, ea = ed.data; ec < ef; ec++) {
ea[ec] = eb[(ee - 1 - q.floor(ec / 4 / ej)) * ej * 4 + ec % (ej * 4)]
}
return ed
};
cW.status = function(ea) {
D.status = ea
};
cW.binary = function(eb, ec) {
var ed;
if (ec > 0) {
ed = ec
} else {
if (eb instanceof bP) {
ed = 16;
eb |= 0
} else {
ed = 32;
while (ed > 1 && !(eb >>> ed - 1 & 1)) {
ed--
}
}
}
var ea = "";
while (ed > 0) {
ea += eb >>> --ed & 1 ? "1" : "0"
}
return ea
};
cW.unbinary = function(eb) {
var ed = eb.length - 1,
ec = 1,
ea = 0;
while (ed >= 0) {
var ee = eb[ed--];
if (ee !== "0" && ee !== "1") {
throw "the value passed into unbinary was not an 8 bit binary number"
}
if (ee === "1") {
ea += ec
}
ec <<= 1
}
return ea
};
function cX(em, ek, ee, ep, eg, en) {
var ec = em < 0 ? ee : ek;
var eb = eg === 0;
var el = eg === t || eg < 0 ? 0 : eg;
var ej = q.abs(em);
if (eb) {
el = 1;
ej *= 10;
while (q.abs(q.round(ej) - ej) > 0.000001 && el < 7) {
++el;
ej *= 10
}
} else {
if (el !== 0) {
ej *= q.pow(10, el)
}
}
var ed, ei = ej * 2;
if (q.floor(ej) === ej) {
ed = ej
} else {
if (q.floor(ei) === ei) {
var ea = q.floor(ej);
ed = ea + ea % 2
} else {
ed = q.round(ej)
}
}
var ef = "";
var eo = ep + el;
while (eo > 0 || ed > 0) {
eo--;
ef = "" + ed % 10 + ef;
ed = q.floor(ed / 10)
}
if (en !== t) {
var eh = ef.length - 3 - el;
while (eh > 0) {
ef = ef.substring(0, eh) + en + ef.substring(eh);
eh -= 3
}
}
if (el > 0) {
return ec + ef.substring(0, ef.length - el) + "." + ef.substring(ef.length - el, ef.length)
}
return ec + ef
}
function ao(eg, ef, ea, ei, eb, eh) {
if (eg instanceof Array) {
var ed = [];
for (var ec = 0, ee = eg.length; ec < ee; ec++) {
ed.push(cX(eg[ec], ef, ea, ei, eb, eh))
}
return ed
}
return cX(eg, ef, ea, ei, eb, eh)
}
cW.nf = function(ec, ea, eb) {
return ao(ec, "", "-", ea, eb)
};
cW.nfs = function(ec, ea, eb) {
return ao(ec, " ", "-", ea, eb)
};
cW.nfp = function(ec, ea, eb) {
return ao(ec, "+", "-", ea, eb)
};
cW.nfc = function(ec, ea, eb) {
return ao(ec, "", "-", ea, eb, ",")
};
var aM = function(ec, eb) {
eb = eb === t || eb === null ? eb = 8 : eb;
if (ec < 0) {
ec = 4294967295 + ec + 1
}
var ea = Number(ec).toString(16).toUpperCase();
while (ea.length < eb) {
ea = "0" + ea
}
if (ea.length >= eb) {
ea = ea.substring(ea.length - eb, ea.length)
}
return ea
};
cW.hex = function(eb, ea) {
if (arguments.length === 1) {
if (eb instanceof bP) {
ea = 4
} else {
ea = 8
}
}
return aM(eb, ea)
};
function dF(ea) {
var eb = parseInt("0x" + ea, 16);
if (eb > 2147483647) {
eb -= 4294967296
}
return eb
}
cW.unhex = function(ec) {
if (ec instanceof Array) {
var ea = [];
for (var eb = 0; eb < ec.length; eb++) {
ea.push(dF(ec[eb]))
}
return ea
}
return dF(ec)
};
cW.loadStrings = function(eb) {
if (localStorage[eb]) {
return localStorage[eb].split("\n")
}
var ea = w(eb);
if (typeof ea !== "string" || ea === "") {
return []
}
ea = ea.replace(/(\r\n?)/g, "\n").replace(/\n$/, "");
return ea.split("\n")
};
cW.saveStrings = function(eb, ea) {
localStorage[eb] = ea.join("\n")
};
cW.loadBytes = function(ec) {
var eb = w(ec);
var ea = [];
for (var ed = 0; ed < eb.length; ed++) {
ea.push(eb.charCodeAt(ed))
}
return ea
};
function bc(ea) {
return Array.prototype.slice.call(ea, 1)
}
cW.matchAll = function(eb, ea) {
var ed = [],
ec;
var ee = new RegExp(ea, "g");
while ((ec = ee.exec(eb)) !== null) {
ed.push(ec);
if (ec[0].length === 0) {
++ee.lastIndex
}
}
return ed.length > 0 ? ed : null
};
cW.__contains = function(eb, ea) {
if (typeof eb !== "string") {
return eb.contains.apply(eb, bc(arguments))
}
return eb !== null && ea !== null && typeof ea === "string" && eb.indexOf(ea) > -1
};
cW.__replaceAll = function(ea, ec, eb) {
if (typeof ea !== "string") {
return ea.replaceAll.apply(ea, bc(arguments))
}
return ea.replace(new RegExp(ec, "g"), eb)
};
cW.__replaceFirst = function(ea, ec, eb) {
if (typeof ea !== "string") {
return ea.replaceFirst.apply(ea, bc(arguments))
}
return ea.replace(new RegExp(ec, ""), eb)
};
cW.__replace = function(ed, ef, ee) {
if (typeof ed !== "string") {
return ed.replace.apply(ed, bc(arguments))
}
if (ef instanceof RegExp) {
return ed.replace(ef, ee)
}
if (typeof ef !== "string") {
ef = ef.toString()
}
if (ef === "") {
return ed
}
var ec = ed.indexOf(ef);
if (ec < 0) {
return ed
}
var eb = 0,
ea = "";
do {
ea += ed.substring(eb, ec) + ee;
eb = ec + ef.length
} while ((ec = ed.indexOf(ef, eb)) >= 0);
return ea + ed.substring(eb)
};
cW.__equals = function(eb, ea) {
if (eb.equals instanceof Function) {
return eb.equals.apply(eb, bc(arguments))
}
return eb.valueOf() === ea.valueOf()
};
cW.__equalsIgnoreCase = function(eb, ea) {
if (typeof eb !== "string") {
return eb.equalsIgnoreCase.apply(eb, bc(arguments))
}
return eb.toLowerCase() === ea.toLowerCase()
};
cW.__toCharArray = function(ec) {
if (typeof ec !== "string") {
return ec.toCharArray.apply(ec, bc(arguments))
}
var ed = [];
for (var eb = 0, ea = ec.length; eb < ea; ++eb) {
ed[eb] = new bP(ec.charAt(eb))
}
return ed
};
cW.__split = function(ed, ee, eb) {
if (typeof ed !== "string") {
return ed.split.apply(ed, bc(arguments))
}
var eg = new RegExp(ee);
if (eb === t || eb < 1) {
return ed.split(eg)
}
var ea = [],
ef = ed,
eh;
while ((eh = ef.search(eg)) !== -1 && ea.length < eb - 1) {
var ec = eg.exec(ef).toString();
ea.push(ef.substring(0, eh));
ef = ef.substring(eh + ec.length)
}
if (eh !== -1 || ef !== "") {
ea.push(ef)
}
return ea
};
cW.__codePointAt = function(ed, eb) {
var ee = ed.charCodeAt(eb),
ec, ea;
if (55296 <= ee && ee <= 56319) {
ec = ee;
ea = ed.charCodeAt(eb + 1);
return (ec - 55296) * 1024 + (ea - 56320) + 65536
}
return ee
};
cW.match = function(eb, ea) {
return eb.match(ea)
};
cW.__matches = function(eb, ea) {
return (new RegExp(ea)).test(eb)
};
cW.__startsWith = function(ea, ec, eb) {
if (typeof ea !== "string") {
return ea.startsWith.apply(ea, bc(arguments))
}
eb = eb || 0;
if (eb < 0 || eb > ea.length) {
return false
}
return ec === "" || ec === ea ? true : ea.indexOf(ec) === eb
};
cW.__endsWith = function(eb, ec) {
if (typeof eb !== "string") {
return eb.endsWith.apply(eb, bc(arguments))
}
var ea = ec ? ec.length : 0;
return ec === "" || ec === eb ? true : eb.indexOf(ec) === eb.length - ea
};
cW.__hashCode = function(ea) {
if (ea.hashCode instanceof Function) {
return ea.hashCode.apply(ea, bc(arguments))
}
return h(ea)
};
cW.__printStackTrace = function(ea) {
cW.println("Exception: " + ea.toString())
};
var d9 = [];
cW.println = function(ea) {
var eb = d9.length;
if (eb) {
F.logger.log(d9.join(""));
d9.length = 0
}
if (arguments.length === 0 && eb === 0) {
F.logger.log("")
} else {
if (arguments.length !== 0) {
F.logger.log(ea)
}
}
};
cW.print = function(ea) {
d9.push(ea)
};
cW.str = function(ec) {
if (ec instanceof Array) {
var ea = [];
for (var eb = 0; eb < ec.length; eb++) {
ea.push(ec[eb].toString() + "")
}
return ea
}
return ec.toString() + ""
};
cW.trim = function(ec) {
if (ec instanceof Array) {
var ea = [];
for (var eb = 0; eb < ec.length; eb++) {
ea.push(ec[eb].replace(/^\s*/, "").replace(/\s*$/, "").replace(/\r*$/, ""))
}
return ea
}
return ec.replace(/^\s*/, "").replace(/\s*$/, "").replace(/\r*$/, "")
};
function aR(ea) {
if (typeof ea === "number") {
return ea !== 0
}
if (typeof ea === "boolean") {
return ea
}
if (typeof ea === "string") {
return ea.toLowerCase() === "true"
}
if (ea instanceof bP) {
return ea.code === 49 || ea.code === 84 || ea.code === 116
}
}
cW.parseBoolean = function(ec) {
if (ec instanceof Array) {
var ea = [];
for (var eb = 0; eb < ec.length; eb++) {
ea.push(aR(ec[eb]))
}
return ea
}
return aR(ec)
};
cW.parseByte = function(ec) {
if (ec instanceof Array) {
var ea = [];
for (var eb = 0; eb < ec.length; eb++) {
ea.push(0 - (ec[eb] & 128) | ec[eb] & 127)
}
return ea
}
return 0 - (ec & 128) | ec & 127
};
cW.parseChar = function(ec) {
if (typeof ec === "number") {
return new bP(String.fromCharCode(ec & 65535))
}
if (ec instanceof Array) {
var ea = [];
for (var eb = 0; eb < ec.length; eb++) {
ea.push(new bP(String.fromCharCode(ec[eb] & 65535)))
}
return ea
}
throw "char() may receive only one argument of type int, byte, int[], or byte[]."
};
function cO(ea) {
if (typeof ea === "number") {
return ea
}
if (typeof ea === "boolean") {
return ea ? 1 : 0
}
if (typeof ea === "string") {
return parseFloat(ea)
}
if (ea instanceof bP) {
return ea.code
}
}
cW.parseFloat = function(ec) {
if (ec instanceof Array) {
var ea = [];
for (var eb = 0; eb < ec.length; eb++) {
ea.push(cO(ec[eb]))
}
return ea
}
return cO(ec)
};
function al(ec, ea) {
if (typeof ec === "number") {
return ec & 4294967295
}
if (typeof ec === "boolean") {
return ec ? 1 : 0
}
if (typeof ec === "string") {
var eb = parseInt(ec, ea || 10);
return eb & 4294967295
}
if (ec instanceof bP) {
return ec.code
}
}
cW.parseInt = function(ed, ec) {
if (ed instanceof Array) {
var ea = [];
for (var eb = 0; eb < ed.length; eb++) {
if (typeof ed[eb] === "string" && !/^\s*[+\-]?\d+\s*$/.test(ed[eb])) {
ea.push(0)
} else {
ea.push(al(ed[eb], ec))
}
}
return ea
}
return al(ed, ec)
};
cW.__int_cast = function(ea) {
return 0 | ea
};
cW.__instanceof = function(ec, eb) {
if (typeof eb !== "function") {
throw "Function is expected as type argument for instanceof operator"
}
if (typeof ec === "string") {
return eb === Object || eb === String
}
if (ec instanceof eb) {
return true
}
if (typeof ec !== "object" || ec === null) {
return false
}
var ee = ec.constructor;
if (eb.$isInterface) {
var ed = [];
while (ee) {
if (ee.$interfaces) {
ed = ed.concat(ee.$interfaces)
}
ee = ee.$base
}
while (ed.length > 0) {
var ea = ed.shift();
if (ea === eb) {
return true
}
if (ea.$interfaces) {
ed = ed.concat(ea.$interfaces)
}
}
return false
}
while (ee.hasOwnProperty("$base")) {
ee = ee.$base;
if (ee === eb) {
return true
}
}
return false
};
cW.abs = q.abs;
cW.ceil = q.ceil;
cW.constrain = function(eb, ec, ea) {
return eb > ea ? ea : eb < ec ? ec : eb
};
cW.dist = function() {
var ec, eb, ea;
if (arguments.length === 4) {
ec = arguments[0] - arguments[2];
eb = arguments[1] - arguments[3];
return q.sqrt(ec * ec + eb * eb)
}
if (arguments.length === 6) {
ec = arguments[0] - arguments[3];
eb = arguments[1] - arguments[4];
ea = arguments[2] - arguments[5];
return q.sqrt(ec * ec + eb * eb + ea * ea)
}
};
cW.exp = q.exp;
cW.floor = q.floor;
cW.lerp = function(eb, ea, ec) {
return (ea - eb) * ec + eb
};
cW.log = q.log;
cW.mag = function(eb, ea, ec) {
if (ec) {
return q.sqrt(eb * eb + ea * ea + ec * ec)
}
return q.sqrt(eb * eb + ea * ea)
};
cW.map = function(ed, eb, ec, ea, ee) {
return ea + (ee - ea) * ((ed - eb) / (ec - eb))
};
cW.max = function() {
if (arguments.length === 2) {
return arguments[0] < arguments[1] ? arguments[1] : arguments[0]
}
var eb = arguments.length === 1 ? arguments[0] : arguments;
if (!("length" in eb && eb.length > 0)) {
throw "Non-empty array is expected"
}
var ea = eb[0],
ed = eb.length;
for (var ec = 1; ec < ed; ++ec) {
if (ea < eb[ec]) {
ea = eb[ec]
}
}
return ea
};
cW.min = function() {
if (arguments.length === 2) {
return arguments[0] < arguments[1] ? arguments[0] : arguments[1]
}
var ea = arguments.length === 1 ? arguments[0] : arguments;
if (!("length" in ea && ea.length > 0)) {
throw "Non-empty array is expected"
}
var ec = ea[0],
ed = ea.length;
for (var eb = 1; eb < ed; ++eb) {
if (ec > ea[eb]) {
ec = ea[eb]
}
}
return ec
};
cW.norm = function(eb, ea, ec) {
return (eb - ea) / (ec - ea)
};
cW.pow = q.pow;
cW.round = q.round;
cW.sq = function(ea) {
return ea * ea
};
cW.sqrt = q.sqrt;
cW.acos = q.acos;
cW.asin = q.asin;
cW.atan = q.atan;
cW.atan2 = q.atan2;
cW.cos = q.cos;
cW.degrees = function(ea) {
return ea * 180 / q.PI
};
cW.radians = function(ea) {
return ea / 180 * q.PI
};
cW.sin = q.sin;
cW.tan = q.tan;
var bY = q.random;
cW.random = function() {
if (arguments.length === 0) {
return bY()
}
if (arguments.length === 1) {
return bY() * arguments[0]
}
var eb = arguments[0],
ea = arguments[1];
return bY() * (ea - eb) + eb
};
function co(ec, eb) {
var ee = ec || 362436069,
ea = eb || 521288629;
var ed = function() {
ee = 36969 * (ee & 65535) + (ee >>> 16) & 4294967295;
ea = 18000 * (ea & 65535) + (ea >>> 16) & 4294967295;
return ((ee & 65535) << 16 | ea & 65535) & 4294967295
};
this.nextDouble = function() {
var ef = ed() / 4294967296;
return ef < 0 ? 1 + ef : ef
};
this.nextInt = ed
}
co.createRandomized = function() {
var ea = new Date;
return new co(ea / 60000 & 4294967295, ea & 4294967295)
};
cW.randomSeed = function(ea) {
bY = (new co(ea)).nextDouble
};
cW.Random = function(ea) {
var ed = false,
eb, ec;
this.nextGaussian = function() {
if (ed) {
ed = false;
return eb
}
var eh, ef, ee;
do {
eh = 2 * ec() - 1;
ef = 2 * ec() - 1;
ee = eh * eh + ef * ef
} while (ee >= 1 || ee === 0);
var eg = q.sqrt(-2 * q.log(ee) / ee);
eb = ef * eg;
ed = true;
return eh * eg
};
ec = ea === t ? q.random : (new co(ea)).nextDouble
};
function dz(eh) {
var eb = eh !== t ? new co(eh) : co.createRandomized();
var eg, ee;
var ed = new b(512);
for (eg = 0; eg < 256; ++eg) {
ed[eg] = eg
}
for (eg = 0; eg < 256; ++eg) {
var ej = ed[ee = eb.nextInt() & 255];
ed[ee] = ed[eg];
ed[eg] = ej
}
for (eg = 0; eg < 256; ++eg) {
ed[eg + 256] = ed[eg]
}
function ea(en, ek, eq, ep) {
var eo = en & 15;
var em = eo < 8 ? ek : eq,
el = eo < 4 ? eq : eo === 12 || eo === 14 ? ek : ep;
return ((eo & 1) === 0 ? em : -em) + ((eo & 2) === 0 ? el : -el)
}
function ef(em, ek, en) {
var el = (em & 1) === 0 ? ek : en;
return (em & 2) === 0 ? -el : el
}
function ei(el, ek) {
return (el & 1) === 0 ? -ek : ek
}
function ec(em, el, ek) {
return el + em * (ek - el)
}
this.noise3d = function(ew, ev, eu) {
var en = q.floor(ew) & 255,
el = q.floor(ev) & 255,
ek = q.floor(eu) & 255;
ew -= q.floor(ew);
ev -= q.floor(ev);
eu -= q.floor(eu);
var er = (3 - 2 * ew) * ew * ew,
eq = (3 - 2 * ev) * ev * ev,
ep = (3 - 2 * eu) * eu * eu;
var ey = ed[en] + el,
et = ed[ey] + ek,
es = ed[ey + 1] + ek,
ex = ed[en + 1] + el,
eo = ed[ex] + ek,
em = ed[ex + 1] + ek;
return ec(ep, ec(eq, ec(er, ea(ed[et], ew, ev, eu), ea(ed[eo], ew - 1, ev, eu)), ec(er, ea(ed[es], ew, ev - 1, eu), ea(ed[em], ew - 1, ev - 1, eu))), ec(eq, ec(er, ea(ed[et + 1], ew, ev, eu - 1), ea(ed[eo + 1], ew - 1, ev, eu - 1)), ec(er, ea(ed[es + 1], ew, ev - 1, eu - 1), ea(ed[em + 1], ew - 1, ev - 1, eu - 1))))
};
this.noise2d = function(ek, er) {
var eq = q.floor(ek) & 255,
eo = q.floor(er) & 255;
ek -= q.floor(ek);
er -= q.floor(er);
var em = (3 - 2 * ek) * ek * ek,
el = (3 - 2 * er) * er * er;
var ep = ed[eq] + eo,
en = ed[eq + 1] + eo;
return ec(el, ec(em, ef(ed[ep], ek, er), ef(ed[en], ek - 1, er)), ec(em, ef(ed[ep + 1], ek, er - 1), ef(ed[en + 1], ek - 1, er - 1)))
};
this.noise1d = function(ek) {
var em = q.floor(ek) & 255;
ek -= q.floor(ek);
var el = (3 - 2 * ek) * ek * ek;
return ec(el, ei(ed[em], ek), ei(ed[em + 1], ek - 1))
}
}
var bW = {
generator: t,
octaves: 4,
fallout: 0.5,
seed: t
};
cW.noise = function(ea, eh, eg) {
if (bW.generator === t) {
bW.generator = new dz(bW.seed)
}
var ef = bW.generator;
var ee = 1,
eb = 1,
ed = 0;
for (var ec = 0; ec < bW.octaves; ++ec) {
ee *= bW.fallout;
switch (arguments.length) {
case 1:
ed += ee * (1 + ef.noise1d(eb * ea)) / 2;
break;
case 2:
ed += ee * (1 + ef.noise2d(eb * ea, eb * eh)) / 2;
break;
case 3:
ed += ee * (1 + ef.noise3d(eb * ea, eb * eh, eb * eg)) / 2;
break
}
eb *= 2
}
return ed
};
cW.noiseDetail = function(eb, ea) {
bW.octaves = eb;
if (ea !== t) {
bW.fallout = ea
}
};
cW.noiseSeed = function(ea) {
bW.seed = ea;
bW.generator = t
};
ds.prototype.size = function(eb, ee, ed) {
if (ce) {
cW.stroke(0)
}
if (aH) {
cW.fill(255)
}
var ec = {
fillStyle: d8.fillStyle,
strokeStyle: d8.strokeStyle,
lineCap: d8.lineCap,
lineJoin: d8.lineJoin
};
if (ae.style.length > 0) {
ae.style.removeProperty("width");
ae.style.removeProperty("height")
}
ae.width = cW.width = eb || 100;
ae.height = cW.height = ee || 100;
for (var ef in ec) {
if (ec.hasOwnProperty(ef)) {
d8[ef] = ec[ef]
}
}
cW.textFont(W);
cW.background();
bZ = q.max(1000, eb * ee * 0.05);
cW.externals.context = d8;
for (var ea = 0; ea < 720; ea++) {
ah[ea] = cW.sin(ea * (q.PI / 180) * 0.5);
bl[ea] = cW.cos(ea * (q.PI / 180) * 0.5)
}
};
bR.prototype.size = function(ea, ec, eb) {
if (d8 === t) {
d8 = ae.getContext("2d");
am = new V;
da = new V;
dJ = new aX;
aT = new aX
}
ds.prototype.size.apply(this, arguments)
};
bB.prototype.size = function() {
var eb = false;
return function ea(ed, ef, ee) {
if (eb) {
throw "Multiple calls to size() for 3D renders are not allowed."
}
eb = true;
function eg(ei) {
var el = ["experimental-webgl", "webgl", "webkit-3d"],
ek;
for (var ej = 0, eh = el.length; ej < eh; ej++) {
ek = ei.getContext(el[ej], {
antialias: false,
preserveDrawingBuffer: true
});
if (ek) {
break
}
}
return ek
}
try {
ae.width = cW.width = ed || 100;
ae.height = cW.height = ef || 100;
d8 = eg(ae);
c7 = d8.createTexture();
bS = d8.createTexture()
} catch (ec) {
F.debug(ec)
}
if (!d8) {
throw "WebGL context is not supported on this browser."
}
d8.viewport(0, 0, ae.width, ae.height);
d8.enable(d8.DEPTH_TEST);
d8.enable(d8.BLEND);
d8.blendFunc(d8.SRC_ALPHA, d8.ONE_MINUS_SRC_ALPHA);
dQ = bF(d8, dE, aW);
bT = bF(d8, aO, bQ);
cW.strokeWeight(1);
dx = bF(d8, dn, aF);
d8.useProgram(dx);
dZ("usingTexture3d", dx, "usingTexture", dT);
cW.lightFalloff(1, 0, 0);
cW.shininess(1);
cW.ambient(255, 255, 255);
cW.specular(0, 0, 0);
cW.emissive(0, 0, 0);
bh = d8.createBuffer();
d8.bindBuffer(d8.ARRAY_BUFFER, bh);
d8.bufferData(d8.ARRAY_BUFFER, dh, d8.STATIC_DRAW);
cJ = d8.createBuffer();
d8.bindBuffer(d8.ARRAY_BUFFER, cJ);
d8.bufferData(d8.ARRAY_BUFFER, df, d8.STATIC_DRAW);
dk = d8.createBuffer();
d8.bindBuffer(d8.ARRAY_BUFFER, dk);
d8.bufferData(d8.ARRAY_BUFFER, bH, d8.STATIC_DRAW);
aB = d8.createBuffer();
d8.bindBuffer(d8.ARRAY_BUFFER, aB);
d8.bufferData(d8.ARRAY_BUFFER, ak, d8.STATIC_DRAW);
b2 = d8.createBuffer();
d8.bindBuffer(d8.ARRAY_BUFFER, b2);
d8.bufferData(d8.ARRAY_BUFFER, ai, d8.STATIC_DRAW);
bg = d8.createBuffer();
b8 = d8.createBuffer();
at = d8.createBuffer();
aG = d8.createBuffer();
bC = d8.createBuffer();
af = d8.createBuffer();
aw = d8.createBuffer();
d8.bindBuffer(d8.ARRAY_BUFFER, aw);
d8.bufferData(d8.ARRAY_BUFFER, new e([0, 0, 0]), d8.STATIC_DRAW);
cH = d8.createBuffer();
d8.bindBuffer(d8.ARRAY_BUFFER, cH);
d8.bufferData(d8.ARRAY_BUFFER, new e([1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0]), d8.STATIC_DRAW);
ac = d8.createBuffer();
d8.bindBuffer(d8.ARRAY_BUFFER, ac);
d8.bufferData(d8.ARRAY_BUFFER, new e([0, 0, 1, 0, 1, 1, 0, 1]), d8.STATIC_DRAW);
R = d8.createBuffer();
d8.bindBuffer(d8.ELEMENT_ARRAY_BUFFER, R);
d8.bufferData(d8.ELEMENT_ARRAY_BUFFER, new y([0, 1, 2, 2, 3, 0]), d8.STATIC_DRAW);
bV = new aP;
ch = new aP;
dJ = new aP;
aT = new aP;
db = new aP;
cW.camera();
cW.perspective();
am = new V;
da = new V;
c3 = new aP;
aQ = new aP;
aL = new aP;
bz = new aP;
cd = new aP;
U = new aP;
U.set(-1, 3, -3, 1, 3, -6, 3, 0, -3, 3, 0, 0, 1, 0, 0, 0);
ds.prototype.size.apply(this, arguments)
}
}();
bR.prototype.ambientLight = ds.prototype.a3DOnlyFunction;
bB.prototype.ambientLight = function(ea, ed, ei, ej, ef, ee) {
if (dL === 8) {
throw "can only create " + 8 + " lights"
}
var eg = new A(ej, ef, ee);
var eh = new aP;
eh.scale(1, -1, 1);
eh.apply(dJ.array());
eh.mult(eg, eg);
var eb = dH(ea, ed, ei, 0);
var ec = [((eb >> 16) & 255) / 255, ((eb >> 8) & 255) / 255, (eb & 255) / 255];
d8.useProgram(dx);
d2("uLights.color.3d." + dL, dx, "uLights" + dL + ".color", ec);
d2("uLights.position.3d." + dL, dx, "uLights" + dL + ".position", eg.array());
dZ("uLights.type.3d." + dL, dx, "uLights" + dL + ".type", 0);
dZ("uLightCount3d", dx, "uLightCount", ++dL)
};
bR.prototype.directionalLight = ds.prototype.a3DOnlyFunction;
bB.prototype.directionalLight = function(ea, eg, ei, eh, ef, ee) {
if (dL === 8) {
throw "can only create " + 8 + " lights"
}
d8.useProgram(dx);
var ej = new aP;
ej.scale(1, -1, 1);
ej.apply(dJ.array());
ej = ej.array();
var ec = [ej[0] * eh + ej[4] * ef + ej[8] * ee, ej[1] * eh + ej[5] * ef + ej[9] * ee, ej[2] * eh + ej[6] * ef + ej[10] * ee];
var eb = dH(ea, eg, ei, 0);
var ed = [((eb >> 16) & 255) / 255, ((eb >> 8) & 255) / 255, (eb & 255) / 255];
d2("uLights.color.3d." + dL, dx, "uLights" + dL + ".color", ed);
d2("uLights.position.3d." + dL, dx, "uLights" + dL + ".position", ec);
dZ("uLights.type.3d." + dL, dx, "uLights" + dL + ".type", 1);
dZ("uLightCount3d", dx, "uLightCount", ++dL)
};
bR.prototype.lightFalloff = ds.prototype.a3DOnlyFunction;
bB.prototype.lightFalloff = function(eb, ea, ec) {
d8.useProgram(dx);
d2("uFalloff3d", dx, "uFalloff", [eb, ea, ec])
};
bR.prototype.lightSpecular = ds.prototype.a3DOnlyFunction;
bB.prototype.lightSpecular = function(ee, ed, ea) {
var eb = dH(ee, ed, ea, 0);
var ec = [((eb >> 16) & 255) / 255, ((eb >> 8) & 255) / 255, (eb & 255) / 255];
d8.useProgram(dx);
d2("uSpecular3d", dx, "uSpecular", ec)
};
cW.lights = function() {
cW.ambientLight(128, 128, 128);
cW.directionalLight(128, 128, 128, 0, 0, -1);
cW.lightFalloff(1, 0, 0);
cW.lightSpecular(0, 0, 0)
};
bR.prototype.pointLight = ds.prototype.a3DOnlyFunction;
bB.prototype.pointLight = function(ea, ed, ei, ej, ef, ee) {
if (dL === 8) {
throw "can only create " + 8 + " lights"
}
var eg = new A(ej, ef, ee);
var eh = new aP;
eh.scale(1, -1, 1);
eh.apply(dJ.array());
eh.mult(eg, eg);
var eb = dH(ea, ed, ei, 0);
var ec = [((eb >> 16) & 255) / 255, ((eb >> 8) & 255) / 255, (eb & 255) / 255];
d8.useProgram(dx);
d2("uLights.color.3d." + dL, dx, "uLights" + dL + ".color", ec);
d2("uLights.position.3d." + dL, dx, "uLights" + dL + ".position", eg.array());
dZ("uLights.type.3d." + dL, dx, "uLights" + dL + ".type", 2);
dZ("uLightCount3d", dx, "uLightCount", ++dL)
};
bR.prototype.noLights = ds.prototype.a3DOnlyFunction;
bB.prototype.noLights = function() {
dL = 0;
d8.useProgram(dx);
dZ("uLightCount3d", dx, "uLightCount", dL)
};
bR.prototype.spotLight = ds.prototype.a3DOnlyFunction;
bB.prototype.spotLight = function(ea, ei, en, eo, em, ek, ej, eh, ef, ee, eg) {
if (dL === 8) {
throw "can only create " + 8 + " lights"
}
d8.useProgram(dx);
var el = new A(eo, em, ek);
var ep = new aP;
ep.scale(1, -1, 1);
ep.apply(dJ.array());
ep.mult(el, el);
ep = ep.array();
var ec = [ep[0] * ej + ep[4] * eh + ep[8] * ef, ep[1] * ej + ep[5] * eh + ep[9] * ef, ep[2] * ej + ep[6] * eh + ep[10] * ef];
var eb = dH(ea, ei, en, 0);
var ed = [((eb >> 16) & 255) / 255, ((eb >> 8) & 255) / 255, (eb & 255) / 255];
d2("uLights.color.3d." + dL, dx, "uLights" + dL + ".color", ed);
d2("uLights.position.3d." + dL, dx, "uLights" + dL + ".position", el.array());
d2("uLights.direction.3d." + dL, dx, "uLights" + dL + ".direction", ec);
d2("uLights.concentration.3d." + dL, dx, "uLights" + dL + ".concentration", eg);
d2("uLights.angle.3d." + dL, dx, "uLights" + dL + ".angle", ee);
dZ("uLights.type.3d." + dL, dx, "uLights" + dL + ".type", 3);
dZ("uLightCount3d", dx, "uLightCount", ++dL)
};
bR.prototype.beginCamera = function() {
throw "beginCamera() is not available in 2D mode"
};
bB.prototype.beginCamera = function() {
if (ap) {
throw "You cannot call beginCamera() again before calling endCamera()"
}
ap = true;
dJ = ch;
aT = bV
};
bR.prototype.endCamera = function() {
throw "endCamera() is not available in 2D mode"
};
bB.prototype.endCamera = function() {
if (!ap) {
throw "You cannot call endCamera() before calling beginCamera()"
}
dJ.set(bV);
aT.set(ch);
ap = false
};
cW.camera = function(el, ek, ei, eg, ee, ed, et, er, ep) {
if (el === t) {
dl = cW.width / 2;
dj = cW.height / 2;
di = dj / q.tan(cK / 2);
el = dl;
ek = dj;
ei = di;
eg = dl;
ee = dj;
ed = 0;
et = 0;
er = 1;
ep = 0
}
var ef = new A(el - eg, ek - ee, ei - ed);
var eh = new A(et, er, ep);
ef.normalize();
var ej = A.cross(eh, ef);
eh = A.cross(ef, ej);
ej.normalize();
eh.normalize();
var eu = ej.x,
es = ej.y,
eq = ej.z;
var ec = eh.x,
eb = eh.y,
ea = eh.z;
var eo = ef.x,
en = ef.y,
em = ef.z;
bV.set(eu, es, eq, 0, ec, eb, ea, 0, eo, en, em, 0, 0, 0, 0, 1);
bV.translate(-el, -ek, -ei);
ch.reset();
ch.invApply(eu, es, eq, 0, ec, eb, ea, 0, eo, en, em, 0, 0, 0, 0, 1);
ch.translate(el, ek, ei);
dJ.set(bV);
aT.set(ch)
};
cW.perspective = function(ee, ec, ef, eb) {
if (arguments.length === 0) {
dj = ae.height / 2;
di = dj / q.tan(cK / 2);
a0 = di / 10;
av = di * 10;
b5 = cW.width / cW.height;
ee = cK;
ec = b5;
ef = a0;
eb = av
}
var eg, ea, eh, ed;
eg = ef * q.tan(ee / 2);
ea = -eg;
eh = eg * ec;
ed = ea * ec;
cW.frustum(ed, eh, ea, eg, ef, eb)
};
bR.prototype.frustum = function() {
throw "Processing.js: frustum() is not supported in 2D mode"
};
bB.prototype.frustum = function(eg, ec, eb, ef, ee, ea) {
ci = true;
db = new aP;
db.set(2 * ee / (ec - eg), 0, (ec + eg) / (ec - eg), 0, 0, 2 * ee / (ef - eb), (ef + eb) / (ef - eb), 0, 0, 0, -(ea + ee) / (ea - ee), -(2 * ea * ee) / (ea - ee), 0, 0, -1, 0);
var ed = new aP;
ed.set(db);
ed.transpose();
d8.useProgram(dQ);
a9("projection2d", dQ, "uProjection", false, ed.array());
d8.useProgram(dx);
a9("projection3d", dx, "uProjection", false, ed.array());
d8.useProgram(bT);
a9("uProjectionUS", bT, "uProjection", false, ed.array())
};
cW.ortho = function(eb, em, ea, ek, eh, eg) {
if (arguments.length === 0) {
eb = 0;
em = cW.width;
ea = 0;
ek = cW.height;
eh = -10;
eg = 10
}
var el = 2 / (em - eb);
var ej = 2 / (ek - ea);
var ei = -2 / (eg - eh);
var ef = -(em + eb) / (em - eb);
var ee = -(ek + ea) / (ek - ea);
var ed = -(eg + eh) / (eg - eh);
db = new aP;
db.set(el, 0, 0, ef, 0, ej, 0, ee, 0, 0, ei, ed, 0, 0, 0, 1);
var ec = new aP;
ec.set(db);
ec.transpose();
d8.useProgram(dQ);
a9("projection2d", dQ, "uProjection", false, ec.array());
d8.useProgram(dx);
a9("projection3d", dx, "uProjection", false, ec.array());
d8.useProgram(bT);
a9("uProjectionUS", bT, "uProjection", false, ec.array());
ci = false
};
cW.printProjection = function() {
db.print()
};
cW.printCamera = function() {
bV.print()
};
bR.prototype.box = ds.prototype.a3DOnlyFunction;
bB.prototype.box = function(ec, ef, eh) {
if (!ef || !eh) {
ef = eh = ec
}
var ee = new aP;
ee.scale(ec, ef, eh);
var eb = new aP;
eb.scale(1, -1, 1);
eb.apply(dJ.array());
eb.transpose();
if (aH) {
d8.useProgram(dx);
a9("model3d", dx, "uModel", false, ee.array());
a9("view3d", dx, "uView", false, eb.array());
d8.enable(d8.POLYGON_OFFSET_FILL);
d8.polygonOffset(1, 1);
d2("color3d", dx, "uColor", bo);
if (dL > 0) {
var ed = new aP;
ed.set(eb);
var ea = new aP;
ea.set(ee);
ed.mult(ea);
var eg = new aP;
eg.set(ed);
eg.invert();
eg.transpose();
a9("uNormalTransform3d", dx, "uNormalTransform", false, eg.array());
dc("aNormal3d", dx, "aNormal", 3, cJ)
} else {
cg("aNormal3d", dx, "aNormal")
}
dc("aVertex3d", dx, "aVertex", 3, bh);
cg("aColor3d", dx, "aColor");
cg("aTexture3d", dx, "aTexture");
d8.drawArrays(d8.TRIANGLES, 0, dh.length / 3);
d8.disable(d8.POLYGON_OFFSET_FILL)
}
if (dW > 0 && ce) {
d8.useProgram(dQ);
a9("uModel2d", dQ, "uModel", false, ee.array());
a9("uView2d", dQ, "uView", false, eb.array());
d2("uColor2d", dQ, "uColor", c0);
dZ("uIsDrawingText2d", dQ, "uIsDrawingText", false);
dc("vertex2d", dQ, "aVertex", 3, dk);
cg("aTextureCoord2d", dQ, "aTextureCoord");
d8.drawArrays(d8.LINES, 0, bH.length / 3)
}
};
var cD = function() {
var eb;
cF = [];
for (eb = 0; eb < bM; eb++) {
cF.push(0);
cF.push(-1);
cF.push(0);
cF.push(bt[eb]);
cF.push(bs[eb]);
cF.push(br[eb])
}
cF.push(0);
cF.push(-1);
cF.push(0);
cF.push(bt[0]);
cF.push(bs[0]);
cF.push(br[0]);
var ef, ec, ee;
var ed = 0;
for (eb = 2; eb < bL; eb++) {
ef = ec = ed;
ed += bM;
ee = ed;
for (var ea = 0; ea < bM; ea++) {
cF.push(bt[ef]);
cF.push(bs[ef]);
cF.push(br[ef++]);
cF.push(bt[ee]);
cF.push(bs[ee]);
cF.push(br[ee++])
}
ef = ec;
ee = ed;
cF.push(bt[ef]);
cF.push(bs[ef]);
cF.push(br[ef]);
cF.push(bt[ee]);
cF.push(bs[ee]);
cF.push(br[ee])
}
for (eb = 0; eb < bM; eb++) {
ee = ed + eb;
cF.push(bt[ee]);
cF.push(bs[ee]);
cF.push(br[ee]);
cF.push(0);
cF.push(1);
cF.push(0)
}
cF.push(bt[ed]);
cF.push(bs[ed]);
cF.push(br[ed]);
cF.push(0);
cF.push(1);
cF.push(0);
d8.bindBuffer(d8.ARRAY_BUFFER, bg);
d8.bufferData(d8.ARRAY_BUFFER, new e(cF), d8.STATIC_DRAW)
};
cW.sphereDetail = function(eb, em) {
var eh;
if (arguments.length === 1) {
eb = em = arguments[0]
}
if (eb < 3) {
eb = 3
}
if (em < 2) {
em = 2
}
if (eb === bM && em === bL) {
return
}
var el = 720 / eb;
var ef = new e(eb);
var ec = new e(eb);
for (eh = 0; eh < eb; eh++) {
ef[eh] = bl[eh * el % 720 | 0];
ec[eh] = ah[eh * el % 720 | 0]
}
var ek = eb * (em - 1) + 2;
var ej = 0;
bt = new e(ek);
bs = new e(ek);
br = new e(ek);
var ei = 720 * 0.5 / em;
var ee = ei;
for (eh = 1; eh < em; eh++) {
var ed = ah[ee % 720 | 0];
var ea = -bl[ee % 720 | 0];
for (var eg = 0; eg < eb; eg++) {
bt[ej] = ef[eg] * ed;
bs[ej] = ea;
br[ej++] = ec[eg] * ed
}
ee += ei
}
bM = eb;
bL = em;
cD()
};
bR.prototype.sphere = ds.prototype.a3DOnlyFunction;
bB.prototype.sphere = function() {
var ee = arguments[0];
if (bM < 3 || bL < 2) {
cW.sphereDetail(30)
}
var ed = new aP;
ed.scale(ee, ee, ee);
var eb = new aP;
eb.scale(1, -1, 1);
eb.apply(dJ.array());
eb.transpose();
if (aH) {
if (dL > 0) {
var ec = new aP;
ec.set(eb);
var ea = new aP;
ea.set(ed);
ec.mult(ea);
var ef = new aP;
ef.set(ec);
ef.invert();
ef.transpose();
a9("uNormalTransform3d", dx, "uNormalTransform", false, ef.array());
dc("aNormal3d", dx, "aNormal", 3, bg)
} else {
cg("aNormal3d", dx, "aNormal")
}
d8.useProgram(dx);
cg("aTexture3d", dx, "aTexture");
a9("uModel3d", dx, "uModel", false, ed.array());
a9("uView3d", dx, "uView", false, eb.array());
dc("aVertex3d", dx, "aVertex", 3, bg);
cg("aColor3d", dx, "aColor");
d8.enable(d8.POLYGON_OFFSET_FILL);
d8.polygonOffset(1, 1);
d2("uColor3d", dx, "uColor", bo);
d8.drawArrays(d8.TRIANGLE_STRIP, 0, cF.length / 3);
d8.disable(d8.POLYGON_OFFSET_FILL)
}
if (dW > 0 && ce) {
d8.useProgram(dQ);
a9("uModel2d", dQ, "uModel", false, ed.array());
a9("uView2d", dQ, "uView", false, eb.array());
dc("aVertex2d", dQ, "aVertex", 3, bg);
cg("aTextureCoord2d", dQ, "aTextureCoord");
d2("uColor2d", dQ, "uColor", c0);
dZ("uIsDrawingText", dQ, "uIsDrawingText", false);
d8.drawArrays(d8.LINE_STRIP, 0, cF.length / 3)
}
};
cW.modelX = function(eg, ef, ee) {
var ei = dJ.array();
var ek = ch.array();
var ea = ei[0] * eg + ei[1] * ef + ei[2] * ee + ei[3];
var ej = ei[4] * eg + ei[5] * ef + ei[6] * ee + ei[7];
var eh = ei[8] * eg + ei[9] * ef + ei[10] * ee + ei[11];
var eb = ei[12] * eg + ei[13] * ef + ei[14] * ee + ei[15];
var ec = ek[0] * ea + ek[1] * ej + ek[2] * eh + ek[3] * eb;
var ed = ek[12] * ea + ek[13] * ej + ek[14] * eh + ek[15] * eb;
return ed !== 0 ? ec / ed : ec
};
cW.modelY = function(eg, ef, ee) {
var ei = dJ.array();
var ek = ch.array();
var ea = ei[0] * eg + ei[1] * ef + ei[2] * ee + ei[3];
var ej = ei[4] * eg + ei[5] * ef + ei[6] * ee + ei[7];
var eh = ei[8] * eg + ei[9] * ef + ei[10] * ee + ei[11];
var eb = ei[12] * eg + ei[13] * ef + ei[14] * ee + ei[15];
var ec = ek[4] * ea + ek[5] * ej + ek[6] * eh + ek[7] * eb;
var ed = ek[12] * ea + ek[13] * ej + ek[14] * eh + ek[15] * eb;
return ed !== 0 ? ec / ed : ec
};
cW.modelZ = function(eg, ef, ee) {
var ei = dJ.array();
var ek = ch.array();
var ea = ei[0] * eg + ei[1] * ef + ei[2] * ee + ei[3];
var ej = ei[4] * eg + ei[5] * ef + ei[6] * ee + ei[7];
var eh = ei[8] * eg + ei[9] * ef + ei[10] * ee + ei[11];
var ec = ei[12] * eg + ei[13] * ef + ei[14] * ee + ei[15];
var eb = ek[8] * ea + ek[9] * ej + ek[10] * eh + ek[11] * ec;
var ed = ek[12] * ea + ek[13] * ej + ek[14] * eh + ek[15] * ec;
return ed !== 0 ? eb / ed : eb
};
bR.prototype.ambient = ds.prototype.a3DOnlyFunction;
bB.prototype.ambient = function(ed, ec, eb) {
d8.useProgram(dx);
dZ("uUsingMat3d", dx, "uUsingMat", true);
var ea = cW.color(ed, ec, eb);
d2("uMaterialAmbient3d", dx, "uMaterialAmbient", cW.color.toGLArray(ea).slice(0, 3))
};
bR.prototype.emissive = ds.prototype.a3DOnlyFunction;
bB.prototype.emissive = function(ed, ec, eb) {
d8.useProgram(dx);
dZ("uUsingMat3d", dx, "uUsingMat", true);
var ea = cW.color(ed, ec, eb);
d2("uMaterialEmissive3d", dx, "uMaterialEmissive", cW.color.toGLArray(ea).slice(0, 3))
};
bR.prototype.shininess = ds.prototype.a3DOnlyFunction;
bB.prototype.shininess = function(ea) {
d8.useProgram(dx);
dZ("uUsingMat3d", dx, "uUsingMat", true);
d2("uShininess3d", dx, "uShininess", ea)
};
bR.prototype.specular = ds.prototype.a3DOnlyFunction;
bB.prototype.specular = function(ed, ec, eb) {
d8.useProgram(dx);
dZ("uUsingMat3d", dx, "uUsingMat", true);
var ea = cW.color(ed, ec, eb);
d2("uMaterialSpecular3d", dx, "uMaterialSpecular", cW.color.toGLArray(ea).slice(0, 3))
};
cW.screenX = function(eh, eg, ef) {
var ej = dJ.array();
if (ej.length === 16) {
var ea = ej[0] * eh + ej[1] * eg + ej[2] * ef + ej[3];
var ek = ej[4] * eh + ej[5] * eg + ej[6] * ef + ej[7];
var ei = ej[8] * eh + ej[9] * eg + ej[10] * ef + ej[11];
var eb = ej[12] * eh + ej[13] * eg + ej[14] * ef + ej[15];
var ee = db.array();
var ec = ee[0] * ea + ee[1] * ek + ee[2] * ei + ee[3] * eb;
var ed = ee[12] * ea + ee[13] * ek + ee[14] * ei + ee[15] * eb;
if (ed !== 0) {
ec /= ed
}
return cW.width * (1 + ec) / 2
}
return dJ.multX(eh, eg)
};
cW.screenY = function aA(eh, eg, ef) {
var ej = dJ.array();
if (ej.length === 16) {
var ea = ej[0] * eh + ej[1] * eg + ej[2] * ef + ej[3];
var ek = ej[4] * eh + ej[5] * eg + ej[6] * ef + ej[7];
var ei = ej[8] * eh + ej[9] * eg + ej[10] * ef + ej[11];
var eb = ej[12] * eh + ej[13] * eg + ej[14] * ef + ej[15];
var ee = db.array();
var ec = ee[4] * ea + ee[5] * ek + ee[6] * ei + ee[7] * eb;
var ed = ee[12] * ea + ee[13] * ek + ee[14] * ei + ee[15] * eb;
if (ed !== 0) {
ec /= ed
}
return cW.height * (1 + ec) / 2
}
return dJ.multY(eh, eg)
};
cW.screenZ = function ay(eh, eg, ef) {
var ej = dJ.array();
if (ej.length !== 16) {
return 0
}
var ee = db.array();
var ea = ej[0] * eh + ej[1] * eg + ej[2] * ef + ej[3];
var ek = ej[4] * eh + ej[5] * eg + ej[6] * ef + ej[7];
var ei = ej[8] * eh + ej[9] * eg + ej[10] * ef + ej[11];
var ec = ej[12] * eh + ej[13] * eg + ej[14] * ef + ej[15];
var eb = ee[8] * ea + ee[9] * ek + ee[10] * ei + ee[11] * ec;
var ed = ee[12] * ea + ee[13] * ek + ee[14] * ei + ee[15] * ec;
if (ed !== 0) {
eb /= ed
}
return (eb + 1) / 2
};
ds.prototype.fill = function() {
var ea = cW.color(arguments[0], arguments[1], arguments[2], arguments[3]);
if (ea === a1 && aH) {
return
}
aH = true;
a1 = ea
};
bR.prototype.fill = function() {
ds.prototype.fill.apply(this, arguments);
aq = true
};
bB.prototype.fill = function() {
ds.prototype.fill.apply(this, arguments);
bo = cW.color.toGLArray(a1)
};
function bn() {
if (aH) {
if (aq) {
d8.fillStyle = cW.color.toString(a1);
aq = false
}
d8.fill()
}
}
cW.noFill = function() {
aH = false
};
ds.prototype.stroke = function() {
var ea = cW.color(arguments[0], arguments[1], arguments[2], arguments[3]);
if (ea === cv && ce) {
return
}
ce = true;
cv = ea
};
bR.prototype.stroke = function() {
ds.prototype.stroke.apply(this, arguments);
b3 = true
};
bB.prototype.stroke = function() {
ds.prototype.stroke.apply(this, arguments);
c0 = cW.color.toGLArray(cv)
};
function dd() {
if (ce) {
if (b3) {
d8.strokeStyle = cW.color.toString(cv);
b3 = false
}
d8.stroke()
}
}
cW.noStroke = function() {
ce = false
};
ds.prototype.strokeWeight = function(ea) {
dW = ea
};
bR.prototype.strokeWeight = function(ea) {
ds.prototype.strokeWeight.apply(this, arguments);
d8.lineWidth = ea
};
bB.prototype.strokeWeight = function(ea) {
ds.prototype.strokeWeight.apply(this, arguments);
d8.useProgram(dQ);
d2("pointSize2d", dQ, "uPointSize", ea);
d8.useProgram(bT);
d2("pointSizeUnlitShape", bT, "uPointSize", ea);
d8.lineWidth(ea)
};
cW.strokeCap = function(ea) {
dY.$ensureContext().lineCap = ea
};
cW.strokeJoin = function(ea) {
dY.$ensureContext().lineJoin = ea
};
bR.prototype.smooth = function() {
dO = true;
var ea = ae.style;
ea.setProperty("image-rendering", "optimizeQuality", "important");
ea.setProperty("-ms-interpolation-mode", "bicubic", "important");
if (d8.hasOwnProperty("mozImageSmoothingEnabled")) {
d8.mozImageSmoothingEnabled = true
}
};
bB.prototype.smooth = function() {
dO = true
};
bR.prototype.noSmooth = function() {
dO = false;
var ea = ae.style;
ea.setProperty("image-rendering", "optimizeSpeed", "important");
ea.setProperty("image-rendering", "-moz-crisp-edges", "important");
ea.setProperty("image-rendering", "-webkit-optimize-contrast", "important");
ea.setProperty("image-rendering", "optimize-contrast", "important");
ea.setProperty("-ms-interpolation-mode", "nearest-neighbor", "important");
if (d8.hasOwnProperty("mozImageSmoothingEnabled")) {
d8.mozImageSmoothingEnabled = false
}
};
bB.prototype.noSmooth = function() {
dO = false
};
bR.prototype.point = function(ea, eb) {
if (!ce) {
return
}
ea = q.round(ea);
eb = q.round(eb);
d8.fillStyle = cW.color.toString(cv);
aq = true;
if (dW > 1) {
d8.beginPath();
d8.arc(ea, eb, dW / 2, 0, 6.283185307179586, false);
d8.fill()
} else {
d8.fillRect(ea, eb, 1, 1)
}
};
bB.prototype.point = function(ea, ee, ed) {
var ec = new aP;
ec.translate(ea, ee, ed || 0);
ec.transpose();
var eb = new aP;
eb.scale(1, -1, 1);
eb.apply(dJ.array());
eb.transpose();
d8.useProgram(dQ);
a9("uModel2d", dQ, "uModel", false, ec.array());
a9("uView2d", dQ, "uView", false, eb.array());
if (dW > 0 && ce) {
d2("uColor2d", dQ, "uColor", c0);
dZ("uIsDrawingText2d", dQ, "uIsDrawingText", false);
dZ("uSmooth2d", dQ, "uSmooth", dO);
dc("aVertex2d", dQ, "aVertex", 3, aw);
cg("aTextureCoord2d", dQ, "aTextureCoord");
d8.drawArrays(d8.POINTS, 0, 1)
}
};
cW.beginShape = function(ea) {
dR = ea;
d6 = [];
bb = []
};
bR.prototype.vertex = function(eb, ed, ea) {
var ec = [];
if (du) {
du = false
}
ec.isVert = true;
ec[0] = eb;
ec[1] = ed;
ec[2] = 0;
ec[3] = 0;
ec[4] = 0;
ec[5] = a1;
ec[6] = cv;
bb.push(ec);
if (ea) {
bb[bb.length - 1]["moveTo"] = ea
}
};
bB.prototype.vertex = function(ea, ef, ee, ed, ec) {
var eb = [];
if (du) {
du = false
}
eb.isVert = true;
if (ec === t && dT) {
ec = ed;
ed = ee;
ee = 0
}
if (ed !== t && ec !== t) {
if (d4 === 2) {
ed /= cs.width;
ec /= cs.height
}
ed = ed > 1 ? 1 : ed;
ed = ed < 0 ? 0 : ed;
ec = ec > 1 ? 1 : ec;
ec = ec < 0 ? 0 : ec
}
eb[0] = ea;
eb[1] = ef;
eb[2] = ee || 0;
eb[3] = ed || 0;
eb[4] = ec || 0;
eb[5] = bo[0];
eb[6] = bo[1];
eb[7] = bo[2];
eb[8] = bo[3];
eb[9] = c0[0];
eb[10] = c0[1];
eb[11] = c0[2];
eb[12] = c0[3];
eb[13] = a8;
eb[14] = a7;
eb[15] = a6;
bb.push(eb)
};
var d1 = function(ec, eb) {
var ea = new aP;
ea.scale(1, -1, 1);
ea.apply(dJ.array());
ea.transpose();
d8.useProgram(bT);
a9("uViewUS", bT, "uView", false, ea.array());
dZ("uSmoothUS", bT, "uSmooth", dO);
dc("aVertexUS", bT, "aVertex", 3, aw);
d8.bufferData(d8.ARRAY_BUFFER, new e(ec), d8.STREAM_DRAW);
dc("aColorUS", bT, "aColor", 4, aG);
d8.bufferData(d8.ARRAY_BUFFER, new e(eb), d8.STREAM_DRAW);
d8.drawArrays(d8.POINTS, 0, ec.length / 3)
};
var bj = function(ee, ed, ec) {
var eb;
if (ed === "LINES") {
eb = d8.LINES
} else {
if (ed === "LINE_LOOP") {
eb = d8.LINE_LOOP
} else {
eb = d8.LINE_STRIP
}
}
var ea = new aP;
ea.scale(1, -1, 1);
ea.apply(dJ.array());
ea.transpose();
d8.useProgram(bT);
a9("uViewUS", bT, "uView", false, ea.array());
dc("aVertexUS", bT, "aVertex", 3, b8);
d8.bufferData(d8.ARRAY_BUFFER, new e(ee), d8.STREAM_DRAW);
dc("aColorUS", bT, "aColor", 4, bC);
d8.bufferData(d8.ARRAY_BUFFER, new e(ec), d8.STREAM_DRAW);
d8.drawArrays(eb, 0, ee.length / 3)
};
var dm = function(ef, ee, ed, ec) {
var eb;
if (ee === "TRIANGLES") {
eb = d8.TRIANGLES
} else {
if (ee === "TRIANGLE_FAN") {
eb = d8.TRIANGLE_FAN
} else {
eb = d8.TRIANGLE_STRIP
}
}
var ea = new aP;
ea.scale(1, -1, 1);
ea.apply(dJ.array());
ea.transpose();
d8.useProgram(dx);
a9("model3d", dx, "uModel", false, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
a9("view3d", dx, "uView", false, ea.array());
d8.enable(d8.POLYGON_OFFSET_FILL);
d8.polygonOffset(1, 1);
d2("color3d", dx, "uColor", [-1, 0, 0, 0]);
dc("vertex3d", dx, "aVertex", 3, at);
d8.bufferData(d8.ARRAY_BUFFER, new e(ef), d8.STREAM_DRAW);
if (dT && bf !== null) {
bw(ed)
}
dc("aColor3d", dx, "aColor", 4, aG);
d8.bufferData(d8.ARRAY_BUFFER, new e(ed), d8.STREAM_DRAW);
cg("aNormal3d", dx, "aNormal");
if (dT) {
dZ("uUsingTexture3d", dx, "uUsingTexture", dT);
dc("aTexture3d", dx, "aTexture", 2, af);
d8.bufferData(d8.ARRAY_BUFFER, new e(ec), d8.STREAM_DRAW)
}
d8.drawArrays(eb, 0, ef.length / 3);
d8.disable(d8.POLYGON_OFFSET_FILL)
};
function cS() {
bn();
dd();
d8.closePath()
}
bR.prototype.endShape = function(eh) {
if (bb.length === 0) {
return
}
var ed = eh === 2;
if (ed) {
bb.push(bb[0])
}
var ec = [];
var ea = [];
var ej = [];
var em = [];
var ef = [];
var ei;
du = true;
var eg, ee, eb;
var el = bb.length;
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
for (ee = 0; ee < 3; ee++) {
ea.push(ei[ee])
}
}
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
for (ee = 5; ee < 9; ee++) {
ej.push(ei[ee])
}
}
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
for (ee = 9; ee < 13; ee++) {
em.push(ei[ee])
}
}
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
ef.push(ei[3]);
ef.push(ei[4])
}
if (dP && (dR === 20 || dR === t)) {
if (el > 3) {
var ek = [],
en = 1 - aJ;
d8.beginPath();
d8.moveTo(bb[1][0], bb[1][1]);
for (eg = 1; eg + 2 < el; eg++) {
ei = bb[eg];
ek[0] = [ei[0], ei[1]];
ek[1] = [ei[0] + (en * bb[eg + 1][0] - en * bb[eg - 1][0]) / 6, ei[1] + (en * bb[eg + 1][1] - en * bb[eg - 1][1]) / 6];
ek[2] = [bb[eg + 1][0] + (en * bb[eg][0] - en * bb[eg + 2][0]) / 6, bb[eg + 1][1] + (en * bb[eg][1] - en * bb[eg + 2][1]) / 6];
ek[3] = [bb[eg + 1][0], bb[eg + 1][1]];
d8.bezierCurveTo(ek[1][0], ek[1][1], ek[2][0], ek[2][1], ek[3][0], ek[3][1])
}
cS()
}
} else {
if (aa && (dR === 20 || dR === t)) {
d8.beginPath();
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
if (bb[eg]["isVert"]) {
if (bb[eg]["moveTo"]) {
d8.moveTo(ei[0], ei[1])
} else {
d8.lineTo(ei[0], ei[1])
}
} else {
d8.bezierCurveTo(bb[eg][0], bb[eg][1], bb[eg][2], bb[eg][3], bb[eg][4], bb[eg][5])
}
}
cS()
} else {
if (dR === 2) {
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
if (ce) {
cW.stroke(ei[6])
}
cW.point(ei[0], ei[1])
}
} else {
if (dR === 4) {
for (eg = 0; eg + 1 < el; eg += 2) {
ei = bb[eg];
if (ce) {
cW.stroke(bb[eg + 1][6])
}
cW.line(ei[0], ei[1], bb[eg + 1][0], bb[eg + 1][1])
}
} else {
if (dR === 9) {
for (eg = 0; eg + 2 < el; eg += 3) {
ei = bb[eg];
d8.beginPath();
d8.moveTo(ei[0], ei[1]);
d8.lineTo(bb[eg + 1][0], bb[eg + 1][1]);
d8.lineTo(bb[eg + 2][0], bb[eg + 2][1]);
d8.lineTo(ei[0], ei[1]);
if (aH) {
cW.fill(bb[eg + 2][5]);
bn()
}
if (ce) {
cW.stroke(bb[eg + 2][6]);
dd()
}
d8.closePath()
}
} else {
if (dR === 10) {
for (eg = 0; eg + 1 < el; eg++) {
ei = bb[eg];
d8.beginPath();
d8.moveTo(bb[eg + 1][0], bb[eg + 1][1]);
d8.lineTo(ei[0], ei[1]);
if (ce) {
cW.stroke(bb[eg + 1][6])
}
if (aH) {
cW.fill(bb[eg + 1][5])
}
if (eg + 2 < el) {
d8.lineTo(bb[eg + 2][0], bb[eg + 2][1]);
if (ce) {
cW.stroke(bb[eg + 2][6])
}
if (aH) {
cW.fill(bb[eg + 2][5])
}
}
cS()
}
} else {
if (dR === 11) {
if (el > 2) {
d8.beginPath();
d8.moveTo(bb[0][0], bb[0][1]);
d8.lineTo(bb[1][0], bb[1][1]);
d8.lineTo(bb[2][0], bb[2][1]);
if (aH) {
cW.fill(bb[2][5]);
bn()
}
if (ce) {
cW.stroke(bb[2][6]);
dd()
}
d8.closePath();
for (eg = 3; eg < el; eg++) {
ei = bb[eg];
d8.beginPath();
d8.moveTo(bb[0][0], bb[0][1]);
d8.lineTo(bb[eg - 1][0], bb[eg - 1][1]);
d8.lineTo(ei[0], ei[1]);
if (aH) {
cW.fill(ei[5]);
bn()
}
if (ce) {
cW.stroke(ei[6]);
dd()
}
d8.closePath()
}
}
} else {
if (dR === 16) {
for (eg = 0; eg + 3 < el; eg += 4) {
ei = bb[eg];
d8.beginPath();
d8.moveTo(ei[0], ei[1]);
for (ee = 1; ee < 4; ee++) {
d8.lineTo(bb[eg + ee][0], bb[eg + ee][1])
}
d8.lineTo(ei[0], ei[1]);
if (aH) {
cW.fill(bb[eg + 3][5]);
bn()
}
if (ce) {
cW.stroke(bb[eg + 3][6]);
dd()
}
d8.closePath()
}
} else {
if (dR === 17) {
if (el > 3) {
for (eg = 0; eg + 1 < el; eg += 2) {
ei = bb[eg];
d8.beginPath();
if (eg + 3 < el) {
d8.moveTo(bb[eg + 2][0], bb[eg + 2][1]);
d8.lineTo(ei[0], ei[1]);
d8.lineTo(bb[eg + 1][0], bb[eg + 1][1]);
d8.lineTo(bb[eg + 3][0], bb[eg + 3][1]);
if (aH) {
cW.fill(bb[eg + 3][5])
}
if (ce) {
cW.stroke(bb[eg + 3][6])
}
} else {
d8.moveTo(ei[0], ei[1]);
d8.lineTo(bb[eg + 1][0], bb[eg + 1][1])
}
cS()
}
}
} else {
d8.beginPath();
d8.moveTo(bb[0][0], bb[0][1]);
for (eg = 1; eg < el; eg++) {
ei = bb[eg];
if (ei.isVert) {
if (ei.moveTo) {
d8.moveTo(ei[0], ei[1])
} else {
d8.lineTo(ei[0], ei[1])
}
}
}
cS()
}
}
}
}
}
}
}
}
}
dP = false;
aa = false;
cb = [];
c2 = 0;
if (ed) {
bb.pop()
}
};
bB.prototype.endShape = function(eh) {
if (bb.length === 0) {
return
}
var ed = eh === 2;
var ec = [];
var ea = [];
var ej = [];
var em = [];
var ef = [];
var ei;
du = true;
var eg, ee, eb;
var el = bb.length;
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
for (ee = 0; ee < 3; ee++) {
ea.push(ei[ee])
}
}
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
for (ee = 5; ee < 9; ee++) {
ej.push(ei[ee])
}
}
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
for (ee = 9; ee < 13; ee++) {
em.push(ei[ee])
}
}
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
ef.push(ei[3]);
ef.push(ei[4])
}
if (ed) {
ea.push(bb[0][0]);
ea.push(bb[0][1]);
ea.push(bb[0][2]);
for (eg = 5; eg < 9; eg++) {
ej.push(bb[0][eg])
}
for (eg = 9; eg < 13; eg++) {
em.push(bb[0][eg])
}
ef.push(bb[0][3]);
ef.push(bb[0][4])
}
if (dP && (dR === 20 || dR === t)) {
ec = ea;
if (ce) {
bj(ec, null, em)
}
if (aH) {
dm(ea, null, ej)
}
} else {
if (aa && (dR === 20 || dR === t)) {
ec = ea;
ec.splice(ec.length - 3);
em.splice(em.length - 4);
if (ce) {
bj(ec, null, em)
}
if (aH) {
dm(ea, "TRIANGLES", ej)
}
} else {
if (dR === 2) {
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
for (ee = 0; ee < 3; ee++) {
ec.push(ei[ee])
}
}
d1(ec, em)
} else {
if (dR === 4) {
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
for (ee = 0; ee < 3; ee++) {
ec.push(ei[ee])
}
}
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
for (ee = 5; ee < 9; ee++) {
ej.push(ei[ee])
}
}
bj(ec, "LINES", em)
} else {
if (dR === 9) {
if (el > 2) {
for (eg = 0; eg + 2 < el; eg += 3) {
ea = [];
ef = [];
ec = [];
ej = [];
em = [];
for (ee = 0; ee < 3; ee++) {
for (eb = 0; eb < 3; eb++) {
ec.push(bb[eg + ee][eb]);
ea.push(bb[eg + ee][eb])
}
}
for (ee = 0; ee < 3; ee++) {
for (eb = 3; eb < 5; eb++) {
ef.push(bb[eg + ee][eb])
}
}
for (ee = 0; ee < 3; ee++) {
for (eb = 5; eb < 9; eb++) {
ej.push(bb[eg + ee][eb]);
em.push(bb[eg + ee][eb + 4])
}
}
if (ce) {
bj(ec, "LINE_LOOP", em)
}
if (aH || dT) {
dm(ea, "TRIANGLES", ej, ef)
}
}
}
} else {
if (dR === 10) {
if (el > 2) {
for (eg = 0; eg + 2 < el; eg++) {
ec = [];
ea = [];
em = [];
ej = [];
ef = [];
for (ee = 0; ee < 3; ee++) {
for (eb = 0; eb < 3; eb++) {
ec.push(bb[eg + ee][eb]);
ea.push(bb[eg + ee][eb])
}
}
for (ee = 0; ee < 3; ee++) {
for (eb = 3; eb < 5; eb++) {
ef.push(bb[eg + ee][eb])
}
}
for (ee = 0; ee < 3; ee++) {
for (eb = 5; eb < 9; eb++) {
em.push(bb[eg + ee][eb + 4]);
ej.push(bb[eg + ee][eb])
}
}
if (aH || dT) {
dm(ea, "TRIANGLE_STRIP", ej, ef)
}
if (ce) {
bj(ec, "LINE_LOOP", em)
}
}
}
} else {
if (dR === 11) {
if (el > 2) {
for (eg = 0; eg < 3; eg++) {
ei = bb[eg];
for (ee = 0; ee < 3; ee++) {
ec.push(ei[ee])
}
}
for (eg = 0; eg < 3; eg++) {
ei = bb[eg];
for (ee = 9; ee < 13; ee++) {
em.push(ei[ee])
}
}
if (ce) {
bj(ec, "LINE_LOOP", em)
}
for (eg = 2; eg + 1 < el; eg++) {
ec = [];
em = [];
ec.push(bb[0][0]);
ec.push(bb[0][1]);
ec.push(bb[0][2]);
em.push(bb[0][9]);
em.push(bb[0][10]);
em.push(bb[0][11]);
em.push(bb[0][12]);
for (ee = 0; ee < 2; ee++) {
for (eb = 0; eb < 3; eb++) {
ec.push(bb[eg + ee][eb])
}
}
for (ee = 0; ee < 2; ee++) {
for (eb = 9; eb < 13; eb++) {
em.push(bb[eg + ee][eb])
}
}
if (ce) {
bj(ec, "LINE_STRIP", em)
}
}
if (aH || dT) {
dm(ea, "TRIANGLE_FAN", ej, ef)
}
}
} else {
if (dR === 16) {
for (eg = 0; eg + 3 < el; eg += 4) {
ec = [];
for (ee = 0; ee < 4; ee++) {
ei = bb[eg + ee];
for (eb = 0; eb < 3; eb++) {
ec.push(ei[eb])
}
}
if (ce) {
bj(ec, "LINE_LOOP", em)
}
if (aH) {
ea = [];
ej = [];
ef = [];
for (ee = 0; ee < 3; ee++) {
ea.push(bb[eg][ee])
}
for (ee = 5; ee < 9; ee++) {
ej.push(bb[eg][ee])
}
for (ee = 0; ee < 3; ee++) {
ea.push(bb[eg + 1][ee])
}
for (ee = 5; ee < 9; ee++) {
ej.push(bb[eg + 1][ee])
}
for (ee = 0; ee < 3; ee++) {
ea.push(bb[eg + 3][ee])
}
for (ee = 5; ee < 9; ee++) {
ej.push(bb[eg + 3][ee])
}
for (ee = 0; ee < 3; ee++) {
ea.push(bb[eg + 2][ee])
}
for (ee = 5; ee < 9; ee++) {
ej.push(bb[eg + 2][ee])
}
if (dT) {
ef.push(bb[eg + 0][3]);
ef.push(bb[eg + 0][4]);
ef.push(bb[eg + 1][3]);
ef.push(bb[eg + 1][4]);
ef.push(bb[eg + 3][3]);
ef.push(bb[eg + 3][4]);
ef.push(bb[eg + 2][3]);
ef.push(bb[eg + 2][4])
}
dm(ea, "TRIANGLE_STRIP", ej, ef)
}
}
} else {
if (dR === 17) {
var ek = [];
if (el > 3) {
for (eg = 0; eg < 2; eg++) {
ei = bb[eg];
for (ee = 0; ee < 3; ee++) {
ec.push(ei[ee])
}
}
for (eg = 0; eg < 2; eg++) {
ei = bb[eg];
for (ee = 9; ee < 13; ee++) {
em.push(ei[ee])
}
}
bj(ec, "LINE_STRIP", em);
if (el > 4 && el % 2 > 0) {
ek = ea.splice(ea.length - 3);
bb.pop()
}
for (eg = 0; eg + 3 < el; eg += 2) {
ec = [];
em = [];
for (ee = 0; ee < 3; ee++) {
ec.push(bb[eg + 1][ee])
}
for (ee = 0; ee < 3; ee++) {
ec.push(bb[eg + 3][ee])
}
for (ee = 0; ee < 3; ee++) {
ec.push(bb[eg + 2][ee])
}
for (ee = 0; ee < 3; ee++) {
ec.push(bb[eg + 0][ee])
}
for (ee = 9; ee < 13; ee++) {
em.push(bb[eg + 1][ee])
}
for (ee = 9; ee < 13; ee++) {
em.push(bb[eg + 3][ee])
}
for (ee = 9; ee < 13; ee++) {
em.push(bb[eg + 2][ee])
}
for (ee = 9; ee < 13; ee++) {
em.push(bb[eg + 0][ee])
}
if (ce) {
bj(ec, "LINE_STRIP", em)
}
}
if (aH || dT) {
dm(ea, "TRIANGLE_LIST", ej, ef)
}
}
} else {
if (el === 1) {
for (ee = 0; ee < 3; ee++) {
ec.push(bb[0][ee])
}
for (ee = 9; ee < 13; ee++) {
em.push(bb[0][ee])
}
d1(ec, em)
} else {
for (eg = 0; eg < el; eg++) {
ei = bb[eg];
for (ee = 0; ee < 3; ee++) {
ec.push(ei[ee])
}
for (ee = 5; ee < 9; ee++) {
em.push(ei[ee])
}
}
if (ce && ed) {
bj(ec, "LINE_LOOP", em)
} else {
if (ce && !ed) {
bj(ec, "LINE_STRIP", em)
}
} if (aH || dT) {
dm(ea, "TRIANGLE_FAN", ej, ef)
}
}
}
}
}
}
}
}
}
dT = false;
d8.useProgram(dx);
dZ("usingTexture3d", dx, "uUsingTexture", dT)
}
}
dP = false;
aa = false;
cb = [];
c2 = 0
};
var aY = function(ed, ec) {
var ee = 1 / ed;
var eb = ee * ee;
var ea = eb * ee;
ec.set(0, 0, 0, 1, ea, eb, ee, 0, 6 * ea, 2 * eb, 0, 0, 6 * ea, 0, 0, 0)
};
var dr = function() {
if (!aL) {
c3 = new aP;
aL = new aP;
cM = true
}
var ea = aJ;
c3.set((ea - 1) / 2, (ea + 3) / 2, (-3 - ea) / 2, (1 - ea) / 2, 1 - ea, (-5 - ea) / 2, ea + 2, (ea - 1) / 2, (ea - 1) / 2, 0, (1 - ea) / 2, 0, 0, 1, 0, 0);
aY(Q, aL);
if (!cd) {
aQ = new aP
}
aQ.set(c3);
aQ.preApply(cd);
aL.apply(c3)
};
bR.prototype.bezierVertex = function() {
aa = true;
var ea = [];
if (du) {
throw "vertex() must be used at least once before calling bezierVertex()"
}
for (var eb = 0; eb < arguments.length; eb++) {
ea[eb] = arguments[eb]
}
bb.push(ea);
bb[bb.length - 1]["isVert"] = false
};
bB.prototype.bezierVertex = function() {
aa = true;
var eh = [];
if (du) {
throw "vertex() must be used at least once before calling bezierVertex()"
}
if (arguments.length === 9) {
if (bz === t) {
bz = new aP
}
var em = bb.length - 1;
aY(cy, bz);
bz.apply(U);
var eo = bz.array();
var ed = bb[em][0],
en = bb[em][1],
eg = bb[em][2];
var ej = eo[4] * ed + eo[5] * arguments[0] + eo[6] * arguments[3] + eo[7] * arguments[6];
var ei = eo[8] * ed + eo[9] * arguments[0] + eo[10] * arguments[3] + eo[11] * arguments[6];
var ef = eo[12] * ed + eo[13] * arguments[0] + eo[14] * arguments[3] + eo[15] * arguments[6];
var ep = eo[4] * en + eo[5] * arguments[1] + eo[6] * arguments[4] + eo[7] * arguments[7];
var el = eo[8] * en + eo[9] * arguments[1] + eo[10] * arguments[4] + eo[11] * arguments[7];
var ek = eo[12] * en + eo[13] * arguments[1] + eo[14] * arguments[4] + eo[15] * arguments[7];
var ec = eo[4] * eg + eo[5] * arguments[2] + eo[6] * arguments[5] + eo[7] * arguments[8];
var eb = eo[8] * eg + eo[9] * arguments[2] + eo[10] * arguments[5] + eo[11] * arguments[8];
var ea = eo[12] * eg + eo[13] * arguments[2] + eo[14] * arguments[5] + eo[15] * arguments[8];
for (var ee = 0; ee < cy; ee++) {
ed += ej;
ej += ei;
ei += ef;
en += ep;
ep += el;
el += ek;
eg += ec;
ec += eb;
eb += ea;
cW.vertex(ed, en, eg)
}
cW.vertex(arguments[6], arguments[7], arguments[8])
}
};
cW.texture = function(ed) {
var eb = dY.$ensureContext();
if (ed.__texture) {
eb.bindTexture(eb.TEXTURE_2D, ed.__texture)
} else {
if (ed.localName === "canvas") {
eb.bindTexture(eb.TEXTURE_2D, c7);
eb.texImage2D(eb.TEXTURE_2D, 0, eb.RGBA, eb.RGBA, eb.UNSIGNED_BYTE, ed);
eb.texParameteri(eb.TEXTURE_2D, eb.TEXTURE_MAG_FILTER, eb.LINEAR);
eb.texParameteri(eb.TEXTURE_2D, eb.TEXTURE_MIN_FILTER, eb.LINEAR);
eb.generateMipmap(eb.TEXTURE_2D);
cs.width = ed.width;
cs.height = ed.height
} else {
var ec = eb.createTexture(),
ef = d.createElement("canvas"),
ea = ef.getContext("2d"),
ee;
if (ed.width & ed.width - 1 === 0) {
ef.width = ed.width
} else {
ee = 1;
while (ee < ed.width) {
ee *= 2
}
ef.width = ee
} if (ed.height & ed.height - 1 === 0) {
ef.height = ed.height
} else {
ee = 1;
while (ee < ed.height) {
ee *= 2
}
ef.height = ee
}
ea.drawImage(ed.sourceImg, 0, 0, ed.width, ed.height, 0, 0, ef.width, ef.height);
eb.bindTexture(eb.TEXTURE_2D, ec);
eb.texParameteri(eb.TEXTURE_2D, eb.TEXTURE_MIN_FILTER, eb.LINEAR_MIPMAP_LINEAR);
eb.texParameteri(eb.TEXTURE_2D, eb.TEXTURE_MAG_FILTER, eb.LINEAR);
eb.texParameteri(eb.TEXTURE_2D, eb.TEXTURE_WRAP_T, eb.CLAMP_TO_EDGE);
eb.texParameteri(eb.TEXTURE_2D, eb.TEXTURE_WRAP_S, eb.CLAMP_TO_EDGE);
eb.texImage2D(eb.TEXTURE_2D, 0, eb.RGBA, eb.RGBA, eb.UNSIGNED_BYTE, ef);
eb.generateMipmap(eb.TEXTURE_2D);
ed.__texture = ec;
cs.width = ed.width;
cs.height = ed.height
}
}
dT = true;
eb.useProgram(dx);
dZ("usingTexture3d", dx, "uUsingTexture", dT)
};
cW.textureMode = function(ea) {
d4 = ea
};
var ar = function(ev, eg, em, et, ef, el, er, ee, ek, ep, ed, ei) {
var ew = et;
var eh = ef;
var en = el;
var ej = aL.array();
var eu = ej[4] * ev + ej[5] * et + ej[6] * er + ej[7] * ep;
var es = ej[8] * ev + ej[9] * et + ej[10] * er + ej[11] * ep;
var eq = ej[12] * ev + ej[13] * et + ej[14] * er + ej[15] * ep;
var ez = ej[4] * eg + ej[5] * ef + ej[6] * ee + ej[7] * ed;
var ey = ej[8] * eg + ej[9] * ef + ej[10] * ee + ej[11] * ed;
var ex = ej[12] * eg + ej[13] * ef + ej[14] * ee + ej[15] * ed;
var ec = ej[4] * em + ej[5] * el + ej[6] * ek + ej[7] * ei;
var eb = ej[8] * em + ej[9] * el + ej[10] * ek + ej[11] * ei;
var ea = ej[12] * em + ej[13] * el + ej[14] * ek + ej[15] * ei;
cW.vertex(ew, eh, en);
for (var eo = 0; eo < Q; eo++) {
ew += eu;
eu += es;
es += eq;
eh += ez;
ez += ey;
ey += ex;
en += ec;
ec += eb;
eb += ea;
cW.vertex(ew, eh, en)
}
};
bR.prototype.curveVertex = function(ea, eb) {
dP = true;
cW.vertex(ea, eb)
};
bB.prototype.curveVertex = function(ea, ed, ec) {
dP = true;
if (!cM) {
dr()
}
var eb = [];
eb[0] = ea;
eb[1] = ed;
eb[2] = ec;
cb.push(eb);
c2++;
if (c2 > 3) {
ar(cb[c2 - 4][0], cb[c2 - 4][1], cb[c2 - 4][2], cb[c2 - 3][0], cb[c2 - 3][1], cb[c2 - 3][2], cb[c2 - 2][0], cb[c2 - 2][1], cb[c2 - 2][2], cb[c2 - 1][0], cb[c2 - 1][1], cb[c2 - 1][2])
}
};
bR.prototype.curve = function(ef, eh, ed, eg, eb, ee, ea, ec) {
cW.beginShape();
cW.curveVertex(ef, eh);
cW.curveVertex(ed, eg);
cW.curveVertex(eb, ee);
cW.curveVertex(ea, ec);
cW.endShape()
};
bB.prototype.curve = function(ec, ek, eg, eb, ej, ef, ea, ei, ee, el, eh, ed) {
if (ed !== t) {
cW.beginShape();
cW.curveVertex(ec, ek, eg);
cW.curveVertex(eb, ej, ef);
cW.curveVertex(ea, ei, ee);
cW.curveVertex(el, eh, ed);
cW.endShape();
return
}
cW.beginShape();
cW.curveVertex(ec, ek);
cW.curveVertex(eg, eb);
cW.curveVertex(ej, ef);
cW.curveVertex(ea, ei);
cW.endShape()
};
cW.curveTightness = function(ea) {
aJ = ea
};
cW.curveDetail = function(ea) {
Q = ea;
dr()
};
cW.rectMode = function(ea) {
bK = ea
};
cW.imageMode = function(ea) {
switch (ea) {
case 0:
bk = aZ;
break;
case 1:
bk = b1;
break;
case 3:
bk = aN;
break;
default:
throw "Invalid imageMode"
}
};
cW.ellipseMode = function(ea) {
cN = ea
};
cW.arc = function(em, ek, ed, eo, ec, el) {
if (ed <= 0 || el < ec) {
return
}
if (cN === 1) {
ed = ed - em;
eo = eo - ek
} else {
if (cN === 2) {
em = em - ed;
ek = ek - eo;
ed = ed * 2;
eo = eo * 2
} else {
if (cN === 3) {
em = em - ed / 2;
ek = ek - eo / 2
}
}
}
while (ec < 0) {
ec += 6.283185307179586;
el += 6.283185307179586
}
if (el - ec > 6.283185307179586) {
ec = 0;
el = 6.283185307179586
}
var en = ed / 2,
ep = eo / 2,
eh = em + en,
ef = ek + ep,
eb = 0 | 0.5 + ec * cW.RAD_TO_DEG * 2,
ej = 0 | 0.5 + el * cW.RAD_TO_DEG * 2,
ei, eg;
if (aH) {
var ee = ce;
ce = false;
cW.beginShape();
cW.vertex(eh, ef);
for (ei = eb; ei <= ej; ei++) {
eg = ei % 720;
cW.vertex(eh + bl[eg] * en, ef + ah[eg] * ep)
}
cW.endShape(2);
ce = ee
}
if (ce) {
var ea = aH;
aH = false;
cW.beginShape();
for (ei = eb; ei <= ej; ei++) {
eg = ei % 720;
cW.vertex(eh + bl[eg] * en, ef + ah[eg] * ep)
}
cW.endShape();
aH = ea
}
};
bR.prototype.line = function(eb, ei, ea, eg) {
if (!ce) {
return
}
eb = q.round(eb);
ea = q.round(ea);
ei = q.round(ei);
eg = q.round(eg);
if (eb === ea && ei === eg) {
cW.point(eb, ei);
return
}
var ec = t,
ej = t,
ef = true,
eh = dJ.array(),
ed = [1, 0, 0, 0, 1, 0];
for (var ee = 0; ee < 6 && ef; ee++) {
ef = eh[ee] === ed[ee]
}
if (ef) {
if (eb === ea) {
if (ei > eg) {
ec = ei;
ei = eg;
eg = ec
}
eg++;
if (dW % 2 === 1) {
d8.translate(0.5, 0)
}
} else {
if (ei === eg) {
if (eb > ea) {
ec = eb;
eb = ea;
ea = ec
}
ea++;
if (dW % 2 === 1) {
d8.translate(0, 0.5)
}
}
} if (dW === 1) {
ej = d8.lineCap;
d8.lineCap = "butt"
}
}
d8.beginPath();
d8.moveTo(eb || 0, ei || 0);
d8.lineTo(ea || 0, eg || 0);
dd();
if (ef) {
if (eb === ea && dW % 2 === 1) {
d8.translate(-0.5, 0)
} else {
if (ei === eg && dW % 2 === 1) {
d8.translate(0, -0.5)
}
} if (dW === 1) {
d8.lineCap = ej
}
}
};
bB.prototype.line = function(ec, ef, eh, eb, ed, eg) {
if (ed === t || eg === t) {
eg = 0;
ed = eb;
eb = eh;
eh = 0
}
if (ec === eb && ef === ed && eh === eg) {
cW.point(ec, ef, eh);
return
}
var ee = [ec, ef, eh, eb, ed, eg];
var ea = new aP;
ea.scale(1, -1, 1);
ea.apply(dJ.array());
ea.transpose();
if (dW > 0 && ce) {
d8.useProgram(dQ);
a9("uModel2d", dQ, "uModel", false, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
a9("uView2d", dQ, "uView", false, ea.array());
d2("uColor2d", dQ, "uColor", c0);
dZ("uIsDrawingText", dQ, "uIsDrawingText", false);
dc("aVertex2d", dQ, "aVertex", 3, b8);
cg("aTextureCoord2d", dQ, "aTextureCoord");
d8.bufferData(d8.ARRAY_BUFFER, new e(ee), d8.STREAM_DRAW);
d8.drawArrays(d8.LINES, 0, 2)
}
};
bR.prototype.bezier = function() {
if (arguments.length !== 8) {
throw "You must use 8 parameters for bezier() in 2D mode"
}
cW.beginShape();
cW.vertex(arguments[0], arguments[1]);
cW.bezierVertex(arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]);
cW.endShape()
};
bB.prototype.bezier = function() {
if (arguments.length !== 12) {
throw "You must use 12 parameters for bezier() in 3D mode"
}
cW.beginShape();
cW.vertex(arguments[0], arguments[1], arguments[2]);
cW.bezierVertex(arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9], arguments[10], arguments[11]);
cW.endShape()
};
cW.bezierDetail = function(ea) {
cy = ea
};
cW.bezierPoint = function(eb, ea, ee, ed, ec) {
return (1 - ec) * (1 - ec) * (1 - ec) * eb + 3 * (1 - ec) * (1 - ec) * ec * ea + 3 * (1 - ec) * ec * ec * ee + ec * ec * ec * ed
};
cW.bezierTangent = function(eb, ea, ee, ed, ec) {
return 3 * ec * ec * (-eb + 3 * ea - 3 * ee + ed) + 6 * ec * (eb - 2 * ea + ee) + 3 * (-eb + ea)
};
cW.curvePoint = function(eb, ea, ee, ed, ec) {
return 0.5 * (2 * ea + (-eb + ee) * ec + (2 * eb - 5 * ea + 4 * ee - ed) * ec * ec + (-eb + 3 * ea - 3 * ee + ed) * ec * ec * ec)
};
cW.curveTangent = function(eb, ea, ee, ed, ec) {
return 0.5 * (-eb + ee + 2 * (2 * eb - 5 * ea + 4 * ee - ed) * ec + 3 * (-eb + 3 * ea - 3 * ee + ed) * ec * ec)
};
cW.triangle = function(ed, ef, eb, ee, ea, ec) {
cW.beginShape(9);
cW.vertex(ed, ef, 0);
cW.vertex(eb, ee, 0);
cW.vertex(ea, ec, 0);
cW.endShape()
};
cW.quad = function(ef, eh, ed, eg, eb, ee, ea, ec) {
cW.beginShape(16);
cW.vertex(ef, eh, 0);
cW.vertex(ed, eg, 0);
cW.vertex(eb, ee, 0);
cW.vertex(ea, ec, 0);
cW.endShape()
};
var bN = function(eg, ef, ea, eh, ej, ee, ei, eb) {
if (eb === t) {
ee = ej;
ei = ej;
eb = ej
}
var ec = ea / 2,
ed = eh / 2;
if (ej > ec || ej > ed) {
ej = q.min(ec, ed)
}
if (ee > ec || ee > ed) {
ee = q.min(ec, ed)
}
if (ei > ec || ei > ed) {
ei = q.min(ec, ed)
}
if (eb > ec || eb > ed) {
eb = q.min(ec, ed)
}
if (!aH || ce) {
d8.translate(0.5, 0.5)
}
d8.beginPath();
d8.moveTo(eg + ej, ef);
d8.lineTo(eg + ea - ee, ef);
d8.quadraticCurveTo(eg + ea, ef, eg + ea, ef + ee);
d8.lineTo(eg + ea, ef + eh - ei);
d8.quadraticCurveTo(eg + ea, ef + eh, eg + ea - ei, ef + eh);
d8.lineTo(eg + eb, ef + eh);
d8.quadraticCurveTo(eg, ef + eh, eg, ef + eh - eb);
d8.lineTo(eg, ef + ej);
d8.quadraticCurveTo(eg, ef, eg + ej, ef);
if (!aH || ce) {
d8.translate(-0.5, -0.5)
}
bn();
dd()
};
bR.prototype.rect = function(eb, eh, ee, ea, ec, ef, ed, eg) {
if (!ee && !ea) {
return
}
if (bK === 1) {
ee -= eb;
ea -= eh
} else {
if (bK === 2) {
ee *= 2;
ea *= 2;
eb -= ee / 2;
eh -= ea / 2
} else {
if (bK === 3) {
eb -= ee / 2;
eh -= ea / 2
}
}
}
eb = q.round(eb);
eh = q.round(eh);
ee = q.round(ee);
ea = q.round(ea);
if (ec !== t) {
bN(eb, eh, ee, ea, ec, ef, ed, eg);
return
}
if (ce && dW % 2 === 1) {
d8.translate(0.5, 0.5)
}
d8.beginPath();
d8.rect(eb, eh, ee, ea);
bn();
dd();
if (ce && dW % 2 === 1) {
d8.translate(-0.5, -0.5)
}
};
bB.prototype.rect = function(ei, eh, ea, ek, em, ef, el, eb) {
if (em !== t) {
throw "rect() with rounded corners is not supported in 3D mode"
}
if (bK === 1) {
ea -= ei;
ek -= eh
} else {
if (bK === 2) {
ea *= 2;
ek *= 2;
ei -= ea / 2;
eh -= ek / 2
} else {
if (bK === 3) {
ei -= ea / 2;
eh -= ek / 2
}
}
}
var ee = new aP;
ee.translate(ei, eh, 0);
ee.scale(ea, ek, 1);
ee.transpose();
var eg = new aP;
eg.scale(1, -1, 1);
eg.apply(dJ.array());
eg.transpose();
if (dW > 0 && ce) {
d8.useProgram(dQ);
a9("uModel2d", dQ, "uModel", false, ee.array());
a9("uView2d", dQ, "uView", false, eg.array());
d2("uColor2d", dQ, "uColor", c0);
dZ("uIsDrawingText2d", dQ, "uIsDrawingText", false);
dc("aVertex2d", dQ, "aVertex", 3, aB);
cg("aTextureCoord2d", dQ, "aTextureCoord");
d8.drawArrays(d8.LINE_LOOP, 0, ak.length / 3)
}
if (aH) {
d8.useProgram(dx);
a9("uModel3d", dx, "uModel", false, ee.array());
a9("uView3d", dx, "uView", false, eg.array());
d8.enable(d8.POLYGON_OFFSET_FILL);
d8.polygonOffset(1, 1);
d2("color3d", dx, "uColor", bo);
if (dL > 0) {
var ej = new aP;
ej.set(eg);
var ec = new aP;
ec.set(ee);
ej.mult(ec);
var ed = new aP;
ed.set(ej);
ed.invert();
ed.transpose();
a9("uNormalTransform3d", dx, "uNormalTransform", false, ed.array());
dc("aNormal3d", dx, "aNormal", 3, b2)
} else {
cg("normal3d", dx, "aNormal")
}
dc("vertex3d", dx, "aVertex", 3, aB);
d8.drawArrays(d8.TRIANGLE_FAN, 0, ak.length / 3);
d8.disable(d8.POLYGON_OFFSET_FILL)
}
};
bR.prototype.ellipse = function(eg, ef, eb, ei) {
eg = eg || 0;
ef = ef || 0;
if (eb <= 0 && ei <= 0) {
return
}
if (cN === 2) {
eb *= 2;
ei *= 2
} else {
if (cN === 1) {
eb = eb - eg;
ei = ei - ef;
eg += eb / 2;
ef += ei / 2
} else {
if (cN === 0) {
eg += eb / 2;
ef += ei / 2
}
}
} if (eb === ei) {
d8.beginPath();
d8.arc(eg, ef, eb / 2, 0, 6.283185307179586, false);
bn();
dd()
} else {
var eh = eb / 2,
ee = ei / 2,
ea = 0.5522847498307933,
ed = ea * eh,
ec = ea * ee;
cW.beginShape();
cW.vertex(eg + eh, ef);
cW.bezierVertex(eg + eh, ef - ec, eg + ed, ef - ee, eg, ef - ee);
cW.bezierVertex(eg - ed, ef - ee, eg - eh, ef - ec, eg - eh, ef);
cW.bezierVertex(eg - eh, ef + ec, eg - ed, ef + ee, eg, ef + ee);
cW.bezierVertex(eg + ed, ef + ee, eg + eh, ef + ec, eg + eh, ef);
cW.endShape()
}
};
bB.prototype.ellipse = function(en, em, ec, ep) {
en = en || 0;
em = em || 0;
if (ec <= 0 && ep <= 0) {
return
}
if (cN === 2) {
ec *= 2;
ep *= 2
} else {
if (cN === 1) {
ec = ec - en;
ep = ep - em;
en += ec / 2;
em += ep / 2
} else {
if (cN === 0) {
en += ec / 2;
em += ep / 2
}
}
}
var eo = ec / 2,
ej = ep / 2,
ea = 0.5522847498307933,
ee = ea * eo,
ed = ea * ej;
cW.beginShape();
cW.vertex(en + eo, em);
cW.bezierVertex(en + eo, em - ed, 0, en + ee, em - ej, 0, en, em - ej, 0);
cW.bezierVertex(en - ee, em - ej, 0, en - eo, em - ed, 0, en - eo, em, 0);
cW.bezierVertex(en - eo, em + ed, 0, en - ee, em + ej, 0, en, em + ej, 0);
cW.bezierVertex(en + ee, em + ej, 0, en + eo, em + ed, 0, en + eo, em, 0);
cW.endShape();
if (aH) {
var ef = 0,
ek = 0,
eh, eg;
for (eh = 0; eh < bb.length; eh++) {
ef += bb[eh][0];
ek += bb[eh][1]
}
ef /= bb.length;
ek /= bb.length;
var ei = [],
eb = [],
el = [];
ei[0] = ef;
ei[1] = ek;
ei[2] = 0;
ei[3] = 0;
ei[4] = 0;
ei[5] = bo[0];
ei[6] = bo[1];
ei[7] = bo[2];
ei[8] = bo[3];
ei[9] = c0[0];
ei[10] = c0[1];
ei[11] = c0[2];
ei[12] = c0[3];
ei[13] = a8;
ei[14] = a7;
ei[15] = a6;
bb.unshift(ei);
for (eh = 0; eh < bb.length; eh++) {
for (eg = 0; eg < 3; eg++) {
eb.push(bb[eh][eg])
}
for (eg = 5; eg < 9; eg++) {
el.push(bb[eh][eg])
}
}
dm(eb, "TRIANGLE_FAN", el)
}
};
cW.normal = function(ea, ec, eb) {
if (arguments.length !== 3 || !(typeof ea === "number" && typeof ec === "number" && typeof eb === "number")) {
throw "normal() requires three numeric arguments."
}
a8 = ea;
a7 = ec;
a6 = eb;
if (dR !== 0) {
if (a2 === 0) {
a2 = 1
} else {
if (a2 === 1) {
a2 = 2
}
}
}
};
cW.save = function(eb, ea) {
if (ea !== t) {
return D.open(ea.toDataURL(), "_blank")
}
return D.open(cW.externals.canvas.toDataURL(), "_blank")
};
var cw = 0;
cW.saveFrame = function(ea) {
if (ea === t) {
ea = "screen-####.png"
}
var eb = ea.replace(/#+/, function(ed) {
var ec = "" + cw++;
while (ec.length < ed.length) {
ec = "0" + ec
}
return ec
});
cW.save(eb)
};
var cc = d.createElement("canvas").getContext("2d");
var X = [t, t, t];
function by(eh, eb, eg) {
var ed = X.shift();
if (ed === t) {
ed = {};
ed.canvas = d.createElement("canvas");
ed.context = ed.canvas.getContext("2d")
}
X.push(ed);
var ec = ed.canvas,
ee = ed.context,
ef = eb || eh.width,
ea = eg || eh.height;
ec.width = ef;
ec.height = ea;
if (!eh) {
ee.clearRect(0, 0, ef, ea)
} else {
if ("data" in eh) {
ee.putImageData(eh, 0, 0)
} else {
ee.clearRect(0, 0, ef, ea);
ee.drawImage(eh, 0, 0, ef, ea)
}
}
return ed
}
function b0(ea) {
return {
getLength: function(eb) {
return function() {
if (eb.isRemote) {
throw "Image is loaded remotely. Cannot get length."
} else {
return eb.imageData.data.length ? eb.imageData.data.length / 4 : 0
}
}
}(ea),
getPixel: function(eb) {
return function(ec) {
var ee = ec * 4,
ed = eb.imageData.data;
if (eb.isRemote) {
throw "Image is loaded remotely. Cannot get pixels."
}
return (ed[ee + 3] & 255) << 24 | (ed[ee] & 255) << 16 | (ed[ee + 1] & 255) << 8 | ed[ee + 2] & 255
}
}(ea),
setPixel: function(eb) {
return function(ec, ef) {
var ee = ec * 4,
ed = eb.imageData.data;
if (eb.isRemote) {
throw "Image is loaded remotely. Cannot set pixel."
}
ed[ee + 0] = (ef >> 16) & 255;
ed[ee + 1] = (ef >> 8) & 255;
ed[ee + 2] = ef & 255;
ed[ee + 3] = (ef >> 24) & 255;
eb.__isDirty = true
}
}(ea),
toArray: function(eb) {
return function() {
var ec = [],
ef = eb.imageData.data,
ee = eb.width * eb.height;
if (eb.isRemote) {
throw "Image is loaded remotely. Cannot get pixels."
}
for (var ed = 0, eg = 0; ed < ee; ed++, eg += 4) {
ec.push((ef[eg + 3] & 255) << 24 | (ef[eg] & 255) << 16 | (ef[eg + 1] & 255) << 8 | ef[eg + 2] & 255)
}
return ec
}
}(ea),
set: function(eb) {
return function(ec) {
var eg, ef, eh;
if (this.isRemote) {
throw "Image is loaded remotely. Cannot set pixels."
}
ef = eb.imageData.data;
for (var ed = 0, ee = ec.length; ed < ee; ed++) {
eh = ec[ed];
eg = ed * 4;
ef[eg + 0] = (eh >> 16) & 255;
ef[eg + 1] = (eh >> 8) & 255;
ef[eg + 2] = eh & 255;
ef[eg + 3] = (eh >> 24) & 255
}
eb.__isDirty = true
}
}(ea)
}
}
var cG = function(ed, eg, ee) {
this.__isDirty = false;
if (ed instanceof HTMLImageElement) {
this.fromHTMLImageData(ed)
} else {
if (eg || ee) {
this.width = ed || 1;
this.height = eg || 1;
var eb = this.sourceImg = d.createElement("canvas");
eb.width = this.width;
eb.height = this.height;
var eh = this.imageData = eb.getContext("2d").createImageData(this.width, this.height);
this.format = ee === 2 || ee === 4 ? ee : 1;
if (this.format === 1) {
for (var ec = 3, ef = this.imageData.data, ea = ef.length; ec < ea; ec += 4) {
ef[ec] = 255
}
}
this.__isDirty = true;
this.updatePixels()
} else {
this.width = 0;
this.height = 0;
this.imageData = cc.createImageData(1, 1);
this.format = 2
}
}
this.pixels = b0(this)
};
cG.prototype = {
__isPImage: true,
updatePixels: function() {
var ea = this.sourceImg;
if (ea && ea instanceof HTMLCanvasElement && this.__isDirty) {
ea.getContext("2d").putImageData(this.imageData, 0, 0)
}
this.__isDirty = false
},
fromHTMLImageData: function(ea) {
var eb = by(ea);
try {
var ed = eb.context.getImageData(0, 0, ea.width, ea.height);
this.fromImageData(ed)
} catch (ec) {
if (ea.width && ea.height) {
this.isRemote = true;
this.width = ea.width;
this.height = ea.height
}
}
this.sourceImg = ea
},
get: function(ea, ed, eb, ec) {
if (!arguments.length) {
return cW.get(this)
}
if (arguments.length === 2) {
return cW.get(ea, ed, this)
}
if (arguments.length === 4) {
return cW.get(ea, ed, eb, ec, this)
}
},
set: function(ea, ec, eb) {
cW.set(ea, ec, eb, this);
this.__isDirty = true
},
blend: function(ei, ee, ed, eb, eg, ej, eh, ef, ea, ec) {
if (arguments.length === 9) {
cW.blend(this, ei, ee, ed, eb, eg, ej, eh, ef, ea, this)
} else {
if (arguments.length === 10) {
cW.blend(ei, ee, ed, eb, eg, ej, eh, ef, ea, ec, this)
}
}
delete this.sourceImg
},
copy: function(eh, ee, ed, ec, eb, ei, eg, ef, ea) {
if (arguments.length === 8) {
cW.blend(this, eh, ee, ed, ec, eb, ei, eg, ef, 0, this)
} else {
if (arguments.length === 9) {
cW.blend(eh, ee, ed, ec, eb, ei, eg, ef, ea, 0, this)
}
}
delete this.sourceImg
},
filter: function(eb, ea) {
if (arguments.length === 2) {
cW.filter(eb, ea, this)
} else {
if (arguments.length === 1) {
cW.filter(eb, null, this)
}
}
delete this.sourceImg
},
save: function(ea) {
cW.save(ea, this)
},
resize: function(ea, ec) {
if (this.isRemote) {
throw "Image is loaded remotely. Cannot resize."
}
if (this.width !== 0 || this.height !== 0) {
if (ea === 0 && ec !== 0) {
ea = q.floor(this.width / this.height * ec)
} else {
if (ec === 0 && ea !== 0) {
ec = q.floor(this.height / this.width * ea)
}
}
var eb = by(this.imageData).canvas;
var ed = by(eb, ea, ec).context.getImageData(0, 0, ea, ec);
this.fromImageData(ed)
}
},
mask: function(ea) {
var ed = this.toImageData(),
ec, eb;
if (ea instanceof cG || ea.__isPImage) {
if (ea.width === this.width && ea.height === this.height) {
ea = ea.toImageData();
for (ec = 2, eb = this.width * this.height * 4; ec < eb; ec += 4) {
ed.data[ec + 1] = ea.data[ec]
}
} else {
throw "mask must have the same dimensions as PImage."
}
} else {
if (ea instanceof Array) {
if (this.width * this.height === ea.length) {
for (ec = 0, eb = ea.length; ec < eb; ++ec) {
ed.data[ec * 4 + 3] = ea[ec]
}
} else {
throw "mask array must be the same length as PImage pixels array."
}
}
}
this.fromImageData(ed)
},
loadPixels: G,
toImageData: function() {
if (this.isRemote) {
return this.sourceImg
}
if (!this.__isDirty) {
return this.imageData
}
var ea = by(this.sourceImg);
return ea.context.getImageData(0, 0, this.width, this.height)
},
toDataURL: function() {
if (this.isRemote) {
throw "Image is loaded remotely. Cannot create dataURI."
}
var ea = by(this.imageData);
return ea.canvas.toDataURL()
},
fromImageData: function(ee) {
var eb = ee.width,
ed = ee.height,
ec = d.createElement("canvas"),
ea = ec.getContext("2d");
this.width = ec.width = eb;
this.height = ec.height = ed;
ea.putImageData(ee, 0, 0);
this.format = 2;
this.imageData = ee;
this.sourceImg = ec
}
};
cW.PImage = cG;
cW.createImage = function(ea, eb, ec) {
return new cG(ea, eb, ec)
};
cW.loadImage = function(eb, ec, ee) {
if (ec) {
eb = eb + "." + ec
}
var ed;
if (cQ.imageCache.images[eb]) {
ed = new cG(cQ.imageCache.images[eb]);
ed.loaded = true;
return ed
}
ed = new cG;
var ea = d.createElement("img");
ed.sourceImg = ea;
ea.onload = function(ei, eg, ef) {
var ej = ei;
var eh = eg;
var ek = ef;
return function() {
eh.fromHTMLImageData(ej);
eh.loaded = true;
if (ek) {
ek()
}
}
}(ea, ed, ee);
ea.src = eb;
return ed
};
cW.requestImage = cW.loadImage;
function c9(ea, ed) {
var eb;
if (ea >= cW.width || ea < 0 || ed < 0 || ed >= cW.height) {
return 0
}
if (dV) {
var ec = ((0 | ea) + cW.width * (0 | ed)) * 4;
eb = cW.imageData.data;
return (eb[ec + 3] & 255) << 24 | (eb[ec] & 255) << 16 | (eb[ec + 1] & 255) << 8 | eb[ec + 2] & 255
}
eb = cW.toImageData(0 | ea, 0 | ed, 1, 1).data;
return (eb[3] & 255) << 24 | (eb[0] & 255) << 16 | (eb[1] & 255) << 8 | eb[2] & 255
}
function c8(ea, ee, eb) {
if (eb.isRemote) {
throw "Image is loaded remotely. Cannot get x,y."
}
var ed = ee * eb.width * 4 + ea * 4,
ec = eb.imageData.data;
return (ec[ed + 3] & 255) << 24 | (ec[ed] & 255) << 16 | (ec[ed + 1] & 255) << 8 | ec[ed + 2] & 255
}
function c6(ea, ee, eb, ec) {
var ed = new cG(eb, ec, 2);
ed.fromImageData(cW.toImageData(ea, ee, eb, ec));
return ed
}
function c5(ef, ee, eg, el, er) {
if (er.isRemote) {
throw "Image is loaded remotely. Cannot get x,y,w,h."
}
var ep = new cG(eg, el, 2),
ec = ep.imageData.data,
ed = er.width,
em = er.height,
eo = er.imageData.data;
var ea = q.max(0, -ee),
eb = q.max(0, -ef),
eh = q.min(el, em - ee),
ei = q.min(eg, ed - ef);
for (var ek = ea; ek < eh; ++ek) {
var en = ((ee + ek) * ed + (ef + eb)) * 4;
var eq = (ek * eg + eb) * 4;
for (var ej = eb; ej < ei; ++ej) {
ec[eq++] = eo[en++];
ec[eq++] = eo[en++];
ec[eq++] = eo[en++];
ec[eq++] = eo[en++]
}
}
ep.__isDirty = true;
return ep
}
cW.get = function(ea, ee, eb, ed, ec) {
if (ec !== undefined) {
return c5(ea, ee, eb, ed, ec)
}
if (ed !== undefined) {
return c6(ea, ee, eb, ed)
}
if (eb !== undefined) {
return c8(ea, ee, eb)
}
if (ee !== undefined) {
return c9(ea, ee)
}
if (ea !== undefined) {
return c5(0, 0, ea.width, ea.height, ea)
}
return c6(0, 0, cW.width, cW.height)
};
cW.createGraphics = function(ea, ec, eb) {
var ed = new F;
ed.size(ea, ec, eb);
ed.background(0, 0);
return ed
};
function T() {
if (dV) {
d8 = aj;
dV = false;
cW.updatePixels()
}
}
function cq() {
function eb(ef, ed) {
function ee() {
T();
d8[ed].apply(d8, arguments)
}
ef[ed] = ee
}
function ea(eg, ee) {
function ed() {
T();
return d8[ee]
}
function ef(eh) {
T();
d8[ee] = eh
}
cW.defineProperty(eg, ee, {
get: ed,
set: ef
})
}
for (var ec in d8) {
if (typeof d8[ec] === "function") {
eb(this, ec)
} else {
ea(this, ec)
}
}
}
function cC() {
if (dV) {
return
}
cW.loadPixels();
if (cn === null) {
aj = d8;
cn = new cq
}
dV = true;
d8 = cn;
d3 = 0
}
function bx(ea, ec, eb) {
if (ea < cW.width && ea >= 0 && ec >= 0 && ec < cW.height) {
cC();
cW.pixels.setPixel((0 | ea) + cW.width * (0 | ec), eb);
if (++d3 > bZ) {
T()
}
}
}
function bv(ea, eg, ed, eb) {
if (eb.isRemote) {
throw "Image is loaded remotely. Cannot set x,y."
}
var ef = cW.color.toArray(ed);
var ee = eg * eb.width * 4 + ea * 4;
var ec = eb.imageData.data;
ec[ee] = ef[0];
ec[ee + 1] = ef[1];
ec[ee + 2] = ef[2];
ec[ee + 3] = ef[3]
}
cW.set = function(ea, ef, ed, ec) {
var eb, ee;
if (arguments.length === 3) {
if (typeof ed === "number") {
bx(ea, ef, ed)
} else {
if (ed instanceof cG || ed.__isPImage) {
cW.image(ed, ea, ef)
}
}
} else {
if (arguments.length === 4) {
bv(ea, ef, ed, ec)
}
}
};
cW.imageData = {};
cW.pixels = {
getLength: function() {
return cW.imageData.data.length ? cW.imageData.data.length / 4 : 0
},
getPixel: function(ea) {
var ec = ea * 4,
eb = cW.imageData.data;
return eb[ec + 3] << 24 & 4278190080 | eb[ec + 0] << 16 & 16711680 | eb[ec + 1] << 8 & 65280 | eb[ec + 2] & 255
},
setPixel: function(ea, ed) {
var ec = ea * 4,
eb = cW.imageData.data;
eb[ec + 0] = (ed & 16711680) >>> 16;
eb[ec + 1] = (ed & 65280) >>> 8;
eb[ec + 2] = ed & 255;
eb[ec + 3] = (ed & 4278190080) >>> 24
},
toArray: function() {
var ea = [],
ec = cW.imageData.width * cW.imageData.height,
ed = cW.imageData.data;
for (var eb = 0, ee = 0; eb < ec; eb++, ee += 4) {
ea.push(ed[ee + 3] << 24 & 4278190080 | ed[ee + 0] << 16 & 16711680 | ed[ee + 1] << 8 & 65280 | ed[ee + 2] & 255)
}
return ea
},
set: function(ea) {
for (var eb = 0, ec = ea.length; eb < ec; eb++) {
this.setPixel(eb, ea[eb])
}
}
};
cW.loadPixels = function() {
cW.imageData = dY.$ensureContext().getImageData(0, 0, cW.width, cW.height)
};
cW.updatePixels = function() {
if (cW.imageData) {
dY.$ensureContext().putImageData(cW.imageData, 0, 0)
}
};
cW.hint = function(eb) {
var ea = dY.$ensureContext();
if (eb === 4) {
ea.disable(ea.DEPTH_TEST);
ea.depthMask(false);
ea.clear(ea.DEPTH_BUFFER_BIT)
} else {
if (eb === -4) {
ea.enable(ea.DEPTH_TEST);
ea.depthMask(true)
} else {
if (eb === -1 || eb === 2) {
dO = true
} else {
if (eb === 1) {
dO = false
}
}
}
}
};
var bE = function(ed, ec, eb, ea) {
var ee;
if (ed instanceof cG || ed.__isPImage) {
ee = ed;
if (!ee.loaded) {
throw "Error using image in background(): PImage not loaded."
}
if (ee.width !== cW.width || ee.height !== cW.height) {
throw "Background image must be the same dimensions as the canvas."
}
} else {
ee = cW.color(ed, ec, eb, ea)
}
a4 = ee
};
bR.prototype.background = function(ed, ec, eb, ea) {
if (ed !== t) {
bE(ed, ec, eb, ea)
}
if (a4 instanceof cG || a4.__isPImage) {
aD();
d8.setTransform(1, 0, 0, 1, 0, 0);
cW.image(a4, 0, 0);
cP()
} else {
aD();
d8.setTransform(1, 0, 0, 1, 0, 0);
if (cW.alpha(a4) !== bU) {
d8.clearRect(0, 0, cW.width, cW.height)
}
d8.fillStyle = cW.color.toString(a4);
d8.fillRect(0, 0, cW.width, cW.height);
aq = true;
cP()
}
};
bB.prototype.background = function(ed, ec, eb, ea) {
if (arguments.length > 0) {
bE(ed, ec, eb, ea)
}
var ee = cW.color.toGLArray(a4);
d8.clearColor(ee[0], ee[1], ee[2], ee[3]);
d8.clear(d8.COLOR_BUFFER_BIT | d8.DEPTH_BUFFER_BIT)
};
bR.prototype.image = function(ed, ei, eg, ej, ee) {
ei = q.round(ei);
eg = q.round(eg);
if (ed.width > 0) {
var ek = ej || ed.width;
var eh = ee || ed.height;
var ea = bk(ei || 0, eg || 0, ej || ed.width, ee || ed.height, arguments.length < 4);
var ef = !!ed.sourceImg && bf === null;
if (ef) {
var eb = ed.sourceImg;
if (ed.__isDirty) {
ed.updatePixels()
}
d8.drawImage(eb, 0, 0, eb.width, eb.height, ea.x, ea.y, ea.w, ea.h)
} else {
var ec = ed.toImageData();
if (bf !== null) {
bf(ec);
ed.__isDirty = true
}
d8.drawImage(by(ec).canvas, 0, 0, ed.width, ed.height, ea.x, ea.y, ea.w, ea.h)
}
}
};
bB.prototype.image = function(ec, ea, ee, eb, ed) {
if (ec.width > 0) {
ea = q.round(ea);
ee = q.round(ee);
eb = eb || ec.width;
ed = ed || ec.height;
cW.beginShape(cW.QUADS);
cW.texture(ec);
cW.vertex(ea, ee, 0, 0, 0);
cW.vertex(ea, ee + ed, 0, 0, ed);
cW.vertex(ea + eb, ee + ed, 0, eb, ed);
cW.vertex(ea + eb, ee, 0, eb, 0);
cW.endShape()
}
};
cW.tint = function(ed, ec, ea, ei) {
var ef = cW.color(ed, ec, ea, ei);
var eb = cW.red(ef) / bJ;
var ee = cW.green(ef) / bI;
var eg = cW.blue(ef) / bG;
var eh = cW.alpha(ef) / bU;
bf = function(em) {
var el = em.data,
ek = 4 * em.width * em.height;
for (var ej = 0; ej < ek;) {
el[ej++] *= eb;
el[ej++] *= ee;
el[ej++] *= eg;
el[ej++] *= eh
}
};
bw = function(ek) {
for (var ej = 0; ej < ek.length;) {
ek[ej++] = eb;
ek[ej++] = ee;
ek[ej++] = eg;
ek[ej++] = eh
}
}
};
cW.noTint = function() {
bf = null;
bw = null
};
cW.copy = function(ea, ef, ee, eg, ec, ei, eh, eb, ed) {
if (ed === t) {
ed = eb;
eb = eh;
eh = ei;
ei = ec;
ec = eg;
eg = ee;
ee = ef;
ef = ea;
ea = cW
}
cW.blend(ea, ef, ee, eg, ec, ei, eh, eb, ed, 0)
};
cW.blend = function(ea, ek, ej, en, ef, ep, eo, eb, eh, eg, ed) {
if (ea.isRemote) {
throw "Image is loaded remotely. Cannot blend image."
}
if (eg === t) {
eg = eh;
eh = eb;
eb = eo;
eo = ep;
ep = ef;
ef = en;
en = ej;
ej = ek;
ek = ea;
ea = cW
}
var ec = ek + en,
ei = ej + ef,
em = ep + eb,
ee = eo + eh,
el = ed || cW;
if (ed === t || eg === t) {
cW.loadPixels()
}
ea.loadPixels();
if (ea === cW && cW.intersect(ek, ej, ec, ei, ep, eo, em, ee)) {
cW.blit_resize(cW.get(ek, ej, ec - ek, ei - ej), 0, 0, ec - ek - 1, ei - ej - 1, el.imageData.data, el.width, el.height, ep, eo, em, ee, eg)
} else {
cW.blit_resize(ea, ek, ej, ec, ei, el.imageData.data, el.width, el.height, ep, eo, em, ee, eg)
} if (ed === t) {
cW.updatePixels()
}
};
var bp = function(ee) {
var ea = cW.floor(ee * 3.5),
ec, eb;
ea = ea < 1 ? 1 : ea < 248 ? ea : 248;
if (cW.shared.blurRadius !== ea) {
cW.shared.blurRadius = ea;
cW.shared.blurKernelSize = 1 + (cW.shared.blurRadius << 1);
cW.shared.blurKernel = new e(cW.shared.blurKernelSize);
var eg = cW.shared.blurKernel;
var ef = cW.shared.blurKernelSize;
var ed = cW.shared.blurRadius;
for (ec = 0; ec < ef; ec++) {
eg[ec] = 0
}
var eh = (ea - 1) * (ea - 1);
for (ec = 1; ec < ea; ec++) {
eg[ea + ec] = eg[eb] = eh
}
eg[ea] = ea * ea
}
};
var b7 = function(eo, et) {
var ec, ef, el, eq, er, eA, es;
var ev, en, ez, ey, ep;
var ei = et.pixels.getLength();
var eu = new e(ei);
var eD = new e(ei);
var eh = new e(ei);
var eC = new e(ei);
var eB = 0;
var ek, ej, ex, ee;
bp(eo);
var eb = et.height;
var ea = et.width;
var ew = cW.shared.blurKernelSize;
var em = cW.shared.blurRadius;
var eg = cW.shared.blurKernel;
var ed = et.imageData.data;
for (ej = 0; ej < eb; ej++) {
for (ek = 0; ek < ea; ek++) {
eq = el = ef = er = ec = 0;
ev = ek - em;
if (ev < 0) {
ep = -ev;
ev = 0
} else {
if (ev >= ea) {
break
}
ep = 0
}
for (ex = ep; ex < ew; ex++) {
if (ev >= ea) {
break
}
ee = (ev + eB) * 4;
es = eg[ex];
er += es * ed[ee + 3];
ef += es * ed[ee];
el += es * ed[ee + 1];
eq += es * ed[ee + 2];
ec += es;
ev++
}
en = eB + ek;
eC[en] = er / ec;
eu[en] = ef / ec;
eD[en] = el / ec;
eh[en] = eq / ec
}
eB += ea
}
eB = 0;
ez = -em;
ey = ez * ea;
for (ej = 0; ej < eb; ej++) {
for (ek = 0; ek < ea; ek++) {
eq = el = ef = er = ec = 0;
if (ez < 0) {
ep = en = -ez;
ev = ek
} else {
if (ez >= eb) {
break
}
ep = 0;
en = ez;
ev = ek + ey
}
for (ex = ep; ex < ew; ex++) {
if (en >= eb) {
break
}
es = eg[ex];
er += es * eC[ev];
ef += es * eu[ev];
el += es * eD[ev];
eq += es * eh[ev];
ec += es;
en++;
ev += ea
}
ee = (ek + eB) * 4;
ed[ee] = ef / ec;
ed[ee + 1] = el / ec;
ed[ee + 2] = eq / ec;
ed[ee + 3] = er / ec
}
eB += ea;
ey += ea;
ez++
}
};
var cf = function(er, el) {
var eh = 0;
var ev = el.pixels.getLength();
var em = new K(ev);
var ep, eb, ek, ej, ed;
var eq, ee, eg, ei, ec, en, eu, ea, es, ef, et, eo;
if (!er) {
while (eh < ev) {
ep = eh;
eb = eh + el.width;
while (eh < eb) {
ek = ej = el.pixels.getPixel(eh);
ee = eh - 1;
eq = eh + 1;
eg = eh - el.width;
ei = eh + el.width;
if (ee < ep) {
ee = eh
}
if (eq >= eb) {
eq = eh
}
if (eg < 0) {
eg = 0
}
if (ei >= ev) {
ei = eh
}
eu = el.pixels.getPixel(eg);
en = el.pixels.getPixel(ee);
ea = el.pixels.getPixel(ei);
ec = el.pixels.getPixel(eq);
ed = 77 * (ek >> 16 & 255) + 151 * (ek >> 8 & 255) + 28 * (ek & 255);
ef = 77 * (en >> 16 & 255) + 151 * (en >> 8 & 255) + 28 * (en & 255);
es = 77 * (ec >> 16 & 255) + 151 * (ec >> 8 & 255) + 28 * (ec & 255);
et = 77 * (eu >> 16 & 255) + 151 * (eu >> 8 & 255) + 28 * (eu & 255);
eo = 77 * (ea >> 16 & 255) + 151 * (ea >> 8 & 255) + 28 * (ea & 255);
if (ef > ed) {
ej = en;
ed = ef
}
if (es > ed) {
ej = ec;
ed = es
}
if (et > ed) {
ej = eu;
ed = et
}
if (eo > ed) {
ej = ea;
ed = eo
}
em[eh++] = ej
}
}
} else {
while (eh < ev) {
ep = eh;
eb = eh + el.width;
while (eh < eb) {
ek = ej = el.pixels.getPixel(eh);
ee = eh - 1;
eq = eh + 1;
eg = eh - el.width;
ei = eh + el.width;
if (ee < ep) {
ee = eh
}
if (eq >= eb) {
eq = eh
}
if (eg < 0) {
eg = 0
}
if (ei >= ev) {
ei = eh
}
eu = el.pixels.getPixel(eg);
en = el.pixels.getPixel(ee);
ea = el.pixels.getPixel(ei);
ec = el.pixels.getPixel(eq);
ed = 77 * (ek >> 16 & 255) + 151 * (ek >> 8 & 255) + 28 * (ek & 255);
ef = 77 * (en >> 16 & 255) + 151 * (en >> 8 & 255) + 28 * (en & 255);
es = 77 * (ec >> 16 & 255) + 151 * (ec >> 8 & 255) + 28 * (ec & 255);
et = 77 * (eu >> 16 & 255) + 151 * (eu >> 8 & 255) + 28 * (eu & 255);
eo = 77 * (ea >> 16 & 255) + 151 * (ea >> 8 & 255) + 28 * (ea & 255);
if (ef < ed) {
ej = en;
ed = ef
}
if (es < ed) {
ej = ec;
ed = es
}
if (et < ed) {
ej = eu;
ed = et
}
if (eo < ed) {
ej = ea;
ed = eo
}
em[eh++] = ej
}
}
}
el.pixels.set(em)
};
cW.filter = function(eh, eg, ed) {
var ek, ef, eb, ej;
if (arguments.length === 3) {
ed.loadPixels();
ek = ed
} else {
cW.loadPixels();
ek = cW
} if (eg === t) {
eg = null
}
if (ek.isRemote) {
throw "Image is loaded remotely. Cannot filter image."
}
var el = ek.pixels.getLength();
switch (eh) {
case 11:
var em = eg || 1;
b7(em, ek);
break;
case 12:
if (ek.format === 4) {
for (ej = 0; ej < el; ej++) {
ef = 255 - ek.pixels.getPixel(ej);
ek.pixels.setPixel(ej, 4278190080 | ef << 16 | ef << 8 | ef)
}
ek.format = 1
} else {
for (ej = 0; ej < el; ej++) {
ef = ek.pixels.getPixel(ej);
eb = 77 * (ef >> 16 & 255) + 151 * (ef >> 8 & 255) + 28 * (ef & 255) >> 8;
ek.pixels.setPixel(ej, ef & 4278190080 | eb << 16 | eb << 8 | eb)
}
}
break;
case 13:
for (ej = 0; ej < el; ej++) {
ek.pixels.setPixel(ej, ek.pixels.getPixel(ej) ^ 16777215)
}
break;
case 15:
if (eg === null) {
throw "Use filter(POSTERIZE, int levels) instead of filter(POSTERIZE)"
}
var ep = cW.floor(eg);
if (ep < 2 || ep > 255) {
throw "Levels must be between 2 and 255 for filter(POSTERIZE, levels)"
}
var ei = ep - 1;
for (ej = 0; ej < el; ej++) {
var ea = ek.pixels.getPixel(ej) >> 16 & 255;
var en = ek.pixels.getPixel(ej) >> 8 & 255;
var ec = ek.pixels.getPixel(ej) & 255;
ea = (ea * ep >> 8) * 255 / ei;
en = (en * ep >> 8) * 255 / ei;
ec = (ec * ep >> 8) * 255 / ei;
ek.pixels.setPixel(ej, 4278190080 & ek.pixels.getPixel(ej) | ea << 16 | en << 8 | ec)
}
break;
case 14:
for (ej = 0; ej < el; ej++) {
ek.pixels.setPixel(ej, ek.pixels.getPixel(ej) | 4278190080)
}
ek.format = 1;
break;
case 16:
if (eg === null) {
eg = 0.5
}
if (eg < 0 || eg > 1) {
throw "Level must be between 0 and 1 for filter(THRESHOLD, level)"
}
var ee = cW.floor(eg * 255);
for (ej = 0; ej < el; ej++) {
var eo = cW.max((ek.pixels.getPixel(ej) & 16711680) >> 16, cW.max((ek.pixels.getPixel(ej) & 65280) >> 8, ek.pixels.getPixel(ej) & 255));
ek.pixels.setPixel(ej, ek.pixels.getPixel(ej) & 4278190080 | (eo < ee ? 0 : 16777215))
}
break;
case 17:
cf(true, ek);
break;
case 18:
cf(false, ek);
break
}
ek.updatePixels()
};
cW.shared = {
fracU: 0,
ifU: 0,
fracV: 0,
ifV: 0,
u1: 0,
u2: 0,
v1: 0,
v2: 0,
sX: 0,
sY: 0,
iw: 0,
iw1: 0,
ih1: 0,
ul: 0,
ll: 0,
ur: 0,
lr: 0,
cUL: 0,
cLL: 0,
cUR: 0,
cLR: 0,
srcXOffset: 0,
srcYOffset: 0,
r: 0,
g: 0,
b: 0,
a: 0,
srcBuffer: null,
blurRadius: 0,
blurKernelSize: 0,
blurKernel: null
};
cW.intersect = function(ec, ej, eb, ei, en, eg, em, ef) {
var el = eb - ec + 1;
var ee = ei - ej + 1;
var ea = em - en + 1;
var eh = ef - eg + 1;
if (en < ec) {
ea += en - ec;
if (ea > el) {
ea = el
}
} else {
var ek = el + ec - en;
if (ea > ek) {
ea = ek
}
} if (eg < ej) {
eh += eg - ej;
if (eh > ee) {
eh = ee
}
} else {
var ed = ee + ej - eg;
if (eh > ed) {
eh = ed
}
}
return !(ea <= 0 || eh <= 0)
};
var dS = {};
dS[1] = cW.modes.blend;
dS[2] = cW.modes.add;
dS[4] = cW.modes.subtract;
dS[8] = cW.modes.lightest;
dS[16] = cW.modes.darkest;
dS[0] = cW.modes.replace;
dS[32] = cW.modes.difference;
dS[64] = cW.modes.exclusion;
dS[128] = cW.modes.multiply;
dS[256] = cW.modes.screen;
dS[512] = cW.modes.overlay;
dS[1024] = cW.modes.hard_light;
dS[2048] = cW.modes.soft_light;
dS[4096] = cW.modes.dodge;
dS[8192] = cW.modes.burn;
cW.blit_resize = function(en, ez, et, ey, es, eE, ej, er, ex, eo, ew, em, ep) {
var eC, eB;
if (ez < 0) {
ez = 0
}
if (et < 0) {
et = 0
}
if (ey >= en.width) {
ey = en.width - 1
}
if (es >= en.height) {
es = en.height - 1
}
var eI = ey - ez;
var eN = es - et;
var ea = ew - ex;
var ek = em - eo;
if (ea <= 0 || ek <= 0 || eI <= 0 || eN <= 0 || ex >= ej || eo >= er || ez >= en.width || et >= en.height) {
return
}
var eh = q.floor(eI / ea * 32768);
var ee = q.floor(eN / ek * 32768);
var eG = cW.shared;
eG.srcXOffset = q.floor(ex < 0 ? -ex * eh : ez * 32768);
eG.srcYOffset = q.floor(eo < 0 ? -eo * ee : et * 32768);
if (ex < 0) {
ea += ex;
ex = 0
}
if (eo < 0) {
ek += eo;
eo = 0
}
ea = q.min(ea, ej - ex);
ek = q.min(ek, er - eo);
var eu = eo * ej + ex;
var eQ;
eG.srcBuffer = en.imageData.data;
eG.iw = en.width;
eG.iw1 = en.width - 1;
eG.ih1 = en.height - 1;
var ev = cW.filter_bilinear,
eK = cW.filter_new_scanline,
ei = dS[ep],
eH, eM, eF, eJ, ec, ed, eb = 4278190080,
eL = 16711680,
eA = 65280,
eg = 255,
eP = 32767,
eD = 15,
el = 1,
eq = 9,
ef = eG.srcBuffer,
eO = q.min;
for (eB = 0; eB < ek; eB++) {
eG.sX = eG.srcXOffset;
eG.fracV = eG.srcYOffset & eP;
eG.ifV = eP - eG.fracV;
eG.v1 = (eG.srcYOffset >> eD) * eG.iw;
eG.v2 = eO((eG.srcYOffset >> eD) + 1, eG.ih1) * eG.iw;
for (eC = 0; eC < ea; eC++) {
eM = (eu + eC) * 4;
eQ = eE[eM + 3] << 24 & eb | eE[eM] << 16 & eL | eE[eM + 1] << 8 & eA | eE[eM + 2] & eg;
eG.fracU = eG.sX & eP;
eG.ifU = eP - eG.fracU;
eG.ul = eG.ifU * eG.ifV >> eD;
eG.ll = eG.ifU * eG.fracV >> eD;
eG.ur = eG.fracU * eG.ifV >> eD;
eG.lr = eG.fracU * eG.fracV >> eD;
eG.u1 = eG.sX >> eD;
eG.u2 = eO(eG.u1 + 1, eG.iw1);
eF = (eG.v1 + eG.u1) * 4;
eJ = (eG.v1 + eG.u2) * 4;
ec = (eG.v2 + eG.u1) * 4;
ed = (eG.v2 + eG.u2) * 4;
eG.cUL = ef[eF + 3] << 24 & eb | ef[eF] << 16 & eL | ef[eF + 1] << 8 & eA | ef[eF + 2] & eg;
eG.cUR = ef[eJ + 3] << 24 & eb | ef[eJ] << 16 & eL | ef[eJ + 1] << 8 & eA | ef[eJ + 2] & eg;
eG.cLL = ef[ec + 3] << 24 & eb | ef[ec] << 16 & eL | ef[ec + 1] << 8 & eA | ef[ec + 2] & eg;
eG.cLR = ef[ed + 3] << 24 & eb | ef[ed] << 16 & eL | ef[ed + 1] << 8 & eA | ef[ed + 2] & eg;
eG.r = eG.ul * ((eG.cUL & eL) >> 16) + eG.ll * ((eG.cLL & eL) >> 16) + eG.ur * ((eG.cUR & eL) >> 16) + eG.lr * ((eG.cLR & eL) >> 16) << el & eL;
eG.g = eG.ul * (eG.cUL & eA) + eG.ll * (eG.cLL & eA) + eG.ur * (eG.cUR & eA) + eG.lr * (eG.cLR & eA) >>> eD & eA;
eG.b = eG.ul * (eG.cUL & eg) + eG.ll * (eG.cLL & eg) + eG.ur * (eG.cUR & eg) + eG.lr * (eG.cLR & eg) >>> eD;
eG.a = eG.ul * ((eG.cUL & eb) >>> 24) + eG.ll * ((eG.cLL & eb) >>> 24) + eG.ur * ((eG.cUR & eb) >>> 24) + eG.lr * ((eG.cLR & eb) >>> 24) << eq & eb;
eH = ei(eQ, eG.a | eG.r | eG.g | eG.b);
eE[eM] = (eH & eL) >>> 16;
eE[eM + 1] = (eH & eA) >>> 8;
eE[eM + 2] = eH & eg;
eE[eM + 3] = (eH & eb) >>> 24;
eG.sX += eh
}
eu += ej;
eG.srcYOffset += ee
}
};
cW.loadFont = function(eb, ec) {
if (eb === t) {
throw "font name required in loadFont."
}
if (eb.indexOf(".svg") === -1) {
if (ec === t) {
ec = W.size
}
return H.get(eb, ec)
}
var ea = cW.loadGlyphs(eb);
return {
name: eb,
css: "12px sans-serif",
glyph: true,
units_per_em: ea.units_per_em,
horiz_adv_x: 1 / ea.units_per_em * ea.horiz_adv_x,
ascent: ea.ascent,
descent: ea.descent,
width: function(eh) {
var ef = 0;
var ed = eh.length;
for (var ee = 0; ee < ed; ee++) {
try {
ef += parseFloat(cW.glyphLook(cW.glyphTable[eb], eh[ee]).horiz_adv_x)
} catch (eg) {
F.debug(eg)
}
}
return ef / cW.glyphTable[eb].units_per_em
}
}
};
cW.createFont = function(ea, eb) {
return cW.loadFont(ea, eb)
};
cW.textFont = function(ea, ec) {
if (ec !== t) {
if (!ea.glyph) {
ea = H.get(ea.name, ec)
}
d0 = ec
}
W = ea;
Y = W.name;
a3 = W.ascent;
dA = W.descent;
d7 = W.leading;
var eb = dY.$ensureContext();
eb.font = W.css
};
cW.textSize = function(eb) {
W = H.get(Y, eb);
d0 = eb;
a3 = W.ascent;
dA = W.descent;
d7 = W.leading;
var ea = dY.$ensureContext();
ea.font = W.css
};
cW.textAscent = function() {
return a3
};
cW.textDescent = function() {
return dA
};
cW.textLeading = function(ea) {
d7 = ea
};
cW.textAlign = function(eb, ea) {
N = eb;
c1 = ea || 0
};
function bu(ea) {
if (ea instanceof String) {
return ea
}
if (typeof ea === "number") {
if (ea === (0 | ea)) {
return ea.toString()
}
return cW.nf(ea, 0, 3)
}
if (ea === null || ea === t) {
return ""
}
return ea.toString()
}
bR.prototype.textWidth = function(ee) {
var ea = bu(ee).split(/\r?\n/g),
ec = 0;
var eb, ed = ea.length;
d8.font = W.css;
for (eb = 0; eb < ed; ++eb) {
ec = q.max(ec, W.measureTextWidth(ea[eb]))
}
return ec | 0
};
bB.prototype.textWidth = function(ef) {
var ea = bu(ef).split(/\r?\n/g),
ed = 0;
var ec, ee = ea.length;
if (cE === t) {
cE = d.createElement("canvas")
}
var eb = cE.getContext("2d");
eb.font = W.css;
for (ec = 0; ec < ee; ++ec) {
ed = q.max(ed, eb.measureText(ea[ec]).width)
}
return ed | 0
};
cW.glyphLook = function(ea, eb) {
try {
switch (eb) {
case "1":
return ea.one;
case "2":
return ea.two;
case "3":
return ea.three;
case "4":
return ea.four;
case "5":
return ea.five;
case "6":
return ea.six;
case "7":
return ea.seven;
case "8":
return ea.eight;
case "9":
return ea.nine;
case "0":
return ea.zero;
case " ":
return ea.space;
case "$":
return ea.dollar;
case "!":
return ea.exclam;
case '"':
return ea.quotedbl;
case "#":
return ea.numbersign;
case "%":
return ea.percent;
case "&":
return ea.ampersand;
case "'":
return ea.quotesingle;
case "(":
return ea.parenleft;
case ")":
return ea.parenright;
case "*":
return ea.asterisk;
case "+":
return ea.plus;
case ",":
return ea.comma;
case "-":
return ea.hyphen;
case ".":
return ea.period;
case "/":
return ea.slash;
case "_":
return ea.underscore;
case ":":
return ea.colon;
case ";":
return ea.semicolon;
case "<":
return ea.less;
case "=":
return ea.equal;
case ">":
return ea.greater;
case "?":
return ea.question;
case "@":
return ea.at;
case "[":
return ea.bracketleft;
case "\\":
return ea.backslash;
case "]":
return ea.bracketright;
case "^":
return ea.asciicircum;
case "`":
return ea.grave;
case "{":
return ea.braceleft;
case "|":
return ea.bar;
case "}":
return ea.braceright;
case "~":
return ea.asciitilde;
default:
return ea[eb]
}
} catch (ec) {
F.debug(ec)
}
};
bR.prototype.text$line = function(ei, el, ek, ej, ef) {
var eh = 0,
eg = 0;
if (!W.glyph) {
if (ei && "fillText" in d8) {
if (aq) {
d8.fillStyle = cW.color.toString(a1);
aq = false
}
if (ef === 39 || ef === 3) {
eh = W.measureTextWidth(ei);
if (ef === 39) {
eg = -eh
} else {
eg = -eh / 2
}
}
d8.fillText(ei, el + eg, ek)
}
} else {
var ea = cW.glyphTable[Y];
aD();
d8.translate(el, ek + d0);
if (ef === 39 || ef === 3) {
eh = ea.width(ei);
if (ef === 39) {
eg = -eh
} else {
eg = -eh / 2
}
}
var em = ea.units_per_em,
ee = 1 / em * d0;
d8.scale(ee, ee);
for (var eb = 0, ec = ei.length; eb < ec; eb++) {
try {
cW.glyphLook(ea, ei[eb]).draw()
} catch (ed) {
F.debug(ed)
}
}
cP()
}
};
bB.prototype.text$line = function(eh, el, ek, ei, ef) {
if (cE === t) {
cE = d.createElement("canvas")
}
var eb = d8;
d8 = cE.getContext("2d");
d8.font = W.css;
var eg = W.measureTextWidth(eh);
cE.width = eg;
cE.height = d0;
d8 = cE.getContext("2d");
d8.font = W.css;
d8.textBaseline = "top";
bR.prototype.text$line(eh, 0, 0, 0, 37);
var ea = cE.width / cE.height;
d8 = eb;
d8.bindTexture(d8.TEXTURE_2D, bS);
d8.texImage2D(d8.TEXTURE_2D, 0, d8.RGBA, d8.RGBA, d8.UNSIGNED_BYTE, cE);
d8.texParameteri(d8.TEXTURE_2D, d8.TEXTURE_MAG_FILTER, d8.LINEAR);
d8.texParameteri(d8.TEXTURE_2D, d8.TEXTURE_MIN_FILTER, d8.LINEAR);
d8.texParameteri(d8.TEXTURE_2D, d8.TEXTURE_WRAP_T, d8.CLAMP_TO_EDGE);
d8.texParameteri(d8.TEXTURE_2D, d8.TEXTURE_WRAP_S, d8.CLAMP_TO_EDGE);
var ee = 0;
if (ef === 39) {
ee = -eg
} else {
if (ef === 3) {
ee = -eg / 2
}
}
var ec = new aP;
var ed = d0 * 0.5;
ec.translate(el + ee - ed / 2, ek - ed, ei);
ec.scale(-ea * ed, -ed, ed);
ec.translate(-1, -1, -1);
ec.transpose();
var ej = new aP;
ej.scale(1, -1, 1);
ej.apply(dJ.array());
ej.transpose();
d8.useProgram(dQ);
dc("aVertex2d", dQ, "aVertex", 3, cH);
dc("aTextureCoord2d", dQ, "aTextureCoord", 2, ac);
dZ("uSampler2d", dQ, "uSampler", [0]);
dZ("uIsDrawingText2d", dQ, "uIsDrawingText", true);
a9("uModel2d", dQ, "uModel", false, ec.array());
a9("uView2d", dQ, "uView", false, ej.array());
d2("uColor2d", dQ, "uColor", bo);
d8.bindBuffer(d8.ELEMENT_ARRAY_BUFFER, R);
d8.drawElements(d8.TRIANGLES, 6, d8.UNSIGNED_SHORT, 0)
};
function bi(ed, eg, ef, ee) {
var ei, ec;
if (ed.indexOf("\n") < 0) {
ei = [ed];
ec = 1
} else {
ei = ed.split(/\r?\n/g);
ec = ei.length
}
var ea = 0;
if (c1 === 101) {
ea = a3 + dA
} else {
if (c1 === 3) {
ea = a3 / 2 - (ec - 1) * d7 / 2
} else {
if (c1 === 102) {
ea = -(dA + (ec - 1) * d7)
}
}
}
for (var eb = 0; eb < ec; ++eb) {
var eh = ei[eb];
dY.text$line(eh, eg, ef + ea, ee, N);
ea += d7
}
}
function bd(eq, el, ek, ep, en, ej) {
if (eq.length === 0 || ep === 0 || en === 0) {
return
}
if (d0 > en) {
return
}
var em = -1;
var ee = 0;
var ea = 0;
var eg = [];
for (var ef = 0, es = eq.length; ef < es; ef++) {
var eh = eq[ef];
var ev = eh === " ";
var eo = W.measureTextWidth(eh);
if (eh !== "\n" && ea + eo <= ep) {
if (ev) {
em = ef
}
ea += eo
} else {
if (em + 1 === ee) {
if (ef > 0) {
em = ef
} else {
return
}
}
if (eh === "\n") {
eg.push({
text: eq.substring(ee, ef),
width: ea
});
ee = ef + 1
} else {
eg.push({
text: eq.substring(ee, em + 1),
width: ea
});
ee = em + 1
}
ea = 0;
ef = ee - 1
}
}
if (ee < es) {
eg.push({
text: eq.substring(ee),
width: ea
})
}
var eu = 1,
ei = a3;
if (N === 3) {
eu = ep / 2
} else {
if (N === 39) {
eu = ep
}
}
var er = eg.length,
eb = q.min(er, q.floor(en / d7));
if (c1 === 101) {
ei = a3 + dA
} else {
if (c1 === 3) {
ei = en / 2 - d7 * (eb / 2 - 1)
} else {
if (c1 === 102) {
ei = dA + d7
}
}
}
var ec, ed, et;
for (ec = 0; ec < er; ec++) {
et = ec * d7;
if (ei + et > en - dA) {
break
}
ed = eg[ec];
dY.text$line(ed.text, el + eu, ek + ei + et, ej, N)
}
}
cW.text = function() {
if (cI === 5) {
return
}
if (arguments.length === 3) {
bi(bu(arguments[0]), arguments[1], arguments[2], 0)
} else {
if (arguments.length === 4) {
bi(bu(arguments[0]), arguments[1], arguments[2], arguments[3])
} else {
if (arguments.length === 5) {
bd(bu(arguments[0]), arguments[1], arguments[2], arguments[3], arguments[4], 0)
} else {
if (arguments.length === 6) {
bd(bu(arguments[0]), arguments[1], arguments[2], arguments[3], arguments[4], arguments[5])
}
}
}
}
};
cW.textMode = function(ea) {
cI = ea
};
cW.loadGlyphs = function(eg) {
var ei, eh, ee, ec, ep, eo, en, eq, ek, er, el, em = "[0-9\\-]+",
ej;
var ef = function(ex, ew) {
var eu = 0,
et = [],
es, ev = new RegExp(ex, "g");
es = et[eu] = ev.exec(ew);
while (es) {
eu++;
es = et[eu] = ev.exec(ew)
}
return et
};
var eb = function(ex) {
var ey = ef("[A-Za-z][0-9\\- ]+|Z", ex);
var ew = function() {
aD();
return dY.$ensureContext()
};
var eu = function() {
bn();
dd();
cP()
};
ej = "return {draw:function(){var curContext=beforePathDraw();curContext.beginPath();";
ei = 0;
eh = 0;
ee = 0;
ec = 0;
ep = 0;
eo = 0;
ex = 0;
eq = 0;
ek = "";
er = ey.length - 1;
for (var et = 0; et < er; et++) {
var es = ey[et][0],
ev = ef(em, es);
switch (es[0]) {
case "M":
ei = parseFloat(ev[0][0]);
eh = parseFloat(ev[1][0]);
ej += "curContext.moveTo(" + ei + "," + -eh + ");";
break;
case "L":
ei = parseFloat(ev[0][0]);
eh = parseFloat(ev[1][0]);
ej += "curContext.lineTo(" + ei + "," + -eh + ");";
break;
case "H":
ei = parseFloat(ev[0][0]);
ej += "curContext.lineTo(" + ei + "," + -eh + ");";
break;
case "V":
eh = parseFloat(ev[0][0]);
ej += "curContext.lineTo(" + ei + "," + -eh + ");";
break;
case "T":
ep = parseFloat(ev[0][0]);
eo = parseFloat(ev[1][0]);
if (ek === "Q" || ek === "T") {
ex = q.sqrt(q.pow(ei - ee, 2) + q.pow(ec - eh, 2));
eq = q.PI + q.atan2(ee - ei, ec - eh);
ee = ei + q.sin(eq) * ex;
ec = eh + q.cos(eq) * ex
} else {
ee = ei;
ec = eh
}
ej += "curContext.quadraticCurveTo(" + ee + "," + -ec + "," + ep + "," + -eo + ");";
ei = ep;
eh = eo;
break;
case "Q":
ee = parseFloat(ev[0][0]);
ec = parseFloat(ev[1][0]);
ep = parseFloat(ev[2][0]);
eo = parseFloat(ev[3][0]);
ej += "curContext.quadraticCurveTo(" + ee + "," + -ec + "," + ep + "," + -eo + ");";
ei = ep;
eh = eo;
break;
case "Z":
ej += "curContext.closePath();";
break
}
ek = es[0]
}
ej += "afterPathDraw();";
ej += "curContext.translate(" + el + ",0);";
ej += "}}";
return (new Function("beforePathDraw", "afterPathDraw", ej))(ew, eu)
};
var ea = function(ev) {
var eu = ev.getElementsByTagName("font");
cW.glyphTable[eg].horiz_adv_x = eu[0].getAttribute("horiz-adv-x");
var ex = ev.getElementsByTagName("font-face")[0];
cW.glyphTable[eg].units_per_em = parseFloat(ex.getAttribute("units-per-em"));
cW.glyphTable[eg].ascent = parseFloat(ex.getAttribute("ascent"));
cW.glyphTable[eg].descent = parseFloat(ex.getAttribute("descent"));
var ez = ev.getElementsByTagName("glyph"),
et = ez.length;
for (var ey = 0; ey < et; ey++) {
var es = ez[ey].getAttribute("unicode");
var ew = ez[ey].getAttribute("glyph-name");
el = ez[ey].getAttribute("horiz-adv-x");
if (el === null) {
el = cW.glyphTable[eg].horiz_adv_x
}
en = ez[ey].getAttribute("d");
if (en !== t) {
ej = eb(en);
cW.glyphTable[eg][ew] = {
name: ew,
unicode: es,
horiz_adv_x: el,
draw: ej.draw
}
}
}
};
var ed = function() {
var eu;
try {
eu = d.implementation.createDocument("", "", null)
} catch (ew) {
F.debug(ew.message);
return
}
try {
eu.async = false;
eu.load(eg);
ea(eu.getElementsByTagName("svg")[0])
} catch (et) {
F.debug(et);
try {
var es = new D.XMLHttpRequest;
es.open("GET", eg, false);
es.send(null);
ea(es.responseXML.documentElement)
} catch (ev) {
F.debug(et)
}
}
};
cW.glyphTable[eg] = {};
ed(eg);
return cW.glyphTable[eg]
};
cW.param = function(ec) {
var eb = "data-processing-" + ec;
if (ae.hasAttribute(eb)) {
return ae.getAttribute(eb)
}
for (var ed = 0, ea = ae.childNodes.length; ed < ea; ++ed) {
var ee = ae.childNodes.item(ed);
if (ee.nodeType !== 1 || ee.tagName.toLowerCase() !== "param") {
continue
}
if (ee.getAttribute("name") === ec) {
return ee.getAttribute("value")
}
}
if (cQ.params.hasOwnProperty(ec)) {
return cQ.params[ec]
}
return null
};
function cL(eb) {
if (eb === "3D") {
dY = new bB
} else {
if (eb === "2D") {
dY = new bR
} else {
dY = new ca
}
}
for (var ea in ca.prototype) {
if (ca.prototype.hasOwnProperty(ea) && ea.indexOf("$") < 0) {
cW[ea] = dY[ea]
}
}
dY.$init()
}
function cU(ea) {
return function() {
cL("2D");
return dY[ea].apply(this, arguments)
}
}
ca.prototype.translate = cU("translate");
ca.prototype.transform = cU("transform");
ca.prototype.scale = cU("scale");
ca.prototype.pushMatrix = cU("pushMatrix");
ca.prototype.popMatrix = cU("popMatrix");
ca.prototype.resetMatrix = cU("resetMatrix");
ca.prototype.applyMatrix = cU("applyMatrix");
ca.prototype.rotate = cU("rotate");
ca.prototype.rotateZ = cU("rotateZ");
ca.prototype.shearX = cU("shearX");
ca.prototype.shearY = cU("shearY");
ca.prototype.redraw = cU("redraw");
ca.prototype.toImageData = cU("toImageData");
ca.prototype.ambientLight = cU("ambientLight");
ca.prototype.directionalLight = cU("directionalLight");
ca.prototype.lightFalloff = cU("lightFalloff");
ca.prototype.lightSpecular = cU("lightSpecular");
ca.prototype.pointLight = cU("pointLight");
ca.prototype.noLights = cU("noLights");
ca.prototype.spotLight = cU("spotLight");
ca.prototype.beginCamera = cU("beginCamera");
ca.prototype.endCamera = cU("endCamera");
ca.prototype.frustum = cU("frustum");
ca.prototype.box = cU("box");
ca.prototype.sphere = cU("sphere");
ca.prototype.ambient = cU("ambient");
ca.prototype.emissive = cU("emissive");
ca.prototype.shininess = cU("shininess");
ca.prototype.specular = cU("specular");
ca.prototype.fill = cU("fill");
ca.prototype.stroke = cU("stroke");
ca.prototype.strokeWeight = cU("strokeWeight");
ca.prototype.smooth = cU("smooth");
ca.prototype.noSmooth = cU("noSmooth");
ca.prototype.point = cU("point");
ca.prototype.vertex = cU("vertex");
ca.prototype.endShape = cU("endShape");
ca.prototype.bezierVertex = cU("bezierVertex");
ca.prototype.curveVertex = cU("curveVertex");
ca.prototype.curve = cU("curve");
ca.prototype.line = cU("line");
ca.prototype.bezier = cU("bezier");
ca.prototype.rect = cU("rect");
ca.prototype.ellipse = cU("ellipse");
ca.prototype.background = cU("background");
ca.prototype.image = cU("image");
ca.prototype.textWidth = cU("textWidth");
ca.prototype.text$line = cU("text$line");
ca.prototype.$ensureContext = cU("$ensureContext");
ca.prototype.$newPMatrix = cU("$newPMatrix");
ca.prototype.size = function(ea, ec, eb) {
cL(eb === 2 ? "3D" : "2D");
cW.size(ea, ec, eb)
};
ca.prototype.$init = G;
bR.prototype.$init = function() {
cW.size(cW.width, cW.height);
d8.lineCap = "round";
cW.noSmooth();
cW.disableContextMenu()
};
bB.prototype.$init = function() {
cW.use3DContext = true;
cW.disableContextMenu()
};
ds.prototype.$ensureContext = function() {
return d8
};
function dy(eb, ed) {
var ec = eb,
ea = 0,
ee = 0;
cW.pmouseX = cW.mouseX;
cW.pmouseY = cW.mouseY;
if (ec.offsetParent) {
do {
ea += ec.offsetLeft;
ee += ec.offsetTop
} while (!!(ec = ec.offsetParent))
}
ec = eb;
do {
ea -= ec.scrollLeft || 0;
ee -= ec.scrollTop || 0
} while (!!(ec = ec.parentNode));
ea += ad;
ee += dp;
ea += aU;
ee += bX;
ea += D.pageXOffset;
ee += D.pageYOffset;
return {
X: ea,
Y: ee
}
}
function aI(ea, eb) {
var ec = dy(ea, eb);
cW.mouseX = eb.pageX - ec.X;
cW.mouseY = eb.pageY - ec.Y
}
function cu(eb) {
var ed = dy(eb.changedTouches[0].target, eb.changedTouches[0]),
ea;
for (ea = 0; ea < eb.touches.length; ea++) {
var ef = eb.touches[ea];
ef.offsetX = ef.pageX - ed.X;
ef.offsetY = ef.pageY - ed.Y
}
for (ea = 0; ea < eb.targetTouches.length; ea++) {
var ec = eb.targetTouches[ea];
ec.offsetX = ec.pageX - ed.X;
ec.offsetY = ec.pageY - ed.Y
}
for (ea = 0; ea < eb.changedTouches.length; ea++) {
var ee = eb.changedTouches[ea];
ee.offsetX = ee.pageX - ed.X;
ee.offsetY = ee.pageY - ed.Y
}
return eb
}
bO(ae, "touchstart", function(ec) {
ae.setAttribute("style", "-webkit-user-select: none");
ae.setAttribute("onclick", "void(0)");
ae.setAttribute("style", "-webkit-tap-highlight-color:rgba(0,0,0,0)");
for (var eb = 0, ea = au.length; eb < ea; eb++) {
var ed = au[eb].type;
if (ed === "mouseout" || ed === "mousemove" || ed === "mousedown" || ed === "mouseup" || ed === "DOMMouseScroll" || ed === "mousewheel" || ed === "touchstart") {
de(au[eb])
}
}
if (cW.touchStart !== t || cW.touchMove !== t || cW.touchEnd !== t || cW.touchCancel !== t) {
bO(ae, "touchstart", function(ee) {
if (cW.touchStart !== t) {
ee = cu(ee);
cW.touchStart(ee)
}
});
bO(ae, "touchmove", function(ee) {
if (cW.touchMove !== t) {
ee.preventDefault();
ee = cu(ee);
cW.touchMove(ee)
}
});
bO(ae, "touchend", function(ee) {
if (cW.touchEnd !== t) {
ee = cu(ee);
cW.touchEnd(ee)
}
});
bO(ae, "touchcancel", function(ee) {
if (cW.touchCancel !== t) {
ee = cu(ee);
cW.touchCancel(ee)
}
})
} else {
bO(ae, "touchstart", function(ee) {
aI(ae, ee.touches[0]);
cW.__mousePressed = true;
cW.mouseDragging = false;
cW.mouseButton = 37;
if (typeof cW.mousePressed === "function") {
cW.mousePressed()
}
});
bO(ae, "touchmove", function(ee) {
ee.preventDefault();
aI(ae, ee.touches[0]);
if (typeof cW.mouseMoved === "function" && !cW.__mousePressed) {
cW.mouseMoved()
}
if (typeof cW.mouseDragged === "function" && cW.__mousePressed) {
cW.mouseDragged();
cW.mouseDragging = true
}
});
bO(ae, "touchend", function(ee) {
cW.__mousePressed = false;
if (typeof cW.mouseClicked === "function" && !cW.mouseDragging) {
cW.mouseClicked()
}
if (typeof cW.mouseReleased === "function") {
cW.mouseReleased()
}
})
}
ae.dispatchEvent(ec)
});
(function() {
var ea = true,
eb = function(ec) {
ec.preventDefault();
ec.stopPropagation()
};
cW.disableContextMenu = function() {
if (!ea) {
return
}
bO(ae, "contextmenu", eb);
ea = false
};
cW.enableContextMenu = function() {
if (ea) {
return
}
de({
elem: ae,
type: "contextmenu",
fn: eb
});
ea = true
}
})();
bO(ae, "mousemove", function(ea) {
aI(ae, ea);
if (typeof cW.mouseMoved === "function" && !cW.__mousePressed) {
cW.mouseMoved()
}
if (typeof cW.mouseDragged === "function" && cW.__mousePressed) {
cW.mouseDragged();
cW.mouseDragging = true
}
});
bO(ae, "mouseout", function(ea) {
if (typeof cW.mouseOut === "function") {
cW.mouseOut()
}
});
bO(ae, "mouseover", function(ea) {
aI(ae, ea);
if (typeof cW.mouseOver === "function") {
cW.mouseOver()
}
});
ae.onmousedown = function() {
ae.focus();
return false
};
bO(ae, "mousedown", function(ea) {
cW.__mousePressed = true;
cW.mouseDragging = false;
switch (ea.which) {
case 1:
cW.mouseButton = 37;
break;
case 2:
cW.mouseButton = 3;
break;
case 3:
cW.mouseButton = 39;
break
}
if (typeof cW.mousePressed === "function") {
cW.mousePressed()
}
});
bO(ae, "mouseup", function(ea) {
cW.__mousePressed = false;
if (typeof cW.mouseClicked === "function" && !cW.mouseDragging) {
cW.mouseClicked()
}
if (typeof cW.mouseReleased === "function") {
cW.mouseReleased()
}
});
var an = function(ea) {
var eb = 0;
if (ea.wheelDelta) {
eb = ea.wheelDelta / 120;
if (D.opera) {
eb = -eb
}
} else {
if (ea.detail) {
eb = -ea.detail / 3
}
}
cW.mouseScroll = eb;
if (eb && typeof cW.mouseScrolled === "function") {
cW.mouseScrolled()
}
};
bO(d, "DOMMouseScroll", an);
bO(d, "mousewheel", an);
if (!ae.getAttribute("tabindex")) {
ae.setAttribute("tabindex", 0)
}
function dD(eb) {
var ea = eb.which || eb.keyCode;
switch (ea) {
case 13:
return 10;
case 91:
case 93:
case 224:
return 157;
case 57392:
return 17;
case 46:
return 127;
case 45:
return 155
}
return ea
}
function cB(eb) {
var ec = eb.which || eb.keyCode;
var ea = eb.shiftKey || eb.ctrlKey || eb.altKey || eb.metaKey;
switch (ec) {
case 13:
ec = ea ? 13 : 10;
break;
case 8:
ec = ea ? 127 : 8;
break
}
return new bP(ec)
}
function cR(ea) {
if (typeof ea.preventDefault === "function") {
ea.preventDefault()
} else {
if (typeof ea.stopPropagation === "function") {
ea.stopPropagation()
}
}
return false
}
function dG() {
var ea;
for (ea in ag) {
if (ag.hasOwnProperty(ea)) {
cW.__keyPressed = true;
return
}
}
cW.__keyPressed = false
}
function cx() {
cW.__keyPressed = false;
ag = [];
dI = null
}
function bq(ea, eb) {
ag[ea] = eb;
dI = null;
cW.key = eb;
cW.keyCode = ea;
cW.keyPressed();
cW.keyCode = 0;
cW.keyTyped();
dG()
}
function cz(eb) {
var ea = dD(eb);
if (ea === 127) {
bq(ea, new bP(127));
return
}
if (dX.indexOf(ea) < 0) {
dI = ea;
return
}
var ec = new bP(65535);
cW.key = ec;
cW.keyCode = ea;
ag[ea] = ec;
cW.keyPressed();
dI = null;
dG();
return cR(eb)
}
function dv(eb) {
if (dI === null) {
return
}
var ea = dI,
ec = cB(eb);
bq(ea, ec);
return cR(eb)
}
function cp(eb) {
var ea = dD(eb),
ec = ag[ea];
if (ec === t) {
return
}
cW.key = ec;
cW.keyCode = ea;
cW.keyReleased();
delete ag[ea];
dG()
}
if (!cV) {
if (ba instanceof F.Sketch) {
cQ = ba
} else {
if (typeof ba === "function") {
cQ = new F.Sketch(ba)
} else {
if (!ba) {
cQ = new F.Sketch(function() {})
} else {
cQ = F.compile(ba)
}
}
}
cW.externals.sketch = cQ;
cL();
ae.onfocus = function() {
cW.focused = true
};
ae.onblur = function() {
cW.focused = false;
if (!cQ.options.globalKeyEvents) {
cx()
}
};
if (cQ.options.pauseOnBlur) {
bO(D, "focus", function() {
if (aC) {
cW.loop()
}
});
bO(D, "blur", function() {
if (aC && ax) {
cW.noLoop();
aC = true
}
cx()
})
}
var aV = cQ.options.globalKeyEvents ? D : ae;
bO(aV, "keydown", cz);
bO(aV, "keypress", dv);
bO(aV, "keyup", cp);
for (var c4 in F.lib) {
if (F.lib.hasOwnProperty(c4)) {
if (F.lib[c4].hasOwnProperty("attach")) {
F.lib[c4].attach(cW)
} else {
if (F.lib[c4] instanceof Function) {
F.lib[c4].call(this)
}
}
}
}
var dB = 100;
var b6 = function(ed) {
if (!(cQ.imageCache.pending || H.preloading.pending(dB))) {
if (D.opera) {
var ec, eb, ea = cQ.imageCache.operaCache;
for (ec in ea) {
if (ea.hasOwnProperty(ec)) {
eb = ea[ec];
if (eb !== null) {
d.body.removeChild(eb)
}
delete ea[ec]
}
}
}
cQ.attach(ed, g);
cQ.onLoad(ed);
if (ed.setup) {
ed.setup();
ed.resetMatrix();
cQ.onSetup()
}
T();
if (ed.draw) {
if (!aC) {
ed.redraw()
} else {
ed.loop()
}
}
} else {
D.setTimeout(function() {
b6(ed)
}, dB)
}
};
a(this);
b6(cW)
} else {
cQ = new F.Sketch;
cL();
cW.size = function(ea, ec, eb) {
if (eb && eb === 2) {
cL("3D")
} else {
cL("2D")
}
cW.size(ea, ec, eb)
}
}
};
F.debug = s;
F.prototype = g;
function u() {
var R = ["abs", "acos", "alpha", "ambient", "ambientLight", "append", "applyMatrix", "arc", "arrayCopy", "asin", "atan", "atan2", "background", "beginCamera", "beginDraw", "beginShape", "bezier", "bezierDetail", "bezierPoint", "bezierTangent", "bezierVertex", "binary", "blend", "blendColor", "blit_resize", "blue", "box", "breakShape", "brightness", "camera", "ceil", "Character", "color", "colorMode", "concat", "constrain", "copy", "cos", "createFont", "createGraphics", "createImage", "cursor", "curve", "curveDetail", "curvePoint", "curveTangent", "curveTightness", "curveVertex", "day", "degrees", "directionalLight", "disableContextMenu", "dist", "draw", "ellipse", "ellipseMode", "emissive", "enableContextMenu", "endCamera", "endDraw", "endShape", "exit", "exp", "expand", "externals", "fill", "filter", "floor", "focused", "frameCount", "frameRate", "frustum", "get", "glyphLook", "glyphTable", "green", "height", "hex", "hint", "hour", "hue", "image", "imageMode", "intersect", "join", "key", "keyCode", "keyPressed", "keyReleased", "keyTyped", "lerp", "lerpColor", "lightFalloff", "lights", "lightSpecular", "line", "link", "loadBytes", "loadFont", "loadGlyphs", "loadImage", "loadPixels", "loadShape", "loadXML", "loadStrings", "log", "loop", "mag", "map", "match", "matchAll", "max", "millis", "min", "minute", "mix", "modelX", "modelY", "modelZ", "modes", "month", "mouseButton", "mouseClicked", "mouseDragged", "mouseMoved", "mouseOut", "mouseOver", "mousePressed", "mouseReleased", "mouseScroll", "mouseScrolled", "mouseX", "mouseY", "name", "nf", "nfc", "nfp", "nfs", "noCursor", "noFill", "noise", "noiseDetail", "noiseSeed", "noLights", "noLoop", "norm", "normal", "noSmooth", "noStroke", "noTint", "ortho", "param", "parseBoolean", "parseByte", "parseChar", "parseFloat", "parseInt", "peg", "perspective", "PImage", "pixels", "PMatrix2D", "PMatrix3D", "PMatrixStack", "pmouseX", "pmouseY", "point", "pointLight", "popMatrix", "popStyle", "pow", "print", "printCamera", "println", "printMatrix", "printProjection", "PShape", "PShapeSVG", "pushMatrix", "pushStyle", "quad", "radians", "random", "Random", "randomSeed", "rect", "rectMode", "red", "redraw", "requestImage", "resetMatrix", "reverse", "rotate", "rotateX", "rotateY", "rotateZ", "round", "saturation", "save", "saveFrame", "saveStrings", "scale", "screenX", "screenY", "screenZ", "second", "set", "setup", "shape", "shapeMode", "shared", "shearX", "shearY", "shininess", "shorten", "sin", "size", "smooth", "sort", "specular", "sphere", "sphereDetail", "splice", "split", "splitTokens", "spotLight", "sq", "sqrt", "status", "str", "stroke", "strokeCap", "strokeJoin", "strokeWeight", "subset", "tan", "text", "textAlign", "textAscent", "textDescent", "textFont", "textLeading", "textMode", "textSize", "texture", "textureMode", "textWidth", "tint", "toImageData", "touchCancel", "touchEnd", "touchMove", "touchStart", "translate", "transform", "triangle", "trim", "unbinary", "unhex", "updatePixels", "use3DContext", "vertex", "width", "XMLElement", "XML", "year", "__contains", "__equals", "__equalsIgnoreCase", "__frameRate", "__hashCode", "__int_cast", "__instanceof", "__keyPressed", "__mousePressed", "__printStackTrace", "__replace", "__replaceAll", "__replaceFirst", "__toCharArray", "__split", "__codePointAt", "__startsWith", "__endsWith", "__matches"];
var P = {};
var Q, O;
for (Q = 0, O = R.length; Q < O; ++Q) {
P[R[Q]] = null
}
for (var S in F.lib) {
if (F.lib.hasOwnProperty(S)) {
if (F.lib[S].exports) {
var N = F.lib[S].exports;
for (Q = 0, O = N.length; Q < O; ++Q) {
P[N[Q]] = null
}
}
}
}
return P
}
function c(ar) {
var aX = u();
function aE(bq) {
var bt = [];
var bv = bq.split(/([\{\[\(\)\]\}])/);
var by = bv[0];
var bw = [];
for (var bs = 1; bs < bv.length; bs += 2) {
var bx = bv[bs];
if (bx === "[" || bx === "{" || bx === "(") {
bw.push(by);
by = bx
} else {
if (bx === "]" || bx === "}" || bx === ")") {
var br = bx === "}" ? "A" : bx === ")" ? "B" : "C";
var bu = bt.length;
bt.push(by + bx);
by = bw.pop() + '"' + br + (bu + 1) + '"'
}
}
by += bv[bs + 1]
}
bt.unshift(by);
return bt
}
function aj(br, bq) {
return br.replace(/'(\d+)'/g, function(bt, bs) {
var bu = bq[bs];
if (bu.charAt(0) === "/") {
return bu
}
return /^'((?:[^'\\\n])|(?:\\.[0-9A-Fa-f]*))'$/.test(bu) ? "(new $p.Character(" + bu + "))" : bu
})
}
function aP(bt) {
var bs = /^\s*/.exec(bt),
bq;
if (bs[0].length === bt.length) {
bq = {
left: bs[0],
middle: "",
right: ""
}
} else {
var br = /\s*$/.exec(bt);
bq = {
left: bs[0],
middle: bt.substring(bs[0].length, br.index),
right: br[0]
}
}
bq.untrim = function(bu) {
return this.left + bu + this.right
};
return bq
}
function a6(bq) {
return bq.replace(/^\s+/, "").replace(/\s+$/, "")
}
function av(bs, bt) {
for (var br = 0, bq = bt.length; br < bq; ++br) {
bs[bt[br]] = null
}
return bs
}
function ba(br) {
for (var bq in br) {
if (br.hasOwnProperty(bq)) {
return false
}
}
return true
}
function aQ(bq) {
return bq.substring(2, bq.length - 1)
}
var bg = ar.replace(/\r\n?|\n\r/g, "\n");
var N = [];
var a3 = bg.replace(/("(?:[^"\\\n]|\\.)*")|('(?:[^'\\\n]|\\.)*')|(([\[\(=|&!\^:?]\s*)(\/(?![*\/])(?:[^\/\\\n]|\\.)*\/[gim]*)\b)|(\/\/[^\n]*\n)|(\/\*(?:(?!\*\/)(?:.|\n))*\*\/)/g, function(by, br, bv, bw, bt, bx, bq, bs) {
var bu;
if (br || bv) {
bu = N.length;
N.push(by);
return "'" + bu + "'"
}
if (bw) {
bu = N.length;
N.push(bx);
return bt + "'" + bu + "'"
}
return bs !== "" ? " " : "\n"
});
a3 = a3.replace(/__x([0-9A-F]{4})/g, function(br, bq) {
return "__x005F_x" + bq
});
a3 = a3.replace(/\$/g, "__x0024");
var Z;
var aA = a3;
var aa = function(br, bs, bq, bt) {
if (!!bs || !!bt) {
return br
}
Z = true;
return ""
};
do {
Z = false;
aA = aA.replace(/([<]?)<\s*((?:\?|[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*)(?:\[\])*(?:\s+(?:extends|super)\s+[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*)?(?:\s*,\s*(?:\?|[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*)(?:\[\])*(?:\s+(?:extends|super)\s+[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*)?)*)\s*>([=]?)/g, aa)
} while (Z);
var bk = aE(aA);
var al;
var aJ = {},
a9, az = 0;
function bc(br, bq) {
var bs = bk.length;
bk.push(br);
return '"' + bq + bs + '"'
}
function a7() {
return "class" + ++az
}
function bl(br, bs, bq) {
br.classId = bs;
br.scopeId = bq;
aJ[bs] = br
}
var V, S, ap, aV, bi, aZ;
var O = /\b((?:(?:public|private|final|protected|static|abstract)\s+)*)(class|interface)\s+([A-Za-z_$][\w$]*\b)(\s+extends\s+[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*(?:\s*,\s*[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*\b)*)?(\s+implements\s+[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*(?:\s*,\s*[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*\b)*)?\s*("A\d+")/g;
var bb = /\b((?:(?:public|private|final|protected|static|abstract|synchronized)\s+)*)((?!(?:else|new|return|throw|function|public|private|protected)\b)[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*(?:\s*"C\d+")*)\s*([A-Za-z_$][\w$]*\b)\s*("B\d+")(\s*throws\s+[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*(?:\s*,\s*[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*)*)?\s*("A\d+"|;)/g;
var aM = /^((?:(?:public|private|final|protected|static)\s+)*)((?!(?:else|new|return|throw)\b)[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*(?:\s*"C\d+")*)\s*([A-Za-z_$][\w$]*\b)\s*(?:"C\d+"\s*)*([=,]|$)/;
var bm = /\b((?:(?:public|private|final|protected|static|abstract)\s+)*)((?!(?:new|return|throw)\b)[A-Za-z_$][\w$]*\b)\s*("B\d+")(\s*throws\s+[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*(?:\s*,\s*[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*)*)?\s*("A\d+")/g;
var W = /^((?:(?:public|private|final|protected|static)\s+)*)((?!(?:new|return|throw)\b)[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*(?:\s*"C\d+")*)\s*/;
var au = /\bfunction(?:\s+([A-Za-z_$][\w$]*))?\s*("B\d+")\s*("A\d+")/g;
function ae(br) {
var bq = br;
bq = bq.replace(O, function(bs) {
return bc(bs, "E")
});
bq = bq.replace(bb, function(bs) {
return bc(bs, "D")
});
bq = bq.replace(au, function(bs) {
return bc(bs, "H")
});
return bq
}
function bd(bs, br) {
var bq = bs.replace(bm, function(bx, bu, bv, by, bw, bt) {
if (bv !== br) {
return bx
}
return bc(bx, "G")
});
return bq
}
function aH(bq) {
this.name = bq
}
aH.prototype.toString = function() {
return this.name
};
function ao(br, bq) {
this.params = br;
this.methodArgsParam = bq
}
ao.prototype.getNames = function() {
var bs = [];
for (var br = 0, bq = this.params.length; br < bq; ++br) {
bs.push(this.params[br].name)
}
return bs
};
ao.prototype.prependMethodArgs = function(bq) {
if (!this.methodArgsParam) {
return bq
}
return "{\nvar " + this.methodArgsParam.name + " = Array.prototype.slice.call(arguments, " + this.params.length + ");\n" + bq.substring(1)
};
ao.prototype.toString = function() {
if (this.params.length === 0) {
return "()"
}
var bq = "(";
for (var bs = 0, br = this.params.length; bs < br; ++bs) {
bq += this.params[bs] + ", "
}
return bq.substring(0, bq.length - 2) + ")"
};
function aD(bw) {
var bt = a6(bw.substring(1, bw.length - 1));
var bq = [],
bu = null;
if (bt !== "") {
var br = bt.split(",");
for (var bs = 0; bs < br.length; ++bs) {
var bv = /\b([A-Za-z_$][\w$]*\b)(\s*"[ABC][\d]*")*\s*$/.exec(br[bs]);
if (bs === br.length - 1 && br[bs].indexOf("...") >= 0) {
bu = new aH(bv[1]);
break
}
bq.push(new aH(bv[1]))
}
}
return new ao(bq, bu)
}
function aq(bu) {
var bt = bu;
bt = bt.replace(/\bnew\s+([A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*)(?:\s*"C\d+")+\s*("A\d+")/g, function(bw, bv, bx) {
return bx
});
bt = bt.replace(/\bnew\s+([A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*)(?:\s*"B\d+")\s*("A\d+")/g, function(bw, bv, bx) {
return bc(bw, "F")
});
bt = bt.replace(au, function(bv) {
return bc(bv, "H")
});
bt = bt.replace(/\bnew\s+([A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*)\s*("C\d+"(?:\s*"C\d+")*)/g, function(bA, bz, bx) {
var bw = bx.replace(/"C(\d+)"/g, function(bC, bB) {
return bk[bB]
}).replace(/\[\s*\]/g, "[null]").replace(/\s*\]\s*\[\s*/g, ", ");
var by = "{" + bw.substring(1, bw.length - 1) + "}";
var bv = "('" + bz + "', " + bc(by, "A") + ")";
return "$p.createJavaArray" + bc(bv, "B")
});
bt = bt.replace(/(\.\s*length)\s*"B\d+"/g, "$1");
bt = bt.replace(/#([0-9A-Fa-f]{6})\b/g, function(bv, bw) {
return "0xFF" + bw
});
bt = bt.replace(/"B(\d+)"(\s*(?:[\w$']|"B))/g, function(by, bw, bx) {
var bz = bk[bw];
if (!/^\(\s*[A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*\s*(?:"C\d+"\s*)*\)$/.test(bz)) {
return by
}
if (/^\(\s*int\s*\)$/.test(bz)) {
return "(int)" + bx
}
var bv = bz.split(/"C(\d+)"/g);
if (bv.length > 1) {
if (!/^\[\s*\]$/.test(bk[bv[1]])) {
return by
}
}
return "" + bx
});
bt = bt.replace(/\(int\)([^,\]\)\}\?\:\*\+\-\/\^\|\%\&\~<\>\=]+)/g, function(bw, bv) {
var bx = aP(bv);
return bx.untrim("__int_cast(" + bx.middle + ")")
});
bt = bt.replace(/\bsuper(\s*"B\d+")/g, "$$superCstr$1").replace(/\bsuper(\s*\.)/g, "$$super$1");
bt = bt.replace(/\b0+((\d*)(?:\.[\d*])?(?:[eE][\-\+]?\d+)?[fF]?)\b/, function(bx, bw, bv) {
if (bw === bv) {
return bx
}
return bv === "" ? "0" + bw : bw
});
bt = bt.replace(/\b(\.?\d+\.?)[fF]\b/g, "$1");
bt = bt.replace(/([^\s])%([^=\s])/g, "$1 % $2");
bt = bt.replace(/\b(frameRate|keyPressed|mousePressed)\b(?!\s*"B)/g, "__$1");
bt = bt.replace(/\b(boolean|byte|char|float|int)\s*"B/g, function(bw, bv) {
return "parse" + bv.substring(0, 1).toUpperCase() + bv.substring(1) + '"B'
});
bt = bt.replace(/\bpixels\b\s*(("C(\d+)")|\.length)?(\s*=(?!=)([^,\]\)\}]+))?/g, function(bw, bA, bv, bz, by, bB) {
if (bv) {
var bx = bk[bz];
if (by) {
return "pixels.setPixel" + bc("(" + bx.substring(1, bx.length - 1) + "," + bB + ")", "B")
}
return "pixels.getPixel" + bc("(" + bx.substring(1, bx.length - 1) + ")", "B")
}
if (bA) {
return "pixels.getLength" + bc("()", "B")
}
if (by) {
return "pixels.set" + bc("(" + bB + ")", "B")
}
return "pixels.toArray" + bc("()", "B")
});
var bs;
function br(bw, bv, bA, by) {
var bx = bk[by];
bs = true;
var bz = aP(bx.substring(1, bx.length - 1));
return "__" + bA + (bz.middle === "" ? bc("(" + bv.replace(/\.\s*$/, "") + ")", "B") : bc("(" + bv.replace(/\.\s*$/, "") + "," + bz.middle + ")", "B"))
}
do {
bs = false;
bt = bt.replace(/((?:'\d+'|\b[A-Za-z_$][\w$]*\s*(?:"[BC]\d+")*)\s*\.\s*(?:[A-Za-z_$][\w$]*\s*(?:"[BC]\d+"\s*)*\.\s*)*)(replace|replaceAll|replaceFirst|contains|equals|equalsIgnoreCase|hashCode|toCharArray|printStackTrace|split|startsWith|endsWith|codePointAt|matches)\s*"B(\d+)"/g, br)
} while (bs);
function bq(bx, bv, bw) {
bs = true;
return "__instanceof" + bc("(" + bv + ", " + bw + ")", "B")
}
do {
bs = false;
bt = bt.replace(/((?:'\d+'|\b[A-Za-z_$][\w$]*\s*(?:"[BC]\d+")*)\s*(?:\.\s*[A-Za-z_$][\w$]*\s*(?:"[BC]\d+"\s*)*)*)instanceof\s+([A-Za-z_$][\w$]*\s*(?:\.\s*[A-Za-z_$][\w$]*)*)/g, bq)
} while (bs);
bt = bt.replace(/\bthis(\s*"B\d+")/g, "$$constr$1");
return bt
}
function aC(br, bq) {
this.baseInterfaceName = br;
this.body = bq;
bq.owner = this
}
aC.prototype.toString = function() {
return "new (" + this.body + ")"
};
function ai(bs) {
var br = (new RegExp(/\bnew\s*([A-Za-z_$][\w$]*\s*(?:\.\s*[A-Za-z_$][\w$]*)*)\s*"B\d+"\s*"A(\d+)"/)).exec(bs);
var bv = a9,
bu = a7();
a9 = bu;
var bq = br[1] + "$" + bu;
var bt = new aC(bq, V(bk[br[2]], bq, "", "implements " + br[1]));
bl(bt, bu, bv);
a9 = bv;
return bt
}
function af(br, bs, bq) {
this.name = br;
this.params = bs;
this.body = bq
}
af.prototype.toString = function() {
var bs = al;
var bt = av({
"this": null
}, this.params.getNames());
al = function(bu) {
return bt.hasOwnProperty(bu.name) ? bu.name : bs(bu)
};
var br = "function";
if (this.name) {
br += " " + this.name
}
var bq = this.params.prependMethodArgs(this.body.toString());
br += this.params + " " + bq;
al = bs;
return br
};
function aK(br) {
var bq = (new RegExp(/\b([A-Za-z_$][\w$]*)\s*"B(\d+)"\s*"A(\d+)"/)).exec(br);
return new af(bq[1] !== "function" ? bq[1] : null, aD(bk[bq[2]]), ap(bk[bq[3]]))
}
function ad(bq) {
this.members = bq
}
ad.prototype.toString = function() {
var bs = al;
al = function(bu) {
return bu.name === "this" ? "this" : bs(bu)
};
var bq = "";
for (var bt = 0, br = this.members.length; bt < br; ++bt) {
if (this.members[bt].label) {
bq += this.members[bt].label + ": "
}
bq += this.members[bt].value.toString() + ", "
}
al = bs;
return bq.substring(0, bq.length - 2)
};
function aF(bt) {
var bq = bt.split(",");
for (var bs = 0; bs < bq.length; ++bs) {
var br = bq[bs].indexOf(":");
if (br < 0) {
bq[bs] = {
value: aZ(bq[bs])
}
} else {
bq[bs] = {
label: a6(bq[bs].substring(0, br)),
value: aZ(a6(bq[bs].substring(br + 1)))
}
}
}
return new ad(bq)
}
function ay(bs) {
if (bs.charAt(0) === "(" || bs.charAt(0) === "[") {
return bs.charAt(0) + ay(bs.substring(1, bs.length - 1)) + bs.charAt(bs.length - 1)
}
if (bs.charAt(0) === "{") {
if (/^\{\s*(?:[A-Za-z_$][\w$]*|'\d+')\s*:/.test(bs)) {
return "{" + bc(bs.substring(1, bs.length - 1), "I") + "}"
}
return "[" + ay(bs.substring(1, bs.length - 1)) + "]"
}
var br = aP(bs);
var bq = aq(br.middle);
bq = bq.replace(/"[ABC](\d+)"/g, function(bu, bt) {
return ay(bk[bt])
});
return br.untrim(bq)
}
function R(bq) {
return bq.replace(/(\.\s*)?((?:\b[A-Za-z_]|\$)[\w$]*)(\s*\.\s*([A-Za-z_$][\w$]*)(\s*\()?)?/g, function(bt, bv, br, bx, bw, bu) {
if (bv) {
return bt
}
var bs = {
name: br,
member: bw,
callSign: !!bu
};
return al(bs) + (bx === t ? "" : bx)
})
}
function bp(br, bq) {
this.expr = br;
this.transforms = bq
}
bp.prototype.toString = function() {
var bq = this.transforms;
var br = R(this.expr);
return br.replace(/"!(\d+)"/g, function(bt, bs) {
return bq[bs].toString()
})
};
aZ = function(bs) {
var br = [];
var bq = ay(bs);
bq = bq.replace(/"H(\d+)"/g, function(bu, bt) {
br.push(aK(bk[bt]));
return '"!' + (br.length - 1) + '"'
});
bq = bq.replace(/"F(\d+)"/g, function(bu, bt) {
br.push(ai(bk[bt]));
return '"!' + (br.length - 1) + '"'
});
bq = bq.replace(/"I(\d+)"/g, function(bu, bt) {
br.push(aF(bk[bt]));
return '"!' + (br.length - 1) + '"'
});
return new bp(bq, br)
};
function a4(bq, bs, br) {
this.name = bq;
this.value = bs;
this.isDefault = br
}
a4.prototype.toString = function() {
return this.name + " = " + this.value
};
function ak(bu, br) {
var bv = bu.indexOf("=");
var bq, bt, bs;
if (bv < 0) {
bq = bu;
bt = br;
bs = true
} else {
bq = bu.substring(0, bv);
bt = aZ(bu.substring(bv + 1));
bs = false
}
return new a4(a6(bq.replace(/(\s*"C\d+")+/g, "")), bt, bs)
}
function aT(bq) {
if (bq === "int" || bq === "float") {
return "0"
}
if (bq === "boolean") {
return "false"
}
if (bq === "color") {
return "0x00000000"
}
return "null"
}
function aI(br, bq) {
this.definitions = br;
this.varType = bq
}
aI.prototype.getNames = function() {
var bs = [];
for (var br = 0, bq = this.definitions.length; br < bq; ++br) {
bs.push(this.definitions[br].name)
}
return bs
};
aI.prototype.toString = function() {
return "var " + this.definitions.join(",")
};
function ah(bq) {
this.expression = bq
}
ah.prototype.toString = function() {
return this.expression.toString()
};
function bn(bu) {
if (aM.test(bu)) {
var bt = W.exec(bu);
var bs = bu.substring(bt[0].length).split(",");
var bq = aT(bt[2]);
for (var br = 0; br < bs.length; ++br) {
bs[br] = ak(bs[br], bq)
}
return new aI(bs, bt[2])
}
return new ah(aZ(bu))
}
function a1(bq, bs, br) {
this.initStatement = bq;
this.condition = bs;
this.step = br
}
a1.prototype.toString = function() {
return "(" + this.initStatement + "; " + this.condition + "; " + this.step + ")"
};
function aS(br, bq) {
this.initStatement = br;
this.container = bq
}
aS.prototype.toString = function() {
var bq = this.initStatement.toString();
if (bq.indexOf("=") >= 0) {
bq = bq.substring(0, bq.indexOf("="))
}
return "(" + bq + " in " + this.container + ")"
};
function aY(br, bq) {
this.initStatement = br;
this.container = bq
}
aY.iteratorId = 0;
aY.prototype.toString = function() {
var bu = this.initStatement.toString();
var br = "$it" + aY.iteratorId++;
var bt = bu.replace(/^\s*var\s*/, "").split("=")[0];
var bs = "var " + br + " = new $p.ObjectIterator(" + this.container + "), " + bt + " = void(0)";
var bq = br + ".hasNext() && ((" + bt + " = " + br + ".next()) || true)";
return "(" + bs + "; " + bq + ";)"
};
function Y(br) {
var bq;
if (/\bin\b/.test(br)) {
bq = br.substring(1, br.length - 1).split(/\bin\b/g);
return new aS(bn(a6(bq[0])), aZ(bq[1]))
}
if (br.indexOf(":") >= 0 && br.indexOf(";") < 0) {
bq = br.substring(1, br.length - 1).split(":");
return new aY(bn(a6(bq[0])), aZ(bq[1]))
}
bq = br.substring(1, br.length - 1).split(";");
return new a1(bn(a6(bq[0])), aZ(bq[1]), aZ(bq[2]))
}
function a2(bq) {
bq.sort(function(bs, br) {
return br.weight - bs.weight
})
}
function ab(bs, bq, br) {
this.name = bs;
this.body = bq;
this.isStatic = br;
bq.owner = this
}
ab.prototype.toString = function() {
return "" + this.body
};
function an(bs, bq, br) {
this.name = bs;
this.body = bq;
this.isStatic = br;
bq.owner = this
}
an.prototype.toString = function() {
return "" + this.body
};
function T(bs) {
var br = O.exec(bs);
O.lastIndex = 0;
var bt = br[1].indexOf("static") >= 0;
var bq = bk[aQ(br[6])],
bv;
var bw = a9,
bu = a7();
a9 = bu;
if (br[2] === "interface") {
bv = new ab(br[3], S(bq, br[3], br[4]), bt)
} else {
bv = new an(br[3], V(bq, br[3], br[4], br[5]), bt)
}
bl(bv, bu, bw);
a9 = bw;
return bv
}
function ac(bs, bt, bq, br) {
this.name = bs;
this.params = bt;
this.body = bq;
this.isStatic = br
}
ac.prototype.toString = function() {
var bt = av({}, this.params.getNames());
var bs = al;
al = function(bu) {
return bt.hasOwnProperty(bu.name) ? bu.name : bs(bu)
};
var br = this.params.prependMethodArgs(this.body.toString());
var bq = "function " + this.methodId + this.params + " " + br + "\n";
al = bs;
return bq
};
function P(bt) {
var br = bb.exec(bt);
bb.lastIndex = 0;
var bs = br[1].indexOf("static") >= 0;
var bq = br[6] !== ";" ? bk[aQ(br[6])] : "{}";
return new ac(br[3], aD(bk[aQ(br[4])]), ap(bq), bs)
}
function am(bs, br, bq) {
this.definitions = bs;
this.fieldType = br;
this.isStatic = bq
}
am.prototype.getNames = function() {
var bs = [];
for (var br = 0, bq = this.definitions.length; br < bq; ++br) {
bs.push(this.definitions[br].name)
}
return bs
};
am.prototype.toString = function() {
var bx = al({
name: "[this]"
});
if (this.isStatic) {
var bw = this.owner.name;
var bu = [];
for (var bv = 0, bt = this.definitions.length; bv < bt; ++bv) {
var bs = this.definitions[bv];
var bq = bs.name,
by = bw + "." + bq;
var br = "if(" + by + " === void(0)) {\n " + by + " = " + bs.value + "; }\n$p.defineProperty(" + bx + ", '" + bq + "', { get: function(){return " + by + ";}, set: function(val){" + by + " = val;} });\n";
bu.push(br)
}
return bu.join("")
}
return bx + "." + this.definitions.join("; " + bx + ".")
};
function bf(bv) {
var bu = W.exec(bv);
var bq = bu[1].indexOf("static") >= 0;
var bt = bv.substring(bu[0].length).split(/,\s*/g);
var br = aT(bu[2]);
for (var bs = 0; bs < bt.length; ++bs) {
bt[bs] = ak(bt[bs], br)
}
return new am(bt, bu[2], bq)
}
function aN(br, bq) {
this.params = br;
this.body = bq
}
aN.prototype.toString = function() {
var bt = av({}, this.params.getNames());
var br = al;
al = function(bu) {
return bt.hasOwnProperty(bu.name) ? bu.name : br(bu)
};
var bs = "function $constr_" + this.params.params.length + this.params.toString();
var bq = this.params.prependMethodArgs(this.body.toString());
if (!/\$(superCstr|constr)\b/.test(bq)) {
bq = "{\n$superCstr();\n" + bq.substring(1)
}
al = br;
return bs + bq + "\n"
};
function at(bs) {
var bq = (new RegExp(/"B(\d+)"\s*"A(\d+)"/)).exec(bs);
var br = aD(bk[bq[1]]);
return new aN(br, ap(bk[bq[2]]))
}
function aO(bs, bv, bu, bq, bw, bx) {
var bt, br;
this.name = bs;
this.interfacesNames = bv;
this.methodsNames = bu;
this.fields = bq;
this.innerClasses = bw;
this.misc = bx;
for (bt = 0, br = bq.length; bt < br; ++bt) {
bq[bt].owner = this
}
}
aO.prototype.getMembers = function(bx, bq, bv) {
if (this.owner.base) {
this.owner.base.body.getMembers(bx, bq, bv)
}
var bu, bt, bs, br;
for (bu = 0, bs = this.fields.length; bu < bs; ++bu) {
var bz = this.fields[bu].getNames();
for (bt = 0, br = bz.length; bt < br; ++bt) {
bx[bz[bt]] = this.fields[bu]
}
}
for (bu = 0, bs = this.methodsNames.length; bu < bs; ++bu) {
var bw = this.methodsNames[bu];
bq[bw] = true
}
for (bu = 0, bs = this.innerClasses.length; bu < bs; ++bu) {
var by = this.innerClasses[bu];
bv[by.name] = by
}
};
aO.prototype.toString = function() {
function br(bH) {
var bG = 0;
while (bH) {
++bG;
bH = bH.scope
}
return bG
}
var bA = br(this.owner);
var bB = this.name;
var bx = "";
var bC = "";
var bE = {},
bz = {},
by = {};
this.getMembers(bE, bz, by);
var bw, bu, bv, bt;
if (this.owner.interfaces) {
var bq = [],
bs;
for (bw = 0, bu = this.interfacesNames.length; bw < bu; ++bw) {
if (!this.owner.interfaces[bw]) {
continue
}
bs = al({
name: this.interfacesNames[bw]
});
bq.push(bs);
bx += "$p.extendInterfaceMembers(" + bB + ", " + bs + ");\n"
}
bC += bB + ".$interfaces = [" + bq.join(", ") + "];\n"
}
bC += bB + ".$isInterface = true;\n";
bC += bB + ".$methods = ['" + this.methodsNames.join("', '") + "'];\n";
a2(this.innerClasses);
for (bw = 0, bu = this.innerClasses.length; bw < bu; ++bw) {
var bF = this.innerClasses[bw];
if (bF.isStatic) {
bx += bB + "." + bF.name + " = " + bF + ";\n"
}
}
for (bw = 0, bu = this.fields.length; bw < bu; ++bw) {
var bD = this.fields[bw];
if (bD.isStatic) {
bx += bB + "." + bD.definitions.join(";\n" + bB + ".") + ";\n"
}
}
return "(function() {\nfunction " + bB + "() { throw 'Unable to create the interface'; }\n" + bx + bC + "return " + bB + ";\n})()"
};
S = function(bw, br, bB) {
var bC = bw.substring(1, bw.length - 1);
bC = ae(bC);
bC = bd(bC, br);
var bz = [],
bt = [];
bC = bC.replace(/"([DE])(\d+)"/g, function(bF, bE, bD) {
if (bE === "D") {
bz.push(bD)
} else {
if (bE === "E") {
bt.push(bD)
}
}
return ""
});
var bx = bC.split(/;(?:\s*;)*/g);
var bu;
var bv, bs;
if (bB !== t) {
bu = bB.replace(/^\s*extends\s+(.+?)\s*$/g, "$1").split(/\s*,\s*/g)
}
for (bv = 0, bs = bz.length; bv < bs; ++bv) {
var bq = P(bk[bz[bv]]);
bz[bv] = bq.name
}
for (bv = 0, bs = bx.length - 1; bv < bs; ++bv) {
var bA = aP(bx[bv]);
bx[bv] = bf(bA.middle)
}
var by = bx.pop();
for (bv = 0, bs = bt.length; bv < bs; ++bv) {
bt[bv] = T(bk[bt[bv]])
}
return new aO(br, bu, bz, bx, bt, {
tail: by
})
};
function aB(br, by, bx, bw, bs, bz, bA, bu, bq) {
var bv, bt;
this.name = br;
this.baseClassName = by;
this.interfacesNames = bx;
this.functions = bw;
this.methods = bs;
this.fields = bz;
this.cstrs = bA;
this.innerClasses = bu;
this.misc = bq;
for (bv = 0, bt = bz.length; bv < bt; ++bv) {
bz[bv].owner = this
}
}
aB.prototype.getMembers = function(bx, br, bw) {
if (this.owner.base) {
this.owner.base.body.getMembers(bx, br, bw)
}
var bv, bu, bt, bs;
for (bv = 0, bt = this.fields.length; bv < bt; ++bv) {
var bz = this.fields[bv].getNames();
for (bu = 0, bs = bz.length; bu < bs; ++bu) {
bx[bz[bu]] = this.fields[bv]
}
}
for (bv = 0, bt = this.methods.length; bv < bt; ++bv) {
var bq = this.methods[bv];
br[bq.name] = bq
}
for (bv = 0, bt = this.innerClasses.length; bv < bt; ++bv) {
var by = this.innerClasses[bv];
bw[by.name] = by
}
};
aB.prototype.toString = function() {
function bN(bV) {
var bU = 0;
while (bV) {
++bU;
bV = bV.scope
}
return bU
}
var bB = bN(this.owner);
var bG = "$this_" + bB;
var bs = this.name;
var bx = "var " + bG + " = this;\n";
var bH = "";
var bz = "";
var bS = {},
bT = {},
bJ = {};
this.getMembers(bS, bT, bJ);
var bR = al;
al = function(bV) {
var bU = bV.name;
if (bU === "this") {
return bV.callSign || !bV.member ? bG + ".$self" : bG
}
if (bS.hasOwnProperty(bU)) {
return bS[bU].isStatic ? bs + "." + bU : bG + "." + bU
}
if (bJ.hasOwnProperty(bU)) {
return bG + "." + bU
}
if (bT.hasOwnProperty(bU)) {
return bT[bU].isStatic ? bs + "." + bU : bG + ".$self." + bU
}
return bR(bV)
};
var bA;
if (this.baseClassName) {
bA = bR({
name: this.baseClassName
});
bx += "var $super = { $upcast: " + bG + " };\n";
bx += "function $superCstr(){" + bA + ".apply($super,arguments);if(!('$self' in $super)) $p.extendClassChain($super)}\n";
bz += bs + ".$base = " + bA + ";\n"
} else {
bx += "function $superCstr(){$p.extendClassChain(" + bG + ")}\n"
} if (this.owner.base) {
bH += "$p.extendStaticMembers(" + bs + ", " + bA + ");\n"
}
var bM, bK, bL, bI;
if (this.owner.interfaces) {
var bw = [],
bq;
for (bM = 0, bK = this.interfacesNames.length; bM < bK; ++bM) {
if (!this.owner.interfaces[bM]) {
continue
}
bq = bR({
name: this.interfacesNames[bM]
});
bw.push(bq);
bH += "$p.extendInterfaceMembers(" + bs + ", " + bq + ");\n"
}
bz += bs + ".$interfaces = [" + bw.join(", ") + "];\n"
}
if (this.functions.length > 0) {
bx += this.functions.join("\n") + "\n"
}
a2(this.innerClasses);
for (bM = 0, bK = this.innerClasses.length; bM < bK; ++bM) {
var bD = this.innerClasses[bM];
if (bD.isStatic) {
bH += bs + "." + bD.name + " = " + bD + ";\n";
bx += bG + "." + bD.name + " = " + bs + "." + bD.name + ";\n"
} else {
bx += bG + "." + bD.name + " = " + bD + ";\n"
}
}
for (bM = 0, bK = this.fields.length; bM < bK; ++bM) {
var br = this.fields[bM];
if (br.isStatic) {
bH += bs + "." + br.definitions.join(";\n" + bs + ".") + ";\n";
for (bL = 0, bI = br.definitions.length; bL < bI; ++bL) {
var bu = br.definitions[bL].name,
by = bs + "." + bu;
bx += "$p.defineProperty(" + bG + ", '" + bu + "', {get: function(){return " + by + "}, set: function(val){" + by + " = val}});\n"
}
} else {
bx += bG + "." + br.definitions.join(";\n" + bG + ".") + ";\n"
}
}
var bC = {};
for (bM = 0, bK = this.methods.length; bM < bK; ++bM) {
var bt = this.methods[bM];
var bP = bC[bt.name];
var bv = bt.name + "$" + bt.params.params.length;
var bF = !!bt.params.methodArgsParam;
if (bP) {
++bP;
bv += "_" + bP
} else {
bP = 1
}
bt.methodId = bv;
bC[bt.name] = bP;
if (bt.isStatic) {
bH += bt;
bH += "$p.addMethod(" + bs + ", '" + bt.name + "', " + bv + ", " + bF + ");\n";
bx += "$p.addMethod(" + bG + ", '" + bt.name + "', " + bv + ", " + bF + ");\n"
} else {
bx += bt;
bx += "$p.addMethod(" + bG + ", '" + bt.name + "', " + bv + ", " + bF + ");\n"
}
}
bx += a6(this.misc.tail);
if (this.cstrs.length > 0) {
bx += this.cstrs.join("\n") + "\n"
}
bx += "function $constr() {\n";
var bQ = [];
for (bM = 0, bK = this.cstrs.length; bM < bK; ++bM) {
var bO = this.cstrs[bM].params.params.length;
var bE = !!this.cstrs[bM].params.methodArgsParam;
bQ.push("if(arguments.length " + (bE ? ">=" : "===") + " " + bO + ") { $constr_" + bO + ".apply(" + bG + ", arguments); }")
}
if (bQ.length > 0) {
bx += bQ.join(" else ") + " else "
}
bx += "$superCstr();\n}\n";
bx += "$constr.apply(null, arguments);\n";
al = bR;
return "(function() {\nfunction " + bs + "() {\n" + bx + "}\n" + bH + bz + "return " + bs + ";\n})()"
};
V = function(bz, br, bq, bC) {
var bE = bz.substring(1, bz.length - 1);
bE = ae(bE);
bE = bd(bE, br);
var bs = [],
bt = [],
bD = [],
bw = [];
bE = bE.replace(/"([DEGH])(\d+)"/g, function(bH, bG, bF) {
if (bG === "D") {
bs.push(bF)
} else {
if (bG === "E") {
bt.push(bF)
} else {
if (bG === "H") {
bw.push(bF)
} else {
bD.push(bF)
}
}
}
return ""
});
var by = bE.replace(/^(?:\s*;)+/, "").split(/;(?:\s*;)*/g);
var bx, bv;
var bu;
if (bq !== t) {
bx = bq.replace(/^\s*extends\s+([A-Za-z_$][\w$]*\b(?:\s*\.\s*[A-Za-z_$][\w$]*\b)*)\s*$/g, "$1")
}
if (bC !== t) {
bv = bC.replace(/^\s*implements\s+(.+?)\s*$/g, "$1").split(/\s*,\s*/g)
}
for (bu = 0; bu < bw.length; ++bu) {
bw[bu] = aK(bk[bw[bu]])
}
for (bu = 0; bu < bs.length; ++bu) {
bs[bu] = P(bk[bs[bu]])
}
for (bu = 0; bu < by.length - 1; ++bu) {
var bB = aP(by[bu]);
by[bu] = bf(bB.middle)
}
var bA = by.pop();
for (bu = 0; bu < bD.length; ++bu) {
bD[bu] = at(bk[bD[bu]])
}
for (bu = 0; bu < bt.length; ++bu) {
bt[bu] = T(bk[bt[bu]])
}
return new aB(br, bx, bv, bw, bs, by, bD, bt, {
tail: bA
})
};
function aw(br, bq) {
this.name = br;
this.body = bq;
bq.owner = this
}
aw.prototype.toString = function() {
return "var " + this.name + " = " + this.body + ";\n$p." + this.name + " = " + this.name + ";\n"
};
function a5(br, bq) {
this.name = br;
this.body = bq;
bq.owner = this
}
a5.prototype.toString = function() {
return "var " + this.name + " = " + this.body + ";\n$p." + this.name + " = " + this.name + ";\n"
};
function bo(bs) {
var br = O.exec(bs);
O.lastIndex = 0;
var bq = bk[aQ(br[6])];
var bv = a9,
bt = a7();
a9 = bt;
var bu;
if (br[2] === "interface") {
bu = new aw(br[3], S(bq, br[3], br[4]))
} else {
bu = new a5(br[3], V(bq, br[3], br[4], br[5]))
}
bl(bu, bt, bv);
a9 = bv;
return bu
}
function aR(br, bs, bq) {
this.name = br;
this.params = bs;
this.body = bq
}
aR.prototype.toString = function() {
var bt = av({}, this.params.getNames());
var bs = al;
al = function(bu) {
return bt.hasOwnProperty(bu.name) ? bu.name : bs(bu)
};
var br = this.params.prependMethodArgs(this.body.toString());
var bq = "function " + this.name + this.params + " " + br + "\n$p." + this.name + " = " + this.name + ";";
al = bs;
return bq
};
function aW(bs) {
var br = bb.exec(bs);
var bq = bb.lastIndex = 0;
return new aR(br[3], aD(bk[aQ(br[4])]), ap(bk[aQ(br[6])]))
}
function ag(bq) {
var br = bq;
br = br.replace(/\b(catch\s*"B\d+"\s*"A\d+")(\s*catch\s*"B\d+"\s*"A\d+")+/g, "$1");
return br
}
function aU(bq, br) {
this.argument = bq;
this.misc = br
}
aU.prototype.toString = function() {
return this.misc.prefix + this.argument.toString()
};
function Q(bq, br) {
this.argument = bq;
this.misc = br
}
Q.prototype.toString = function() {
return this.misc.prefix + this.argument.toString()
};
function ax(bq, br, bs) {
this.name = bq;
this.argument = br;
this.misc = bs
}
ax.prototype.toString = function() {
var bq = this.misc.prefix;
if (this.argument !== t) {
bq += this.argument.toString()
}
return bq
};
function aL(bq) {
this.expr = bq
}
aL.prototype.toString = function() {
return "case " + this.expr + ":"
};
function X(bq) {
this.label = bq
}
X.prototype.toString = function() {
return this.label
};
aV = function(by, bz, bs) {
var bD = new RegExp(/\b(catch|for|if|switch|while|with)\s*"B(\d+)"|\b(do|else|finally|return|throw|try|break|continue)\b|("[ADEH](\d+)")|\b(case)\s+([^:]+):|\b([A-Za-z_$][\w$]*\s*:)|(;)/g);
var bA = [];
by = ag(by);
var bx = 0,
bt, br;
while ((bt = bD.exec(by)) !== null) {
if (bt[1] !== t) {
var bw = by.lastIndexOf('"B', bD.lastIndex);
var bC = by.substring(bx, bw);
if (bt[1] === "for") {
bA.push(new aU(Y(bk[bt[2]]), {
prefix: bC
}))
} else {
if (bt[1] === "catch") {
bA.push(new Q(aD(bk[bt[2]]), {
prefix: bC
}))
} else {
bA.push(new ax(bt[1], aZ(bk[bt[2]]), {
prefix: bC
}))
}
}
} else {
if (bt[3] !== t) {
bA.push(new ax(bt[3], t, {
prefix: by.substring(bx, bD.lastIndex)
}))
} else {
if (bt[4] !== t) {
br = by.substring(bx, bD.lastIndex - bt[4].length);
if (a6(br).length !== 0) {
continue
}
bA.push(br);
var bu = bt[4].charAt(1),
bq = bt[5];
if (bu === "D") {
bA.push(bz(bk[bq]))
} else {
if (bu === "E") {
bA.push(bs(bk[bq]))
} else {
if (bu === "H") {
bA.push(aK(bk[bq]))
} else {
bA.push(ap(bk[bq]))
}
}
}
} else {
if (bt[6] !== t) {
bA.push(new aL(aZ(a6(bt[7]))))
} else {
if (bt[8] !== t) {
br = by.substring(bx, bD.lastIndex - bt[8].length);
if (a6(br).length !== 0) {
continue
}
bA.push(new X(by.substring(bx, bD.lastIndex)))
} else {
var bB = aP(by.substring(bx, bD.lastIndex - 1));
bA.push(bB.left);
bA.push(bn(bB.middle));
bA.push(bB.right + ";")
}
}
}
}
}
bx = bD.lastIndex
}
var bv = aP(by.substring(bx));
bA.push(bv.left);
if (bv.middle !== "") {
bA.push(bn(bv.middle));
bA.push(";" + bv.right)
}
return bA
};
function be(br) {
var bs = [];
for (var bt = 0, bq = br.length; bt < bq; ++bt) {
var bu = br[bt];
if (bu instanceof aI) {
bs = bs.concat(bu.getNames())
} else {
if (bu instanceof aU && bu.argument.initStatement instanceof aI) {
bs = bs.concat(bu.argument.initStatement.getNames())
} else {
if (bu instanceof ab || bu instanceof an || bu instanceof aw || bu instanceof a5 || bu instanceof aR || bu instanceof af) {
bs.push(bu.name)
}
}
}
}
return av({}, bs)
}
function U(bq) {
this.statements = bq
}
U.prototype.toString = function() {
var bs = be(this.statements);
var br = al;
if (!ba(bs)) {
al = function(bt) {
return bs.hasOwnProperty(bt.name) ? bt.name : br(bt)
}
}
var bq = "{\n" + this.statements.join("") + "\n}";
al = br;
return bq
};
ap = function(br) {
var bq = aP(br.substring(1, br.length - 1));
return new U(aV(bq.middle))
};
function aG(bq) {
this.statements = bq
}
aG.prototype.toString = function() {
var bu = [],
bv = [],
bw;
for (var bt = 0, br = this.statements.length; bt < br; ++bt) {
bw = this.statements[bt];
if (bw instanceof a5 || bw instanceof aw) {
bu.push(bw)
} else {
bv.push(bw)
}
}
a2(bu);
var bs = be(this.statements);
al = function(by) {
var bx = by.name;
if (bs.hasOwnProperty(bx)) {
return bx
}
if (aX.hasOwnProperty(bx) || B.hasOwnProperty(bx) || g.hasOwnProperty(bx)) {
return "$p." + bx
}
return bx
};
var bq = "// this code was autogenerated from PJS\n(function($p) {\n" + bu.join("") + "\n" + bv.join("") + "\n})";
al = null;
return bq
};
bi = function() {
var bq = ae(bk[0]);
bq = bq.replace(/\bimport\s+[^;]+;/g, "");
return new aG(aV(bq, aW, bo))
};
function bj(bq) {
var bu = {};
var bs, by;
for (bs in aJ) {
if (aJ.hasOwnProperty(bs)) {
by = aJ[bs];
var bE = by.scopeId,
br = by.name;
if (bE) {
var bD = aJ[bE];
by.scope = bD;
if (bD.inScope === t) {
bD.inScope = {}
}
bD.inScope[br] = by
} else {
bu[br] = by
}
}
}
function bB(bF, bI) {
var bL = bI.split(".");
var bH = bF.scope,
bK;
while (bH) {
if (bH.hasOwnProperty(bL[0])) {
bK = bH[bL[0]];
break
}
bH = bH.scope
}
if (bK === t) {
bK = bu[bL[0]]
}
for (var bJ = 1, bG = bL.length; bJ < bG && bK; ++bJ) {
bK = bK.inScope[bL[bJ]]
}
return bK
}
for (bs in aJ) {
if (aJ.hasOwnProperty(bs)) {
by = aJ[bs];
var bx = by.body.baseClassName;
if (bx) {
var bA = bB(by, bx);
if (bA) {
by.base = bA;
if (!bA.derived) {
bA.derived = []
}
bA.derived.push(by)
}
}
var bw = by.body.interfacesNames,
bC = [],
bv, bt;
if (bw && bw.length > 0) {
for (bv = 0, bt = bw.length; bv < bt; ++bv) {
var bz = bB(by, bw[bv]);
bC.push(bz);
if (!bz) {
continue
}
if (!bz.derived) {
bz.derived = []
}
bz.derived.push(by)
}
if (bC.length > 0) {
by.interfaces = bC
}
}
}
}
}
function a8(bq) {
var bv = [],
bs = {};
var br, by, bw;
for (br in aJ) {
if (aJ.hasOwnProperty(br)) {
bw = aJ[br];
if (!bw.inScope && !bw.derived) {
bv.push(br);
bw.weight = 0
} else {
var bx = [];
if (bw.inScope) {
for (by in bw.inScope) {
if (bw.inScope.hasOwnProperty(by)) {
bx.push(bw.inScope[by])
}
}
}
if (bw.derived) {
bx = bx.concat(bw.derived)
}
bs[br] = bx
}
}
}
function bz(bB, bD) {
var bA = bs[bB];
if (!bA) {
return false
}
var bC = bA.indexOf(bD);
if (bC < 0) {
return false
}
bA.splice(bC, 1);
if (bA.length > 0) {
return false
}
delete bs[bB];
return true
}
while (bv.length > 0) {
br = bv.shift();
bw = aJ[br];
if (bw.scopeId && bz(bw.scopeId, bw)) {
bv.push(bw.scopeId);
aJ[bw.scopeId].weight = bw.weight + 1
}
if (bw.base && bz(bw.base.classId, bw)) {
bv.push(bw.base.classId);
bw.base.weight = bw.weight + 1
}
if (bw.interfaces) {
var bu, bt;
for (bu = 0, bt = bw.interfaces.length; bu < bt; ++bu) {
if (!bw.interfaces[bu] || !bz(bw.interfaces[bu].classId, bw)) {
continue
}
bv.push(bw.interfaces[bu].classId);
bw.interfaces[bu].weight = bw.weight + 1
}
}
}
}
var bh = bi();
bj(bh);
a8(bh);
var a0 = bh.toString();
a0 = a0.replace(/\s*\n(?:[\t ]*\n)+/g, "\n\n");
a0 = a0.replace(/__x([0-9A-F]{4})/g, function(br, bq) {
return String.fromCharCode(parseInt(bq, 16))
});
return aj(a0, N)
}
function z(O, ad) {
var X = (new RegExp(/\/\*\s*@pjs\s+((?:[^\*]|\*+[^\*\/])*)\*\//g)).exec(O);
if (X && X.length === 2) {
var N = [],
Q = X.splice(1, 2)[0].replace(/\{([\s\S]*?)\}/g, function() {
return function(ag, ah) {
N.push(ah);
return "{" + (N.length - 1) + "}"
}
}()).replace("\n", "").replace("\r", "").split(";");
var W = function(ag) {
return ag.replace(/^\s*["']?/, "").replace(/["']?\s*$/, "")
};
for (var aa = 0, Y = Q.length; aa < Y; aa++) {
var U = Q[aa].split("=");
if (U && U.length === 2) {
var af = W(U[0]),
V = W(U[1]),
ae = [];
if (af === "preload") {
ae = V.split(",");
for (var Z = 0, ab = ae.length; Z < ab; Z++) {
var ac = W(ae[Z]);
ad.imageCache.add(ac)
}
} else {
if (af === "font") {
ae = V.split(",");
for (var R = 0, T = ae.length; R < T; R++) {
var S = W(ae[R]),
P = /^\{(\d*?)\}$/.exec(S);
H.preloading.add(P ? JSON.parse("{" + N[P[1]] + "}") : S)
}
} else {
if (af === "pauseOnBlur") {
ad.options.pauseOnBlur = V === "true"
} else {
if (af === "globalKeyEvents") {
ad.options.globalKeyEvents = V === "true"
} else {
if (af.substring(0, 6) === "param-") {
ad.params[af.substring(6)] = V
} else {
ad.options[af] = V
}
}
}
}
}
}
}
}
return O
}
F.compile = function(N) {
var Q = new F.Sketch;
var O = z(N, Q);
var P = c(O);
Q.sourceCode = P;
return Q
};
var j = function() {
var T = {},
Q = "undefined",
R = "function",
N = !1,
S = !0,
O = 512,
P = "log";
if (typeof tinylog !== Q && typeof tinylog[P] === R) {
T[P] = tinylog[P]
} else {
if (typeof d !== Q && !d.fake) {
(function() {
var ao = d,
am = "div",
ac = "style",
ag = "title",
ab = {
zIndex: 10000,
position: "fixed",
bottom: "0px",
width: "100%",
height: "15%",
fontFamily: "sans-serif",
color: "#ccc",
backgroundColor: "black"
},
ae = {
position: "relative",
fontFamily: "monospace",
overflow: "auto",
height: "100%",
paddingTop: "5px"
},
ai = {
height: "5px",
marginTop: "-5px",
cursor: "n-resize",
backgroundColor: "darkgrey"
},
an = {
position: "absolute",
top: "5px",
right: "20px",
color: "#111",
MozBorderRadius: "4px",
webkitBorderRadius: "4px",
borderRadius: "4px",
cursor: "pointer",
fontWeight: "normal",
textAlign: "center",
padding: "3px 5px",
backgroundColor: "#333",
fontSize: "12px"
},
Y = {
minHeight: "16px"
},
af = {
fontSize: "12px",
margin: "0 8px 0 8px",
maxWidth: "100%",
whiteSpace: "pre-wrap",
overflow: "auto"
},
ad = ao.defaultView,
al = ao.documentElement,
U = al[ac],
W = function() {
var aq = arguments.length,
ap, at, ar;
while (aq--) {
at = arguments[aq--];
ap = arguments[aq][ac];
for (ar in at) {
if (at.hasOwnProperty(ar)) {
ap[ar] = at[ar]
}
}
}
},
aj = function(ar, aq, ap) {
if (ar.addEventListener) {
ar.addEventListener(aq, ap, N)
} else {
if (ar.attachEvent) {
ar.attachEvent("on" + aq, ap)
}
}
return [ar, aq, ap]
},
V = function(ar, aq, ap) {
if (ar.removeEventListener) {
ar.removeEventListener(aq, ap, N)
} else {
if (ar.detachEvent) {
ar.detachEvent("on" + aq, ap)
}
}
},
aa = function(aq) {
var ap = aq.childNodes,
ar = ap.length;
while (ar--) {
aq.removeChild(ap.item(0))
}
},
ak = function(aq, ap) {
return aq.appendChild(ap)
},
ah = function(ap) {
return ao.createElement(ap)
},
Z = function(ap) {
return ao.createTextNode(ap)
},
X = T[P] = function(aE) {
var aw, ax = U.paddingBottom,
ar = ah(am),
aB = ar[ac],
aC = ak(ar, ah(am)),
au = ak(ar, ah(am)),
at = ak(ar, ah(am)),
aD = N,
av = N,
aq = N,
ay = 0,
ap = function() {
U.paddingBottom = ar.clientHeight + "px"
},
aA = function(aF) {
var aG = ad.innerHeight,
aH = aC.clientHeight;
if (aF < 0) {
aF = 0
} else {
if (aF + aH > aG) {
aF = aG - aH
}
}
aB.height = aF / aG * 100 + "%";
ap()
},
az = [aj(ao, "mousemove", function(aF) {
if (aD) {
aA(ad.innerHeight - aF.clientY);
au.scrollTop = aq
}
}), aj(ao, "mouseup", function() {
if (aD) {
aD = aq = N
}
}), aj(aC, "dblclick", function(aF) {
aF.preventDefault();
if (av) {
aA(av);
av = N
} else {
av = ar.clientHeight;
aB.height = "0px"
}
}), aj(aC, "mousedown", function(aF) {
aF.preventDefault();
aD = S;
aq = au.scrollTop
}), aj(aC, "contextmenu", function() {
aD = N
}), aj(at, "click", function() {
aw()
})];
aw = function() {
var aF = az.length;
while (aF--) {
V.apply(T, az[aF])
}
al.removeChild(ar);
U.paddingBottom = ax;
aa(au);
aa(ar);
T[P] = X
};
W(ar, ab, au, ae, aC, ai, at, an);
at[ag] = "Close Log";
ak(at, Z("\u2716"));
aC[ag] = "Double-click to toggle log minimization";
al.insertBefore(ar, al.firstChild);
T[P] = function(aH) {
if (ay === O) {
au.removeChild(au.firstChild)
} else {
ay++
}
var aG = ak(au, ah(am)),
aF = ak(aG, ah(am));
aG[ag] = (new Date).toLocaleTimeString();
W(aG, Y, aF, af);
ak(aF, Z(aH));
au.scrollTop = au.scrollHeight
};
T[P](aE);
ap()
}
})()
} else {
if (typeof print === R) {
T[P] = print
}
}
}
return T
}();
F.logger = j;
F.version = "1.4.1";
F.lib = {};
F.registerLibrary = function(N, O) {
F.lib[N] = O;
if (O.hasOwnProperty("init")) {
O.init(g)
}
};
F.instances = k;
F.getInstanceById = function(N) {
return k[J[N]]
};
F.Sketch = function(N) {
this.attachFunction = N;
this.options = {
pauseOnBlur: false,
globalKeyEvents: false
};
this.onLoad = G;
this.onSetup = G;
this.onPause = G;
this.onLoop = G;
this.onFrameStart = G;
this.onFrameEnd = G;
this.onExit = G;
this.params = {};
this.imageCache = {
pending: 0,
images: {},
operaCache: {},
add: function(P, O) {
if (this.images[P]) {
return
}
if (!n) {
this.images[P] = null
}
if (!O) {
O = new Image;
O.onload = function(R) {
return function() {
R.pending--
}
}(this);
this.pending++;
O.src = P
}
this.images[P] = O;
if (D.opera) {
var Q = d.createElement("div");
Q.appendChild(O);
Q.style.position = "absolute";
Q.style.opacity = 0;
Q.style.width = "1px";
Q.style.height = "1px";
if (!this.operaCache[P]) {
d.body.appendChild(Q);
this.operaCache[P] = Q
}
}
}
};
this.sourceCode = undefined;
this.attach = function(P) {
if (typeof this.attachFunction === "function") {
this.attachFunction(P)
} else {
if (this.sourceCode) {
var O = (new Function("return (" + this.sourceCode + ");"))();
O(P);
this.attachFunction = O
} else {
throw "Unable to attach sketch to the processing instance"
}
}
};
this.toString = function() {
var O;
var P = "((function(Sketch) {\n";
P += "var sketch = new Sketch(\n" + this.sourceCode + ");\n";
for (O in this.options) {
if (this.options.hasOwnProperty(O)) {
var Q = this.options[O];
P += "sketch.options." + O + " = " + (typeof Q === "string" ? '"' + Q + '"' : "" + Q) + ";\n"
}
}
for (O in this.imageCache) {
if (this.options.hasOwnProperty(O)) {
P += 'sketch.imageCache.add("' + O + '");\n'
}
}
P += "return sketch;\n})(Processing.Sketch))";
return P
}
};
var v = function(Q, N) {
var O = [],
U = [],
V = N.length,
S = 0;
function T(W, Y) {
var X = new XMLHttpRequest;
X.onreadystatechange = function() {
if (X.readyState === 4) {
var Z;
if (X.status !== 200 && X.status !== 0) {
Z = "Invalid XHR status " + X.status
} else {
if (X.responseText === "") {
if ("withCredentials" in new XMLHttpRequest && (new XMLHttpRequest).withCredentials === false && D.location.protocol === "file:") {
Z = "XMLHttpRequest failure, possibly due to a same-origin policy violation. You can try loading this page in another browser, or load it from http://localhost using a local webserver. See the Processing.js README for a more detailed explanation of this problem and solutions."
} else {
Z = "File is empty."
}
}
}
Y(X.responseText, Z)
}
};
X.open("GET", W, true);
if (X.overrideMimeType) {
X.overrideMimeType("application/json")
}
X.setRequestHeader("If-Modified-Since", "Fri, 01 Jan 1960 00:00:00 GMT");
X.send(null)
}
function P(X, W) {
function Z(ac, aa) {
O[X] = ac;
++S;
if (aa) {
U.push(W + " ==> " + aa)
}
if (S === V) {
if (U.length === 0) {
try {
return new F(Q, O.join("\n"))
} catch (ab) {
throw "Processing.js: Unable to execute pjs sketch: " + ab
}
} else {
throw "Processing.js: Unable to load pjs sketch files: " + U.join("\n")
}
}
}
if (W.charAt(0) === "#") {
var Y = d.getElementById(W.substring(1));
if (Y) {
Z(Y.text || Y.textContent)
} else {
Z("", "Unable to load pjs sketch: element with id '" + W.substring(1) + "' was not found")
}
return
}
T(W, Z)
}
for (var R = 0; R < V; ++R) {
P(R, N[R])
}
};
var I = function() {
d.removeEventListener("DOMContentLoaded", I, false);
k = [];
var O = d.getElementsByTagName("canvas"),
U;
for (var T = 0, P = O.length; T < P; T++) {
var W = O[T].getAttribute("data-processing-sources");
if (W === null) {
W = O[T].getAttribute("data-src");
if (W === null) {
W = O[T].getAttribute("datasrc")
}
}
if (W) {
U = W.split(/\s+/g);
for (var S = 0; S < U.length;) {
if (U[S]) {
S++
} else {
U.splice(S, 1)
}
}
v(O[T], U)
}
}
var ac, aa, N, Z, ab = d.getElementsByTagName("script"),
Q = [];
for (ac = ab.length - 1; ac >= 0; ac--) {
Q.push(ab[ac])
}
for (ac = 0, aa = Q.length; ac < aa; ac++) {
var Y = Q[ac];
if (!Y.getAttribute) {
continue
}
var X = Y.getAttribute("type");
if (X && (X.toLowerCase() === "text/processing" || X.toLowerCase() === "application/processing")) {
var V = Y.getAttribute("data-processing-target");
O = t;
if (V) {
O = d.getElementById(V)
} else {
var R = Y.nextSibling;
while (R && R.nodeType !== 1) {
R = R.nextSibling
}
if (R && R.nodeName.toLowerCase() === "canvas") {
O = R
}
} if (O) {
if (Y.getAttribute("src")) {
U = Y.getAttribute("src").split(/\s+/);
v(O, U);
continue
}
N = Y.textContent || Y.text;
Z = new F(O, N)
}
}
}
};
F.reload = function() {
if (k.length > 0) {
for (var N = k.length - 1; N >= 0; N--) {
if (k[N]) {
k[N].exit()
}
}
}
I()
};
F.loadSketchFromSources = v;
F.disableInit = function() {
if (n) {
d.removeEventListener("DOMContentLoaded", I, false)
}
};
if (n) {
D.Processing = F;
d.addEventListener("DOMContentLoaded", I, false)
} else {
this.Processing = F
}
})(window, window.document, Math);