! function(a) { if ("object" == typeof exports) module.exports = a(); else { var b; "undefined" != typeof window ? b = window : "undefined" != typeof global ? b = global : "undefined" != typeof self && (b = self), b.p2 = a() } }(function() { return function a(b, c, d) { function e(g, h) { if (!c[g]) { if (!b[g]) { var i = "function" == typeof require && require; if (!h && i) return i(g, !0); if (f) return f(g, !0); throw new Error("Cannot find module '" + g + "'") } var j = c[g] = { exports: {} }; b[g][0].call(j.exports, function(a) { var c = b[g][1][a]; return e(c || a) }, j, j.exports, a, b, c, d) } return c[g].exports } for (var f = "function" == typeof require && require, g = 0; g < d.length; g++) e(d[g]); return e }({ 1: [function(a, b, c) { function d() {} var e = a("./Scalar"); b.exports = d, d.lineInt = function(a, b, c) { c = c || 0; var d, f, g, h, i, j, k, l = [0, 0]; return d = a[1][1] - a[0][1], f = a[0][0] - a[1][0], g = d * a[0][0] + f * a[0][1], h = b[1][1] - b[0][1], i = b[0][0] - b[1][0], j = h * b[0][0] + i * b[0][1], k = d * i - h * f, e.eq(k, 0, c) || (l[0] = (i * g - f * j) / k, l[1] = (d * j - h * g) / k), l }, d.segmentsIntersect = function(a, b, c, d) { var e = b[0] - a[0], f = b[1] - a[1], g = d[0] - c[0], h = d[1] - c[1]; if (g * f - h * e == 0) return !1; var i = (e * (c[1] - a[1]) + f * (a[0] - c[0])) / (g * f - h * e), j = (g * (a[1] - c[1]) + h * (c[0] - a[0])) / (h * e - g * f); return i >= 0 && i <= 1 && j >= 0 && j <= 1 } }, { "./Scalar": 4 }], 2: [function(a, b, c) { function d() {} b.exports = d, d.area = function(a, b, c) { return (b[0] - a[0]) * (c[1] - a[1]) - (c[0] - a[0]) * (b[1] - a[1]) }, d.left = function(a, b, c) { return d.area(a, b, c) > 0 }, d.leftOn = function(a, b, c) { return d.area(a, b, c) >= 0 }, d.right = function(a, b, c) { return d.area(a, b, c) < 0 }, d.rightOn = function(a, b, c) { return d.area(a, b, c) <= 0 }; var e = [], f = []; d.collinear = function(a, b, c, g) { if (g) { var h = e, i = f; h[0] = b[0] - a[0], h[1] = b[1] - a[1], i[0] = c[0] - b[0], i[1] = c[1] - b[1]; var j = h[0] * i[0] + h[1] * i[1], k = Math.sqrt(h[0] * h[0] + h[1] * h[1]), l = Math.sqrt(i[0] * i[0] + i[1] * i[1]); return Math.acos(j / (k * l)) < g } return 0 == d.area(a, b, c) }, d.sqdist = function(a, b) { var c = b[0] - a[0], d = b[1] - a[1]; return c * c + d * d } }, {}], 3: [function(a, b, c) { function d() { this.vertices = [] } function e(a, b, c, d, e) { e = e || 0; var f = b[1] - a[1], g = a[0] - b[0], i = f * a[0] + g * a[1], j = d[1] - c[1], k = c[0] - d[0], l = j * c[0] + k * c[1], m = f * k - j * g; return h.eq(m, 0, e) ? [0, 0] : [(k * i - g * l) / m, (f * l - j * i) / m] } var f = a("./Line"), g = a("./Point"), h = a("./Scalar"); b.exports = d, d.prototype.at = function(a) { var b = this.vertices, c = b.length; return b[a < 0 ? a % c + c : a % c] }, d.prototype.first = function() { return this.vertices[0] }, d.prototype.last = function() { return this.vertices[this.vertices.length - 1] }, d.prototype.clear = function() { this.vertices.length = 0 }, d.prototype.append = function(a, b, c) { if (void 0 === b) throw new Error("From is not given!"); if (void 0 === c) throw new Error("To is not given!"); if (c - 1 < b) throw new Error("lol1"); if (c > a.vertices.length) throw new Error("lol2"); if (b < 0) throw new Error("lol3"); for (var d = b; d < c; d++) this.vertices.push(a.vertices[d]) }, d.prototype.makeCCW = function() { for (var a = 0, b = this.vertices, c = 1; c < this.vertices.length; ++c)(b[c][1] < b[a][1] || b[c][1] == b[a][1] && b[c][0] > b[a][0]) && (a = c); g.left(this.at(a - 1), this.at(a), this.at(a + 1)) || this.reverse() }, d.prototype.reverse = function() { for (var a = [], b = 0, c = this.vertices.length; b !== c; b++) a.push(this.vertices.pop()); this.vertices = a }, d.prototype.isReflex = function(a) { return g.right(this.at(a - 1), this.at(a), this.at(a + 1)) }; var i = [], j = []; d.prototype.canSee = function(a, b) { var c, d, e = i, h = j; if (g.leftOn(this.at(a + 1), this.at(a), this.at(b)) && g.rightOn(this.at(a - 1), this.at(a), this.at(b))) return !1; d = g.sqdist(this.at(a), this.at(b)); for (var k = 0; k !== this.vertices.length; ++k) if ((k + 1) % this.vertices.length !== a && k !== a && g.leftOn(this.at(a), this.at(b), this.at(k + 1)) && g.rightOn(this.at(a), this.at(b), this.at(k)) && (e[0] = this.at(a), e[1] = this.at(b), h[0] = this.at(k), h[1] = this.at(k + 1), c = f.lineInt(e, h), g.sqdist(this.at(a), c) < d)) return !1; return !0 }, d.prototype.copy = function(a, b, c) { var e = c || new d; if (e.clear(), a < b) for (var f = a; f <= b; f++) e.vertices.push(this.vertices[f]); else { for (var f = 0; f <= b; f++) e.vertices.push(this.vertices[f]); for (var f = a; f < this.vertices.length; f++) e.vertices.push(this.vertices[f]) } return e }, d.prototype.getCutEdges = function() { for (var a = [], b = [], c = [], e = new d, f = Number.MAX_VALUE, g = 0; g < this.vertices.length; ++g) if (this.isReflex(g)) for (var h = 0; h < this.vertices.length; ++h) if (this.canSee(g, h)) { b = this.copy(g, h, e).getCutEdges(), c = this.copy(h, g, e).getCutEdges(); for (var i = 0; i < c.length; i++) b.push(c[i]); b.length < f && (a = b, f = b.length, a.push([this.at(g), this.at(h)])) } return a }, d.prototype.decomp = function() { var a = this.getCutEdges(); return a.length > 0 ? this.slice(a) : [this] }, d.prototype.slice = function(a) { if (0 == a.length) return [this]; if (a instanceof Array && a.length && a[0] instanceof Array && 2 == a[0].length && a[0][0] instanceof Array) { for (var b = [this], c = 0; c < a.length; c++) for (var d = a[c], e = 0; e < b.length; e++) { var f = b[e], g = f.slice(d); if (g) { b.splice(e, 1), b.push(g[0], g[1]); break } } return b } var d = a, c = this.vertices.indexOf(d[0]), e = this.vertices.indexOf(d[1]); return -1 != c && -1 != e && [this.copy(c, e), this.copy(e, c)] }, d.prototype.isSimple = function() { for (var a = this.vertices, b = 0; b < a.length - 1; b++) for (var c = 0; c < b - 1; c++) if (f.segmentsIntersect(a[b], a[b + 1], a[c], a[c + 1])) return !1; for (var b = 1; b < a.length - 2; b++) if (f.segmentsIntersect(a[0], a[a.length - 1], a[b], a[b + 1])) return !1; return !0 }, d.prototype.quickDecomp = function(a, b, c, f, h, i) { h = h || 100, i = i || 0, f = f || 25, a = void 0 !== a ? a : [], b = b || [], c = c || []; var j = [0, 0], k = [0, 0], l = [0, 0], m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = new d, u = new d, v = this, w = this.vertices; if (w.length < 3) return a; if (++i > h) return console.warn("quickDecomp: max level (" + h + ") reached."), a; for (var x = 0; x < this.vertices.length; ++x) if (v.isReflex(x)) { b.push(v.vertices[x]), m = n = Number.MAX_VALUE; for (var y = 0; y < this.vertices.length; ++y) g.left(v.at(x - 1), v.at(x), v.at(y)) && g.rightOn(v.at(x - 1), v.at(x), v.at(y - 1)) && (l = e(v.at(x - 1), v.at(x), v.at(y), v.at(y - 1)), g.right(v.at(x + 1), v.at(x), l) && (o = g.sqdist(v.vertices[x], l)) < n && (n = o, k = l, r = y)), g.left(v.at(x + 1), v.at(x), v.at(y + 1)) && g.rightOn(v.at(x + 1), v.at(x), v.at(y)) && (l = e(v.at(x + 1), v.at(x), v.at(y), v.at(y + 1)), g.left(v.at(x - 1), v.at(x), l) && (o = g.sqdist(v.vertices[x], l)) < m && (m = o, j = l, q = y)); if (r == (q + 1) % this.vertices.length) l[0] = (k[0] + j[0]) / 2, l[1] = (k[1] + j[1]) / 2, c.push(l), x < q ? (t.append(v, x, q + 1), t.vertices.push(l), u.vertices.push(l), 0 != r && u.append(v, r, v.vertices.length), u.append(v, 0, x + 1)) : (0 != x && t.append(v, x, v.vertices.length), t.append(v, 0, q + 1), t.vertices.push(l), u.vertices.push(l), u.append(v, r, x + 1)); else { if (r > q && (q += this.vertices.length), p = Number.MAX_VALUE, q < r) return a; for (var y = r; y <= q; ++y) g.leftOn(v.at(x - 1), v.at(x), v.at(y)) && g.rightOn(v.at(x + 1), v.at(x), v.at(y)) && (o = g.sqdist(v.at(x), v.at(y))) < p && (p = o, s = y % this.vertices.length); x < s ? (t.append(v, x, s + 1), 0 != s && u.append(v, s, w.length), u.append(v, 0, x + 1)) : (0 != x && t.append(v, x, w.length), t.append(v, 0, s + 1), u.append(v, s, x + 1)) } return t.vertices.length < u.vertices.length ? (t.quickDecomp(a, b, c, f, h, i), u.quickDecomp(a, b, c, f, h, i)) : (u.quickDecomp(a, b, c, f, h, i), t.quickDecomp(a, b, c, f, h, i)), a } return a.push(this), a }, d.prototype.removeCollinearPoints = function(a) { for (var b = 0, c = this.vertices.length - 1; this.vertices.length > 3 && c >= 0; --c) g.collinear(this.at(c - 1), this.at(c), this.at(c + 1), a) && (this.vertices.splice(c % this.vertices.length, 1), c--, b++); return b } }, { "./Line": 1, "./Point": 2, "./Scalar": 4 }], 4: [function(a, b, c) { function d() {} b.exports = d, d.eq = function(a, b, c) { return c = c || 0, Math.abs(a - b) < c } }, {}], 5: [function(a, b, c) { b.exports = { Polygon: a("./Polygon"), Point: a("./Point") } }, { "./Point": 2, "./Polygon": 3 }], 6: [function(a, b, c) { b.exports = { name: "p2", version: "0.7.0", description: "A JavaScript 2D physics engine.", author: "Stefan Hedman <schteppe@gmail.com> (http://steffe.se)", keywords: ["p2.js", "p2", "physics", "engine", "2d"], main: "./src/p2.js", engines: { node: "*" }, repository: { type: "git", url: "https://github.com/schteppe/p2.js.git" }, bugs: { url: "https://github.com/schteppe/p2.js/issues" }, licenses: [{ type: "MIT" }], devDependencies: { grunt: "^0.4.5", "grunt-contrib-jshint": "^0.11.2", "grunt-contrib-nodeunit": "^0.4.1", "grunt-contrib-uglify": "~0.4.0", "grunt-contrib-watch": "~0.5.0", "grunt-browserify": "~2.0.1", "grunt-contrib-concat": "^0.4.0" }, dependencies: { "poly-decomp": "0.1.0" } } }, {}], 7: [function(a, b, c) { function d(a) { this.lowerBound = e.create(), a && a.lowerBound && e.copy(this.lowerBound, a.lowerBound), this.upperBound = e.create(), a && a.upperBound && e.copy(this.upperBound, a.upperBound) } var e = a("../math/vec2"); a("../utils/Utils"); b.exports = d; var f = e.create(); d.prototype.setFromPoints = function(a, b, c, d) { var g = this.lowerBound, h = this.upperBound; "number" != typeof c && (c = 0), 0 !== c ? e.rotate(g, a[0], c) : e.copy(g, a[0]), e.copy(h, g); for (var i = Math.cos(c), j = Math.sin(c), k = 1; k < a.length; k++) { var l = a[k]; if (0 !== c) { var m = l[0], n = l[1]; f[0] = i * m - j * n, f[1] = j * m + i * n, l = f } for (var o = 0; o < 2; o++) l[o] > h[o] && (h[o] = l[o]), l[o] < g[o] && (g[o] = l[o]) } b && (e.add(this.lowerBound, this.lowerBound, b), e.add(this.upperBound, this.upperBound, b)), d && (this.lowerBound[0] -= d, this.lowerBound[1] -= d, this.upperBound[0] += d, this.upperBound[1] += d) }, d.prototype.copy = function(a) { e.copy(this.lowerBound, a.lowerBound), e.copy(this.upperBound, a.upperBound) }, d.prototype.extend = function(a) { for (var b = 2; b--;) { var c = a.lowerBound[b]; this.lowerBound[b] > c && (this.lowerBound[b] = c); var d = a.upperBound[b]; this.upperBound[b] < d && (this.upperBound[b] = d) } }, d.prototype.overlaps = function(a) { var b = this.lowerBound, c = this.upperBound, d = a.lowerBound, e = a.upperBound; return (d[0] <= c[0] && c[0] <= e[0] || b[0] <= e[0] && e[0] <= c[0]) && (d[1] <= c[1] && c[1] <= e[1] || b[1] <= e[1] && e[1] <= c[1]) }, d.prototype.containsPoint = function(a) { var b = this.lowerBound, c = this.upperBound; return b[0] <= a[0] && a[0] <= c[0] && b[1] <= a[1] && a[1] <= c[1] }, d.prototype.overlapsRay = function(a) { var b = 1 / a.direction[0], c = 1 / a.direction[1], d = (this.lowerBound[0] - a.from[0]) * b, e = (this.upperBound[0] - a.from[0]) * b, f = (this.lowerBound[1] - a.from[1]) * c, g = (this.upperBound[1] - a.from[1]) * c, h = Math.max(Math.max(Math.min(d, e), Math.min(f, g))), i = Math.min(Math.min(Math.max(d, e), Math.max(f, g))); return i < 0 ? -1 : h > i ? -1 : h } }, { "../math/vec2": 30, "../utils/Utils": 57 }], 8: [function(a, b, c) { function d(a) { this.type = a, this.result = [], this.world = null, this.boundingVolumeType = d.AABB } var e = a("../math/vec2"), f = a("../objects/Body"); b.exports = d, d.AABB = 1, d.BOUNDING_CIRCLE = 2, d.prototype.setWorld = function(a) { this.world = a }, d.prototype.getCollisionPairs = function(a) {}; var g = e.create(); d.boundingRadiusCheck = function(a, b) { e.sub(g, a.position, b.position); var c = e.squaredLength(g), d = a.boundingRadius + b.boundingRadius; return c <= d * d }, d.aabbCheck = function(a, b) { return a.getAABB().overlaps(b.getAABB()) }, d.prototype.boundingVolumeCheck = function(a, b) { var c; switch (this.boundingVolumeType) { case d.BOUNDING_CIRCLE: c = d.boundingRadiusCheck(a, b); break; case d.AABB: c = d.aabbCheck(a, b); break; default: throw new Error("Bounding volume type not recognized: " + this.boundingVolumeType) } return c }, d.canCollide = function(a, b) { var c = f.KINEMATIC, d = f.STATIC; return (a.type !== d || b.type !== d) && (!(a.type === c && b.type === d || a.type === d && b.type === c) && ((a.type !== c || b.type !== c) && ((a.sleepState !== f.SLEEPING || b.sleepState !== f.SLEEPING) && !(a.sleepState === f.SLEEPING && b.type === d || b.sleepState === f.SLEEPING && a.type === d)))) }, d.NAIVE = 1, d.SAP = 2 }, { "../math/vec2": 30, "../objects/Body": 31 }], 9: [function(a, b, c) { function d() { e.call(this, e.NAIVE) } var e = (a("../shapes/Circle"), a("../shapes/Plane"), a("../shapes/Shape"), a("../shapes/Particle"), a("../collision/Broadphase")); a("../math/vec2"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.getCollisionPairs = function(a) { var b = a.bodies, c = this.result; c.length = 0; for (var d = 0, f = b.length; d !== f; d++) for (var g = b[d], h = 0; h < d; h++) { var i = b[h]; e.canCollide(g, i) && this.boundingVolumeCheck(g, i) && c.push(g, i) } return c }, d.prototype.aabbQuery = function(a, b, c) { c = c || []; for (var d = a.bodies, e = 0; e < d.length; e++) { var f = d[e]; f.aabbNeedsUpdate && f.updateAABB(), f.aabb.overlaps(b) && c.push(f) } return c } }, { "../collision/Broadphase": 8, "../math/vec2": 30, "../shapes/Circle": 39, "../shapes/Particle": 43, "../shapes/Plane": 44, "../shapes/Shape": 45 }], 10: [function(a, b, c) { function d() { this.contactEquations = [], this.frictionEquations = [], this.enableFriction = !0, this.enabledEquations = !0, this.slipForce = 10, this.frictionCoefficient = .3, this.surfaceVelocity = 0, this.contactEquationPool = new k({ size: 32 }), this.frictionEquationPool = new l({ size: 64 }), this.restitution = 0, this.stiffness = n.DEFAULT_STIFFNESS, this.relaxation = n.DEFAULT_RELAXATION, this.frictionStiffness = n.DEFAULT_STIFFNESS, this.frictionRelaxation = n.DEFAULT_RELAXATION, this.enableFrictionReduction = !0, this.collidingBodiesLastStep = new m, this.contactSkinSize = .01 } function e(a, b) { g.set(a.vertices[0], .5 * -b.length, -b.radius), g.set(a.vertices[1], .5 * b.length, -b.radius), g.set(a.vertices[2], .5 * b.length, b.radius), g.set(a.vertices[3], .5 * -b.length, b.radius) } function f(a, b, c, d) { for (var e = T, f = U, j = V, k = W, l = a, m = b.vertices, n = null, o = 0; o !== m.length + 1; o++) { var p = m[o % m.length], q = m[(o + 1) % m.length]; g.rotate(e, p, d), g.rotate(f, q, d), i(e, e, c), i(f, f, c), h(j, e, l), h(k, f, l); var r = g.crossLength(j, k); if (null === n && (n = r), r * n <= 0) return !1; n = r } return !0 } var g = a("../math/vec2"), h = g.sub, i = g.add, j = g.dot, k = (a("../utils/Utils"), a("../utils/ContactEquationPool")), l = a("../utils/FrictionEquationPool"), m = a("../utils/TupleDictionary"), n = a("../equations/Equation"), o = (a("../equations/ContactEquation"), a("../equations/FrictionEquation"), a("../shapes/Circle")), p = a("../shapes/Convex"), q = a("../shapes/Shape"), r = (a("../objects/Body"), a("../shapes/Box")); b.exports = d; var s = g.fromValues(0, 1), t = g.fromValues(0, 0), u = g.fromValues(0, 0), v = g.fromValues(0, 0), w = g.fromValues(0, 0), x = g.fromValues(0, 0), y = g.fromValues(0, 0), z = g.fromValues(0, 0), A = g.fromValues(0, 0), B = g.fromValues(0, 0), C = g.fromValues(0, 0), D = g.fromValues(0, 0), E = g.fromValues(0, 0), F = g.fromValues(0, 0), G = g.fromValues(0, 0), H = g.fromValues(0, 0), I = g.fromValues(0, 0), J = g.fromValues(0, 0), K = g.fromValues(0, 0), L = [], M = g.create(), N = g.create(); d.prototype.bodiesOverlap = function(a, b) { for (var c = M, d = N, e = 0, f = a.shapes.length; e !== f; e++) { var g = a.shapes[e]; a.toWorldFrame(c, g.position); for (var h = 0, i = b.shapes.length; h !== i; h++) { var j = b.shapes[h]; if (b.toWorldFrame(d, j.position), this[g.type | j.type](a, g, c, g.angle + a.angle, b, j, d, j.angle + b.angle, !0)) return !0 } } return !1 }, d.prototype.collidedLastStep = function(a, b) { var c = 0 | a.id, d = 0 | b.id; return !!this.collidingBodiesLastStep.get(c, d) }, d.prototype.reset = function() { this.collidingBodiesLastStep.reset(); for (var a = this.contactEquations, b = a.length; b--;) { var c = a[b], d = c.bodyA.id, e = c.bodyB.id; this.collidingBodiesLastStep.set(d, e, !0) } for (var f = this.contactEquations, g = this.frictionEquations, h = 0; h < f.length; h++) this.contactEquationPool.release(f[h]); for (var h = 0; h < g.length; h++) this.frictionEquationPool.release(g[h]); this.contactEquations.length = this.frictionEquations.length = 0 }, d.prototype.createContactEquation = function(a, b, c, d) { var e = this.contactEquationPool.get(); return e.bodyA = a, e.bodyB = b, e.shapeA = c, e.shapeB = d, e.restitution = this.restitution, e.firstImpact = !this.collidedLastStep(a, b), e.stiffness = this.stiffness, e.relaxation = this.relaxation, e.needsUpdate = !0, e.enabled = this.enabledEquations, e.offset = this.contactSkinSize, e }, d.prototype.createFrictionEquation = function(a, b, c, d) { var e = this.frictionEquationPool.get(); return e.bodyA = a, e.bodyB = b, e.shapeA = c, e.shapeB = d, e.setSlipForce(this.slipForce), e.frictionCoefficient = this.frictionCoefficient, e.relativeVelocity = this.surfaceVelocity, e.enabled = this.enabledEquations, e.needsUpdate = !0, e.stiffness = this.frictionStiffness, e.relaxation = this.frictionRelaxation, e.contactEquations.length = 0, e }, d.prototype.createFrictionFromContact = function(a) { var b = this.createFrictionEquation(a.bodyA, a.bodyB, a.shapeA, a.shapeB); return g.copy(b.contactPointA, a.contactPointA), g.copy(b.contactPointB, a.contactPointB), g.rotate90cw(b.t, a.normalA), b.contactEquations.push(a), b }, d.prototype.createFrictionFromAverage = function(a) { var b = this.contactEquations[this.contactEquations.length - 1], c = this.createFrictionEquation(b.bodyA, b.bodyB, b.shapeA, b.shapeB), d = b.bodyA; b.bodyB; g.set(c.contactPointA, 0, 0), g.set(c.contactPointB, 0, 0), g.set(c.t, 0, 0); for (var e = 0; e !== a; e++) b = this.contactEquations[this.contactEquations.length - 1 - e], b.bodyA === d ? (g.add(c.t, c.t, b.normalA), g.add(c.contactPointA, c.contactPointA, b.contactPointA), g.add(c.contactPointB, c.contactPointB, b.contactPointB)) : (g.sub(c.t, c.t, b.normalA), g.add(c.contactPointA, c.contactPointA, b.contactPointB), g.add(c.contactPointB, c.contactPointB, b.contactPointA)), c.contactEquations.push(b); var f = 1 / a; return g.scale(c.contactPointA, c.contactPointA, f), g.scale(c.contactPointB, c.contactPointB, f), g.normalize(c.t, c.t), g.rotate90cw(c.t, c.t), c }, d.prototype[q.LINE | q.CONVEX] = d.prototype.convexLine = function(a, b, c, d, e, f, g, h, i) { return !i && 0 }, d.prototype[q.LINE | q.BOX] = d.prototype.lineBox = function(a, b, c, d, e, f, g, h, i) { return !i && 0 }; var O = new r({ width: 1, height: 1 }), P = g.create(); d.prototype[q.CAPSULE | q.CONVEX] = d.prototype[q.CAPSULE | q.BOX] = d.prototype.convexCapsule = function(a, b, c, d, f, h, i, j, k) { var l = P; g.set(l, h.length / 2, 0), g.rotate(l, l, j), g.add(l, l, i); var m = this.circleConvex(f, h, l, j, a, b, c, d, k, h.radius); g.set(l, -h.length / 2, 0), g.rotate(l, l, j), g.add(l, l, i); var n = this.circleConvex(f, h, l, j, a, b, c, d, k, h.radius); if (k && (m || n)) return !0; var o = O; return e(o, h), this.convexConvex(a, b, c, d, f, o, i, j, k) + m + n }, d.prototype[q.CAPSULE | q.LINE] = d.prototype.lineCapsule = function(a, b, c, d, e, f, g, h, i) { return !i && 0 }; var Q = g.create(), R = g.create(), S = new r({ width: 1, height: 1 }); d.prototype[q.CAPSULE | q.CAPSULE] = d.prototype.capsuleCapsule = function(a, b, c, d, f, h, i, j, k) { for (var l, m = Q, n = R, o = 0, p = 0; p < 2; p++) { g.set(m, (0 === p ? -1 : 1) * b.length / 2, 0), g.rotate(m, m, d), g.add(m, m, c); for (var q = 0; q < 2; q++) { g.set(n, (0 === q ? -1 : 1) * h.length / 2, 0), g.rotate(n, n, j), g.add(n, n, i), this.enableFrictionReduction && (l = this.enableFriction, this.enableFriction = !1); var r = this.circleCircle(a, b, m, d, f, h, n, j, k, b.radius, h.radius); if (this.enableFrictionReduction && (this.enableFriction = l), k && r) return !0; o += r } } this.enableFrictionReduction && (l = this.enableFriction, this.enableFriction = !1); var s = S; e(s, b); var t = this.convexCapsule(a, s, c, d, f, h, i, j, k); if (this.enableFrictionReduction && (this.enableFriction = l), k && t) return !0; if (o += t, this.enableFrictionReduction) { var l = this.enableFriction; this.enableFriction = !1 } e(s, h); var u = this.convexCapsule(f, s, i, j, a, b, c, d, k); return this.enableFrictionReduction && (this.enableFriction = l), !(!k || !u) || (o += u, this.enableFrictionReduction && o && this.enableFriction && this.frictionEquations.push(this.createFrictionFromAverage(o)), o) }, d.prototype[q.LINE | q.LINE] = d.prototype.lineLine = function(a, b, c, d, e, f, g, h, i) { return !i && 0 }, d.prototype[q.PLANE | q.LINE] = d.prototype.planeLine = function(a, b, c, d, e, f, k, l, m) { var n = t, o = u, p = v, q = w, r = x, C = y, D = z, E = A, F = B, G = L, H = 0; g.set(n, -f.length / 2, 0), g.set(o, f.length / 2, 0), g.rotate(p, n, l), g.rotate(q, o, l), i(p, p, k), i(q, q, k), g.copy(n, p), g.copy(o, q), h(r, o, n), g.normalize(C, r), g.rotate90cw(F, C), g.rotate(E, s, d), G[0] = n, G[1] = o; for (var I = 0; I < G.length; I++) { var J = G[I]; h(D, J, c); var K = j(D, E); if (K < 0) { if (m) return !0; var M = this.createContactEquation(a, e, b, f); H++, g.copy(M.normalA, E), g.normalize(M.normalA, M.normalA), g.scale(D, E, K), h(M.contactPointA, J, D), h(M.contactPointA, M.contactPointA, a.position), h(M.contactPointB, J, k), i(M.contactPointB, M.contactPointB, k), h(M.contactPointB, M.contactPointB, e.position), this.contactEquations.push(M), this.enableFrictionReduction || this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(M)) } } return !m && (this.enableFrictionReduction || H && this.enableFriction && this.frictionEquations.push(this.createFrictionFromAverage(H)), H) }, d.prototype[q.PARTICLE | q.CAPSULE] = d.prototype.particleCapsule = function(a, b, c, d, e, f, g, h, i) { return this.circleLine(a, b, c, d, e, f, g, h, i, f.radius, 0) }, d.prototype[q.CIRCLE | q.LINE] = d.prototype.circleLine = function(a, b, c, d, e, f, k, l, m, n, o) { var n = n || 0, o = void 0 !== o ? o : b.radius, p = t, q = u, r = v, s = w, H = x, I = y, J = z, K = A, M = B, N = C, O = D, P = E, Q = F, R = G, S = L; g.set(K, -f.length / 2, 0), g.set(M, f.length / 2, 0), g.rotate(N, K, l), g.rotate(O, M, l), i(N, N, k), i(O, O, k), g.copy(K, N), g.copy(M, O), h(I, M, K), g.normalize(J, I), g.rotate90cw(H, J), h(P, c, K); var T = j(P, H); h(s, K, k), h(Q, c, k); var U = o + n; if (Math.abs(T) < U) { g.scale(p, H, T), h(r, c, p), g.scale(q, H, j(H, Q)), g.normalize(q, q), g.scale(q, q, n), i(r, r, q); var V = j(J, r), W = j(J, K), X = j(J, M); if (V > W && V < X) { if (m) return !0; var Y = this.createContactEquation(a, e, b, f); return g.scale(Y.normalA, p, -1), g.normalize(Y.normalA, Y.normalA), g.scale(Y.contactPointA, Y.normalA, o), i(Y.contactPointA, Y.contactPointA, c), h(Y.contactPointA, Y.contactPointA, a.position), h(Y.contactPointB, r, k), i(Y.contactPointB, Y.contactPointB, k), h(Y.contactPointB, Y.contactPointB, e.position), this.contactEquations.push(Y), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(Y)), 1 } } S[0] = K, S[1] = M; for (var Z = 0; Z < S.length; Z++) { var $ = S[Z]; if (h(P, $, c), g.squaredLength(P) < Math.pow(U, 2)) { if (m) return !0; var Y = this.createContactEquation(a, e, b, f); return g.copy(Y.normalA, P), g.normalize(Y.normalA, Y.normalA), g.scale(Y.contactPointA, Y.normalA, o), i(Y.contactPointA, Y.contactPointA, c), h(Y.contactPointA, Y.contactPointA, a.position), h(Y.contactPointB, $, k), g.scale(R, Y.normalA, -n), i(Y.contactPointB, Y.contactPointB, R), i(Y.contactPointB, Y.contactPointB, k), h(Y.contactPointB, Y.contactPointB, e.position), this.contactEquations.push(Y), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(Y)), 1 } } return 0 }, d.prototype[q.CIRCLE | q.CAPSULE] = d.prototype.circleCapsule = function(a, b, c, d, e, f, g, h, i) { return this.circleLine(a, b, c, d, e, f, g, h, i, f.radius) }, d.prototype[q.CIRCLE | q.CONVEX] = d.prototype[q.CIRCLE | q.BOX] = d.prototype.circleConvex = function(a, b, c, d, e, j, k, l, m, n) { for (var n = "number" == typeof n ? n : b.radius, o = t, p = u, q = v, r = w, s = x, y = C, z = D, A = F, B = G, E = H, J = I, K = !1, L = Number.MAX_VALUE, M = j.vertices, N = 0; N !== M.length + 1; N++) { var O = M[N % M.length], P = M[(N + 1) % M.length]; if (g.rotate(o, O, l), g.rotate(p, P, l), i(o, o, k), i(p, p, k), h(q, p, o), g.normalize(r, q), g.rotate90cw(s, r), g.scale(B, s, -b.radius), i(B, B, c), f(B, j, k, l)) { g.sub(E, o, B); var Q = Math.abs(g.dot(E, s)); Q < L && (g.copy(J, B), L = Q, g.scale(A, s, Q), g.add(A, A, B), K = !0) } } if (K) { if (m) return !0; var R = this.createContactEquation(a, e, b, j); return g.sub(R.normalA, J, c), g.normalize(R.normalA, R.normalA), g.scale(R.contactPointA, R.normalA, n), i(R.contactPointA, R.contactPointA, c), h(R.contactPointA, R.contactPointA, a.position), h(R.contactPointB, A, k), i(R.contactPointB, R.contactPointB, k), h(R.contactPointB, R.contactPointB, e.position), this.contactEquations.push(R), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(R)), 1 } if (n > 0) for (var N = 0; N < M.length; N++) { var S = M[N]; if (g.rotate(z, S, l), i(z, z, k), h(y, z, c), g.squaredLength(y) < Math.pow(n, 2)) { if (m) return !0; var R = this.createContactEquation(a, e, b, j); return g.copy(R.normalA, y), g.normalize(R.normalA, R.normalA), g.scale(R.contactPointA, R.normalA, n), i(R.contactPointA, R.contactPointA, c), h(R.contactPointA, R.contactPointA, a.position), h(R.contactPointB, z, k), i(R.contactPointB, R.contactPointB, k), h(R.contactPointB, R.contactPointB, e.position), this.contactEquations.push(R), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(R)), 1 } } return 0 }; var T = g.create(), U = g.create(), V = g.create(), W = g.create(); d.prototype[q.PARTICLE | q.CONVEX] = d.prototype[q.PARTICLE | q.BOX] = d.prototype.particleConvex = function(a, b, c, d, e, k, l, m, n) { var o = t, p = u, q = v, r = w, s = x, A = y, B = z, D = C, E = F, G = J, H = K, I = Number.MAX_VALUE, L = !1, M = k.vertices; if (!f(c, k, l, m)) return 0; if (n) return !0; for (var N = 0; N !== M.length + 1; N++) { var O = M[N % M.length], P = M[(N + 1) % M.length]; g.rotate(o, O, m), g.rotate(p, P, m), i(o, o, l), i(p, p, l), h(q, p, o), g.normalize(r, q), g.rotate90cw(s, r), h(D, c, o); j(D, s); h(A, o, l), h(B, c, l), g.sub(G, o, c); var Q = Math.abs(g.dot(G, s)); Q < I && (I = Q, g.scale(E, s, Q), g.add(E, E, c), g.copy(H, s), L = !0) } if (L) { var R = this.createContactEquation(a, e, b, k); return g.scale(R.normalA, H, -1), g.normalize(R.normalA, R.normalA), g.set(R.contactPointA, 0, 0), i(R.contactPointA, R.contactPointA, c), h(R.contactPointA, R.contactPointA, a.position), h(R.contactPointB, E, l), i(R.contactPointB, R.contactPointB, l), h(R.contactPointB, R.contactPointB, e.position), this.contactEquations.push(R), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(R)), 1 } return 0 }, d.prototype[q.CIRCLE] = d.prototype.circleCircle = function(a, b, c, d, e, f, j, k, l, m, n) { var o = t, m = m || b.radius, n = n || f.radius; h(o, c, j); var p = m + n; if (g.squaredLength(o) > Math.pow(p, 2)) return 0; if (l) return !0; var q = this.createContactEquation(a, e, b, f); return h(q.normalA, j, c), g.normalize(q.normalA, q.normalA), g.scale(q.contactPointA, q.normalA, m), g.scale(q.contactPointB, q.normalA, -n), i(q.contactPointA, q.contactPointA, c), h(q.contactPointA, q.contactPointA, a.position), i(q.contactPointB, q.contactPointB, j), h(q.contactPointB, q.contactPointB, e.position), this.contactEquations.push(q), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(q)), 1 }, d.prototype[q.PLANE | q.CONVEX] = d.prototype[q.PLANE | q.BOX] = d.prototype.planeConvex = function(a, b, c, d, e, f, k, l, m) { var n = t, o = u, p = v, q = 0; g.rotate(o, s, d); for (var r = 0; r !== f.vertices.length; r++) { var w = f.vertices[r]; if (g.rotate(n, w, l), i(n, n, k), h(p, n, c), j(p, o) <= 0) { if (m) return !0; q++; var x = this.createContactEquation(a, e, b, f); h(p, n, c), g.copy(x.normalA, o); var y = j(p, x.normalA); g.scale(p, x.normalA, y), h(x.contactPointB, n, e.position), h(x.contactPointA, n, p), h(x.contactPointA, x.contactPointA, a.position), this.contactEquations.push(x), this.enableFrictionReduction || this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(x)) } } return this.enableFrictionReduction && this.enableFriction && q && this.frictionEquations.push(this.createFrictionFromAverage(q)), q }, d.prototype[q.PARTICLE | q.PLANE] = d.prototype.particlePlane = function(a, b, c, d, e, f, i, k, l) { var m = t, n = u; k = k || 0, h(m, c, i), g.rotate(n, s, k); var o = j(m, n); if (o > 0) return 0; if (l) return !0; var p = this.createContactEquation(e, a, f, b); return g.copy(p.normalA, n), g.scale(m, p.normalA, o), h(p.contactPointA, c, m), h(p.contactPointA, p.contactPointA, e.position), h(p.contactPointB, c, a.position), this.contactEquations.push(p), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(p)), 1 }, d.prototype[q.CIRCLE | q.PARTICLE] = d.prototype.circleParticle = function(a, b, c, d, e, f, j, k, l) { var m = t; if (h(m, j, c), g.squaredLength(m) > Math.pow(b.radius, 2)) return 0; if (l) return !0; var n = this.createContactEquation(a, e, b, f); return g.copy(n.normalA, m), g.normalize(n.normalA, n.normalA), g.scale(n.contactPointA, n.normalA, b.radius), i(n.contactPointA, n.contactPointA, c), h(n.contactPointA, n.contactPointA, a.position), h(n.contactPointB, j, e.position), this.contactEquations.push(n), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(n)), 1 }; var X = new o({ radius: 1 }), Y = g.create(), Z = g.create(); g.create(); d.prototype[q.PLANE | q.CAPSULE] = d.prototype.planeCapsule = function(a, b, c, d, e, f, h, j, k) { var l = Y, m = Z, n = X; g.set(l, -f.length / 2, 0), g.rotate(l, l, j), i(l, l, h), g.set(m, f.length / 2, 0), g.rotate(m, m, j), i(m, m, h), n.radius = f.radius; var o; this.enableFrictionReduction && (o = this.enableFriction, this.enableFriction = !1); var p = this.circlePlane(e, n, l, 0, a, b, c, d, k), q = this.circlePlane(e, n, m, 0, a, b, c, d, k); if (this.enableFrictionReduction && (this.enableFriction = o), k) return p || q; var r = p + q; return this.enableFrictionReduction && r && this.frictionEquations.push(this.createFrictionFromAverage(r)), r }, d.prototype[q.CIRCLE | q.PLANE] = d.prototype.circlePlane = function(a, b, c, d, e, f, k, l, m) { var n = a, o = b, p = c, q = e, r = k, w = l; w = w || 0; var x = t, y = u, z = v; h(x, p, r), g.rotate(y, s, w); var A = j(y, x); if (A > o.radius) return 0; if (m) return !0; var B = this.createContactEquation(q, n, f, b); return g.copy(B.normalA, y), g.scale(B.contactPointB, B.normalA, -o.radius), i(B.contactPointB, B.contactPointB, p), h(B.contactPointB, B.contactPointB, n.position), g.scale(z, B.normalA, A), h(B.contactPointA, x, z), i(B.contactPointA, B.contactPointA, r), h(B.contactPointA, B.contactPointA, q.position), this.contactEquations.push(B), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(B)), 1 }, d.prototype[q.CONVEX] = d.prototype[q.CONVEX | q.BOX] = d.prototype[q.BOX] = d.prototype.convexConvex = function(a, b, c, e, f, k, l, m, n, o) { var p = t, q = u, r = v, s = w, y = x, C = z, D = A, E = B, F = 0, o = "number" == typeof o ? o : 0; if (!d.findSeparatingAxis(b, c, e, k, l, m, p)) return 0; h(D, l, c), j(p, D) > 0 && g.scale(p, p, -1); var G = d.getClosestEdge(b, e, p, !0), H = d.getClosestEdge(k, m, p); if (-1 === G || -1 === H) return 0; for (var I = 0; I < 2; I++) { var J = G, K = H, L = b, M = k, N = c, O = l, P = e, Q = m, R = a, S = f; if (0 === I) { var T; T = J, J = K, K = T, T = L, L = M, M = T, T = N, N = O, O = T, T = P, P = Q, Q = T, T = R, R = S, S = T } for (var U = K; U < K + 2; U++) { var V = M.vertices[(U + M.vertices.length) % M.vertices.length]; g.rotate(q, V, Q), i(q, q, O); for (var W = 0, X = J - 1; X < J + 2; X++) { var Y = L.vertices[(X + L.vertices.length) % L.vertices.length], Z = L.vertices[(X + 1 + L.vertices.length) % L.vertices.length]; g.rotate(r, Y, P), g.rotate(s, Z, P), i(r, r, N), i(s, s, N), h(y, s, r), g.rotate90cw(E, y), g.normalize(E, E), h(D, q, r); var $ = j(E, D); (X === J && $ <= o || X !== J && $ <= 0) && W++ } if (W >= 3) { if (n) return !0; var _ = this.createContactEquation(R, S, L, M); F++; var Y = L.vertices[J % L.vertices.length], Z = L.vertices[(J + 1) % L.vertices.length]; g.rotate(r, Y, P), g.rotate(s, Z, P), i(r, r, N), i(s, s, N), h(y, s, r), g.rotate90cw(_.normalA, y), g.normalize(_.normalA, _.normalA), h(D, q, r); var $ = j(_.normalA, D); g.scale(C, _.normalA, $), h(_.contactPointA, q, N), h(_.contactPointA, _.contactPointA, C), i(_.contactPointA, _.contactPointA, N), h(_.contactPointA, _.contactPointA, R.position), h(_.contactPointB, q, O), i(_.contactPointB, _.contactPointB, O), h(_.contactPointB, _.contactPointB, S.position), this.contactEquations.push(_), this.enableFrictionReduction || this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(_)) } } } return this.enableFrictionReduction && this.enableFriction && F && this.frictionEquations.push(this.createFrictionFromAverage(F)), F }; var $ = g.fromValues(0, 0); d.projectConvexOntoAxis = function(a, b, c, d, e) { var f, h, i = null, k = null, l = $; g.rotate(l, d, -c); for (var m = 0; m < a.vertices.length; m++) f = a.vertices[m], h = j(f, l), (null === i || h > i) && (i = h), (null === k || h < k) && (k = h); if (k > i) { var n = k; k = i, i = n } var o = j(b, d); g.set(e, k + o, i + o) }; var _ = g.fromValues(0, 0), aa = g.fromValues(0, 0), ba = g.fromValues(0, 0), ca = g.fromValues(0, 0), da = g.fromValues(0, 0), ea = g.fromValues(0, 0); d.findSeparatingAxis = function(a, b, c, e, f, i, j) { var k = null, l = !1, m = !1, n = _, o = aa, p = ba, q = ca, s = da, t = ea; if (a instanceof r && e instanceof r) for (var u = 0; 2 !== u; u++) { var v = a, w = c; 1 === u && (v = e, w = i); for (var x = 0; 2 !== x; x++) { 0 === x ? g.set(q, 0, 1) : 1 === x && g.set(q, 1, 0), 0 !== w && g.rotate(q, q, w), d.projectConvexOntoAxis(a, b, c, q, s), d.projectConvexOntoAxis(e, f, i, q, t); var y = s, z = t; s[0] > t[0] && (z = s, y = t, !0); var A = z[0] - y[1]; l = A <= 0, (null === k || A > k) && (g.copy(j, q), k = A, m = l) } } else for (var u = 0; 2 !== u; u++) { var v = a, w = c; 1 === u && (v = e, w = i); for (var x = 0; x !== v.vertices.length; x++) { g.rotate(o, v.vertices[x], w), g.rotate(p, v.vertices[(x + 1) % v.vertices.length], w), h(n, p, o), g.rotate90cw(q, n), g.normalize(q, q), d.projectConvexOntoAxis(a, b, c, q, s), d.projectConvexOntoAxis(e, f, i, q, t); var y = s, z = t; s[0] > t[0] && (z = s, y = t, !0); var A = z[0] - y[1]; l = A <= 0, (null === k || A > k) && (g.copy(j, q), k = A, m = l) } } return m }; var fa = g.fromValues(0, 0), ga = g.fromValues(0, 0), ha = g.fromValues(0, 0); d.getClosestEdge = function(a, b, c, d) { var e = fa, f = ga, i = ha; g.rotate(e, c, -b), d && g.scale(e, e, -1); for (var k = -1, l = a.vertices.length, m = -1, n = 0; n !== l; n++) { h(f, a.vertices[(n + 1) % l], a.vertices[n % l]), g.rotate90cw(i, f), g.normalize(i, i); var o = j(i, e); (-1 === k || o > m) && (k = n % l, m = o) } return k }; var ia = g.create(), ja = g.create(), ka = g.create(), la = g.create(), ma = g.create(), na = g.create(), oa = g.create(); d.prototype[q.CIRCLE | q.HEIGHTFIELD] = d.prototype.circleHeightfield = function(a, b, c, d, e, f, j, k, l, m) { var n = f.heights, m = m || b.radius, o = f.elementWidth, p = ja, q = ia, r = ma, s = oa, t = na, u = ka, v = la, w = Math.floor((c[0] - m - j[0]) / o), x = Math.ceil((c[0] + m - j[0]) / o); w < 0 && (w = 0), x >= n.length && (x = n.length - 1); for (var y = n[w], z = n[x], A = w; A < x; A++) n[A] < z && (z = n[A]), n[A] > y && (y = n[A]); if (c[1] - m > y) return !l && 0; for (var B = !1, A = w; A < x; A++) { g.set(u, A * o, n[A]), g.set(v, (A + 1) * o, n[A + 1]), g.add(u, u, j), g.add(v, v, j), g.sub(t, v, u), g.rotate(t, t, Math.PI / 2), g.normalize(t, t), g.scale(q, t, -m), g.add(q, q, c), g.sub(p, q, u); var C = g.dot(p, t); if (q[0] >= u[0] && q[0] < v[0] && C <= 0) { if (l) return !0; B = !0, g.scale(p, t, -C), g.add(r, q, p), g.copy(s, t); var D = this.createContactEquation(e, a, f, b); g.copy(D.normalA, s), g.scale(D.contactPointB, D.normalA, -m), i(D.contactPointB, D.contactPointB, c), h(D.contactPointB, D.contactPointB, a.position), g.copy(D.contactPointA, r), g.sub(D.contactPointA, D.contactPointA, e.position), this.contactEquations.push(D), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(D)) } } if (B = !1, m > 0) for (var A = w; A <= x; A++) if (g.set(u, A * o, n[A]), g.add(u, u, j), g.sub(p, c, u), g.squaredLength(p) < Math.pow(m, 2)) { if (l) return !0; B = !0; var D = this.createContactEquation(e, a, f, b); g.copy(D.normalA, p), g.normalize(D.normalA, D.normalA), g.scale(D.contactPointB, D.normalA, -m), i(D.contactPointB, D.contactPointB, c), h(D.contactPointB, D.contactPointB, a.position), h(D.contactPointA, u, j), i(D.contactPointA, D.contactPointA, j), h(D.contactPointA, D.contactPointA, e.position), this.contactEquations.push(D), this.enableFriction && this.frictionEquations.push(this.createFrictionFromContact(D)) } return B ? 1 : 0 }; var pa = g.create(), qa = g.create(), ra = g.create(), sa = new p({ vertices: [g.create(), g.create(), g.create(), g.create()] }); d.prototype[q.BOX | q.HEIGHTFIELD] = d.prototype[q.CONVEX | q.HEIGHTFIELD] = d.prototype.convexHeightfield = function(a, b, c, d, e, f, h, i, j) { var k = f.heights, l = f.elementWidth, m = pa, n = qa, o = ra, p = sa, q = Math.floor((a.aabb.lowerBound[0] - h[0]) / l), r = Math.ceil((a.aabb.upperBound[0] - h[0]) / l); q < 0 && (q = 0), r >= k.length && (r = k.length - 1); for (var s = k[q], t = k[r], u = q; u < r; u++) k[u] < t && (t = k[u]), k[u] > s && (s = k[u]); if (a.aabb.lowerBound[1] > s) return !j && 0; for (var v = 0, u = q; u < r; u++) { g.set(m, u * l, k[u]), g.set(n, (u + 1) * l, k[u + 1]), g.add(m, m, h), g.add(n, n, h); g.set(o, .5 * (n[0] + m[0]), .5 * (n[1] + m[1] - 100)), g.sub(p.vertices[0], n, o), g.sub(p.vertices[1], m, o), g.copy(p.vertices[2], p.vertices[1]), g.copy(p.vertices[3], p.vertices[0]), p.vertices[2][1] -= 100, p.vertices[3][1] -= 100, v += this.convexConvex(a, b, c, d, e, p, o, 0, j) } return v } }, { "../equations/ContactEquation": 21, "../equations/Equation": 22, "../equations/FrictionEquation": 23, "../math/vec2": 30, "../objects/Body": 31, "../shapes/Box": 37, "../shapes/Circle": 39, "../shapes/Convex": 40, "../shapes/Shape": 45, "../utils/ContactEquationPool": 48, "../utils/FrictionEquationPool": 49, "../utils/TupleDictionary": 56, "../utils/Utils": 57 }], 11: [function(a, b, c) { function d(a) { a = a || {}, this.from = a.from ? f.fromValues(a.from[0], a.from[1]) : f.create(), this.to = a.to ? f.fromValues(a.to[0], a.to[1]) : f.create(), this.checkCollisionResponse = void 0 === a.checkCollisionResponse || a.checkCollisionResponse, this.skipBackfaces = !!a.skipBackfaces, this.collisionMask = void 0 !== a.collisionMask ? a.collisionMask : -1, this.collisionGroup = void 0 !== a.collisionGroup ? a.collisionGroup : -1, this.mode = void 0 !== a.mode ? a.mode : d.ANY, this.callback = a.callback || function(a) {}, this.direction = f.create(), this.length = 1, this.update() } function e(a, b, c) { f.sub(h, c, a); var d = f.dot(h, b); return f.scale(i, b, d), f.add(i, i, a), f.squaredDistance(c, i) } b.exports = d; var f = a("../math/vec2"); a("../collision/RaycastResult"), a("../shapes/Shape"), a("../collision/AABB"); d.prototype.constructor = d, d.CLOSEST = 1, d.ANY = 2, d.ALL = 4, d.prototype.update = function() { var a = this.direction; f.sub(a, this.to, this.from), this.length = f.length(a), f.normalize(a, a) }, d.prototype.intersectBodies = function(a, b) { for (var c = 0, d = b.length; !a.shouldStop(this) && c < d; c++) { var e = b[c], f = e.getAABB(); (f.overlapsRay(this) >= 0 || f.containsPoint(this.from)) && this.intersectBody(a, e) } }; var g = f.create(); d.prototype.intersectBody = function(a, b) { var c = this.checkCollisionResponse; if (!c || b.collisionResponse) for (var d = g, e = 0, h = b.shapes.length; e < h; e++) { var i = b.shapes[e]; if ((!c || i.collisionResponse) && (0 != (this.collisionGroup & i.collisionMask) && 0 != (i.collisionGroup & this.collisionMask))) { f.rotate(d, i.position, b.angle), f.add(d, d, b.position); var j = i.angle + b.angle; if (this.intersectShape(a, i, j, d, b), a.shouldStop(this)) break } } }, d.prototype.intersectShape = function(a, b, c, d, f) { e(this.from, this.direction, d) > b.boundingRadius * b.boundingRadius || (this._currentBody = f, this._currentShape = b, b.raycast(a, this, d, c), this._currentBody = this._currentShape = null) }, d.prototype.getAABB = function(a) { var b = this.to, c = this.from; f.set(a.lowerBound, Math.min(b[0], c[0]), Math.min(b[1], c[1])), f.set(a.upperBound, Math.max(b[0], c[0]), Math.max(b[1], c[1])) }; f.create(); d.prototype.reportIntersection = function(a, b, c, e) { var g = (this.from, this.to, this._currentShape), h = this._currentBody; if (!(this.skipBackfaces && f.dot(c, this.direction) > 0)) switch (this.mode) { case d.ALL: a.set(c, g, h, b, e), this.callback(a); break; case d.CLOSEST: (b < a.fraction || !a.hasHit()) && a.set(c, g, h, b, e); break; case d.ANY: a.set(c, g, h, b, e) } }; var h = f.create(), i = f.create() }, { "../collision/AABB": 7, "../collision/RaycastResult": 12, "../math/vec2": 30, "../shapes/Shape": 45 }], 12: [function(a, b, c) { function d() { this.normal = e.create(), this.shape = null, this.body = null, this.faceIndex = -1, this.fraction = -1, this.isStopped = !1 } var e = a("../math/vec2"), f = a("../collision/Ray"); b.exports = d, d.prototype.reset = function() { e.set(this.normal, 0, 0), this.shape = null, this.body = null, this.faceIndex = -1, this.fraction = -1, this.isStopped = !1 }, d.prototype.getHitDistance = function(a) { return e.distance(a.from, a.to) * this.fraction }, d.prototype.hasHit = function() { return -1 !== this.fraction }, d.prototype.getHitPoint = function(a, b) { e.lerp(a, b.from, b.to, this.fraction) }, d.prototype.stop = function() { this.isStopped = !0 }, d.prototype.shouldStop = function(a) { return this.isStopped || -1 !== this.fraction && a.mode === f.ANY }, d.prototype.set = function(a, b, c, d, f) { e.copy(this.normal, a), this.shape = b, this.body = c, this.fraction = d, this.faceIndex = f } }, { "../collision/Ray": 11, "../math/vec2": 30 }], 13: [function(a, b, c) { function d() { f.call(this, f.SAP), this.axisList = [], this.axisIndex = 0; var a = this; this._addBodyHandler = function(b) { a.axisList.push(b.body) }, this._removeBodyHandler = function(b) { var c = a.axisList.indexOf(b.body); - 1 !== c && a.axisList.splice(c, 1) } } var e = a("../utils/Utils"), f = a("../collision/Broadphase"); b.exports = d, d.prototype = new f, d.prototype.constructor = d, d.prototype.setWorld = function(a) { this.axisList.length = 0, e.appendArray(this.axisList, a.bodies), a.off("addBody", this._addBodyHandler).off("removeBody", this._removeBodyHandler), a.on("addBody", this._addBodyHandler).on("removeBody", this._removeBodyHandler), this.world = a }, d.sortAxisList = function(a, b) { b |= 0; for (var c = 1, d = a.length; c < d; c++) { for (var e = a[c], f = c - 1; f >= 0 && !(a[f].aabb.lowerBound[b] <= e.aabb.lowerBound[b]); f--) a[f + 1] = a[f]; a[f + 1] = e } return a }, d.prototype.sortList = function() { var a = this.axisList, b = this.axisIndex; d.sortAxisList(a, b) }, d.prototype.getCollisionPairs = function(a) { var b = this.axisList, c = this.result, d = this.axisIndex; c.length = 0; for (var e = b.length; e--;) { var g = b[e]; g.aabbNeedsUpdate && g.updateAABB() } this.sortList(); for (var h = 0, i = 0 | b.length; h !== i; h++) for (var j = b[h], k = h + 1; k < i; k++) { var l = b[k], m = l.aabb.lowerBound[d] <= j.aabb.upperBound[d]; if (!m) break; f.canCollide(j, l) && this.boundingVolumeCheck(j, l) && c.push(j, l) } return c }, d.prototype.aabbQuery = function(a, b, c) { c = c || [], this.sortList(); var d = this.axisIndex, e = "x"; 1 === d && (e = "y"), 2 === d && (e = "z"); for (var f = this.axisList, g = (b.lowerBound[e], b.upperBound[e], 0); g < f.length; g++) { var h = f[g]; h.aabbNeedsUpdate && h.updateAABB(), h.aabb.overlaps(b) && c.push(h) } return c } }, { "../collision/Broadphase": 8, "../utils/Utils": 57 }], 14: [function(a, b, c) { function d(a, b, c, d) { this.type = c, d = e.defaults(d, { collideConnected: !0, wakeUpBodies: !0 }), this.equations = [], this.bodyA = a, this.bodyB = b, this.collideConnected = d.collideConnected, d.wakeUpBodies && (a && a.wakeUp(), b && b.wakeUp()) } b.exports = d; var e = a("../utils/Utils"); d.prototype.update = function() { throw new Error("method update() not implmemented in this Constraint subclass!") }, d.DISTANCE = 1, d.GEAR = 2, d.LOCK = 3, d.PRISMATIC = 4, d.REVOLUTE = 5, d.prototype.setStiffness = function(a) { for (var b = this.equations, c = 0; c !== b.length; c++) { var d = b[c]; d.stiffness = a, d.needsUpdate = !0 } }, d.prototype.setRelaxation = function(a) { for (var b = this.equations, c = 0; c !== b.length; c++) { var d = b[c]; d.relaxation = a, d.needsUpdate = !0 } } }, { "../utils/Utils": 57 }], 15: [function(a, b, c) { function d(a, b, c) { c = h.defaults(c, { localAnchorA: [0, 0], localAnchorB: [0, 0] }), e.call(this, a, b, e.DISTANCE, c), this.localAnchorA = g.fromValues(c.localAnchorA[0], c.localAnchorA[1]), this.localAnchorB = g.fromValues(c.localAnchorB[0], c.localAnchorB[1]); var d = this.localAnchorA, i = this.localAnchorB; if (this.distance = 0, "number" == typeof c.distance) this.distance = c.distance; else { var j = g.create(), k = g.create(), l = g.create(); g.rotate(j, d, a.angle), g.rotate(k, i, b.angle), g.add(l, b.position, k), g.sub(l, l, j), g.sub(l, l, a.position), this.distance = g.length(l) } var m; m = void 0 === c.maxForce ? Number.MAX_VALUE : c.maxForce; var n = new f(a, b, -m, m); this.equations = [n], this.maxForce = m; var l = g.create(), o = g.create(), p = g.create(), q = this; n.computeGq = function() { var a = this.bodyA, b = this.bodyB, c = a.position, e = b.position; return g.rotate(o, d, a.angle), g.rotate(p, i, b.angle), g.add(l, e, p), g.sub(l, l, o), g.sub(l, l, c), g.length(l) - q.distance }, this.setMaxForce(m), this.upperLimitEnabled = !1, this.upperLimit = 1, this.lowerLimitEnabled = !1, this.lowerLimit = 0, this.position = 0 } var e = a("./Constraint"), f = a("../equations/Equation"), g = a("../math/vec2"), h = a("../utils/Utils"); b.exports = d, d.prototype = new e, d.prototype.constructor = d; var i = g.create(), j = g.create(), k = g.create(); d.prototype.update = function() { var a = this.equations[0], b = this.bodyA, c = this.bodyB, d = (this.distance, b.position), e = c.position, f = this.equations[0], h = a.G; g.rotate(j, this.localAnchorA, b.angle), g.rotate(k, this.localAnchorB, c.angle), g.add(i, e, k), g.sub(i, i, j), g.sub(i, i, d), this.position = g.length(i); var l = !1; if (this.upperLimitEnabled && this.position > this.upperLimit && (f.maxForce = 0, f.minForce = -this.maxForce, this.distance = this.upperLimit, l = !0), this.lowerLimitEnabled && this.position < this.lowerLimit && (f.maxForce = this.maxForce, f.minForce = 0, this.distance = this.lowerLimit, l = !0), (this.lowerLimitEnabled || this.upperLimitEnabled) && !l) return void(f.enabled = !1); f.enabled = !0, g.normalize(i, i); var m = g.crossLength(j, i), n = g.crossLength(k, i); h[0] = -i[0], h[1] = -i[1], h[2] = -m, h[3] = i[0], h[4] = i[1], h[5] = n }, d.prototype.setMaxForce = function(a) { var b = this.equations[0]; b.minForce = -a, b.maxForce = a }, d.prototype.getMaxForce = function() { return this.equations[0].maxForce } }, { "../equations/Equation": 22, "../math/vec2": 30, "../utils/Utils": 57, "./Constraint": 14 }], 16: [function(a, b, c) { function d(a, b, c) { c = c || {}, e.call(this, a, b, e.GEAR, c), this.ratio = void 0 !== c.ratio ? c.ratio : 1, this.angle = void 0 !== c.angle ? c.angle : b.angle - this.ratio * a.angle, c.angle = this.angle, c.ratio = this.ratio, this.equations = [new f(a, b, c)], void 0 !== c.maxTorque && this.setMaxTorque(c.maxTorque) } var e = a("./Constraint"), f = (a("../equations/Equation"), a("../equations/AngleLockEquation")); a("../math/vec2"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.update = function() { var a = this.equations[0]; a.ratio !== this.ratio && a.setRatio(this.ratio), a.angle = this.angle }, d.prototype.setMaxTorque = function(a) { this.equations[0].setMaxTorque(a) }, d.prototype.getMaxTorque = function(a) { return this.equations[0].maxForce } }, { "../equations/AngleLockEquation": 20, "../equations/Equation": 22, "../math/vec2": 30, "./Constraint": 14 }], 17: [function(a, b, c) { function d(a, b, c) { c = c || {}, e.call(this, a, b, e.LOCK, c); var d = void 0 === c.maxForce ? Number.MAX_VALUE : c.maxForce, h = (c.localAngleB, new g(a, b, -d, d)), i = new g(a, b, -d, d), j = new g(a, b, -d, d), k = f.create(), l = f.create(), m = this; h.computeGq = function() { return f.rotate(k, m.localOffsetB, a.angle), f.sub(l, b.position, a.position), f.sub(l, l, k), l[0] }, i.computeGq = function() { return f.rotate(k, m.localOffsetB, a.angle), f.sub(l, b.position, a.position), f.sub(l, l, k), l[1] }; var n = f.create(), o = f.create(); j.computeGq = function() { return f.rotate(n, m.localOffsetB, b.angle - m.localAngleB), f.scale(n, n, -1), f.sub(l, a.position, b.position), f.add(l, l, n), f.rotate(o, n, -Math.PI / 2), f.normalize(o, o), f.dot(l, o) }, this.localOffsetB = f.create(), c.localOffsetB ? f.copy(this.localOffsetB, c.localOffsetB) : (f.sub(this.localOffsetB, b.position, a.position), f.rotate(this.localOffsetB, this.localOffsetB, -a.angle)), this.localAngleB = 0, "number" == typeof c.localAngleB ? this.localAngleB = c.localAngleB : this.localAngleB = b.angle - a.angle, this.equations.push(h, i, j), this.setMaxForce(d) } var e = a("./Constraint"), f = a("../math/vec2"), g = a("../equations/Equation"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.setMaxForce = function(a) { for (var b = this.equations, c = 0; c < this.equations.length; c++) b[c].maxForce = a, b[c].minForce = -a }, d.prototype.getMaxForce = function() { return this.equations[0].maxForce }; var h = f.create(), i = f.create(), j = f.create(), k = f.fromValues(1, 0), l = f.fromValues(0, 1); d.prototype.update = function() { var a = this.equations[0], b = this.equations[1], c = this.equations[2], d = this.bodyA, e = this.bodyB; f.rotate(h, this.localOffsetB, d.angle), f.rotate(i, this.localOffsetB, e.angle - this.localAngleB), f.scale(i, i, -1), f.rotate(j, i, Math.PI / 2), f.normalize(j, j), a.G[0] = -1, a.G[1] = 0, a.G[2] = -f.crossLength(h, k), a.G[3] = 1, b.G[0] = 0, b.G[1] = -1, b.G[2] = -f.crossLength(h, l), b.G[4] = 1, c.G[0] = -j[0], c.G[1] = -j[1], c.G[3] = j[0], c.G[4] = j[1], c.G[5] = f.crossLength(i, j) } }, { "../equations/Equation": 22, "../math/vec2": 30, "./Constraint": 14 }], 18: [function(a, b, c) { function d(a, b, c) { c = c || {}, e.call(this, a, b, e.PRISMATIC, c); var d = h.fromValues(0, 0), j = h.fromValues(1, 0), k = h.fromValues(0, 0); c.localAnchorA && h.copy(d, c.localAnchorA), c.localAxisA && h.copy(j, c.localAxisA), c.localAnchorB && h.copy(k, c.localAnchorB), this.localAnchorA = d, this.localAnchorB = k, this.localAxisA = j; var l = this.maxForce = void 0 !== c.maxForce ? c.maxForce : Number.MAX_VALUE, m = new g(a, b, -l, l), n = new h.create, o = new h.create, p = new h.create, q = new h.create; if (m.computeGq = function() { return h.dot(p, q) }, m.updateJacobian = function() { var c = this.G, e = a.position, f = b.position; h.rotate(n, d, a.angle), h.rotate(o, k, b.angle), h.add(p, f, o), h.sub(p, p, e), h.sub(p, p, n), h.rotate(q, j, a.angle + Math.PI / 2), c[0] = -q[0], c[1] = -q[1], c[2] = -h.crossLength(n, q) + h.crossLength(q, p), c[3] = q[0], c[4] = q[1], c[5] = h.crossLength(o, q) }, this.equations.push(m), !c.disableRotationalLock) { var r = new i(a, b, -l, l); this.equations.push(r) } this.position = 0, this.velocity = 0, this.lowerLimitEnabled = void 0 !== c.lowerLimit, this.upperLimitEnabled = void 0 !== c.upperLimit, this.lowerLimit = void 0 !== c.lowerLimit ? c.lowerLimit : 0, this.upperLimit = void 0 !== c.upperLimit ? c.upperLimit : 1, this.upperLimitEquation = new f(a, b), this.lowerLimitEquation = new f(a, b), this.upperLimitEquation.minForce = this.lowerLimitEquation.minForce = 0, this.upperLimitEquation.maxForce = this.lowerLimitEquation.maxForce = l, this.motorEquation = new g(a, b), this.motorEnabled = !1, this.motorSpeed = 0; var s = this, t = this.motorEquation; t.computeGW; t.computeGq = function() { return 0 }, t.computeGW = function() { var a = this.G, b = this.bodyA, c = this.bodyB, d = b.velocity, e = c.velocity, f = b.angularVelocity, g = c.angularVelocity; return this.gmult(a, d, f, e, g) + s.motorSpeed } } var e = a("./Constraint"), f = a("../equations/ContactEquation"), g = a("../equations/Equation"), h = a("../math/vec2"), i = a("../equations/RotationalLockEquation"); b.exports = d, d.prototype = new e, d.prototype.constructor = d; var j = h.create(), k = h.create(), l = h.create(), m = h.create(), n = h.create(), o = h.create(); d.prototype.update = function() { var a = this.equations, b = a[0], c = this.upperLimit, d = this.lowerLimit, e = this.upperLimitEquation, f = this.lowerLimitEquation, g = this.bodyA, i = this.bodyB, p = this.localAxisA, q = this.localAnchorA, r = this.localAnchorB; b.updateJacobian(), h.rotate(j, p, g.angle), h.rotate(m, q, g.angle), h.add(k, m, g.position), h.rotate(n, r, i.angle), h.add(l, n, i.position); var s = this.position = h.dot(l, j) - h.dot(k, j); if (this.motorEnabled) { var t = this.motorEquation.G; t[0] = j[0], t[1] = j[1], t[2] = h.crossLength(j, n), t[3] = -j[0], t[4] = -j[1], t[5] = -h.crossLength(j, m) } if (this.upperLimitEnabled && s > c) h.scale(e.normalA, j, -1), h.sub(e.contactPointA, k, g.position), h.sub(e.contactPointB, l, i.position), h.scale(o, j, c), h.add(e.contactPointA, e.contactPointA, o), -1 === a.indexOf(e) && a.push(e); else { var u = a.indexOf(e); - 1 !== u && a.splice(u, 1) } if (this.lowerLimitEnabled && s < d) h.scale(f.normalA, j, 1), h.sub(f.contactPointA, k, g.position), h.sub(f.contactPointB, l, i.position), h.scale(o, j, d), h.sub(f.contactPointB, f.contactPointB, o), -1 === a.indexOf(f) && a.push(f); else { var u = a.indexOf(f); - 1 !== u && a.splice(u, 1) } }, d.prototype.enableMotor = function() { this.motorEnabled || (this.equations.push(this.motorEquation), this.motorEnabled = !0) }, d.prototype.disableMotor = function() { if (this.motorEnabled) { var a = this.equations.indexOf(this.motorEquation); this.equations.splice(a, 1), this.motorEnabled = !1 } }, d.prototype.setLimits = function(a, b) { "number" == typeof a ? (this.lowerLimit = a, this.lowerLimitEnabled = !0) : (this.lowerLimit = a, this.lowerLimitEnabled = !1), "number" == typeof b ? (this.upperLimit = b, this.upperLimitEnabled = !0) : (this.upperLimit = b, this.upperLimitEnabled = !1) } }, { "../equations/ContactEquation": 21, "../equations/Equation": 22, "../equations/RotationalLockEquation": 24, "../math/vec2": 30, "./Constraint": 14 }], 19: [function(a, b, c) { function d(a, b, c) { c = c || {}, e.call(this, a, b, e.REVOLUTE, c); var d = this.maxForce = void 0 !== c.maxForce ? c.maxForce : Number.MAX_VALUE; this.pivotA = i.create(), this.pivotB = i.create(), c.worldPivot ? (i.sub(this.pivotA, c.worldPivot, a.position), i.sub(this.pivotB, c.worldPivot, b.position), i.rotate(this.pivotA, this.pivotA, -a.angle), i.rotate(this.pivotB, this.pivotB, -b.angle)) : (i.copy(this.pivotA, c.localPivotA), i.copy(this.pivotB, c.localPivotB)); var o = this.equations = [new f(a, b, -d, d), new f(a, b, -d, d)], p = o[0], q = o[1], r = this; p.computeGq = function() { return i.rotate(j, r.pivotA, a.angle), i.rotate(k, r.pivotB, b.angle), i.add(n, b.position, k), i.sub(n, n, a.position), i.sub(n, n, j), i.dot(n, l) }, q.computeGq = function() { return i.rotate(j, r.pivotA, a.angle), i.rotate(k, r.pivotB, b.angle), i.add(n, b.position, k), i.sub(n, n, a.position), i.sub(n, n, j), i.dot(n, m) }, q.minForce = p.minForce = -d, q.maxForce = p.maxForce = d, this.motorEquation = new g(a, b), this.motorEnabled = !1, this.angle = 0, this.lowerLimitEnabled = !1, this.upperLimitEnabled = !1, this.lowerLimit = 0, this.upperLimit = 0, this.upperLimitEquation = new h(a, b), this.lowerLimitEquation = new h(a, b), this.upperLimitEquation.minForce = 0, this.lowerLimitEquation.maxForce = 0 } var e = a("./Constraint"), f = a("../equations/Equation"), g = a("../equations/RotationalVelocityEquation"), h = a("../equations/RotationalLockEquation"), i = a("../math/vec2"); b.exports = d; var j = i.create(), k = i.create(), l = i.fromValues(1, 0), m = i.fromValues(0, 1), n = i.create(); d.prototype = new e, d.prototype.constructor = d, d.prototype.setLimits = function(a, b) { "number" == typeof a ? (this.lowerLimit = a, this.lowerLimitEnabled = !0) : (this.lowerLimit = a, this.lowerLimitEnabled = !1), "number" == typeof b ? (this.upperLimit = b, this.upperLimitEnabled = !0) : (this.upperLimit = b, this.upperLimitEnabled = !1) }, d.prototype.update = function() { var a = this.bodyA, b = this.bodyB, c = this.pivotA, d = this.pivotB, e = this.equations, f = (e[0], e[1], e[0]), g = e[1], h = this.upperLimit, n = this.lowerLimit, o = this.upperLimitEquation, p = this.lowerLimitEquation, q = this.angle = b.angle - a.angle; if (this.upperLimitEnabled && q > h) o.angle = h, -1 === e.indexOf(o) && e.push(o); else { var r = e.indexOf(o); - 1 !== r && e.splice(r, 1) } if (this.lowerLimitEnabled && q < n) p.angle = n, -1 === e.indexOf(p) && e.push(p); else { var r = e.indexOf(p); - 1 !== r && e.splice(r, 1) } i.rotate(j, c, a.angle), i.rotate(k, d, b.angle), f.G[0] = -1, f.G[1] = 0, f.G[2] = -i.crossLength(j, l), f.G[3] = 1, f.G[4] = 0, f.G[5] = i.crossLength(k, l), g.G[0] = 0, g.G[1] = -1, g.G[2] = -i.crossLength(j, m), g.G[3] = 0, g.G[4] = 1, g.G[5] = i.crossLength(k, m) }, d.prototype.enableMotor = function() { this.motorEnabled || (this.equations.push(this.motorEquation), this.motorEnabled = !0) }, d.prototype.disableMotor = function() { if (this.motorEnabled) { var a = this.equations.indexOf(this.motorEquation); this.equations.splice(a, 1), this.motorEnabled = !1 } }, d.prototype.motorIsEnabled = function() { return !!this.motorEnabled }, d.prototype.setMotorSpeed = function(a) { if (this.motorEnabled) { var b = this.equations.indexOf(this.motorEquation); this.equations[b].relativeVelocity = a } }, d.prototype.getMotorSpeed = function() { return !!this.motorEnabled && this.motorEquation.relativeVelocity } }, { "../equations/Equation": 22, "../equations/RotationalLockEquation": 24, "../equations/RotationalVelocityEquation": 25, "../math/vec2": 30, "./Constraint": 14 }], 20: [function(a, b, c) { function d(a, b, c) { c = c || {}, e.call(this, a, b, -Number.MAX_VALUE, Number.MAX_VALUE), this.angle = c.angle || 0, this.ratio = "number" == typeof c.ratio ? c.ratio : 1, this.setRatio(this.ratio) } var e = a("./Equation"); a("../math/vec2"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.computeGq = function() { return this.ratio * this.bodyA.angle - this.bodyB.angle + this.angle }, d.prototype.setRatio = function(a) { var b = this.G; b[2] = a, b[5] = -1, this.ratio = a }, d.prototype.setMaxTorque = function(a) { this.maxForce = a, this.minForce = -a } }, { "../math/vec2": 30, "./Equation": 22 }], 21: [function(a, b, c) { function d(a, b) { e.call(this, a, b, 0, Number.MAX_VALUE), this.contactPointA = f.create(), this.penetrationVec = f.create(), this.contactPointB = f.create(), this.normalA = f.create(), this.restitution = 0, this.firstImpact = !1, this.shapeA = null, this.shapeB = null } var e = a("./Equation"), f = a("../math/vec2"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.computeB = function(a, b, c) { var d = this.bodyA, e = this.bodyB, g = this.contactPointA, h = this.contactPointB, i = d.position, j = e.position, k = this.penetrationVec, l = this.normalA, m = this.G, n = f.crossLength(g, l), o = f.crossLength(h, l); m[0] = -l[0], m[1] = -l[1], m[2] = -n, m[3] = l[0], m[4] = l[1], m[5] = o, f.add(k, j, h), f.sub(k, k, i), f.sub(k, k, g); var p, q; return this.firstImpact && 0 !== this.restitution ? (q = 0, p = 1 / b * (1 + this.restitution) * this.computeGW()) : (q = f.dot(l, k) + this.offset, p = this.computeGW()), -q * a - p * b - c * this.computeGiMf() } }, { "../math/vec2": 30, "./Equation": 22 }], 22: [function(a, b, c) { function d(a, b, c, e) { this.minForce = void 0 === c ? -Number.MAX_VALUE : c, this.maxForce = void 0 === e ? Number.MAX_VALUE : e, this.bodyA = a, this.bodyB = b, this.stiffness = d.DEFAULT_STIFFNESS, this.relaxation = d.DEFAULT_RELAXATION, this.G = new f.ARRAY_TYPE(6); for (var g = 0; g < 6; g++) this.G[g] = 0; this.offset = 0, this.a = 0, this.b = 0, this.epsilon = 0, this.timeStep = 1 / 60, this.needsUpdate = !0, this.multiplier = 0, this.relativeVelocity = 0, this.enabled = !0 } b.exports = d; var e = a("../math/vec2"), f = a("../utils/Utils"); a("../objects/Body"); d.prototype.constructor = d, d.DEFAULT_STIFFNESS = 1e6, d.DEFAULT_RELAXATION = 4, d.prototype.update = function() { var a = this.stiffness, b = this.relaxation, c = this.timeStep; this.a = 4 / (c * (1 + 4 * b)), this.b = 4 * b / (1 + 4 * b), this.epsilon = 4 / (c * c * a * (1 + 4 * b)), this.needsUpdate = !1 }, d.prototype.gmult = function(a, b, c, d, e) { return a[0] * b[0] + a[1] * b[1] + a[2] * c + a[3] * d[0] + a[4] * d[1] + a[5] * e }, d.prototype.computeB = function(a, b, c) { var d = this.computeGW(); return -this.computeGq() * a - d * b - this.computeGiMf() * c }; var g = e.create(), h = e.create(); d.prototype.computeGq = function() { var a = this.G, b = this.bodyA, c = this.bodyB, d = (b.position, c.position, b.angle), e = c.angle; return this.gmult(a, g, d, h, e) + this.offset }, d.prototype.computeGW = function() { var a = this.G, b = this.bodyA, c = this.bodyB, d = b.velocity, e = c.velocity, f = b.angularVelocity, g = c.angularVelocity; return this.gmult(a, d, f, e, g) + this.relativeVelocity }, d.prototype.computeGWlambda = function() { var a = this.G, b = this.bodyA, c = this.bodyB, d = b.vlambda, e = c.vlambda, f = b.wlambda, g = c.wlambda; return this.gmult(a, d, f, e, g) }; var i = e.create(), j = e.create(); d.prototype.computeGiMf = function() { var a = this.bodyA, b = this.bodyB, c = a.force, d = a.angularForce, f = b.force, g = b.angularForce, h = a.invMassSolve, k = b.invMassSolve, l = a.invInertiaSolve, m = b.invInertiaSolve, n = this.G; return e.scale(i, c, h), e.multiply(i, a.massMultiplier, i), e.scale(j, f, k), e.multiply(j, b.massMultiplier, j), this.gmult(n, i, d * l, j, g * m) }, d.prototype.computeGiMGt = function() { var a = this.bodyA, b = this.bodyB, c = a.invMassSolve, d = b.invMassSolve, e = a.invInertiaSolve, f = b.invInertiaSolve, g = this.G; return g[0] * g[0] * c * a.massMultiplier[0] + g[1] * g[1] * c * a.massMultiplier[1] + g[2] * g[2] * e + g[3] * g[3] * d * b.massMultiplier[0] + g[4] * g[4] * d * b.massMultiplier[1] + g[5] * g[5] * f }; var k = e.create(), l = e.create(), m = e.create(); e.create(), e.create(), e.create(); d.prototype.addToWlambda = function(a) { var b = this.bodyA, c = this.bodyB, d = k, f = l, g = m, h = b.invMassSolve, i = c.invMassSolve, j = b.invInertiaSolve, n = c.invInertiaSolve, o = this.G; f[0] = o[0], f[1] = o[1], g[0] = o[3], g[1] = o[4], e.scale(d, f, h * a), e.multiply(d, d, b.massMultiplier), e.add(b.vlambda, b.vlambda, d), b.wlambda += j * o[2] * a, e.scale(d, g, i * a), e.multiply(d, d, c.massMultiplier), e.add(c.vlambda, c.vlambda, d), c.wlambda += n * o[5] * a }, d.prototype.computeInvC = function(a) { return 1 / (this.computeGiMGt() + a) } }, { "../math/vec2": 30, "../objects/Body": 31, "../utils/Utils": 57 }], 23: [function(a, b, c) { function d(a, b, c) { f.call(this, a, b, -c, c), this.contactPointA = e.create(), this.contactPointB = e.create(), this.t = e.create(), this.contactEquations = [], this.shapeA = null, this.shapeB = null, this.frictionCoefficient = .3 } var e = a("../math/vec2"), f = a("./Equation"); a("../utils/Utils"); b.exports = d, d.prototype = new f, d.prototype.constructor = d, d.prototype.setSlipForce = function(a) { this.maxForce = a, this.minForce = -a }, d.prototype.getSlipForce = function() { return this.maxForce }, d.prototype.computeB = function(a, b, c) { var d = (this.bodyA, this.bodyB, this.contactPointA), f = this.contactPointB, g = this.t, h = this.G; return h[0] = -g[0], h[1] = -g[1], h[2] = -e.crossLength(d, g), h[3] = g[0], h[4] = g[1], h[5] = e.crossLength(f, g), -this.computeGW() * b - c * this.computeGiMf() } }, { "../math/vec2": 30, "../utils/Utils": 57, "./Equation": 22 }], 24: [function(a, b, c) { function d(a, b, c) { c = c || {}, e.call(this, a, b, -Number.MAX_VALUE, Number.MAX_VALUE), this.angle = c.angle || 0; var d = this.G; d[2] = 1, d[5] = -1 } var e = a("./Equation"), f = a("../math/vec2"); b.exports = d, d.prototype = new e, d.prototype.constructor = d; var g = f.create(), h = f.create(), i = f.fromValues(1, 0), j = f.fromValues(0, 1); d.prototype.computeGq = function() { return f.rotate(g, i, this.bodyA.angle + this.angle), f.rotate(h, j, this.bodyB.angle), f.dot(g, h) } }, { "../math/vec2": 30, "./Equation": 22 }], 25: [function(a, b, c) { function d(a, b) { e.call(this, a, b, -Number.MAX_VALUE, Number.MAX_VALUE), this.relativeVelocity = 1, this.ratio = 1 } var e = a("./Equation"); a("../math/vec2"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.computeB = function(a, b, c) { var d = this.G; d[2] = -1, d[5] = this.ratio; var e = this.computeGiMf(); return -this.computeGW() * b - c * e } }, { "../math/vec2": 30, "./Equation": 22 }], 26: [function(a, b, c) { var d = function() {}; b.exports = d, d.prototype = { constructor: d, on: function(a, b, c) { b.context = c || this, void 0 === this._listeners && (this._listeners = {}); var d = this._listeners; return void 0 === d[a] && (d[a] = []), -1 === d[a].indexOf(b) && d[a].push(b), this }, has: function(a, b) { if (void 0 === this._listeners) return !1; var c = this._listeners; if (b) { if (void 0 !== c[a] && -1 !== c[a].indexOf(b)) return !0 } else if (void 0 !== c[a]) return !0; return !1 }, off: function(a, b) { if (void 0 === this._listeners) return this; var c = this._listeners, d = c[a].indexOf(b); return -1 !== d && c[a].splice(d, 1), this }, emit: function(a) { if (void 0 === this._listeners) return this; var b = this._listeners, c = b[a.type]; if (void 0 !== c) { a.target = this; for (var d = 0, e = c.length; d < e; d++) { var f = c[d]; f.call(f.context, a) } } return this } } }, {}], 27: [function(a, b, c) { function d(a, b, c) { if (c = c || {}, !(a instanceof e && b instanceof e)) throw new Error("First two arguments must be Material instances."); this.id = d.idCounter++, this.materialA = a, this.materialB = b, this.friction = void 0 !== c.friction ? Number(c.friction) : .3, this.restitution = void 0 !== c.restitution ? Number(c.restitution) : 0, this.stiffness = void 0 !== c.stiffness ? Number(c.stiffness) : f.DEFAULT_STIFFNESS, this.relaxation = void 0 !== c.relaxation ? Number(c.relaxation) : f.DEFAULT_RELAXATION, this.frictionStiffness = void 0 !== c.frictionStiffness ? Number(c.frictionStiffness) : f.DEFAULT_STIFFNESS, this.frictionRelaxation = void 0 !== c.frictionRelaxation ? Number(c.frictionRelaxation) : f.DEFAULT_RELAXATION, this.surfaceVelocity = void 0 !== c.surfaceVelocity ? Number(c.surfaceVelocity) : 0, this.contactSkinSize = .005 } var e = a("./Material"), f = a("../equations/Equation"); b.exports = d, d.idCounter = 0 }, { "../equations/Equation": 22, "./Material": 28 }], 28: [function(a, b, c) { function d(a) { this.id = a || d.idCounter++ } b.exports = d, d.idCounter = 0 }, {}], 29: [function(a, b, c) { var d = {}; d.GetArea = function(a) { if (a.length < 6) return 0; for (var b = a.length - 2, c = 0, d = 0; d < b; d += 2) c += (a[d + 2] - a[d]) * (a[d + 1] + a[d + 3]); return .5 * -(c += (a[0] - a[b]) * (a[b + 1] + a[1])) }, d.Triangulate = function(a) { var b = a.length >> 1; if (b < 3) return []; for (var c = [], e = [], f = 0; f < b; f++) e.push(f); for (var f = 0, g = b; g > 3;) { var h = e[(f + 0) % g], i = e[(f + 1) % g], j = e[(f + 2) % g], k = a[2 * h], l = a[2 * h + 1], m = a[2 * i], n = a[2 * i + 1], o = a[2 * j], p = a[2 * j + 1], q = !1; if (d._convex(k, l, m, n, o, p)) { q = !0; for (var r = 0; r < g; r++) { var s = e[r]; if (s != h && s != i && s != j && d._PointInTriangle(a[2 * s], a[2 * s + 1], k, l, m, n, o, p)) { q = !1; break } } } if (q) c.push(h, i, j), e.splice((f + 1) % g, 1), g--, f = 0; else if (f++ > 3 * g) break } return c.push(e[0], e[1], e[2]), c }, d._PointInTriangle = function(a, b, c, d, e, f, g, h) { var i = g - c, j = h - d, k = e - c, l = f - d, m = a - c, n = b - d, o = i * i + j * j, p = i * k + j * l, q = i * m + j * n, r = k * k + l * l, s = k * m + l * n, t = 1 / (o * r - p * p), u = (r * q - p * s) * t, v = (o * s - p * q) * t; return u >= 0 && v >= 0 && u + v < 1 }, d._convex = function(a, b, c, d, e, f) { return (b - d) * (e - c) + (c - a) * (f - d) >= 0 }, b.exports = d }, {}], 30: [function(a, b, c) { var d = b.exports = {}, e = a("../utils/Utils"); d.crossLength = function(a, b) { return a[0] * b[1] - a[1] * b[0] }, d.crossVZ = function(a, b, c) { return d.rotate(a, b, -Math.PI / 2), d.scale(a, a, c), a }, d.crossZV = function(a, b, c) { return d.rotate(a, c, Math.PI / 2), d.scale(a, a, b), a }, d.rotate = function(a, b, c) { if (0 !== c) { var d = Math.cos(c), e = Math.sin(c), f = b[0], g = b[1]; a[0] = d * f - e * g, a[1] = e * f + d * g } else a[0] = b[0], a[1] = b[1] }, d.rotate90cw = function(a, b) { var c = b[0], d = b[1]; a[0] = d, a[1] = -c }, d.toLocalFrame = function(a, b, c, e) { d.copy(a, b), d.sub(a, a, c), d.rotate(a, a, -e) }, d.toGlobalFrame = function(a, b, c, e) { d.copy(a, b), d.rotate(a, a, e), d.add(a, a, c) }, d.vectorToLocalFrame = function(a, b, c) { d.rotate(a, b, -c) }, d.vectorToGlobalFrame = function(a, b, c) { d.rotate(a, b, c) }, d.centroid = function(a, b, c, e) { return d.add(a, b, c), d.add(a, a, e), d.scale(a, a, 1 / 3), a }, d.create = function() { var a = new e.ARRAY_TYPE(2); return a[0] = 0, a[1] = 0, a }, d.clone = function(a) { var b = new e.ARRAY_TYPE(2); return b[0] = a[0], b[1] = a[1], b }, d.fromValues = function(a, b) { var c = new e.ARRAY_TYPE(2); return c[0] = a, c[1] = b, c }, d.copy = function(a, b) { return a[0] = b[0], a[1] = b[1], a }, d.set = function(a, b, c) { return a[0] = b, a[1] = c, a }, d.add = function(a, b, c) { return a[0] = b[0] + c[0], a[1] = b[1] + c[1], a }, d.subtract = function(a, b, c) { return a[0] = b[0] - c[0], a[1] = b[1] - c[1], a }, d.sub = d.subtract, d.multiply = function(a, b, c) { return a[0] = b[0] * c[0], a[1] = b[1] * c[1], a }, d.mul = d.multiply, d.divide = function(a, b, c) { return a[0] = b[0] / c[0], a[1] = b[1] / c[1], a }, d.div = d.divide, d.scale = function(a, b, c) { return a[0] = b[0] * c, a[1] = b[1] * c, a }, d.distance = function(a, b) { var c = b[0] - a[0], d = b[1] - a[1]; return Math.sqrt(c * c + d * d) }, d.dist = d.distance, d.squaredDistance = function(a, b) { var c = b[0] - a[0], d = b[1] - a[1]; return c * c + d * d }, d.sqrDist = d.squaredDistance, d.length = function(a) { var b = a[0], c = a[1]; return Math.sqrt(b * b + c * c) }, d.len = d.length, d.squaredLength = function(a) { var b = a[0], c = a[1]; return b * b + c * c }, d.sqrLen = d.squaredLength, d.negate = function(a, b) { return a[0] = -b[0], a[1] = -b[1], a }, d.normalize = function(a, b) { var c = b[0], d = b[1], e = c * c + d * d; return e > 0 && (e = 1 / Math.sqrt(e), a[0] = b[0] * e, a[1] = b[1] * e), a }, d.dot = function(a, b) { return a[0] * b[0] + a[1] * b[1] }, d.str = function(a) { return "vec2(" + a[0] + ", " + a[1] + ")" }, d.lerp = function(a, b, c, d) { var e = b[0], f = b[1]; return a[0] = e + d * (c[0] - e), a[1] = f + d * (c[1] - f), a }, d.reflect = function(a, b, c) { var d = b[0] * c[0] + b[1] * c[1]; a[0] = b[0] - 2 * c[0] * d, a[1] = b[1] - 2 * c[1] * d }, d.getLineSegmentsIntersection = function(a, b, c, e, f) { var g = d.getLineSegmentsIntersectionFraction(b, c, e, f); return !(g < 0) && (a[0] = b[0] + g * (c[0] - b[0]), a[1] = b[1] + g * (c[1] - b[1]), !0) }, d.getLineSegmentsIntersectionFraction = function(a, b, c, d) { var e, f, g = b[0] - a[0], h = b[1] - a[1], i = d[0] - c[0], j = d[1] - c[1]; return e = (-h * (a[0] - c[0]) + g * (a[1] - c[1])) / (-i * h + g * j), f = (i * (a[1] - c[1]) - j * (a[0] - c[0])) / (-i * h + g * j), e >= 0 && e <= 1 && f >= 0 && f <= 1 ? f : -1 } }, { "../utils/Utils": 57 }], 31: [function(a, b, c) { function d(a) { a = a || {}, k.call(this), this.id = a.id || ++d._idCounter, this.world = null, this.shapes = [], this.mass = a.mass || 0, this.invMass = 0, this.inertia = 0, this.invInertia = 0, this.invMassSolve = 0, this.invInertiaSolve = 0, this.fixedRotation = !!a.fixedRotation, this.fixedX = !!a.fixedX, this.fixedY = !!a.fixedY, this.massMultiplier = e.create(), this.position = e.fromValues(0, 0), a.position && e.copy(this.position, a.position), this.interpolatedPosition = e.fromValues(0, 0), this.interpolatedAngle = 0, this.previousPosition = e.fromValues(0, 0), this.previousAngle = 0, this.velocity = e.fromValues(0, 0), a.velocity && e.copy(this.velocity, a.velocity), this.vlambda = e.fromValues(0, 0), this.wlambda = 0, this.angle = a.angle || 0, this.angularVelocity = a.angularVelocity || 0, this.force = e.create(), a.force && e.copy(this.force, a.force), this.angularForce = a.angularForce || 0, this.damping = "number" == typeof a.damping ? a.damping : .1, this.angularDamping = "number" == typeof a.angularDamping ? a.angularDamping : .1, this.type = d.STATIC, void 0 !== a.type ? this.type = a.type : a.mass ? this.type = d.DYNAMIC : this.type = d.STATIC, this.boundingRadius = 0, this.aabb = new j, this.aabbNeedsUpdate = !0, this.allowSleep = void 0 === a.allowSleep || a.allowSleep, this.wantsToSleep = !1, this.sleepState = d.AWAKE, this.sleepSpeedLimit = void 0 !== a.sleepSpeedLimit ? a.sleepSpeedLimit : .2, this.sleepTimeLimit = void 0 !== a.sleepTimeLimit ? a.sleepTimeLimit : 1, this.gravityScale = void 0 !== a.gravityScale ? a.gravityScale : 1, this.collisionResponse = void 0 === a.collisionResponse || a.collisionResponse, this.idleTime = 0, this.timeLastSleepy = 0, this.ccdSpeedThreshold = void 0 !== a.ccdSpeedThreshold ? a.ccdSpeedThreshold : -1, this.ccdIterations = void 0 !== a.ccdIterations ? a.ccdIterations : 10, this.concavePath = null, this._wakeUpAfterNarrowphase = !1, this.updateMassProperties() } var e = a("../math/vec2"), f = a("poly-decomp"), g = a("../shapes/Convex"), h = a("../collision/RaycastResult"), i = a("../collision/Ray"), j = a("../collision/AABB"), k = a("../events/EventEmitter"); b.exports = d, d.prototype = new k, d.prototype.constructor = d, d._idCounter = 0, d.prototype.updateSolveMassProperties = function() { this.sleepState === d.SLEEPING || this.type === d.KINEMATIC ? (this.invMassSolve = 0, this.invInertiaSolve = 0) : (this.invMassSolve = this.invMass, this.invInertiaSolve = this.invInertia) }, d.prototype.setDensity = function(a) { var b = this.getArea(); this.mass = b * a, this.updateMassProperties() }, d.prototype.getArea = function() { for (var a = 0, b = 0; b < this.shapes.length; b++) a += this.shapes[b].area; return a }, d.prototype.getAABB = function() { return this.aabbNeedsUpdate && this.updateAABB(), this.aabb }; var l = new j, m = e.create(); d.prototype.updateAABB = function() { for (var a = this.shapes, b = a.length, c = m, d = this.angle, f = 0; f !== b; f++) { var g = a[f], h = g.angle + d; e.rotate(c, g.position, d), e.add(c, c, this.position), g.computeAABB(l, c, h), 0 === f ? this.aabb.copy(l) : this.aabb.extend(l) } this.aabbNeedsUpdate = !1 }, d.prototype.updateBoundingRadius = function() { for (var a = this.shapes, b = a.length, c = 0, d = 0; d !== b; d++) { var f = a[d], g = e.length(f.position), h = f.boundingRadius; g + h > c && (c = g + h) } this.boundingRadius = c }, d.prototype.addShape = function(a, b, c) { if (a.body) throw new Error("A shape can only be added to one body."); a.body = this, b ? e.copy(a.position, b) : e.set(a.position, 0, 0), a.angle = c || 0, this.shapes.push(a), this.updateMassProperties(), this.updateBoundingRadius(), this.aabbNeedsUpdate = !0 }, d.prototype.removeShape = function(a) { var b = this.shapes.indexOf(a); return -1 !== b && (this.shapes.splice(b, 1), this.aabbNeedsUpdate = !0, a.body = null, !0) }, d.prototype.updateMassProperties = function() { if (this.type === d.STATIC || this.type === d.KINEMATIC) this.mass = Number.MAX_VALUE, this.invMass = 0, this.inertia = Number.MAX_VALUE, this.invInertia = 0; else { var a = this.shapes, b = a.length, c = this.mass / b, f = 0; if (this.fixedRotation) this.inertia = Number.MAX_VALUE, this.invInertia = 0; else { for (var g = 0; g < b; g++) { var h = a[g], i = e.squaredLength(h.position); f += h.computeMomentOfInertia(c) + c * i } this.inertia = f, this.invInertia = f > 0 ? 1 / f : 0 } this.invMass = 1 / this.mass, e.set(this.massMultiplier, this.fixedX ? 0 : 1, this.fixedY ? 0 : 1) } }; e.create(); d.prototype.applyForce = function(a, b) { if (e.add(this.force, this.force, a), b) { var c = e.crossLength(b, a); this.angularForce += c } }; var n = e.create(), o = e.create(), p = e.create(); d.prototype.applyForceLocal = function(a, b) { b = b || p; var c = n, d = o; this.vectorToWorldFrame(c, a), this.vectorToWorldFrame(d, b), this.applyForce(c, d) }; var q = e.create(); d.prototype.applyImpulse = function(a, b) { if (this.type === d.DYNAMIC) { var c = q; if (e.scale(c, a, this.invMass), e.multiply(c, this.massMultiplier, c), e.add(this.velocity, c, this.velocity), b) { var f = e.crossLength(b, a); f *= this.invInertia, this.angularVelocity += f } } }; var r = e.create(), s = e.create(), t = e.create(); d.prototype.applyImpulseLocal = function(a, b) { b = b || t; var c = r, d = s; this.vectorToWorldFrame(c, a), this.vectorToWorldFrame(d, b), this.applyImpulse(c, d) }, d.prototype.toLocalFrame = function(a, b) { e.toLocalFrame(a, b, this.position, this.angle) }, d.prototype.toWorldFrame = function(a, b) { e.toGlobalFrame(a, b, this.position, this.angle) }, d.prototype.vectorToLocalFrame = function(a, b) { e.vectorToLocalFrame(a, b, this.angle) }, d.prototype.vectorToWorldFrame = function(a, b) { e.vectorToGlobalFrame(a, b, this.angle) }, d.prototype.fromPolygon = function(a, b) { b = b || {}; for (var c = this.shapes.length; c >= 0; --c) this.removeShape(this.shapes[c]); var d = new f.Polygon; if (d.vertices = a, d.makeCCW(), "number" == typeof b.removeCollinearPoints && d.removeCollinearPoints(b.removeCollinearPoints), void 0 === b.skipSimpleCheck && !d.isSimple()) return !1; this.concavePath = d.vertices.slice(0); for (var c = 0; c < this.concavePath.length; c++) { var h = [0, 0]; e.copy(h, this.concavePath[c]), this.concavePath[c] = h } var i; i = b.optimalDecomp ? d.decomp() : d.quickDecomp(); for (var j = e.create(), c = 0; c !== i.length; c++) { for (var k = new g({ vertices: i[c].vertices }), l = 0; l !== k.vertices.length; l++) { var h = k.vertices[l]; e.sub(h, h, k.centerOfMass) } e.scale(j, k.centerOfMass, 1), k.updateTriangles(), k.updateCenterOfMass(), k.updateBoundingRadius(), this.addShape(k, j) } return this.adjustCenterOfMass(), this.aabbNeedsUpdate = !0, !0 }; var u = (e.fromValues(0, 0), e.fromValues(0, 0)), v = e.fromValues(0, 0), w = e.fromValues(0, 0); d.prototype.adjustCenterOfMass = function() { var a = u, b = v, c = w, d = 0; e.set(b, 0, 0); for (var f = 0; f !== this.shapes.length; f++) { var g = this.shapes[f]; e.scale(a, g.position, g.area), e.add(b, b, a), d += g.area } e.scale(c, b, 1 / d); for (var f = 0; f !== this.shapes.length; f++) { var g = this.shapes[f]; e.sub(g.position, g.position, c) } e.add(this.position, this.position, c); for (var f = 0; this.concavePath && f < this.concavePath.length; f++) e.sub(this.concavePath[f], this.concavePath[f], c); this.updateMassProperties(), this.updateBoundingRadius() }, d.prototype.setZeroForce = function() { e.set(this.force, 0, 0), this.angularForce = 0 }, d.prototype.resetConstraintVelocity = function() { var a = this, b = a.vlambda; e.set(b, 0, 0), a.wlambda = 0 }, d.prototype.addConstraintVelocity = function() { var a = this, b = a.velocity; e.add(b, b, a.vlambda), a.angularVelocity += a.wlambda }, d.prototype.applyDamping = function(a) { if (this.type === d.DYNAMIC) { var b = this.velocity; e.scale(b, b, Math.pow(1 - this.damping, a)), this.angularVelocity *= Math.pow(1 - this.angularDamping, a) } }, d.prototype.wakeUp = function() { var a = this.sleepState; this.sleepState = d.AWAKE, this.idleTime = 0, a !== d.AWAKE && this.emit(d.wakeUpEvent) }, d.prototype.sleep = function() { this.sleepState = d.SLEEPING, this.angularVelocity = 0, this.angularForce = 0, e.set(this.velocity, 0, 0), e.set(this.force, 0, 0), this.emit(d.sleepEvent) }, d.prototype.sleepTick = function(a, b, c) { if (this.allowSleep && this.type !== d.SLEEPING) { this.wantsToSleep = !1; this.sleepState; e.squaredLength(this.velocity) + Math.pow(this.angularVelocity, 2) >= Math.pow(this.sleepSpeedLimit, 2) ? (this.idleTime = 0, this.sleepState = d.AWAKE) : (this.idleTime += c, this.sleepState = d.SLEEPY), this.idleTime > this.sleepTimeLimit && (b ? this.wantsToSleep = !0 : this.sleep()) } }, d.prototype.overlaps = function(a) { return this.world.overlapKeeper.bodiesAreOverlapping(this, a) }; var x = e.create(), y = e.create(); d.prototype.integrate = function(a) { var b = this.invMass, c = this.force, d = this.position, f = this.velocity; e.copy(this.previousPosition, this.position), this.previousAngle = this.angle, this.fixedRotation || (this.angularVelocity += this.angularForce * this.invInertia * a), e.scale(x, c, a * b), e.multiply(x, this.massMultiplier, x), e.add(f, x, f), this.integrateToTimeOfImpact(a) || (e.scale(y, f, a), e.add(d, d, y), this.fixedRotation || (this.angle += this.angularVelocity * a)), this.aabbNeedsUpdate = !0 }; var z = new h, A = new i({ mode: i.ALL }), B = e.create(), C = e.create(), D = e.create(), E = e.create(); d.prototype.integrateToTimeOfImpact = function(a) { if (this.ccdSpeedThreshold < 0 || e.squaredLength(this.velocity) < Math.pow(this.ccdSpeedThreshold, 2)) return !1; e.normalize(B, this.velocity), e.scale(C, this.velocity, a), e.add(C, C, this.position), e.sub(D, C, this.position); var b, c = this.angularVelocity * a, d = e.length(D), f = 1, g = this; if (z.reset(), A.callback = function(a) { a.body !== g && (b = a.body, a.getHitPoint(C, A), e.sub(D, C, g.position), f = e.length(D) / d, a.stop()) }, e.copy(A.from, this.position), e.copy(A.to, C), A.update(), this.world.raycast(z, A), !b) return !1; var h = this.angle; e.copy(E, this.position); for (var i = 0, j = 0, k = 0, l = f; l >= j && i < this.ccdIterations;) { i++, k = (l - j) / 2, e.scale(y, D, f), e.add(this.position, E, y), this.angle = h + c * f, this.updateAABB(); this.aabb.overlaps(b.aabb) && this.world.narrowphase.bodiesOverlap(this, b) ? j = k : l = k } return f = k, e.copy(this.position, E), this.angle = h, e.scale(y, D, f), e.add(this.position, this.position, y), this.fixedRotation || (this.angle += c * f), !0 }, d.prototype.getVelocityAtPoint = function(a, b) { return e.crossVZ(a, b, this.angularVelocity), e.subtract(a, this.velocity, a), a }, d.sleepyEvent = { type: "sleepy" }, d.sleepEvent = { type: "sleep" }, d.wakeUpEvent = { type: "wakeup" }, d.DYNAMIC = 1, d.STATIC = 2, d.KINEMATIC = 4, d.AWAKE = 0, d.SLEEPY = 1, d.SLEEPING = 2 }, { "../collision/AABB": 7, "../collision/Ray": 11, "../collision/RaycastResult": 12, "../events/EventEmitter": 26, "../math/vec2": 30, "../shapes/Convex": 40, "poly-decomp": 5 }], 32: [function(a, b, c) { function d(a, b, c) { c = c || {}, f.call(this, a, b, c), this.localAnchorA = e.fromValues(0, 0), this.localAnchorB = e.fromValues(0, 0), c.localAnchorA && e.copy(this.localAnchorA, c.localAnchorA), c.localAnchorB && e.copy(this.localAnchorB, c.localAnchorB), c.worldAnchorA && this.setWorldAnchorA(c.worldAnchorA), c.worldAnchorB && this.setWorldAnchorB(c.worldAnchorB); var d = e.create(), g = e.create(); this.getWorldAnchorA(d), this.getWorldAnchorB(g); var h = e.distance(d, g); this.restLength = "number" == typeof c.restLength ? c.restLength : h } var e = a("../math/vec2"), f = a("./Spring"); a("../utils/Utils"); b.exports = d, d.prototype = new f, d.prototype.constructor = d, d.prototype.setWorldAnchorA = function(a) { this.bodyA.toLocalFrame(this.localAnchorA, a) }, d.prototype.setWorldAnchorB = function(a) { this.bodyB.toLocalFrame(this.localAnchorB, a) }, d.prototype.getWorldAnchorA = function(a) { this.bodyA.toWorldFrame(a, this.localAnchorA) }, d.prototype.getWorldAnchorB = function(a) { this.bodyB.toWorldFrame(a, this.localAnchorB) }; var g = e.create(), h = e.create(), i = e.create(), j = e.create(), k = e.create(), l = e.create(), m = e.create(), n = e.create(), o = e.create(); d.prototype.applyForce = function() { var a = this.stiffness, b = this.damping, c = this.restLength, d = this.bodyA, f = this.bodyB, p = g, q = h, r = i, s = j, t = o, u = k, v = l, w = m, x = n; this.getWorldAnchorA(u), this.getWorldAnchorB(v), e.sub(w, u, d.position), e.sub(x, v, f.position), e.sub(p, v, u); var y = e.len(p); e.normalize(q, p), e.sub(r, f.velocity, d.velocity), e.crossZV(t, f.angularVelocity, x), e.add(r, r, t), e.crossZV(t, d.angularVelocity, w), e.sub(r, r, t), e.scale(s, q, -a * (y - c) - b * e.dot(r, q)), e.sub(d.force, d.force, s), e.add(f.force, f.force, s); var z = e.crossLength(w, s), A = e.crossLength(x, s); d.angularForce -= z, f.angularForce += A } }, { "../math/vec2": 30, "../utils/Utils": 57, "./Spring": 34 }], 33: [function(a, b, c) { function d(a, b, c) { c = c || {}, e.call(this, a, b, c), this.restAngle = "number" == typeof c.restAngle ? c.restAngle : b.angle - a.angle } var e = (a("../math/vec2"), a("./Spring")); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.applyForce = function() { var a = this.stiffness, b = this.damping, c = this.restAngle, d = this.bodyA, e = this.bodyB, f = e.angle - d.angle, g = e.angularVelocity - d.angularVelocity, h = -a * (f - c) - b * g * 0; d.angularForce -= h, e.angularForce += h } }, { "../math/vec2": 30, "./Spring": 34 }], 34: [function(a, b, c) { function d(a, b, c) { c = e.defaults(c, { stiffness: 100, damping: 1 }), this.stiffness = c.stiffness, this.damping = c.damping, this.bodyA = a, this.bodyB = b } var e = (a("../math/vec2"), a("../utils/Utils")); b.exports = d, d.prototype.applyForce = function() {} }, { "../math/vec2": 30, "../utils/Utils": 57 }], 35: [function(a, b, c) { function d(a, b) { b = b || {}, this.chassisBody = a, this.wheels = [], this.groundBody = new i({ mass: 0 }), this.world = null; var c = this; this.preStepCallback = function() { c.update() } } function e(a, b) { b = b || {}, this.vehicle = a, this.forwardEquation = new h(a.chassisBody, a.groundBody), this.sideEquation = new h(a.chassisBody, a.groundBody), this.steerValue = 0, this.engineForce = 0, this.setSideFriction(void 0 !== b.sideFriction ? b.sideFriction : 5), this.localForwardVector = f.fromValues(0, 1), b.localForwardVector && f.copy(this.localForwardVector, b.localForwardVector), this.localPosition = f.fromValues(0, 0), b.localPosition && f.copy(this.localPosition, b.localPosition), g.apply(this, a.chassisBody, a.groundBody), this.equations.push(this.forwardEquation, this.sideEquation), this.setBrakeForce(0) } var f = a("../math/vec2"), g = (a("../utils/Utils"), a("../constraints/Constraint")), h = a("../equations/FrictionEquation"), i = a("../objects/Body"); b.exports = d, d.prototype.addToWorld = function(a) { this.world = a, a.addBody(this.groundBody), a.on("preStep", this.preStepCallback); for (var b = 0; b < this.wheels.length; b++) { var c = this.wheels[b]; a.addConstraint(c) } }, d.prototype.removeFromWorld = function() { var a = this.world; a.removeBody(this.groundBody), a.off("preStep", this.preStepCallback); for (var b = 0; b < this.wheels.length; b++) { var c = this.wheels[b]; a.removeConstraint(c) } this.world = null }, d.prototype.addWheel = function(a) { var b = new e(this, a); return this.wheels.push(b), b }, d.prototype.update = function() { for (var a = 0; a < this.wheels.length; a++) this.wheels[a].update() }, e.prototype = new g, e.prototype.setBrakeForce = function(a) { this.forwardEquation.setSlipForce(a) }, e.prototype.setSideFriction = function(a) { this.sideEquation.setSlipForce(a) }; var j = f.create(), k = f.create(); e.prototype.getSpeed = function() { return this.vehicle.chassisBody.vectorToWorldFrame(k, this.localForwardVector), this.vehicle.chassisBody.getVelocityAtPoint(j, k), f.dot(j, k) }; var l = f.create(); e.prototype.update = function() { this.vehicle.chassisBody.vectorToWorldFrame(this.forwardEquation.t, this.localForwardVector), f.rotate(this.sideEquation.t, this.localForwardVector, Math.PI / 2), this.vehicle.chassisBody.vectorToWorldFrame(this.sideEquation.t, this.sideEquation.t), f.rotate(this.forwardEquation.t, this.forwardEquation.t, this.steerValue), f.rotate(this.sideEquation.t, this.sideEquation.t, this.steerValue), this.vehicle.chassisBody.toWorldFrame(this.forwardEquation.contactPointB, this.localPosition), f.copy(this.sideEquation.contactPointB, this.forwardEquation.contactPointB), this.vehicle.chassisBody.vectorToWorldFrame(this.forwardEquation.contactPointA, this.localPosition), f.copy(this.sideEquation.contactPointA, this.forwardEquation.contactPointA), f.normalize(l, this.forwardEquation.t), f.scale(l, l, this.engineForce), this.vehicle.chassisBody.applyForce(l, this.forwardEquation.contactPointA) } }, { "../constraints/Constraint": 14, "../equations/FrictionEquation": 23, "../math/vec2": 30, "../objects/Body": 31, "../utils/Utils": 57 }], 36: [function(a, b, c) { var d = b.exports = { AABB: a("./collision/AABB"), AngleLockEquation: a("./equations/AngleLockEquation"), Body: a("./objects/Body"), Broadphase: a("./collision/Broadphase"), Capsule: a("./shapes/Capsule"), Circle: a("./shapes/Circle"), Constraint: a("./constraints/Constraint"), ContactEquation: a("./equations/ContactEquation"), ContactEquationPool: a("./utils/ContactEquationPool"), ContactMaterial: a("./material/ContactMaterial"), Convex: a("./shapes/Convex"), DistanceConstraint: a("./constraints/DistanceConstraint"), Equation: a("./equations/Equation"), EventEmitter: a("./events/EventEmitter"), FrictionEquation: a("./equations/FrictionEquation"), FrictionEquationPool: a("./utils/FrictionEquationPool"), GearConstraint: a("./constraints/GearConstraint"), GSSolver: a("./solver/GSSolver"), Heightfield: a("./shapes/Heightfield"), Line: a("./shapes/Line"), LockConstraint: a("./constraints/LockConstraint"), Material: a("./material/Material"), Narrowphase: a("./collision/Narrowphase"), NaiveBroadphase: a("./collision/NaiveBroadphase"), Particle: a("./shapes/Particle"), Plane: a("./shapes/Plane"), Pool: a("./utils/Pool"), RevoluteConstraint: a("./constraints/RevoluteConstraint"), PrismaticConstraint: a("./constraints/PrismaticConstraint"), Ray: a("./collision/Ray"), RaycastResult: a("./collision/RaycastResult"), Box: a("./shapes/Box"), RotationalVelocityEquation: a("./equations/RotationalVelocityEquation"), SAPBroadphase: a("./collision/SAPBroadphase"), Shape: a("./shapes/Shape"), Solver: a("./solver/Solver"), Spring: a("./objects/Spring"), TopDownVehicle: a("./objects/TopDownVehicle"), LinearSpring: a("./objects/LinearSpring"), RotationalSpring: a("./objects/RotationalSpring"), Utils: a("./utils/Utils"), World: a("./world/World"), vec2: a("./math/vec2"), version: a("../package.json").version }; Object.defineProperty(d, "Rectangle", { get: function() { return console.warn("The Rectangle class has been renamed to Box."), this.Box } }) }, { "../package.json": 6, "./collision/AABB": 7, "./collision/Broadphase": 8, "./collision/NaiveBroadphase": 9, "./collision/Narrowphase": 10, "./collision/Ray": 11, "./collision/RaycastResult": 12, "./collision/SAPBroadphase": 13, "./constraints/Constraint": 14, "./constraints/DistanceConstraint": 15, "./constraints/GearConstraint": 16, "./constraints/LockConstraint": 17, "./constraints/PrismaticConstraint": 18, "./constraints/RevoluteConstraint": 19, "./equations/AngleLockEquation": 20, "./equations/ContactEquation": 21, "./equations/Equation": 22, "./equations/FrictionEquation": 23, "./equations/RotationalVelocityEquation": 25, "./events/EventEmitter": 26, "./material/ContactMaterial": 27, "./material/Material": 28, "./math/vec2": 30, "./objects/Body": 31, "./objects/LinearSpring": 32, "./objects/RotationalSpring": 33, "./objects/Spring": 34, "./objects/TopDownVehicle": 35, "./shapes/Box": 37, "./shapes/Capsule": 38, "./shapes/Circle": 39, "./shapes/Convex": 40, "./shapes/Heightfield": 41, "./shapes/Line": 42, "./shapes/Particle": 43, "./shapes/Plane": 44, "./shapes/Shape": 45, "./solver/GSSolver": 46, "./solver/Solver": 47, "./utils/ContactEquationPool": 48, "./utils/FrictionEquationPool": 49, "./utils/Pool": 55, "./utils/Utils": 57, "./world/World": 61 }], 37: [function(a, b, c) { function d(a) { "number" == typeof arguments[0] && "number" == typeof arguments[1] && (a = { width: arguments[0], height: arguments[1] }, console.warn("The Rectangle has been renamed to Box and its constructor signature has changed. Please use the following format: new Box({ width: 1, height: 1, ... })")), a = a || {}; var b = this.width = a.width || 1, c = this.height = a.height || 1, d = [e.fromValues(-b / 2, -c / 2), e.fromValues(b / 2, -c / 2), e.fromValues(b / 2, c / 2), e.fromValues(-b / 2, c / 2)], h = [e.fromValues(1, 0), e.fromValues(0, 1)]; a.vertices = d, a.axes = h, a.type = f.BOX, g.call(this, a) } var e = a("../math/vec2"), f = a("./Shape"), g = a("./Convex"); b.exports = d, d.prototype = new g, d.prototype.constructor = d, d.prototype.computeMomentOfInertia = function(a) { var b = this.width, c = this.height; return a * (c * c + b * b) / 12 }, d.prototype.updateBoundingRadius = function() { var a = this.width, b = this.height; this.boundingRadius = Math.sqrt(a * a + b * b) / 2 }; e.create(), e.create(), e.create(), e.create(); d.prototype.computeAABB = function(a, b, c) { a.setFromPoints(this.vertices, b, c, 0) }, d.prototype.updateArea = function() { this.area = this.width * this.height } }, { "../math/vec2": 30, "./Convex": 40, "./Shape": 45 }], 38: [function(a, b, c) { function d(a) { "number" == typeof arguments[0] && "number" == typeof arguments[1] && (a = { length: arguments[0], radius: arguments[1] }, console.warn("The Capsule constructor signature has changed. Please use the following format: new Capsule({ radius: 1, length: 1 })")), a = a || {}, this.length = a.length || 1, this.radius = a.radius || 1, a.type = e.CAPSULE, e.call(this, a) } var e = a("./Shape"), f = a("../math/vec2"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.computeMomentOfInertia = function(a) { var b = this.radius, c = this.length + b, d = 2 * b; return a * (d * d + c * c) / 12 }, d.prototype.updateBoundingRadius = function() { this.boundingRadius = this.radius + this.length / 2 }, d.prototype.updateArea = function() { this.area = Math.PI * this.radius * this.radius + 2 * this.radius * this.length }; var g = f.create(); d.prototype.computeAABB = function(a, b, c) { var d = this.radius; f.set(g, this.length / 2, 0), 0 !== c && f.rotate(g, g, c), f.set(a.upperBound, Math.max(g[0] + d, -g[0] + d), Math.max(g[1] + d, -g[1] + d)), f.set(a.lowerBound, Math.min(g[0] - d, -g[0] - d), Math.min(g[1] - d, -g[1] - d)), f.add(a.lowerBound, a.lowerBound, b), f.add(a.upperBound, a.upperBound, b) }; var h = f.create(), i = f.create(), j = f.create(), k = f.create(), l = f.fromValues(0, 1); d.prototype.raycast = function(a, b, c, d) { for (var e = b.from, g = b.to, m = (b.direction, h), n = i, o = j, p = k, q = this.length / 2, r = 0; r < 2; r++) { var s = this.radius * (2 * r - 1); f.set(o, -q, s), f.set(p, q, s), f.toGlobalFrame(o, o, c, d), f.toGlobalFrame(p, p, c, d); var t = f.getLineSegmentsIntersectionFraction(e, g, o, p); if (t >= 0 && (f.rotate(n, l, d), f.scale(n, n, 2 * r - 1), b.reportIntersection(a, t, n, -1), a.shouldStop(b))) return } for (var u = Math.pow(this.radius, 2) + Math.pow(q, 2), r = 0; r < 2; r++) { f.set(o, q * (2 * r - 1), 0), f.toGlobalFrame(o, o, c, d); var v = Math.pow(g[0] - e[0], 2) + Math.pow(g[1] - e[1], 2), w = 2 * ((g[0] - e[0]) * (e[0] - o[0]) + (g[1] - e[1]) * (e[1] - o[1])), x = Math.pow(e[0] - o[0], 2) + Math.pow(e[1] - o[1], 2) - Math.pow(this.radius, 2), t = Math.pow(w, 2) - 4 * v * x; if (!(t < 0)) if (0 === t) { if (f.lerp(m, e, g, t), f.squaredDistance(m, c) > u && (f.sub(n, m, o), f.normalize(n, n), b.reportIntersection(a, t, n, -1), a.shouldStop(b))) return } else { var y = Math.sqrt(t), z = 1 / (2 * v), A = (-w - y) * z, B = (-w + y) * z; if (A >= 0 && A <= 1 && (f.lerp(m, e, g, A), f.squaredDistance(m, c) > u && (f.sub(n, m, o), f.normalize(n, n), b.reportIntersection(a, A, n, -1), a.shouldStop(b)))) return; if (B >= 0 && B <= 1 && (f.lerp(m, e, g, B), f.squaredDistance(m, c) > u && (f.sub(n, m, o), f.normalize(n, n), b.reportIntersection(a, B, n, -1), a.shouldStop(b)))) return } } } }, { "../math/vec2": 30, "./Shape": 45 }], 39: [function(a, b, c) { function d(a) { "number" == typeof arguments[0] && (a = { radius: arguments[0] }, console.warn("The Circle constructor signature has changed. Please use the following format: new Circle({ radius: 1 })")), a = a || {}, this.radius = a.radius || 1, a.type = e.CIRCLE, e.call(this, a) } var e = a("./Shape"), f = a("../math/vec2"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.computeMomentOfInertia = function(a) { var b = this.radius; return a * b * b / 2 }, d.prototype.updateBoundingRadius = function() { this.boundingRadius = this.radius }, d.prototype.updateArea = function() { this.area = Math.PI * this.radius * this.radius }, d.prototype.computeAABB = function(a, b, c) { var d = this.radius; f.set(a.upperBound, d, d), f.set(a.lowerBound, -d, -d), b && (f.add(a.lowerBound, a.lowerBound, b), f.add(a.upperBound, a.upperBound, b)) }; var g = f.create(), h = f.create(); d.prototype.raycast = function(a, b, c, d) { var e = b.from, i = b.to, j = this.radius, k = Math.pow(i[0] - e[0], 2) + Math.pow(i[1] - e[1], 2), l = 2 * ((i[0] - e[0]) * (e[0] - c[0]) + (i[1] - e[1]) * (e[1] - c[1])), m = Math.pow(e[0] - c[0], 2) + Math.pow(e[1] - c[1], 2) - Math.pow(j, 2), n = Math.pow(l, 2) - 4 * k * m, o = g, p = h; if (!(n < 0)) if (0 === n) f.lerp(o, e, i, n), f.sub(p, o, c), f.normalize(p, p), b.reportIntersection(a, n, p, -1); else { var q = Math.sqrt(n), r = 1 / (2 * k), s = (-l - q) * r, t = (-l + q) * r; if (s >= 0 && s <= 1 && (f.lerp(o, e, i, s), f.sub(p, o, c), f.normalize(p, p), b.reportIntersection(a, s, p, -1), a.shouldStop(b))) return; t >= 0 && t <= 1 && (f.lerp(o, e, i, t), f.sub(p, o, c), f.normalize(p, p), b.reportIntersection(a, t, p, -1)) } } }, { "../math/vec2": 30, "./Shape": 45 }], 40: [function(a, b, c) { function d(a) { Array.isArray(arguments[0]) && (a = { vertices: arguments[0], axes: arguments[1] }, console.warn("The Convex constructor signature has changed. Please use the following format: new Convex({ vertices: [...], ... })")), a = a || {}, this.vertices = []; for (var b = void 0 !== a.vertices ? a.vertices : [], c = 0; c < b.length; c++) { var d = f.create(); f.copy(d, b[c]), this.vertices.push(d) } if (this.axes = [], a.axes) for (var c = 0; c < a.axes.length; c++) { var g = f.create(); f.copy(g, a.axes[c]), this.axes.push(g) } else for (var c = 0; c < this.vertices.length; c++) { var h = this.vertices[c], i = this.vertices[(c + 1) % this.vertices.length], j = f.create(); f.sub(j, i, h), f.rotate90cw(j, j), f.normalize(j, j), this.axes.push(j) } if (this.centerOfMass = f.fromValues(0, 0), this.triangles = [], this.vertices.length && (this.updateTriangles(), this.updateCenterOfMass()), this.boundingRadius = 0, a.type = e.CONVEX, e.call(this, a), this.updateBoundingRadius(), this.updateArea(), this.area < 0) throw new Error("Convex vertices must be given in conter-clockwise winding.") } var e = a("./Shape"), f = a("../math/vec2"), g = a("../math/polyk"); a("poly-decomp"); b.exports = d, d.prototype = new e, d.prototype.constructor = d; var h = f.create(), i = f.create(); d.prototype.projectOntoLocalAxis = function(a, b) { for (var c, d, e = null, g = null, a = h, i = 0; i < this.vertices.length; i++) c = this.vertices[i], d = f.dot(c, a), (null === e || d > e) && (e = d), (null === g || d < g) && (g = d); if (g > e) { var j = g; g = e, e = j } f.set(b, g, e) }, d.prototype.projectOntoWorldAxis = function(a, b, c, d) { var e = i; this.projectOntoLocalAxis(a, d), 0 !== c ? f.rotate(e, a, c) : e = a; var g = f.dot(b, e); f.set(d, d[0] + g, d[1] + g) }, d.prototype.updateTriangles = function() { this.triangles.length = 0; for (var a = [], b = 0; b < this.vertices.length; b++) { var c = this.vertices[b]; a.push(c[0], c[1]) } for (var d = g.Triangulate(a), b = 0; b < d.length; b += 3) { var e = d[b], f = d[b + 1], h = d[b + 2]; this.triangles.push([e, f, h]) } }; var j = f.create(), k = f.create(), l = f.create(), m = f.create(), n = f.create(); f.create(), f.create(), f.create(), f.create(); d.prototype.updateCenterOfMass = function() { var a = this.triangles, b = this.vertices, c = this.centerOfMass, e = j, g = l, h = m, i = n, o = k; f.set(c, 0, 0); for (var p = 0, q = 0; q !== a.length; q++) { var r = a[q], g = b[r[0]], h = b[r[1]], i = b[r[2]]; f.centroid(e, g, h, i); var s = d.triangleArea(g, h, i); p += s, f.scale(o, e, s), f.add(c, c, o) } f.scale(c, c, 1 / p) }, d.prototype.computeMomentOfInertia = function(a) { for (var b = 0, c = 0, d = this.vertices.length, e = d - 1, g = 0; g < d; e = g, g++) { var h = this.vertices[e], i = this.vertices[g], j = Math.abs(f.crossLength(h, i)); b += j * (f.dot(i, i) + f.dot(i, h) + f.dot(h, h)), c += j } return a / 6 * (b / c) }, d.prototype.updateBoundingRadius = function() { for (var a = this.vertices, b = 0, c = 0; c !== a.length; c++) { var d = f.squaredLength(a[c]); d > b && (b = d) } this.boundingRadius = Math.sqrt(b) }, d.triangleArea = function(a, b, c) { return .5 * ((b[0] - a[0]) * (c[1] - a[1]) - (c[0] - a[0]) * (b[1] - a[1])) }, d.prototype.updateArea = function() { this.updateTriangles(), this.area = 0; for (var a = this.triangles, b = this.vertices, c = 0; c !== a.length; c++) { var e = a[c], f = b[e[0]], g = b[e[1]], h = b[e[2]], i = d.triangleArea(f, g, h); this.area += i } }, d.prototype.computeAABB = function(a, b, c) { a.setFromPoints(this.vertices, b, c, 0) }; var o = f.create(), p = f.create(), q = f.create(); d.prototype.raycast = function(a, b, c, d) { var e = o, g = p, h = q, i = this.vertices; f.toLocalFrame(e, b.from, c, d), f.toLocalFrame(g, b.to, c, d); for (var j = i.length, k = 0; k < j && !a.shouldStop(b); k++) { var l = i[k], m = i[(k + 1) % j], n = f.getLineSegmentsIntersectionFraction(e, g, l, m); n >= 0 && (f.sub(h, m, l), f.rotate(h, h, -Math.PI / 2 + d), f.normalize(h, h), b.reportIntersection(a, n, h, k)) } } }, { "../math/polyk": 29, "../math/vec2": 30, "./Shape": 45, "poly-decomp": 5 }], 41: [function(a, b, c) { function d(a) { if (Array.isArray(arguments[0])) { if (a = { heights: arguments[0] }, "object" == typeof arguments[1]) for (var b in arguments[1]) a[b] = arguments[1][b]; console.warn("The Heightfield constructor signature has changed. Please use the following format: new Heightfield({ heights: [...], ... })") } a = a || {}, this.heights = a.heights ? a.heights.slice(0) : [], this.maxValue = a.maxValue || null, this.minValue = a.minValue || null, this.elementWidth = a.elementWidth || .1, void 0 !== a.maxValue && void 0 !== a.minValue || this.updateMaxMinValues(), a.type = e.HEIGHTFIELD, e.call(this, a) } var e = a("./Shape"), f = a("../math/vec2"); a("../utils/Utils"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.updateMaxMinValues = function() { for (var a = this.heights, b = a[0], c = a[0], d = 0; d !== a.length; d++) { var e = a[d]; e > b && (b = e), e < c && (c = e) } this.maxValue = b, this.minValue = c }, d.prototype.computeMomentOfInertia = function(a) { return Number.MAX_VALUE }, d.prototype.updateBoundingRadius = function() { this.boundingRadius = Number.MAX_VALUE }, d.prototype.updateArea = function() { for (var a = this.heights, b = 0, c = 0; c < a.length - 1; c++) b += (a[c] + a[c + 1]) / 2 * this.elementWidth; this.area = b }; var g = [f.create(), f.create(), f.create(), f.create()]; d.prototype.computeAABB = function(a, b, c) { f.set(g[0], 0, this.maxValue), f.set(g[1], this.elementWidth * this.heights.length, this.maxValue), f.set(g[2], this.elementWidth * this.heights.length, this.minValue), f.set(g[3], 0, this.minValue), a.setFromPoints(g, b, c) }, d.prototype.getLineSegment = function(a, b, c) { var d = this.heights, e = this.elementWidth; f.set(a, c * e, d[c]), f.set(b, (c + 1) * e, d[c + 1]) }, d.prototype.getSegmentIndex = function(a) { return Math.floor(a[0] / this.elementWidth) }, d.prototype.getClampedSegmentIndex = function(a) { var b = this.getSegmentIndex(a); return b = Math.min(this.heights.length, Math.max(b, 0)) }; var h = (f.create(), f.create()), i = f.create(), j = f.create(), k = f.create(), l = f.create(); f.fromValues(0, 1); d.prototype.raycast = function(a, b, c, d) { var e = b.from, g = b.to, m = (b.direction, h), n = i, o = j, p = k, q = l; f.toLocalFrame(p, e, c, d), f.toLocalFrame(q, g, c, d); var r = this.getClampedSegmentIndex(p), s = this.getClampedSegmentIndex(q); if (r > s) { var t = r; r = s, s = t } for (var u = 0; u < this.heights.length - 1; u++) { this.getLineSegment(n, o, u); var v = f.getLineSegmentsIntersectionFraction(p, q, n, o); if (v >= 0 && (f.sub(m, o, n), f.rotate(m, m, d + Math.PI / 2), f.normalize(m, m), b.reportIntersection(a, v, m, -1), a.shouldStop(b))) return } } }, { "../math/vec2": 30, "../utils/Utils": 57, "./Shape": 45 }], 42: [function(a, b, c) { function d(a) { "number" == typeof arguments[0] && (a = { length: arguments[0] }, console.warn("The Line constructor signature has changed. Please use the following format: new Line({ length: 1, ... })")), a = a || {}, this.length = a.length || 1, a.type = e.LINE, e.call(this, a) } var e = a("./Shape"), f = a("../math/vec2"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.computeMomentOfInertia = function(a) { return a * Math.pow(this.length, 2) / 12 }, d.prototype.updateBoundingRadius = function() { this.boundingRadius = this.length / 2 }; var g = [f.create(), f.create()]; d.prototype.computeAABB = function(a, b, c) { var d = this.length / 2; f.set(g[0], -d, 0), f.set(g[1], d, 0), a.setFromPoints(g, b, c, 0) }; var h = (f.create(), f.create()), i = f.create(), j = f.create(), k = f.fromValues(0, 1); d.prototype.raycast = function(a, b, c, d) { var e = b.from, g = b.to, l = i, m = j, n = this.length / 2; f.set(l, -n, 0), f.set(m, n, 0), f.toGlobalFrame(l, l, c, d), f.toGlobalFrame(m, m, c, d); var o = f.getLineSegmentsIntersectionFraction(l, m, e, g); if (o >= 0) { var p = h; f.rotate(p, k, d), b.reportIntersection(a, o, p, -1) } } }, { "../math/vec2": 30, "./Shape": 45 }], 43: [function(a, b, c) { function d(a) { a = a || {}, a.type = e.PARTICLE, e.call(this, a) } var e = a("./Shape"), f = a("../math/vec2"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.computeMomentOfInertia = function(a) { return 0 }, d.prototype.updateBoundingRadius = function() { this.boundingRadius = 0 }, d.prototype.computeAABB = function(a, b, c) { f.copy(a.lowerBound, b), f.copy(a.upperBound, b) } }, { "../math/vec2": 30, "./Shape": 45 }], 44: [function(a, b, c) { function d(a) { a = a || {}, a.type = e.PLANE, e.call(this, a) } var e = a("./Shape"), f = a("../math/vec2"); a("../utils/Utils"); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.computeMomentOfInertia = function(a) { return 0 }, d.prototype.updateBoundingRadius = function() { this.boundingRadius = Number.MAX_VALUE }, d.prototype.computeAABB = function(a, b, c) { var d = c % (2 * Math.PI), e = f.set, g = Number.MAX_VALUE, h = a.lowerBound, i = a.upperBound; 0 === d ? (e(h, -g, -g), e(i, g, 0)) : d === Math.PI / 2 ? (e(h, 0, -g), e(i, g, g)) : d === Math.PI ? (e(h, -g, 0), e(i, g, g)) : d === 3 * Math.PI / 2 ? (e(h, -g, -g), e(i, 0, g)) : (e(h, -g, -g), e(i, g, g)), f.add(h, h, b), f.add(i, i, b) }, d.prototype.updateArea = function() { this.area = Number.MAX_VALUE }; var g = f.create(), h = (f.create(), f.create(), f.create()), i = f.create(); d.prototype.raycast = function(a, b, c, d) { var e = b.from, j = b.to, k = b.direction, l = g, m = h, n = i; f.set(m, 0, 1), f.rotate(m, m, d), f.sub(n, e, c); var o = f.dot(n, m); if (f.sub(n, j, c), !(o * f.dot(n, m) > 0 || f.squaredDistance(e, j) < o * o)) { var p = f.dot(m, k); f.sub(l, e, c); var q = -f.dot(m, l) / p / b.length; b.reportIntersection(a, q, m, -1) } } }, { "../math/vec2": 30, "../utils/Utils": 57, "./Shape": 45 }], 45: [function(a, b, c) { function d(a) { a = a || {}, this.body = null, this.position = e.fromValues(0, 0), a.position && e.copy(this.position, a.position), this.angle = a.angle || 0, this.type = a.type || 0, this.id = d.idCounter++, this.boundingRadius = 0, this.collisionGroup = void 0 !== a.collisionGroup ? a.collisionGroup : 1, this.collisionResponse = void 0 === a.collisionResponse || a.collisionResponse, this.collisionMask = void 0 !== a.collisionMask ? a.collisionMask : 1, this.material = a.material || null, this.area = 0, this.sensor = void 0 !== a.sensor && a.sensor, this.type && this.updateBoundingRadius(), this.updateArea() } b.exports = d; var e = a("../math/vec2"); d.idCounter = 0, d.CIRCLE = 1, d.PARTICLE = 2, d.PLANE = 4, d.CONVEX = 8, d.LINE = 16, d.BOX = 32, Object.defineProperty(d, "RECTANGLE", { get: function() { return console.warn("Shape.RECTANGLE is deprecated, use Shape.BOX instead."), d.BOX } }), d.CAPSULE = 64, d.HEIGHTFIELD = 128, d.prototype.computeMomentOfInertia = function(a) {}, d.prototype.updateBoundingRadius = function() {}, d.prototype.updateArea = function() {}, d.prototype.computeAABB = function(a, b, c) {}, d.prototype.raycast = function(a, b, c, d) {} }, { "../math/vec2": 30 }], 46: [function(a, b, c) { function d(a) { g.call(this, a, g.GS), a = a || {}, this.iterations = a.iterations || 10, this.tolerance = a.tolerance || 1e-7, this.arrayStep = 30, this.lambda = new h.ARRAY_TYPE(this.arrayStep), this.Bs = new h.ARRAY_TYPE(this.arrayStep), this.invCs = new h.ARRAY_TYPE(this.arrayStep), this.useZeroRHS = !1, this.frictionIterations = 0, this.usedIterations = 0 } function e(a) { for (var b = a.length; b--;) a[b] = 0 } var f = a("../math/vec2"), g = a("./Solver"), h = a("../utils/Utils"), i = a("../equations/FrictionEquation"); b.exports = d, d.prototype = new g, d.prototype.constructor = d, d.prototype.solve = function(a, b) { this.sortEquations(); var c = 0, g = this.iterations, j = this.frictionIterations, k = this.equations, l = k.length, m = Math.pow(this.tolerance * l, 2), n = b.bodies, o = b.bodies.length, p = (f.add, f.set, this.useZeroRHS), q = this.lambda; if (this.usedIterations = 0, l) for (var r = 0; r !== o; r++) { var s = n[r]; s.updateSolveMassProperties() } q.length < l && (q = this.lambda = new h.ARRAY_TYPE(l + this.arrayStep), this.Bs = new h.ARRAY_TYPE(l + this.arrayStep), this.invCs = new h.ARRAY_TYPE(l + this.arrayStep)), e(q); for (var t = this.invCs, u = this.Bs, q = this.lambda, r = 0; r !== k.length; r++) { var v = k[r]; (v.timeStep !== a || v.needsUpdate) && (v.timeStep = a, v.update()), u[r] = v.computeB(v.a, v.b, a), t[r] = v.computeInvC(v.epsilon) } var v, w, r, x; if (0 !== l) { for (r = 0; r !== o; r++) { var s = n[r]; s.resetConstraintVelocity() } if (j) { for (c = 0; c !== j; c++) { for (w = 0, x = 0; x !== l; x++) { v = k[x]; var y = d.iterateEquation(x, v, v.epsilon, u, t, q, p, a, c); w += Math.abs(y) } if (this.usedIterations++, w * w <= m) break } for (d.updateMultipliers(k, q, 1 / a), x = 0; x !== l; x++) { var z = k[x]; if (z instanceof i) { for (var A = 0, B = 0; B !== z.contactEquations.length; B++) A += z.contactEquations[B].multiplier; A *= z.frictionCoefficient / z.contactEquations.length, z.maxForce = A, z.minForce = -A } } } for (c = 0; c !== g; c++) { for (w = 0, x = 0; x !== l; x++) { v = k[x]; var y = d.iterateEquation(x, v, v.epsilon, u, t, q, p, a, c); w += Math.abs(y) } if (this.usedIterations++, w * w <= m) break } for (r = 0; r !== o; r++) n[r].addConstraintVelocity(); d.updateMultipliers(k, q, 1 / a) } }, d.updateMultipliers = function(a, b, c) { for (var d = a.length; d--;) a[d].multiplier = b[d] * c }, d.iterateEquation = function(a, b, c, d, e, f, g, h, i) { var j = d[a], k = e[a], l = f[a], m = b.computeGWlambda(), n = b.maxForce, o = b.minForce; g && (j = 0); var p = k * (j - m - c * l), q = l + p; return q < o * h ? p = o * h - l : q > n * h && (p = n * h - l), f[a] += p, b.addToWlambda(p), p } }, { "../equations/FrictionEquation": 23, "../math/vec2": 30, "../utils/Utils": 57, "./Solver": 47 }], 47: [function(a, b, c) { function d(a, b) { a = a || {}, e.call(this), this.type = b, this.equations = [], this.equationSortFunction = a.equationSortFunction || !1 } var e = (a("../utils/Utils"), a("../events/EventEmitter")); b.exports = d, d.prototype = new e, d.prototype.constructor = d, d.prototype.solve = function(a, b) { throw new Error("Solver.solve should be implemented by subclasses!") }; var f = { bodies: [] }; d.prototype.solveIsland = function(a, b) { this.removeAllEquations(), b.equations.length && (this.addEquations(b.equations), f.bodies.length = 0, b.getBodies(f.bodies), f.bodies.length && this.solve(a, f)) }, d.prototype.sortEquations = function() { this.equationSortFunction && this.equations.sort(this.equationSortFunction) }, d.prototype.addEquation = function(a) { a.enabled && this.equations.push(a) }, d.prototype.addEquations = function(a) { for (var b = 0, c = a.length; b !== c; b++) { var d = a[b]; d.enabled && this.equations.push(d) } }, d.prototype.removeEquation = function(a) { var b = this.equations.indexOf(a); - 1 !== b && this.equations.splice(b, 1) }, d.prototype.removeAllEquations = function() { this.equations.length = 0 }, d.GS = 1, d.ISLAND = 2 }, { "../events/EventEmitter": 26, "../utils/Utils": 57 }], 48: [function(a, b, c) { function d() { f.apply(this, arguments) } var e = a("../equations/ContactEquation"), f = a("./Pool"); b.exports = d, d.prototype = new f, d.prototype.constructor = d, d.prototype.create = function() { return new e }, d.prototype.destroy = function(a) { return a.bodyA = a.bodyB = null, this } }, { "../equations/ContactEquation": 21, "./Pool": 55 }], 49: [function(a, b, c) { function d() { f.apply(this, arguments) } var e = a("../equations/FrictionEquation"), f = a("./Pool"); b.exports = d, d.prototype = new f, d.prototype.constructor = d, d.prototype.create = function() { return new e }, d.prototype.destroy = function(a) { return a.bodyA = a.bodyB = null, this } }, { "../equations/FrictionEquation": 23, "./Pool": 55 }], 50: [function(a, b, c) { function d() { f.apply(this, arguments) } var e = a("../world/IslandNode"), f = a("./Pool"); b.exports = d, d.prototype = new f, d.prototype.constructor = d, d.prototype.create = function() { return new e }, d.prototype.destroy = function(a) { return a.reset(), this } }, { "../world/IslandNode": 60, "./Pool": 55 }], 51: [function(a, b, c) { function d() { f.apply(this, arguments) } var e = a("../world/Island"), f = a("./Pool"); b.exports = d, d.prototype = new f, d.prototype.constructor = d, d.prototype.create = function() { return new e }, d.prototype.destroy = function(a) { return a.reset(), this } }, { "../world/Island": 58, "./Pool": 55 }], 52: [function(a, b, c) { function d() { this.overlappingShapesLastState = new e, this.overlappingShapesCurrentState = new e, this.recordPool = new f({ size: 16 }), this.tmpDict = new e, this.tmpArray1 = [] } var e = a("./TupleDictionary"), f = (a("./OverlapKeeperRecord"), a("./OverlapKeeperRecordPool")); a("./Utils"); b.exports = d, d.prototype.tick = function() { for (var a = this.overlappingShapesLastState, b = this.overlappingShapesCurrentState, c = a.keys.length; c--;) { var d = a.keys[c], e = a.getByKey(d); b.getByKey(d); e && this.recordPool.release(e) } a.reset(), a.copy(b), b.reset() }, d.prototype.setOverlapping = function(a, b, c, d) { var e = (this.overlappingShapesLastState, this.overlappingShapesCurrentState); if (!e.get(b.id, d.id)) { var f = this.recordPool.get(); f.set(a, b, c, d), e.set(b.id, d.id, f) } }, d.prototype.getNewOverlaps = function(a) { return this.getDiff(this.overlappingShapesLastState, this.overlappingShapesCurrentState, a) }, d.prototype.getEndOverlaps = function(a) { return this.getDiff(this.overlappingShapesCurrentState, this.overlappingShapesLastState, a) }, d.prototype.bodiesAreOverlapping = function(a, b) { for (var c = this.overlappingShapesCurrentState, d = c.keys.length; d--;) { var e = c.keys[d], f = c.data[e]; if (f.bodyA === a && f.bodyB === b || f.bodyA === b && f.bodyB === a) return !0 } return !1 }, d.prototype.getDiff = function(a, b, c) { var c = c || [], d = a, e = b; c.length = 0; for (var f = e.keys.length; f--;) { var g = e.keys[f], h = e.data[g]; if (!h) throw new Error("Key " + g + " had no data!"); d.data[g] || c.push(h) } return c }, d.prototype.isNewOverlap = function(a, b) { var c = 0 | a.id, d = 0 | b.id, e = this.overlappingShapesLastState, f = this.overlappingShapesCurrentState; return !e.get(c, d) && !!f.get(c, d) }, d.prototype.getNewBodyOverlaps = function(a) { this.tmpArray1.length = 0; var b = this.getNewOverlaps(this.tmpArray1); return this.getBodyDiff(b, a) }, d.prototype.getEndBodyOverlaps = function(a) { this.tmpArray1.length = 0; var b = this.getEndOverlaps(this.tmpArray1); return this.getBodyDiff(b, a) }, d.prototype.getBodyDiff = function(a, b) { b = b || []; for (var c = this.tmpDict, d = a.length; d--;) { var e = a[d]; c.set(0 | e.bodyA.id, 0 | e.bodyB.id, e) } for (d = c.keys.length; d--;) { var e = c.getByKey(c.keys[d]); e && b.push(e.bodyA, e.bodyB) } return c.reset(), b } }, { "./OverlapKeeperRecord": 53, "./OverlapKeeperRecordPool": 54, "./TupleDictionary": 56, "./Utils": 57 }], 53: [function(a, b, c) { function d(a, b, c, d) { this.shapeA = b, this.shapeB = d, this.bodyA = a, this.bodyB = c } b.exports = d, d.prototype.set = function(a, b, c, e) { d.call(this, a, b, c, e) } }, {}], 54: [function(a, b, c) { function d() { f.apply(this, arguments) } var e = a("./OverlapKeeperRecord"), f = a("./Pool"); b.exports = d, d.prototype = new f, d.prototype.constructor = d, d.prototype.create = function() { return new e }, d.prototype.destroy = function(a) { return a.bodyA = a.bodyB = a.shapeA = a.shapeB = null, this } }, { "./OverlapKeeperRecord": 53, "./Pool": 55 }], 55: [function(a, b, c) { function d(a) { a = a || {}, this.objects = [], void 0 !== a.size && this.resize(a.size) } b.exports = d, d.prototype.resize = function(a) { for (var b = this.objects; b.length > a;) b.pop(); for (; b.length < a;) b.push(this.create()); return this }, d.prototype.get = function() { var a = this.objects; return a.length ? a.pop() : this.create() }, d.prototype.release = function(a) { return this.destroy(a), this.objects.push(a), this } }, {}], 56: [function(a, b, c) { function d() { this.data = {}, this.keys = [] } var e = a("./Utils"); b.exports = d, d.prototype.getKey = function(a, b) { return a |= 0, b |= 0, (0 | a) == (0 | b) ? -1 : 0 | ((0 | a) > (0 | b) ? a << 16 | 65535 & b : b << 16 | 65535 & a) }, d.prototype.getByKey = function(a) { return a |= 0, this.data[a] }, d.prototype.get = function(a, b) { return this.data[this.getKey(a, b)] }, d.prototype.set = function(a, b, c) { if (!c) throw new Error("No data!"); var d = this.getKey(a, b); return this.data[d] || this.keys.push(d), this.data[d] = c, d }, d.prototype.reset = function() { for (var a = this.data, b = this.keys, c = b.length; c--;) delete a[b[c]]; b.length = 0 }, d.prototype.copy = function(a) { this.reset(), e.appendArray(this.keys, a.keys); for (var b = a.keys.length; b--;) { var c = a.keys[b]; this.data[c] = a.data[c] } } }, { "./Utils": 57 }], 57: [function(a, b, c) { function d() {} b.exports = d, d.appendArray = function(a, b) { if (b.length < 15e4) a.push.apply(a, b); else for (var c = 0, d = b.length; c !== d; ++c) a.push(b[c]) }, d.splice = function(a, b, c) { c = c || 1; for (var d = b, e = a.length - c; d < e; d++) a[d] = a[d + c]; a.length = e }, "undefined" != typeof P2_ARRAY_TYPE ? d.ARRAY_TYPE = P2_ARRAY_TYPE : "undefined" != typeof Float32Array ? d.ARRAY_TYPE = Float32Array : d.ARRAY_TYPE = Array, d.extend = function(a, b) { for (var c in b) a[c] = b[c] }, d.defaults = function(a, b) { a = a || {}; for (var c in b) c in a || (a[c] = b[c]); return a } }, {}], 58: [function(a, b, c) { function d() { this.equations = [], this.bodies = [] } var e = a("../objects/Body"); b.exports = d, d.prototype.reset = function() { this.equations.length = this.bodies.length = 0 }; var f = []; d.prototype.getBodies = function(a) { var b = a || [], c = this.equations; f.length = 0; for (var d = 0; d !== c.length; d++) { var e = c[d]; - 1 === f.indexOf(e.bodyA.id) && (b.push(e.bodyA), f.push(e.bodyA.id)), -1 === f.indexOf(e.bodyB.id) && (b.push(e.bodyB), f.push(e.bodyB.id)) } return b }, d.prototype.wantsToSleep = function() { for (var a = 0; a < this.bodies.length; a++) { var b = this.bodies[a]; if (b.type === e.DYNAMIC && !b.wantsToSleep) return !1 } return !0 }, d.prototype.sleep = function() { for (var a = 0; a < this.bodies.length; a++) { this.bodies[a].sleep() } return !0 } }, { "../objects/Body": 31 }], 59: [function(a, b, c) { function d(a) { this.nodePool = new e({ size: 16 }), this.islandPool = new f({ size: 8 }), this.equations = [], this.islands = [], this.nodes = [], this.queue = [] } var e = (a("../math/vec2"), a("./Island"), a("./IslandNode"), a("./../utils/IslandNodePool")), f = a("./../utils/IslandPool"), g = a("../objects/Body"); b.exports = d, d.getUnvisitedNode = function(a) { for (var b = a.length, c = 0; c !== b; c++) { var d = a[c]; if (!d.visited && d.body.type === g.DYNAMIC) return d } return !1 }, d.prototype.visit = function(a, b, c) { b.push(a.body); for (var d = a.equations.length, e = 0; e !== d; e++) { var f = a.equations[e]; - 1 === c.indexOf(f) && c.push(f) } }, d.prototype.bfs = function(a, b, c) { var e = this.queue; for (e.length = 0, e.push(a), a.visited = !0, this.visit(a, b, c); e.length;) for (var f, h = e.pop(); f = d.getUnvisitedNode(h.neighbors);) f.visited = !0, this.visit(f, b, c), f.body.type === g.DYNAMIC && e.push(f) }, d.prototype.split = function(a) { for (var b = a.bodies, c = this.nodes, e = this.equations; c.length;) this.nodePool.release(c.pop()); for (var f = 0; f !== b.length; f++) { var g = this.nodePool.get(); g.body = b[f], c.push(g) } for (var h = 0; h !== e.length; h++) { var i = e[h], f = b.indexOf(i.bodyA), j = b.indexOf(i.bodyB), k = c[f], l = c[j]; k.neighbors.push(l), l.neighbors.push(k), k.equations.push(i), l.equations.push(i) } for (var m = this.islands, f = 0; f < m.length; f++) this.islandPool.release(m[f]); m.length = 0; for (var n; n = d.getUnvisitedNode(c);) { var o = this.islandPool.get(); this.bfs(n, o.bodies, o.equations), m.push(o) } return m } }, { "../math/vec2": 30, "../objects/Body": 31, "./../utils/IslandNodePool": 50, "./../utils/IslandPool": 51, "./Island": 58, "./IslandNode": 60 }], 60: [function(a, b, c) { function d(a) { this.body = a, this.neighbors = [], this.equations = [], this.visited = !1 } b.exports = d, d.prototype.reset = function() { this.equations.length = 0, this.neighbors.length = 0, this.visited = !1, this.body = null } }, {}], 61: [function(a, b, c) { function d(a) { l.apply(this), a = a || {}, this.springs = [], this.bodies = [], this.disabledBodyCollisionPairs = [], this.solver = a.solver || new e, this.narrowphase = new r(this), this.islandManager = new u, this.gravity = f.fromValues(0, -9.78), a.gravity && f.copy(this.gravity, a.gravity), this.frictionGravity = f.length(this.gravity) || 10, this.useWorldGravityAsFrictionGravity = !0, this.useFrictionGravityOnZeroGravity = !0, this.broadphase = a.broadphase || new q, this.broadphase.setWorld(this), this.constraints = [], this.defaultMaterial = new n, this.defaultContactMaterial = new o(this.defaultMaterial, this.defaultMaterial), this.lastTimeStep = 1 / 60, this.applySpringForces = !0, this.applyDamping = !0, this.applyGravity = !0, this.solveConstraints = !0, this.contactMaterials = [], this.time = 0, this.accumulator = 0, this.stepping = !1, this.bodiesToBeRemoved = [], this.islandSplit = void 0 === a.islandSplit || !!a.islandSplit, this.emitImpactEvent = !0, this._constraintIdCounter = 0, this._bodyIdCounter = 0, this.postStepEvent = { type: "postStep" }, this.addBodyEvent = { type: "addBody", body: null }, this.removeBodyEvent = { type: "removeBody", body: null }, this.addSpringEvent = { type: "addSpring", spring: null }, this.impactEvent = { type: "impact", bodyA: null, bodyB: null, shapeA: null, shapeB: null, contactEquation: null }, this.postBroadphaseEvent = { type: "postBroadphase", pairs: null }, this.sleepMode = d.NO_SLEEPING, this.beginContactEvent = { type: "beginContact", shapeA: null, shapeB: null, bodyA: null, bodyB: null, contactEquations: [] }, this.endContactEvent = { type: "endContact", shapeA: null, shapeB: null, bodyA: null, bodyB: null }, this.preSolveEvent = { type: "preSolve", contactEquations: null, frictionEquations: null }, this.overlappingShapesLastState = { keys: [] }, this.overlappingShapesCurrentState = { keys: [] }, this.overlapKeeper = new t } var e = a("../solver/GSSolver"), f = (a("../solver/Solver"), a("../collision/Ray"), a("../math/vec2")), g = a("../shapes/Circle"), h = a("../shapes/Convex"), i = (a("../shapes/Line"), a("../shapes/Plane")), j = a("../shapes/Capsule"), k = a("../shapes/Particle"), l = a("../events/EventEmitter"), m = a("../objects/Body"), n = (a("../shapes/Shape"), a("../objects/LinearSpring"), a("../material/Material")), o = a("../material/ContactMaterial"), p = (a("../constraints/DistanceConstraint"), a("../constraints/Constraint"), a("../constraints/LockConstraint"), a("../constraints/RevoluteConstraint"), a("../constraints/PrismaticConstraint"), a("../constraints/GearConstraint"), a("../../package.json"), a("../collision/Broadphase"), a("../collision/AABB")), q = a("../collision/SAPBroadphase"), r = a("../collision/Narrowphase"), s = a("../utils/Utils"), t = a("../utils/OverlapKeeper"), u = a("./IslandManager"); a("../objects/RotationalSpring"); b.exports = d, d.prototype = new Object(l.prototype), d.prototype.constructor = d, d.NO_SLEEPING = 1, d.BODY_SLEEPING = 2, d.ISLAND_SLEEPING = 4, d.prototype.addConstraint = function(a) { this.constraints.push(a) }, d.prototype.addContactMaterial = function(a) { this.contactMaterials.push(a) }, d.prototype.removeContactMaterial = function(a) { var b = this.contactMaterials.indexOf(a); - 1 !== b && s.splice(this.contactMaterials, b, 1) }, d.prototype.getContactMaterial = function(a, b) { for (var c = this.contactMaterials, d = 0, e = c.length; d !== e; d++) { var f = c[d]; if (f.materialA.id === a.id && f.materialB.id === b.id || f.materialA.id === b.id && f.materialB.id === a.id) return f } return !1 }, d.prototype.removeConstraint = function(a) { var b = this.constraints.indexOf(a); - 1 !== b && s.splice(this.constraints, b, 1) }; var v = (f.create(), f.create(), f.create(), f.create(), f.create(), f.create(), f.create()), w = f.fromValues(0, 0), x = f.fromValues(0, 0); f.fromValues(0, 0), f.fromValues(0, 0); d.prototype.step = function(a, b, c) { if (c = c || 10, 0 === (b = b || 0)) this.internalStep(a), this.time += a; else { this.accumulator += b; for (var d = 0; this.accumulator >= a && d < c;) this.internalStep(a), this.time += a, this.accumulator -= a, d++; for (var e = this.accumulator % a / a, g = 0; g !== this.bodies.length; g++) { var h = this.bodies[g]; f.lerp(h.interpolatedPosition, h.previousPosition, h.position, e), h.interpolatedAngle = h.previousAngle + e * (h.angle - h.previousAngle) } } }; var y = []; d.prototype.internalStep = function(a) { this.stepping = !0; var b = this.springs.length, c = this.springs, e = this.bodies, g = this.gravity, h = this.solver, i = this.bodies.length, j = this.broadphase, k = this.narrowphase, l = this.constraints, n = v, o = (f.scale, f.add), p = (f.rotate, this.islandManager); if (this.overlapKeeper.tick(), this.lastTimeStep = a, this.useWorldGravityAsFrictionGravity) { var q = f.length(this.gravity); 0 === q && this.useFrictionGravityOnZeroGravity || (this.frictionGravity = q) } if (this.applyGravity) for (var r = 0; r !== i; r++) { var t = e[r], u = t.force; t.type === m.DYNAMIC && t.sleepState !== m.SLEEPING && (f.scale(n, g, t.mass * t.gravityScale), o(u, u, n)) } if (this.applySpringForces) for (var r = 0; r !== b; r++) { var w = c[r]; w.applyForce() } if (this.applyDamping) for (var r = 0; r !== i; r++) { var t = e[r]; t.type === m.DYNAMIC && t.applyDamping(a) } for (var x = j.getCollisionPairs(this), z = this.disabledBodyCollisionPairs, r = z.length - 2; r >= 0; r -= 2) for (var A = x.length - 2; A >= 0; A -= 2)(z[r] === x[A] && z[r + 1] === x[A + 1] || z[r + 1] === x[A] && z[r] === x[A + 1]) && x.splice(A, 2); var B = l.length; for (r = 0; r !== B; r++) { var C = l[r]; if (!C.collideConnected) for (var A = x.length - 2; A >= 0; A -= 2)(C.bodyA === x[A] && C.bodyB === x[A + 1] || C.bodyB === x[A] && C.bodyA === x[A + 1]) && x.splice(A, 2) } this.postBroadphaseEvent.pairs = x, this.emit(this.postBroadphaseEvent), this.postBroadphaseEvent.pairs = null, k.reset(this); for (var r = 0, D = x.length; r !== D; r += 2) for (var E = x[r], F = x[r + 1], G = 0, H = E.shapes.length; G !== H; G++) for (var I = E.shapes[G], J = I.position, K = I.angle, L = 0, M = F.shapes.length; L !== M; L++) { var N = F.shapes[L], O = N.position, P = N.angle, Q = this.defaultContactMaterial; if (I.material && N.material) { var R = this.getContactMaterial(I.material, N.material); R && (Q = R) } this.runNarrowphase(k, E, I, J, K, F, N, O, P, Q, this.frictionGravity) } for (var r = 0; r !== i; r++) { var S = e[r]; S._wakeUpAfterNarrowphase && (S.wakeUp(), S._wakeUpAfterNarrowphase = !1) } if (this.has("endContact")) { this.overlapKeeper.getEndOverlaps(y); for (var T = this.endContactEvent, L = y.length; L--;) { var U = y[L]; T.shapeA = U.shapeA, T.shapeB = U.shapeB, T.bodyA = U.bodyA, T.bodyB = U.bodyB, this.emit(T) } y.length = 0 } var V = this.preSolveEvent; V.contactEquations = k.contactEquations, V.frictionEquations = k.frictionEquations, this.emit(V), V.contactEquations = V.frictionEquations = null; var B = l.length; for (r = 0; r !== B; r++) l[r].update(); if (k.contactEquations.length || k.frictionEquations.length || B) if (this.islandSplit) { for (p.equations.length = 0, s.appendArray(p.equations, k.contactEquations), s.appendArray(p.equations, k.frictionEquations), r = 0; r !== B; r++) s.appendArray(p.equations, l[r].equations); p.split(this); for (var r = 0; r !== p.islands.length; r++) { var W = p.islands[r]; W.equations.length && h.solveIsland(a, W) } } else { for (h.addEquations(k.contactEquations), h.addEquations(k.frictionEquations), r = 0; r !== B; r++) h.addEquations(l[r].equations); this.solveConstraints && h.solve(a, this), h.removeAllEquations() } for (var r = 0; r !== i; r++) { var S = e[r]; S.integrate(a) } for (var r = 0; r !== i; r++) e[r].setZeroForce(); if (this.emitImpactEvent && this.has("impact")) for (var X = this.impactEvent, r = 0; r !== k.contactEquations.length; r++) { var Y = k.contactEquations[r]; Y.firstImpact && (X.bodyA = Y.bodyA, X.bodyB = Y.bodyB, X.shapeA = Y.shapeA, X.shapeB = Y.shapeB, X.contactEquation = Y, this.emit(X)) } if (this.sleepMode === d.BODY_SLEEPING) for (r = 0; r !== i; r++) e[r].sleepTick(this.time, !1, a); else if (this.sleepMode === d.ISLAND_SLEEPING && this.islandSplit) { for (r = 0; r !== i; r++) e[r].sleepTick(this.time, !0, a); for (var r = 0; r < this.islandManager.islands.length; r++) { var W = this.islandManager.islands[r]; W.wantsToSleep() && W.sleep() } } this.stepping = !1; for (var Z = this.bodiesToBeRemoved, r = 0; r !== Z.length; r++) this.removeBody(Z[r]); Z.length = 0, this.emit(this.postStepEvent) }, d.prototype.runNarrowphase = function(a, b, c, d, e, g, h, i, j, k, l) { if (0 != (c.collisionGroup & h.collisionMask) && 0 != (h.collisionGroup & c.collisionMask)) { f.rotate(w, d, b.angle), f.rotate(x, i, g.angle), f.add(w, w, b.position), f.add(x, x, g.position); var n = e + b.angle, o = j + g.angle; a.enableFriction = k.friction > 0, a.frictionCoefficient = k.friction; var p; p = b.type === m.STATIC || b.type === m.KINEMATIC ? g.mass : g.type === m.STATIC || g.type === m.KINEMATIC ? b.mass : b.mass * g.mass / (b.mass + g.mass), a.slipForce = k.friction * l * p, a.restitution = k.restitution, a.surfaceVelocity = k.surfaceVelocity, a.frictionStiffness = k.frictionStiffness, a.frictionRelaxation = k.frictionRelaxation, a.stiffness = k.stiffness, a.relaxation = k.relaxation, a.contactSkinSize = k.contactSkinSize, a.enabledEquations = b.collisionResponse && g.collisionResponse && c.collisionResponse && h.collisionResponse; var q = a[c.type | h.type], r = 0; if (q) { var s = c.sensor || h.sensor, t = a.frictionEquations.length; r = c.type < h.type ? q.call(a, b, c, w, n, g, h, x, o, s) : q.call(a, g, h, x, o, b, c, w, n, s); var u = a.frictionEquations.length - t; if (r) { if (b.allowSleep && b.type === m.DYNAMIC && b.sleepState === m.SLEEPING && g.sleepState === m.AWAKE && g.type !== m.STATIC) { f.squaredLength(g.velocity) + Math.pow(g.angularVelocity, 2) >= 2 * Math.pow(g.sleepSpeedLimit, 2) && (b._wakeUpAfterNarrowphase = !0) } if (g.allowSleep && g.type === m.DYNAMIC && g.sleepState === m.SLEEPING && b.sleepState === m.AWAKE && b.type !== m.STATIC) { f.squaredLength(b.velocity) + Math.pow(b.angularVelocity, 2) >= 2 * Math.pow(b.sleepSpeedLimit, 2) && (g._wakeUpAfterNarrowphase = !0) } if (this.overlapKeeper.setOverlapping(b, c, g, h), this.has("beginContact") && this.overlapKeeper.isNewOverlap(c, h)) { var v = this.beginContactEvent; if (v.shapeA = c, v.shapeB = h, v.bodyA = b, v.bodyB = g, v.contactEquations.length = 0, "number" == typeof r) for (var y = a.contactEquations.length - r; y < a.contactEquations.length; y++) v.contactEquations.push(a.contactEquations[y]); this.emit(v) } if ("number" == typeof r && u > 1) for (var y = a.frictionEquations.length - u; y < a.frictionEquations.length; y++) { var z = a.frictionEquations[y]; z.setSlipForce(z.getSlipForce() / u) } } } } }, d.prototype.addSpring = function(a) { this.springs.push(a); var b = this.addSpringEvent; b.spring = a, this.emit(b), b.spring = null }, d.prototype.removeSpring = function(a) { var b = this.springs.indexOf(a); - 1 !== b && s.splice(this.springs, b, 1) }, d.prototype.addBody = function(a) { if (-1 === this.bodies.indexOf(a)) { this.bodies.push(a), a.world = this; var b = this.addBodyEvent; b.body = a, this.emit(b), b.body = null } }, d.prototype.removeBody = function(a) { if (this.stepping) this.bodiesToBeRemoved.push(a); else { a.world = null; var b = this.bodies.indexOf(a); - 1 !== b && (s.splice(this.bodies, b, 1), this.removeBodyEvent.body = a, a.resetConstraintVelocity(), this.emit(this.removeBodyEvent), this.removeBodyEvent.body = null) } }, d.prototype.getBodyById = function(a) { for (var b = this.bodies, c = 0; c < b.length; c++) { var d = b[c]; if (d.id === a) return d } return !1 }, d.prototype.disableBodyCollision = function(a, b) { this.disabledBodyCollisionPairs.push(a, b) }, d.prototype.enableBodyCollision = function(a, b) { for (var c = this.disabledBodyCollisionPairs, d = 0; d < c.length; d += 2) if (c[d] === a && c[d + 1] === b || c[d + 1] === a && c[d] === b) return void c.splice(d, 2) }, d.prototype.clear = function() { this.time = 0, this.solver && this.solver.equations.length && this.solver.removeAllEquations(); for (var a = this.constraints, b = a.length - 1; b >= 0; b--) this.removeConstraint(a[b]); for (var c = this.bodies, b = c.length - 1; b >= 0; b--) this.removeBody(c[b]); for (var e = this.springs, b = e.length - 1; b >= 0; b--) this.removeSpring(e[b]); for (var f = this.contactMaterials, b = f.length - 1; b >= 0; b--) this.removeContactMaterial(f[b]); d.apply(this) }; var z = f.create(), A = (f.fromValues(0, 0), f.fromValues(0, 0)); d.prototype.hitTest = function(a, b, c) { c = c || 0; var d = new m({ position: a }), e = new k, l = a, n = z, o = A; d.addShape(e); for (var p = this.narrowphase, q = [], r = 0, s = b.length; r !== s; r++) for (var t = b[r], u = 0, v = t.shapes.length; u !== v; u++) { var w = t.shapes[u]; f.rotate(n, w.position, t.angle), f.add(n, n, t.position); var x = w.angle + t.angle; (w instanceof g && p.circleParticle(t, w, n, x, d, e, l, 0, !0) || w instanceof h && p.particleConvex(d, e, l, 0, t, w, n, x, !0) || w instanceof i && p.particlePlane(d, e, l, 0, t, w, n, x, !0) || w instanceof j && p.particleCapsule(d, e, l, 0, t, w, n, x, !0) || w instanceof k && f.squaredLength(f.sub(o, n, a)) < c * c) && q.push(t) } return q }, d.prototype.setGlobalStiffness = function(a) { for (var b = this.constraints, c = 0; c !== b.length; c++) for (var d = b[c], e = 0; e !== d.equations.length; e++) { var f = d.equations[e]; f.stiffness = a, f.needsUpdate = !0 } for (var g = this.contactMaterials, c = 0; c !== g.length; c++) { var d = g[c]; d.stiffness = d.frictionStiffness = a } var d = this.defaultContactMaterial; d.stiffness = d.frictionStiffness = a }, d.prototype.setGlobalRelaxation = function(a) { for (var b = 0; b !== this.constraints.length; b++) for (var c = this.constraints[b], d = 0; d !== c.equations.length; d++) { var e = c.equations[d]; e.relaxation = a, e.needsUpdate = !0 } for (var b = 0; b !== this.contactMaterials.length; b++) { var c = this.contactMaterials[b]; c.relaxation = c.frictionRelaxation = a } var c = this.defaultContactMaterial; c.relaxation = c.frictionRelaxation = a }; var B = new p, C = []; d.prototype.raycast = function(a, b) { return b.getAABB(B), this.broadphase.aabbQuery(this, B, C), b.intersectBodies(a, C), C.length = 0, a.hasHit() } }, { "../../package.json": 6, "../collision/AABB": 7, "../collision/Broadphase": 8, "../collision/Narrowphase": 10, "../collision/Ray": 11, "../collision/SAPBroadphase": 13, "../constraints/Constraint": 14, "../constraints/DistanceConstraint": 15, "../constraints/GearConstraint": 16, "../constraints/LockConstraint": 17, "../constraints/PrismaticConstraint": 18, "../constraints/RevoluteConstraint": 19, "../events/EventEmitter": 26, "../material/ContactMaterial": 27, "../material/Material": 28, "../math/vec2": 30, "../objects/Body": 31, "../objects/LinearSpring": 32, "../objects/RotationalSpring": 33, "../shapes/Capsule": 38, "../shapes/Circle": 39, "../shapes/Convex": 40, "../shapes/Line": 42, "../shapes/Particle": 43, "../shapes/Plane": 44, "../shapes/Shape": 45, "../solver/GSSolver": 46, "../solver/Solver": 47, "../utils/OverlapKeeper": 52, "../utils/Utils": 57, "./IslandManager": 59 }] }, {}, [36])(36) }), function() { var a = this, b = b || {}; return b.game = null, b.WEBGL_RENDERER = 0, b.CANVAS_RENDERER = 1, b.VERSION = "v2.2.9", b._UID = 0, "undefined" != typeof Float32Array ? (b.Float32Array = Float32Array, b.Uint16Array = Uint16Array, b.Uint32Array = Uint32Array, b.ArrayBuffer = ArrayBuffer) : (b.Float32Array = Array, b.Uint16Array = Array), b.PI_2 = 2 * Math.PI, b.RAD_TO_DEG = 180 / Math.PI, b.DEG_TO_RAD = Math.PI / 180, b.RETINA_PREFIX = "@2x", b.DisplayObject = function() { this.position = new b.Point(0, 0), this.scale = new b.Point(1, 1), this.pivot = new b.Point(0, 0), this.rotation = 0, this.alpha = 1, this.visible = !0, this.hitArea = null, this.renderable = !1, this.parent = null, this.worldAlpha = 1, this.worldTransform = new b.Matrix, this.worldPosition = new b.Point(0, 0), this.worldScale = new b.Point(1, 1), this.worldRotation = 0, this.filterArea = null, this._sr = 0, this._cr = 1, this._bounds = new b.Rectangle(0, 0, 0, 0), this._currentBounds = null, this._mask = null, this._cacheAsBitmap = !1, this._cacheIsDirty = !1 }, b.DisplayObject.prototype.constructor = b.DisplayObject, b.DisplayObject.prototype = { destroy: function() { if (this.children) { for (var a = this.children.length; a--;) this.children[a].destroy(); this.children = [] } this.hitArea = null, this.parent = null, this.worldTransform = null, this.filterArea = null, this.renderable = !1, this._bounds = null, this._currentBounds = null, this._mask = null, this._destroyCachedSprite() }, updateTransform: function(a) { if (!a && !this.parent && !this.game) return this; var c = this.parent; a ? c = a : this.parent || (c = this.game.world); var d, e, f, g, h, i, j = c.worldTransform, k = this.worldTransform; return this.rotation % b.PI_2 ? (this.rotation !== this.rotationCache && (this.rotationCache = this.rotation, this._sr = Math.sin(this.rotation), this._cr = Math.cos(this.rotation)), d = this._cr * this.scale.x, e = this._sr * this.scale.x, f = -this._sr * this.scale.y, g = this._cr * this.scale.y, h = this.position.x, i = this.position.y, (this.pivot.x || this.pivot.y) && (h -= this.pivot.x * d + this.pivot.y * f, i -= this.pivot.x * e + this.pivot.y * g), k.a = d * j.a + e * j.c, k.b = d * j.b + e * j.d, k.c = f * j.a + g * j.c, k.d = f * j.b + g * j.d, k.tx = h * j.a + i * j.c + j.tx, k.ty = h * j.b + i * j.d + j.ty) : (d = this.scale.x, g = this.scale.y, h = this.position.x - this.pivot.x * d, i = this.position.y - this.pivot.y * g, k.a = d * j.a, k.b = d * j.b, k.c = g * j.c, k.d = g * j.d, k.tx = h * j.a + i * j.c + j.tx, k.ty = h * j.b + i * j.d + j.ty), this.worldAlpha = this.alpha * c.worldAlpha, this.worldPosition.set(k.tx, k.ty), this.worldScale.set(this.scale.x * Math.sqrt(k.a * k.a + k.c * k.c), this.scale.y * Math.sqrt(k.b * k.b + k.d * k.d)), this.worldRotation = Math.atan2(-k.c, k.d), this._currentBounds = null, this.transformCallback && this.transformCallback.call(this.transformCallbackContext, k, j), this }, preUpdate: function() {}, generateTexture: function(a, c, d) { var e = this.getLocalBounds(), f = new b.RenderTexture(0 | e.width, 0 | e.height, d, c, a); return b.DisplayObject._tempMatrix.tx = -e.x, b.DisplayObject._tempMatrix.ty = -e.y, f.render(this, b.DisplayObject._tempMatrix), f }, updateCache: function() { return this._generateCachedSprite(), this }, toGlobal: function(a) { return this.updateTransform(), this.worldTransform.apply(a) }, toLocal: function(a, b) { return b && (a = b.toGlobal(a)), this.updateTransform(), this.worldTransform.applyInverse(a) }, _renderCachedSprite: function(a) { this._cachedSprite.worldAlpha = this.worldAlpha, a.gl ? b.Sprite.prototype._renderWebGL.call(this._cachedSprite, a) : b.Sprite.prototype._renderCanvas.call(this._cachedSprite, a) }, _generateCachedSprite: function() { this._cacheAsBitmap = !1; var a = this.getLocalBounds(); if (a.width = Math.max(1, Math.ceil(a.width)), a.height = Math.max(1, Math.ceil(a.height)), this.updateTransform(), this._cachedSprite) this._cachedSprite.texture.resize(a.width, a.height); else { var c = new b.RenderTexture(a.width, a.height); this._cachedSprite = new b.Sprite(c), this._cachedSprite.worldTransform = this.worldTransform } var d = this._filters; this._filters = null, this._cachedSprite.filters = d, b.DisplayObject._tempMatrix.tx = -a.x, b.DisplayObject._tempMatrix.ty = -a.y, this._cachedSprite.texture.render(this, b.DisplayObject._tempMatrix, !0), this._cachedSprite.anchor.x = -a.x / a.width, this._cachedSprite.anchor.y = -a.y / a.height, this._filters = d, this._cacheAsBitmap = !0 }, _destroyCachedSprite: function() { this._cachedSprite && (this._cachedSprite.texture.destroy(!0), this._cachedSprite = null) } }, b.DisplayObject.prototype.displayObjectUpdateTransform = b.DisplayObject.prototype.updateTransform, Object.defineProperties(b.DisplayObject.prototype, { x: { get: function() { return this.position.x }, set: function(a) { this.position.x = a } }, y: { get: function() { return this.position.y }, set: function(a) { this.position.y = a } }, worldVisible: { get: function() { if (this.visible) { var a = this.parent; if (!a) return this.visible; do { if (!a.visible) return !1; a = a.parent } while (a); return !0 } return !1 } }, mask: { get: function() { return this._mask }, set: function(a) { this._mask && (this._mask.isMask = !1), this._mask = a, a && (this._mask.isMask = !0) } }, filters: { get: function() { return this._filters }, set: function(a) { if (Array.isArray(a)) { for (var c = [], d = 0; d < a.length; d++) for (var e = a[d].passes, f = 0; f < e.length; f++) c.push(e[f]); this._filterBlock = { target: this, filterPasses: c } } this._filters = a, this.blendMode && this.blendMode === b.blendModes.MULTIPLY && (this.blendMode = b.blendModes.NORMAL) } }, cacheAsBitmap: { get: function() { return this._cacheAsBitmap }, set: function(a) { this._cacheAsBitmap !== a && (a ? this._generateCachedSprite() : this._destroyCachedSprite(), this._cacheAsBitmap = a) } } }), b.DisplayObjectContainer = function() { b.DisplayObject.call(this), this.children = [], this.ignoreChildInput = !1 }, b.DisplayObjectContainer.prototype = Object.create(b.DisplayObject.prototype), b.DisplayObjectContainer.prototype.constructor = b.DisplayObjectContainer, b.DisplayObjectContainer.prototype.addChild = function(a) { return this.addChildAt(a, this.children.length) }, b.DisplayObjectContainer.prototype.addChildAt = function(a, b) { if (b >= 0 && b <= this.children.length) return a.parent && a.parent.removeChild(a), a.parent = this, this.children.splice(b, 0, a), a; throw new Error(a + "addChildAt: The index " + b + " supplied is out of bounds " + this.children.length) }, b.DisplayObjectContainer.prototype.swapChildren = function(a, b) { if (a !== b) { var c = this.getChildIndex(a), d = this.getChildIndex(b); if (c < 0 || d < 0) throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller."); this.children[c] = b, this.children[d] = a } }, b.DisplayObjectContainer.prototype.getChildIndex = function(a) { var b = this.children.indexOf(a); if (-1 === b) throw new Error("The supplied DisplayObject must be a child of the caller"); return b }, b.DisplayObjectContainer.prototype.setChildIndex = function(a, b) { if (b < 0 || b >= this.children.length) throw new Error("The supplied index is out of bounds"); var c = this.getChildIndex(a); this.children.splice(c, 1), this.children.splice(b, 0, a) }, b.DisplayObjectContainer.prototype.getChildAt = function(a) { if (a < 0 || a >= this.children.length) throw new Error("getChildAt: Supplied index " + a + " does not exist in the child list, or the supplied DisplayObject must be a child of the caller"); return this.children[a] }, b.DisplayObjectContainer.prototype.removeChild = function(a) { var b = this.children.indexOf(a); if (-1 !== b) return this.removeChildAt(b) }, b.DisplayObjectContainer.prototype.removeChildAt = function(a) { var b = this.getChildAt(a); return b && (b.parent = void 0, this.children.splice(a, 1)), b }, b.DisplayObjectContainer.prototype.removeChildren = function(a, b) { void 0 === a && (a = 0), void 0 === b && (b = this.children.length); var c = b - a; if (c > 0 && c <= b) { for (var d = this.children.splice(a, c), e = 0; e < d.length; e++) { d[e].parent = void 0 } return d } if (0 === c && 0 === this.children.length) return []; throw new Error("removeChildren: Range Error, numeric values are outside the acceptable range") }, b.DisplayObjectContainer.prototype.updateTransform = function() { if (this.visible && (this.displayObjectUpdateTransform(), !this._cacheAsBitmap)) for (var a = 0; a < this.children.length; a++) this.children[a].updateTransform() }, b.DisplayObjectContainer.prototype.displayObjectContainerUpdateTransform = b.DisplayObjectContainer.prototype.updateTransform, b.DisplayObjectContainer.prototype.getBounds = function(a) { var c = a && a instanceof b.DisplayObject, d = !0; c ? d = a instanceof b.DisplayObjectContainer && a.contains(this) : a = this; var e; if (c) { var f = a.worldTransform; for (a.worldTransform = b.identityMatrix, e = 0; e < a.children.length; e++) a.children[e].updateTransform() } var g, h, i, j = 1 / 0, k = 1 / 0, l = -1 / 0, m = -1 / 0, n = !1; for (e = 0; e < this.children.length; e++) { this.children[e].visible && (n = !0, g = this.children[e].getBounds(), j = j < g.x ? j : g.x, k = k < g.y ? k : g.y, h = g.width + g.x, i = g.height + g.y, l = l > h ? l : h, m = m > i ? m : i) } var o = this._bounds; if (!n) { o = new b.Rectangle; var p = o.x, q = o.width + o.x, r = o.y, s = o.height + o.y, t = this.worldTransform, u = t.a, v = t.b, w = t.c, x = t.d, y = t.tx, z = t.ty, A = u * q + w * s + y, B = x * s + v * q + z, C = u * p + w * s + y, D = x * s + v * p + z, E = u * p + w * r + y, F = x * r + v * p + z, G = u * q + w * r + y, H = x * r + v * q + z; l = A, m = B, j = A, k = B, j = C < j ? C : j, j = E < j ? E : j, j = G < j ? G : j, k = D < k ? D : k, k = F < k ? F : k, k = H < k ? H : k, l = C > l ? C : l, l = E > l ? E : l, l = G > l ? G : l, m = D > m ? D : m, m = F > m ? F : m, m = H > m ? H : m } if (o.x = j, o.y = k, o.width = l - j, o.height = m - k, c) for (a.worldTransform = f, e = 0; e < a.children.length; e++) a.children[e].updateTransform(); if (!d) { var I = a.getBounds(); o.x -= I.x, o.y -= I.y } return o }, b.DisplayObjectContainer.prototype.getLocalBounds = function() { return this.getBounds(this) }, b.DisplayObjectContainer.prototype.contains = function(a) { return !!a && (a === this || this.contains(a.parent)) }, b.DisplayObjectContainer.prototype._renderWebGL = function(a) { if (this.visible && !(this.alpha <= 0)) { if (this._cacheAsBitmap) return void this._renderCachedSprite(a); var b; if (this._mask || this._filters) { for (this._filters && (a.spriteBatch.flush(), a.filterManager.pushFilter(this._filterBlock)), this._mask && (a.spriteBatch.stop(), a.maskManager.pushMask(this.mask, a), a.spriteBatch.start()), b = 0; b < this.children.length; b++) this.children[b]._renderWebGL(a); a.spriteBatch.stop(), this._mask && a.maskManager.popMask(this._mask, a), this._filters && a.filterManager.popFilter(), a.spriteBatch.start() } else for (b = 0; b < this.children.length; b++) this.children[b]._renderWebGL(a) } }, b.DisplayObjectContainer.prototype._renderCanvas = function(a) { if (!1 !== this.visible && 0 !== this.alpha) { if (this._cacheAsBitmap) return void this._renderCachedSprite(a); this._mask && a.maskManager.pushMask(this._mask, a); for (var b = 0; b < this.children.length; b++) this.children[b]._renderCanvas(a); this._mask && a.maskManager.popMask(a) } }, Object.defineProperty(b.DisplayObjectContainer.prototype, "width", { get: function() { return this.getLocalBounds().width * this.scale.x }, set: function(a) { var b = this.getLocalBounds().width; this.scale.x = 0 !== b ? a / b : 1, this._width = a } }), Object.defineProperty(b.DisplayObjectContainer.prototype, "height", { get: function() { return this.getLocalBounds().height * this.scale.y }, set: function(a) { var b = this.getLocalBounds().height; this.scale.y = 0 !== b ? a / b : 1, this._height = a } }), b.Sprite = function(a) { b.DisplayObjectContainer.call(this), this.anchor = new b.Point, this.texture = a || b.Texture.emptyTexture, this._width = 0, this._height = 0, this.tint = 16777215, this.cachedTint = -1, this.tintedTexture = null, this.blendMode = b.blendModes.NORMAL, this.shader = null, this.exists = !0, this.texture.baseTexture.hasLoaded && this.onTextureUpdate(), this.renderable = !0 }, b.Sprite.prototype = Object.create(b.DisplayObjectContainer.prototype), b.Sprite.prototype.constructor = b.Sprite, Object.defineProperty(b.Sprite.prototype, "width", { get: function() { return this.scale.x * this.texture.frame.width }, set: function(a) { this.scale.x = a / this.texture.frame.width, this._width = a } }), Object.defineProperty(b.Sprite.prototype, "height", { get: function() { return this.scale.y * this.texture.frame.height }, set: function(a) { this.scale.y = a / this.texture.frame.height, this._height = a } }), b.Sprite.prototype.setTexture = function(a, b) { void 0 !== b && this.texture.baseTexture.destroy(), this.texture.baseTexture.skipRender = !1, this.texture = a, this.texture.valid = !0, this.cachedTint = -1 }, b.Sprite.prototype.onTextureUpdate = function() { this._width && (this.scale.x = this._width / this.texture.frame.width), this._height && (this.scale.y = this._height / this.texture.frame.height) }, b.Sprite.prototype.getBounds = function(a) { var b = this.texture.frame.width, c = this.texture.frame.height, d = b * (1 - this.anchor.x), e = b * -this.anchor.x, f = c * (1 - this.anchor.y), g = c * -this.anchor.y, h = a || this.worldTransform, i = h.a, j = h.b, k = h.c, l = h.d, m = h.tx, n = h.ty, o = -1 / 0, p = -1 / 0, q = 1 / 0, r = 1 / 0; if (0 === j && 0 === k) { if (i < 0) { i *= -1; var s = d; d = -e, e = -s } if (l < 0) { l *= -1; var s = f; f = -g, g = -s } q = i * e + m, o = i * d + m, r = l * g + n, p = l * f + n } else { var t = i * e + k * g + m, u = l * g + j * e + n, v = i * d + k * g + m, w = l * g + j * d + n, x = i * d + k * f + m, y = l * f + j * d + n, z = i * e + k * f + m, A = l * f + j * e + n; q = t < q ? t : q, q = v < q ? v : q, q = x < q ? x : q, q = z < q ? z : q, r = u < r ? u : r, r = w < r ? w : r, r = y < r ? y : r, r = A < r ? A : r, o = t > o ? t : o, o = v > o ? v : o, o = x > o ? x : o, o = z > o ? z : o, p = u > p ? u : p, p = w > p ? w : p, p = y > p ? y : p, p = A > p ? A : p } var B = this._bounds; return B.x = q, B.width = o - q, B.y = r, B.height = p - r, this._currentBounds = B, B }, b.Sprite.prototype.getLocalBounds = function() { var a = this.worldTransform; this.worldTransform = b.identityMatrix; for (var c = 0; c < this.children.length; c++) this.children[c].updateTransform(); var d = this.getBounds(); for (this.worldTransform = a, c = 0; c < this.children.length; c++) this.children[c].updateTransform(); return d }, b.Sprite.prototype._renderWebGL = function(a, b) { if (this.visible && !(this.alpha <= 0) && this.renderable) { var c = this.worldTransform; if (b && (c = b), this._mask || this._filters) { var d = a.spriteBatch; this._filters && (d.flush(), a.filterManager.pushFilter(this._filterBlock)), this._mask && (d.stop(), a.maskManager.pushMask(this.mask, a), d.start()), d.render(this); for (var e = 0; e < this.children.length; e++) this.children[e]._renderWebGL(a); d.stop(), this._mask && a.maskManager.popMask(this._mask, a), this._filters && a.filterManager.popFilter(), d.start() } else { a.spriteBatch.render(this); for (var e = 0; e < this.children.length; e++) this.children[e]._renderWebGL(a, c) } } }, b.Sprite.prototype._renderCanvas = function(a, c) { if (!(!this.visible || 0 === this.alpha || !this.renderable || this.texture.crop.width <= 0 || this.texture.crop.height <= 0)) { var d = this.worldTransform; if (c && (d = c), this.blendMode !== a.currentBlendMode && (a.currentBlendMode = this.blendMode, a.context.globalCompositeOperation = b.blendModesCanvas[a.currentBlendMode]), this._mask && a.maskManager.pushMask(this._mask, a), this.texture.valid) { var e = this.texture.baseTexture.resolution / a.resolution; a.context.globalAlpha = this.worldAlpha, a.smoothProperty && a.scaleMode !== this.texture.baseTexture.scaleMode && (a.scaleMode = this.texture.baseTexture.scaleMode, a.context[a.smoothProperty] = a.scaleMode === b.scaleModes.LINEAR); var f = this.texture.trim ? this.texture.trim.x - this.anchor.x * this.texture.trim.width : this.anchor.x * -this.texture.frame.width, g = this.texture.trim ? this.texture.trim.y - this.anchor.y * this.texture.trim.height : this.anchor.y * -this.texture.frame.height, h = d.tx * a.resolution + a.shakeX, i = d.ty * a.resolution + a.shakeY; a.roundPixels ? (a.context.setTransform(d.a, d.b, d.c, d.d, 0 | h, 0 | i), f |= 0, g |= 0) : a.context.setTransform(d.a, d.b, d.c, d.d, h, i); var j = this.texture.crop.width, k = this.texture.crop.height; if (f /= e, g /= e, 16777215 !== this.tint)(this.texture.requiresReTint || this.cachedTint !== this.tint) && (this.tintedTexture = b.CanvasTinter.getTintedTexture(this, this.tint), this.cachedTint = this.tint, this.texture.requiresReTint = !1), a.context.drawImage(this.tintedTexture, 0, 0, j, k, f, g, j / e, k / e); else { var l = this.texture.crop.x, m = this.texture.crop.y; a.context.drawImage(this.texture.baseTexture.source, l, m, j, k, f, g, j / e, k / e) } } for (var n = 0; n < this.children.length; n++) this.children[n]._renderCanvas(a); this._mask && a.maskManager.popMask(a) } }, b.SpriteBatch = function(a) { b.DisplayObjectContainer.call(this), this.textureThing = a, this.ready = !1 }, b.SpriteBatch.prototype = Object.create(b.DisplayObjectContainer.prototype), b.SpriteBatch.prototype.constructor = b.SpriteBatch, b.SpriteBatch.prototype.initWebGL = function(a) { this.fastSpriteBatch = new b.WebGLFastSpriteBatch(a), this.ready = !0 }, b.SpriteBatch.prototype.updateTransform = function() { this.displayObjectUpdateTransform() }, b.SpriteBatch.prototype._renderWebGL = function(a) {!this.visible || this.alpha <= 0 || !this.children.length || (this.ready || this.initWebGL(a.gl), this.fastSpriteBatch.gl !== a.gl && this.fastSpriteBatch.setContext(a.gl), a.spriteBatch.stop(), a.shaderManager.setShader(a.shaderManager.fastShader), this.fastSpriteBatch.begin(this, a), this.fastSpriteBatch.render(this), a.spriteBatch.start()) }, b.SpriteBatch.prototype._renderCanvas = function(a) { if (this.visible && !(this.alpha <= 0) && this.children.length) { var b = a.context; b.globalAlpha = this.worldAlpha, this.displayObjectUpdateTransform(); for (var c = this.worldTransform, d = !0, e = 0; e < this.children.length; e++) { var f = this.children[e]; if (f.visible) { var g = f.texture, h = g.frame; if (b.globalAlpha = this.worldAlpha * f.alpha, f.rotation % (2 * Math.PI) == 0) d && (b.setTransform(c.a, c.b, c.c, c.d, c.tx, c.ty), d = !1), b.drawImage(g.baseTexture.source, h.x, h.y, h.width, h.height, f.anchor.x * (-h.width * f.scale.x) + f.position.x + .5 + a.shakeX | 0, f.anchor.y * (-h.height * f.scale.y) + f.position.y + .5 + a.shakeY | 0, h.width * f.scale.x, h.height * f.scale.y); else { d || (d = !0), f.displayObjectUpdateTransform(); var i = f.worldTransform, j = i.tx * a.resolution + a.shakeX, k = i.ty * a.resolution + a.shakeY; a.roundPixels ? b.setTransform(i.a, i.b, i.c, i.d, 0 | j, 0 | k) : b.setTransform(i.a, i.b, i.c, i.d, j, k), b.drawImage(g.baseTexture.source, h.x, h.y, h.width, h.height, f.anchor.x * -h.width + .5 | 0, f.anchor.y * -h.height + .5 | 0, h.width, h.height) } } } } }, b.hex2rgb = function(a) { return [(a >> 16 & 255) / 255, (a >> 8 & 255) / 255, (255 & a) / 255] }, b.rgb2hex = function(a) { return (255 * a[0] << 16) + (255 * a[1] << 8) + 255 * a[2] }, b.canUseNewCanvasBlendModes = function() { if (void 0 === document) return !1; var a = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/", c = "AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==", d = new Image; d.src = a + "AP804Oa6" + c; var e = new Image; e.src = a + "/wCKxvRF" + c; var f = b.CanvasPool.create(this, 6, 1), g = f.getContext("2d"); if (g.globalCompositeOperation = "multiply", g.drawImage(d, 0, 0), g.drawImage(e, 2, 0), !g.getImageData(2, 0, 1, 1)) return !1; var h = g.getImageData(2, 0, 1, 1).data; return b.CanvasPool.remove(this), 255 === h[0] && 0 === h[1] && 0 === h[2] }, b.getNextPowerOfTwo = function(a) { if (a > 0 && 0 == (a & a - 1)) return a; for (var b = 1; b < a;) b <<= 1; return b }, b.isPowerOfTwo = function(a, b) { return a > 0 && 0 == (a & a - 1) && b > 0 && 0 == (b & b - 1) }, b.CanvasPool = { create: function(a, c, d) { var e, f = b.CanvasPool.getFirst(); if (-1 === f) { var g = { parent: a, canvas: document.createElement("canvas") }; b.CanvasPool.pool.push(g), e = g.canvas } else b.CanvasPool.pool[f].parent = a, e = b.CanvasPool.pool[f].canvas; return void 0 !== c && (e.width = c, e.height = d), e }, getFirst: function() { for (var a = b.CanvasPool.pool, c = 0; c < a.length; c++) if (!a[c].parent) return c; return -1 }, remove: function(a) { for (var c = b.CanvasPool.pool, d = 0; d < c.length; d++) c[d].parent === a && (c[d].parent = null, c[d].canvas.width = 1, c[d].canvas.height = 1) }, removeByCanvas: function(a) { for (var c = b.CanvasPool.pool, d = 0; d < c.length; d++) c[d].canvas === a && (c[d].parent = null, c[d].canvas.width = 1, c[d].canvas.height = 1) }, getTotal: function() { for (var a = b.CanvasPool.pool, c = 0, d = 0; d < a.length; d++) a[d].parent && c++; return c }, getFree: function() { for (var a = b.CanvasPool.pool, c = 0, d = 0; d < a.length; d++) a[d].parent || c++; return c } }, b.CanvasPool.pool = [], b.initDefaultShaders = function() {}, b.CompileVertexShader = function(a, c) { return b._CompileShader(a, c, a.VERTEX_SHADER) }, b.CompileFragmentShader = function(a, c) { return b._CompileShader(a, c, a.FRAGMENT_SHADER) }, b._CompileShader = function(a, b, c) { var d = b; Array.isArray(b) && (d = b.join("\n")); var e = a.createShader(c); return a.shaderSource(e, d), a.compileShader(e), a.getShaderParameter(e, a.COMPILE_STATUS) ? e : (window.console.log(a.getShaderInfoLog(e)), null) }, b.compileProgram = function(a, c, d) { var e = b.CompileFragmentShader(a, d), f = b.CompileVertexShader(a, c), g = a.createProgram(); return a.attachShader(g, f), a.attachShader(g, e), a.linkProgram(g), a.getProgramParameter(g, a.LINK_STATUS) || (window.console.log(a.getProgramInfoLog(g)), window.console.log("Could not initialise shaders")), g }, b.PixiShader = function(a) { this._UID = b._UID++, this.gl = a, this.program = null, this.fragmentSrc = ["precision lowp float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D uSampler;", "void main(void) {", " gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;", "}"], this.textureCount = 0, this.firstRun = !0, this.dirty = !0, this.attributes = [], this.init() }, b.PixiShader.prototype.constructor = b.PixiShader, b.PixiShader.prototype.init = function() { var a = this.gl, c = b.compileProgram(a, this.vertexSrc || b.PixiShader.defaultVertexSrc, this.fragmentSrc); a.useProgram(c), this.uSampler = a.getUniformLocation(c, "uSampler"), this.projectionVector = a.getUniformLocation(c, "projectionVector"), this.offsetVector = a.getUniformLocation(c, "offsetVector"), this.dimensions = a.getUniformLocation(c, "dimensions"), this.aVertexPosition = a.getAttribLocation(c, "aVertexPosition"), this.aTextureCoord = a.getAttribLocation(c, "aTextureCoord"), this.colorAttribute = a.getAttribLocation(c, "aColor"), -1 === this.colorAttribute && (this.colorAttribute = 2), this.attributes = [this.aVertexPosition, this.aTextureCoord, this.colorAttribute]; for (var d in this.uniforms) this.uniforms[d].uniformLocation = a.getUniformLocation(c, d); this.initUniforms(), this.program = c }, b.PixiShader.prototype.initUniforms = function() { this.textureCount = 1; var a, b = this.gl; for (var c in this.uniforms) { a = this.uniforms[c]; var d = a.type; "sampler2D" === d ? (a._init = !1, null !== a.value && this.initSampler2D(a)) : "mat2" === d || "mat3" === d || "mat4" === d ? (a.glMatrix = !0, a.glValueLength = 1, "mat2" === d ? a.glFunc = b.uniformMatrix2fv : "mat3" === d ? a.glFunc = b.uniformMatrix3fv : "mat4" === d && (a.glFunc = b.uniformMatrix4fv)) : (a.glFunc = b["uniform" + d], a.glValueLength = "2f" === d || "2i" === d ? 2 : "3f" === d || "3i" === d ? 3 : "4f" === d || "4i" === d ? 4 : 1) } }, b.PixiShader.prototype.initSampler2D = function(a) { if (a.value && a.value.baseTexture && a.value.baseTexture.hasLoaded) { var b = this.gl; if (b.activeTexture(b["TEXTURE" + this.textureCount]), b.bindTexture(b.TEXTURE_2D, a.value.baseTexture._glTextures[b.id]), a.textureData) { var c = a.textureData, d = c.magFilter ? c.magFilter : b.LINEAR, e = c.minFilter ? c.minFilter : b.LINEAR, f = c.wrapS ? c.wrapS : b.CLAMP_TO_EDGE, g = c.wrapT ? c.wrapT : b.CLAMP_TO_EDGE, h = c.luminance ? b.LUMINANCE : b.RGBA; if (c.repeat && (f = b.REPEAT, g = b.REPEAT), b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !!c.flipY), c.width) { var i = c.width ? c.width : 512, j = c.height ? c.height : 2, k = c.border ? c.border : 0; b.texImage2D(b.TEXTURE_2D, 0, h, i, j, k, h, b.UNSIGNED_BYTE, null) } else b.texImage2D(b.TEXTURE_2D, 0, h, b.RGBA, b.UNSIGNED_BYTE, a.value.baseTexture.source); b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MAG_FILTER, d), b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MIN_FILTER, e), b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_S, f), b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_T, g) } b.uniform1i(a.uniformLocation, this.textureCount), a._init = !0, this.textureCount++ } }, b.PixiShader.prototype.syncUniforms = function() { this.textureCount = 1; var a, c = this.gl; for (var d in this.uniforms) a = this.uniforms[d], 1 === a.glValueLength ? !0 === a.glMatrix ? a.glFunc.call(c, a.uniformLocation, a.transpose, a.value) : a.glFunc.call(c, a.uniformLocation, a.value) : 2 === a.glValueLength ? a.glFunc.call(c, a.uniformLocation, a.value.x, a.value.y) : 3 === a.glValueLength ? a.glFunc.call(c, a.uniformLocation, a.value.x, a.value.y, a.value.z) : 4 === a.glValueLength ? a.glFunc.call(c, a.uniformLocation, a.value.x, a.value.y, a.value.z, a.value.w) : "sampler2D" === a.type && (a._init ? (c.activeTexture(c["TEXTURE" + this.textureCount]), a.value.baseTexture._dirty[c.id] ? b.instances[c.id].updateTexture(a.value.baseTexture) : c.bindTexture(c.TEXTURE_2D, a.value.baseTexture._glTextures[c.id]), c.uniform1i(a.uniformLocation, this.textureCount), this.textureCount++) : this.initSampler2D(a)) }, b.PixiShader.prototype.destroy = function() { this.gl.deleteProgram(this.program), this.uniforms = null, this.gl = null, this.attributes = null }, b.PixiShader.defaultVertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec2 aTextureCoord;", "attribute vec4 aColor;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "const vec2 center = vec2(-1.0, 1.0);", "void main(void) {", " gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);", " vTextureCoord = aTextureCoord;", " vColor = vec4(aColor.rgb * aColor.a, aColor.a);", "}"], b.PixiFastShader = function(a) { this._UID = b._UID++, this.gl = a, this.program = null, this.fragmentSrc = ["precision lowp float;", "varying vec2 vTextureCoord;", "varying float vColor;", "uniform sampler2D uSampler;", "void main(void) {", " gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;", "}"], this.vertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec2 aPositionCoord;", "attribute vec2 aScale;", "attribute float aRotation;", "attribute vec2 aTextureCoord;", "attribute float aColor;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "uniform mat3 uMatrix;", "varying vec2 vTextureCoord;", "varying float vColor;", "const vec2 center = vec2(-1.0, 1.0);", "void main(void) {", " vec2 v;", " vec2 sv = aVertexPosition * aScale;", " v.x = (sv.x) * cos(aRotation) - (sv.y) * sin(aRotation);", " v.y = (sv.x) * sin(aRotation) + (sv.y) * cos(aRotation);", " v = ( uMatrix * vec3(v + aPositionCoord , 1.0) ).xy ;", " gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);", " vTextureCoord = aTextureCoord;", " vColor = aColor;", "}"], this.textureCount = 0, this.init() }, b.PixiFastShader.prototype.constructor = b.PixiFastShader, b.PixiFastShader.prototype.init = function() { var a = this.gl, c = b.compileProgram(a, this.vertexSrc, this.fragmentSrc); a.useProgram(c), this.uSampler = a.getUniformLocation(c, "uSampler"), this.projectionVector = a.getUniformLocation(c, "projectionVector"), this.offsetVector = a.getUniformLocation(c, "offsetVector"), this.dimensions = a.getUniformLocation(c, "dimensions"), this.uMatrix = a.getUniformLocation(c, "uMatrix"), this.aVertexPosition = a.getAttribLocation(c, "aVertexPosition"), this.aPositionCoord = a.getAttribLocation(c, "aPositionCoord"), this.aScale = a.getAttribLocation(c, "aScale"), this.aRotation = a.getAttribLocation(c, "aRotation"), this.aTextureCoord = a.getAttribLocation(c, "aTextureCoord"), this.colorAttribute = a.getAttribLocation(c, "aColor"), -1 === this.colorAttribute && (this.colorAttribute = 2), this.attributes = [this.aVertexPosition, this.aPositionCoord, this.aScale, this.aRotation, this.aTextureCoord, this.colorAttribute], this.program = c }, b.PixiFastShader.prototype.destroy = function() { this.gl.deleteProgram(this.program), this.uniforms = null, this.gl = null, this.attributes = null }, b.StripShader = function(a) { this._UID = b._UID++, this.gl = a, this.program = null, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "uniform float alpha;", "uniform sampler2D uSampler;", "void main(void) {", " gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * alpha;", "}"], this.vertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec2 aTextureCoord;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "varying vec2 vTextureCoord;", "void main(void) {", " vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", " v -= offsetVector.xyx;", " gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);", " vTextureCoord = aTextureCoord;", "}"], this.init() }, b.StripShader.prototype.constructor = b.StripShader, b.StripShader.prototype.init = function() { var a = this.gl, c = b.compileProgram(a, this.vertexSrc, this.fragmentSrc); a.useProgram(c), this.uSampler = a.getUniformLocation(c, "uSampler"), this.projectionVector = a.getUniformLocation(c, "projectionVector"), this.offsetVector = a.getUniformLocation(c, "offsetVector"), this.colorAttribute = a.getAttribLocation(c, "aColor"), this.aVertexPosition = a.getAttribLocation(c, "aVertexPosition"), this.aTextureCoord = a.getAttribLocation(c, "aTextureCoord"), this.attributes = [this.aVertexPosition, this.aTextureCoord], this.translationMatrix = a.getUniformLocation(c, "translationMatrix"), this.alpha = a.getUniformLocation(c, "alpha"), this.program = c }, b.StripShader.prototype.destroy = function() { this.gl.deleteProgram(this.program), this.uniforms = null, this.gl = null, this.attribute = null }, b.PrimitiveShader = function(a) { this._UID = b._UID++, this.gl = a, this.program = null, this.fragmentSrc = ["precision mediump float;", "varying vec4 vColor;", "void main(void) {", " gl_FragColor = vColor;", "}"], this.vertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec4 aColor;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "uniform float alpha;", "uniform float flipY;", "uniform vec3 tint;", "varying vec4 vColor;", "void main(void) {", " vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", " v -= offsetVector.xyx;", " gl_Position = vec4( v.x / projectionVector.x -1.0, (v.y / projectionVector.y * -flipY) + flipY , 0.0, 1.0);", " vColor = aColor * vec4(tint * alpha, alpha);", "}"], this.init() }, b.PrimitiveShader.prototype.constructor = b.PrimitiveShader, b.PrimitiveShader.prototype.init = function() { var a = this.gl, c = b.compileProgram(a, this.vertexSrc, this.fragmentSrc); a.useProgram(c), this.projectionVector = a.getUniformLocation(c, "projectionVector"), this.offsetVector = a.getUniformLocation(c, "offsetVector"), this.tintColor = a.getUniformLocation(c, "tint"), this.flipY = a.getUniformLocation(c, "flipY"), this.aVertexPosition = a.getAttribLocation(c, "aVertexPosition"), this.colorAttribute = a.getAttribLocation(c, "aColor"), this.attributes = [this.aVertexPosition, this.colorAttribute], this.translationMatrix = a.getUniformLocation(c, "translationMatrix"), this.alpha = a.getUniformLocation(c, "alpha"), this.program = c }, b.PrimitiveShader.prototype.destroy = function() { this.gl.deleteProgram(this.program), this.uniforms = null, this.gl = null, this.attributes = null }, b.ComplexPrimitiveShader = function(a) { this._UID = b._UID++, this.gl = a, this.program = null, this.fragmentSrc = ["precision mediump float;", "varying vec4 vColor;", "void main(void) {", " gl_FragColor = vColor;", "}"], this.vertexSrc = ["attribute vec2 aVertexPosition;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "uniform vec3 tint;", "uniform float alpha;", "uniform vec3 color;", "uniform float flipY;", "varying vec4 vColor;", "void main(void) {", " vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", " v -= offsetVector.xyx;", " gl_Position = vec4( v.x / projectionVector.x -1.0, (v.y / projectionVector.y * -flipY) + flipY , 0.0, 1.0);", " vColor = vec4(color * alpha * tint, alpha);", "}"], this.init() }, b.ComplexPrimitiveShader.prototype.constructor = b.ComplexPrimitiveShader, b.ComplexPrimitiveShader.prototype.init = function() { var a = this.gl, c = b.compileProgram(a, this.vertexSrc, this.fragmentSrc); a.useProgram(c), this.projectionVector = a.getUniformLocation(c, "projectionVector"), this.offsetVector = a.getUniformLocation(c, "offsetVector"), this.tintColor = a.getUniformLocation(c, "tint"), this.color = a.getUniformLocation(c, "color"), this.flipY = a.getUniformLocation(c, "flipY"), this.aVertexPosition = a.getAttribLocation(c, "aVertexPosition"), this.attributes = [this.aVertexPosition, this.colorAttribute], this.translationMatrix = a.getUniformLocation(c, "translationMatrix"), this.alpha = a.getUniformLocation(c, "alpha"), this.program = c }, b.ComplexPrimitiveShader.prototype.destroy = function() { this.gl.deleteProgram(this.program), this.uniforms = null, this.gl = null, this.attribute = null }, b.glContexts = [], b.instances = [], b.WebGLRenderer = function(a) { this.game = a, b.defaultRenderer || (b.defaultRenderer = this), this.type = b.WEBGL_RENDERER, this.resolution = a.resolution, this.transparent = a.transparent, this.autoResize = !1, this.preserveDrawingBuffer = a.preserveDrawingBuffer, this.clearBeforeRender = a.clearBeforeRender, this.width = a.width, this.height = a.height, this.view = a.canvas, this._contextOptions = { alpha: this.transparent, antialias: a.antialias, premultipliedAlpha: this.transparent && "notMultiplied" !== this.transparent, stencil: !0, preserveDrawingBuffer: this.preserveDrawingBuffer }, this.projection = new b.Point, this.offset = new b.Point, this.shaderManager = new b.WebGLShaderManager, this.spriteBatch = new b.WebGLSpriteBatch, this.maskManager = new b.WebGLMaskManager, this.filterManager = new b.WebGLFilterManager, this.stencilManager = new b.WebGLStencilManager, this.blendModeManager = new b.WebGLBlendModeManager, this.renderSession = {}, this.renderSession.game = this.game, this.renderSession.gl = this.gl, this.renderSession.drawCount = 0, this.renderSession.shaderManager = this.shaderManager, this.renderSession.maskManager = this.maskManager, this.renderSession.filterManager = this.filterManager, this.renderSession.blendModeManager = this.blendModeManager, this.renderSession.spriteBatch = this.spriteBatch, this.renderSession.stencilManager = this.stencilManager, this.renderSession.renderer = this, this.renderSession.resolution = this.resolution, this.initContext(), this.mapBlendModes() }, b.WebGLRenderer.prototype.constructor = b.WebGLRenderer, b.WebGLRenderer.prototype.initContext = function() { var a = this.view.getContext("webgl", this._contextOptions) || this.view.getContext("experimental-webgl", this._contextOptions); if (this.gl = a, !a) throw new Error("This browser does not support webGL. Try using the canvas renderer"); this.glContextId = a.id = b.WebGLRenderer.glContextId++, b.glContexts[this.glContextId] = a, b.instances[this.glContextId] = this, a.disable(a.DEPTH_TEST), a.disable(a.CULL_FACE), a.enable(a.BLEND), this.shaderManager.setContext(a), this.spriteBatch.setContext(a), this.maskManager.setContext(a), this.filterManager.setContext(a), this.blendModeManager.setContext(a), this.stencilManager.setContext(a), this.renderSession.gl = this.gl, this.resize(this.width, this.height) }, b.WebGLRenderer.prototype.render = function(a) { if (!this.contextLost) { var b = this.gl; b.viewport(0, 0, this.width, this.height), b.bindFramebuffer(b.FRAMEBUFFER, null), this.game.clearBeforeRender && (b.clearColor(a._bgColor.r, a._bgColor.g, a._bgColor.b, a._bgColor.a), b.clear(b.COLOR_BUFFER_BIT)), this.offset.x = this.game.camera._shake.x, this.offset.y = this.game.camera._shake.y, this.renderDisplayObject(a, this.projection) } }, b.WebGLRenderer.prototype.renderDisplayObject = function(a, c, d, e) { this.renderSession.blendModeManager.setBlendMode(b.blendModes.NORMAL), this.renderSession.drawCount = 0, this.renderSession.flipY = d ? -1 : 1, this.renderSession.projection = c, this.renderSession.offset = this.offset, this.spriteBatch.begin(this.renderSession), this.filterManager.begin(this.renderSession, d), a._renderWebGL(this.renderSession, e), this.spriteBatch.end() }, b.WebGLRenderer.prototype.resize = function(a, b) { this.width = a * this.resolution, this.height = b * this.resolution, this.view.width = this.width, this.view.height = this.height, this.autoResize && (this.view.style.width = this.width / this.resolution + "px", this.view.style.height = this.height / this.resolution + "px"), this.gl.viewport(0, 0, this.width, this.height), this.projection.x = this.width / 2 / this.resolution, this.projection.y = -this.height / 2 / this.resolution }, b.WebGLRenderer.prototype.updateTexture = function(a) { if (!a.hasLoaded) return !1; var c = this.gl; return a._glTextures[c.id] || (a._glTextures[c.id] = c.createTexture()), c.bindTexture(c.TEXTURE_2D, a._glTextures[c.id]), c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL, a.premultipliedAlpha), c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, a.source), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, a.scaleMode === b.scaleModes.LINEAR ? c.LINEAR : c.NEAREST), a.mipmap && b.isPowerOfTwo(a.width, a.height) ? (c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, a.scaleMode === b.scaleModes.LINEAR ? c.LINEAR_MIPMAP_LINEAR : c.NEAREST_MIPMAP_NEAREST), c.generateMipmap(c.TEXTURE_2D)) : c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, a.scaleMode === b.scaleModes.LINEAR ? c.LINEAR : c.NEAREST), a._powerOf2 ? (c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.REPEAT), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.REPEAT)) : (c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)), a._dirty[c.id] = !1, !0 }, b.WebGLRenderer.prototype.destroy = function() { b.glContexts[this.glContextId] = null, this.projection = null, this.offset = null, this.shaderManager.destroy(), this.spriteBatch.destroy(), this.maskManager.destroy(), this.filterManager.destroy(), this.shaderManager = null, this.spriteBatch = null, this.maskManager = null, this.filterManager = null, this.gl = null, this.renderSession = null, b.CanvasPool.remove(this), b.instances[this.glContextId] = null, b.WebGLRenderer.glContextId-- }, b.WebGLRenderer.prototype.mapBlendModes = function() { var a = this.gl; if (!b.blendModesWebGL) { var c = [], d = b.blendModes; c[d.NORMAL] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.ADD] = [a.SRC_ALPHA, a.DST_ALPHA], c[d.MULTIPLY] = [a.DST_COLOR, a.ONE_MINUS_SRC_ALPHA], c[d.SCREEN] = [a.SRC_ALPHA, a.ONE], c[d.OVERLAY] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.DARKEN] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.LIGHTEN] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.COLOR_DODGE] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.COLOR_BURN] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.HARD_LIGHT] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.SOFT_LIGHT] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.DIFFERENCE] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.EXCLUSION] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.HUE] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.SATURATION] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.COLOR] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], c[d.LUMINOSITY] = [a.ONE, a.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL = c } }, b.WebGLRenderer.glContextId = 0, b.WebGLBlendModeManager = function() { this.currentBlendMode = 99999 }, b.WebGLBlendModeManager.prototype.constructor = b.WebGLBlendModeManager, b.WebGLBlendModeManager.prototype.setContext = function(a) { this.gl = a }, b.WebGLBlendModeManager.prototype.setBlendMode = function(a) { if (this.currentBlendMode === a) return !1; this.currentBlendMode = a; var c = b.blendModesWebGL[this.currentBlendMode]; return c && this.gl.blendFunc(c[0], c[1]), !0 }, b.WebGLBlendModeManager.prototype.destroy = function() { this.gl = null }, b.WebGLMaskManager = function() {}, b.WebGLMaskManager.prototype.constructor = b.WebGLMaskManager, b.WebGLMaskManager.prototype.setContext = function(a) { this.gl = a }, b.WebGLMaskManager.prototype.pushMask = function(a, c) { var d = c.gl; a.dirty && b.WebGLGraphics.updateGraphics(a, d), void 0 !== a._webGL[d.id] && void 0 !== a._webGL[d.id].data && 0 !== a._webGL[d.id].data.length && c.stencilManager.pushStencil(a, a._webGL[d.id].data[0], c) }, b.WebGLMaskManager.prototype.popMask = function(a, b) { var c = this.gl; void 0 !== a._webGL[c.id] && void 0 !== a._webGL[c.id].data && 0 !== a._webGL[c.id].data.length && b.stencilManager.popStencil(a, a._webGL[c.id].data[0], b) }, b.WebGLMaskManager.prototype.destroy = function() { this.gl = null }, b.WebGLStencilManager = function() { this.stencilStack = [], this.reverse = !0, this.count = 0 }, b.WebGLStencilManager.prototype.setContext = function(a) { this.gl = a }, b.WebGLStencilManager.prototype.pushStencil = function(a, b, c) { var d = this.gl; this.bindGraphics(a, b, c), 0 === this.stencilStack.length && (d.enable(d.STENCIL_TEST), d.clear(d.STENCIL_BUFFER_BIT), this.reverse = !0, this.count = 0), this.stencilStack.push(b); var e = this.count; d.colorMask(!1, !1, !1, !1), d.stencilFunc(d.ALWAYS, 0, 255), d.stencilOp(d.KEEP, d.KEEP, d.INVERT), 1 === b.mode ? (d.drawElements(d.TRIANGLE_FAN, b.indices.length - 4, d.UNSIGNED_SHORT, 0), this.reverse ? (d.stencilFunc(d.EQUAL, 255 - e, 255), d.stencilOp(d.KEEP, d.KEEP, d.DECR)) : (d.stencilFunc(d.EQUAL, e, 255), d.stencilOp(d.KEEP, d.KEEP, d.INCR)), d.drawElements(d.TRIANGLE_FAN, 4, d.UNSIGNED_SHORT, 2 * (b.indices.length - 4)), this.reverse ? d.stencilFunc(d.EQUAL, 255 - (e + 1), 255) : d.stencilFunc(d.EQUAL, e + 1, 255), this.reverse = !this.reverse) : (this.reverse ? (d.stencilFunc(d.EQUAL, e, 255), d.stencilOp(d.KEEP, d.KEEP, d.INCR)) : (d.stencilFunc(d.EQUAL, 255 - e, 255), d.stencilOp(d.KEEP, d.KEEP, d.DECR)), d.drawElements(d.TRIANGLE_STRIP, b.indices.length, d.UNSIGNED_SHORT, 0), this.reverse ? d.stencilFunc(d.EQUAL, e + 1, 255) : d.stencilFunc(d.EQUAL, 255 - (e + 1), 255)), d.colorMask(!0, !0, !0, !0), d.stencilOp(d.KEEP, d.KEEP, d.KEEP), this.count++ }, b.WebGLStencilManager.prototype.bindGraphics = function(a, c, d) { this._currentGraphics = a; var e, f = this.gl, g = d.projection, h = d.offset; 1 === c.mode ? (e = d.shaderManager.complexPrimitiveShader, d.shaderManager.setShader(e), f.uniform1f(e.flipY, d.flipY), f.uniformMatrix3fv(e.translationMatrix, !1, a.worldTransform.toArray(!0)), f.uniform2f(e.projectionVector, g.x, -g.y), f.uniform2f(e.offsetVector, -h.x, -h.y), f.uniform3fv(e.tintColor, b.hex2rgb(a.tint)), f.uniform3fv(e.color, c.color), f.uniform1f(e.alpha, a.worldAlpha * c.alpha), f.bindBuffer(f.ARRAY_BUFFER, c.buffer), f.vertexAttribPointer(e.aVertexPosition, 2, f.FLOAT, !1, 8, 0), f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, c.indexBuffer)) : (e = d.shaderManager.primitiveShader, d.shaderManager.setShader(e), f.uniformMatrix3fv(e.translationMatrix, !1, a.worldTransform.toArray(!0)), f.uniform1f(e.flipY, d.flipY), f.uniform2f(e.projectionVector, g.x, -g.y), f.uniform2f(e.offsetVector, -h.x, -h.y), f.uniform3fv(e.tintColor, b.hex2rgb(a.tint)), f.uniform1f(e.alpha, a.worldAlpha), f.bindBuffer(f.ARRAY_BUFFER, c.buffer), f.vertexAttribPointer(e.aVertexPosition, 2, f.FLOAT, !1, 24, 0), f.vertexAttribPointer(e.colorAttribute, 4, f.FLOAT, !1, 24, 8), f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, c.indexBuffer)) }, b.WebGLStencilManager.prototype.popStencil = function(a, b, c) { var d = this.gl; if (this.stencilStack.pop(), this.count--, 0 === this.stencilStack.length) d.disable(d.STENCIL_TEST); else { var e = this.count; this.bindGraphics(a, b, c), d.colorMask(!1, !1, !1, !1), 1 === b.mode ? (this.reverse = !this.reverse, this.reverse ? (d.stencilFunc(d.EQUAL, 255 - (e + 1), 255), d.stencilOp(d.KEEP, d.KEEP, d.INCR)) : (d.stencilFunc(d.EQUAL, e + 1, 255), d.stencilOp(d.KEEP, d.KEEP, d.DECR)), d.drawElements(d.TRIANGLE_FAN, 4, d.UNSIGNED_SHORT, 2 * (b.indices.length - 4)), d.stencilFunc(d.ALWAYS, 0, 255), d.stencilOp(d.KEEP, d.KEEP, d.INVERT), d.drawElements(d.TRIANGLE_FAN, b.indices.length - 4, d.UNSIGNED_SHORT, 0), this.reverse ? d.stencilFunc(d.EQUAL, e, 255) : d.stencilFunc(d.EQUAL, 255 - e, 255)) : (this.reverse ? (d.stencilFunc(d.EQUAL, e + 1, 255), d.stencilOp(d.KEEP, d.KEEP, d.DECR)) : (d.stencilFunc(d.EQUAL, 255 - (e + 1), 255), d.stencilOp(d.KEEP, d.KEEP, d.INCR)), d.drawElements(d.TRIANGLE_STRIP, b.indices.length, d.UNSIGNED_SHORT, 0), this.reverse ? d.stencilFunc(d.EQUAL, e, 255) : d.stencilFunc(d.EQUAL, 255 - e, 255)), d.colorMask(!0, !0, !0, !0), d.stencilOp(d.KEEP, d.KEEP, d.KEEP) } }, b.WebGLStencilManager.prototype.destroy = function() { this.stencilStack = null, this.gl = null }, b.WebGLShaderManager = function() { this.maxAttibs = 10, this.attribState = [], this.tempAttribState = []; for (var a = 0; a < this.maxAttibs; a++) this.attribState[a] = !1; this.stack = [] }, b.WebGLShaderManager.prototype.constructor = b.WebGLShaderManager, b.WebGLShaderManager.prototype.setContext = function(a) { this.gl = a, this.primitiveShader = new b.PrimitiveShader(a), this.complexPrimitiveShader = new b.ComplexPrimitiveShader(a), this.defaultShader = new b.PixiShader(a), this.fastShader = new b.PixiFastShader(a), this.stripShader = new b.StripShader(a), this.setShader(this.defaultShader) }, b.WebGLShaderManager.prototype.setAttribs = function(a) { var b; for (b = 0; b < this.tempAttribState.length; b++) this.tempAttribState[b] = !1; for (b = 0; b < a.length; b++) { var c = a[b]; this.tempAttribState[c] = !0 } var d = this.gl; for (b = 0; b < this.attribState.length; b++) this.attribState[b] !== this.tempAttribState[b] && (this.attribState[b] = this.tempAttribState[b], this.tempAttribState[b] ? d.enableVertexAttribArray(b) : d.disableVertexAttribArray(b)) }, b.WebGLShaderManager.prototype.setShader = function(a) { return this._currentId !== a._UID && (this._currentId = a._UID, this.currentShader = a, this.gl.useProgram(a.program), this.setAttribs(a.attributes), !0) }, b.WebGLShaderManager.prototype.destroy = function() { this.attribState = null, this.tempAttribState = null, this.primitiveShader.destroy(), this.complexPrimitiveShader.destroy(), this.defaultShader.destroy(), this.fastShader.destroy(), this.stripShader.destroy(), this.gl = null }, b.WebGLSpriteBatch = function() { this.vertSize = 5, this.size = 2e3; var a = 4 * this.size * 4 * this.vertSize, c = 6 * this.size; this.vertices = new b.ArrayBuffer(a), this.positions = new b.Float32Array(this.vertices), this.colors = new b.Uint32Array(this.vertices), this.indices = new b.Uint16Array(c), this.lastIndexCount = 0; for (var d = 0, e = 0; d < c; d += 6, e += 4) this.indices[d + 0] = e + 0, this.indices[d + 1] = e + 1, this.indices[d + 2] = e + 2, this.indices[d + 3] = e + 0, this.indices[d + 4] = e + 2, this.indices[d + 5] = e + 3; this.drawing = !1, this.currentBatchSize = 0, this.currentBaseTexture = null, this.dirty = !0, this.textures = [], this.blendModes = [], this.shaders = [], this.sprites = [], this.defaultShader = new b.AbstractFilter(["precision lowp float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D uSampler;", "void main(void) {", " gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;", "}"]) }, b.WebGLSpriteBatch.prototype.setContext = function(a) { this.gl = a, this.vertexBuffer = a.createBuffer(), this.indexBuffer = a.createBuffer(), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer), a.bufferData(a.ELEMENT_ARRAY_BUFFER, this.indices, a.STATIC_DRAW), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), a.bufferData(a.ARRAY_BUFFER, this.vertices, a.DYNAMIC_DRAW), this.currentBlendMode = 99999; var c = new b.PixiShader(a); c.fragmentSrc = this.defaultShader.fragmentSrc, c.uniforms = {}, c.init(), this.defaultShader.shaders[a.id] = c }, b.WebGLSpriteBatch.prototype.begin = function(a) { this.renderSession = a, this.shader = this.renderSession.shaderManager.defaultShader, this.start() }, b.WebGLSpriteBatch.prototype.end = function() { this.flush() }, b.WebGLSpriteBatch.prototype.render = function(a, b) { var c = a.texture, d = a.worldTransform; b && (d = b), this.currentBatchSize >= this.size && (this.flush(), this.currentBaseTexture = c.baseTexture); var e = c._uvs; if (e) { var f, g, h, i, j = a.anchor.x, k = a.anchor.y; if (c.trim) { var l = c.trim; g = l.x - j * l.width, f = g + c.crop.width, i = l.y - k * l.height, h = i + c.crop.height } else f = c.frame.width * (1 - j), g = c.frame.width * -j, h = c.frame.height * (1 - k), i = c.frame.height * -k; var m = 4 * this.currentBatchSize * this.vertSize, n = c.baseTexture.resolution, o = d.a / n, p = d.b / n, q = d.c / n, r = d.d / n, s = d.tx, t = d.ty, u = this.colors, v = this.positions; this.renderSession.roundPixels ? (v[m] = o * g + q * i + s | 0, v[m + 1] = r * i + p * g + t | 0, v[m + 5] = o * f + q * i + s | 0, v[m + 6] = r * i + p * f + t | 0, v[m + 10] = o * f + q * h + s | 0, v[m + 11] = r * h + p * f + t | 0, v[m + 15] = o * g + q * h + s | 0, v[m + 16] = r * h + p * g + t | 0) : (v[m] = o * g + q * i + s, v[m + 1] = r * i + p * g + t, v[m + 5] = o * f + q * i + s, v[m + 6] = r * i + p * f + t, v[m + 10] = o * f + q * h + s, v[m + 11] = r * h + p * f + t, v[m + 15] = o * g + q * h + s, v[m + 16] = r * h + p * g + t), v[m + 2] = e.x0, v[m + 3] = e.y0, v[m + 7] = e.x1, v[m + 8] = e.y1, v[m + 12] = e.x2, v[m + 13] = e.y2, v[m + 17] = e.x3, v[m + 18] = e.y3; var w = a.tint; u[m + 4] = u[m + 9] = u[m + 14] = u[m + 19] = (w >> 16) + (65280 & w) + ((255 & w) << 16) + (255 * a.worldAlpha << 24), this.sprites[this.currentBatchSize++] = a } }, b.WebGLSpriteBatch.prototype.renderTilingSprite = function(a) { var c = a.tilingTexture; this.currentBatchSize >= this.size && (this.flush(), this.currentBaseTexture = c.baseTexture), a._uvs || (a._uvs = new b.TextureUvs); var d = a._uvs, e = c.baseTexture.width, f = c.baseTexture.height; a.tilePosition.x %= e * a.tileScaleOffset.x, a.tilePosition.y %= f * a.tileScaleOffset.y; var g = a.tilePosition.x / (e * a.tileScaleOffset.x), h = a.tilePosition.y / (f * a.tileScaleOffset.y), i = a.width / e / (a.tileScale.x * a.tileScaleOffset.x), j = a.height / f / (a.tileScale.y * a.tileScaleOffset.y); d.x0 = 0 - g, d.y0 = 0 - h, d.x1 = 1 * i - g, d.y1 = 0 - h, d.x2 = 1 * i - g, d.y2 = 1 * j - h, d.x3 = 0 - g, d.y3 = 1 * j - h; var k = a.tint, l = (k >> 16) + (65280 & k) + ((255 & k) << 16) + (255 * a.worldAlpha << 24), m = this.positions, n = this.colors, o = a.width, p = a.height, q = a.anchor.x, r = a.anchor.y, s = o * (1 - q), t = o * -q, u = p * (1 - r), v = p * -r, w = 4 * this.currentBatchSize * this.vertSize, x = c.baseTexture.resolution, y = a.worldTransform, z = y.a / x, A = y.b / x, B = y.c / x, C = y.d / x, D = y.tx, E = y.ty; m[w++] = z * t + B * v + D, m[w++] = C * v + A * t + E, m[w++] = d.x0, m[w++] = d.y0, n[w++] = l, m[w++] = z * s + B * v + D, m[w++] = C * v + A * s + E, m[w++] = d.x1, m[w++] = d.y1, n[w++] = l, m[w++] = z * s + B * u + D, m[w++] = C * u + A * s + E, m[w++] = d.x2, m[w++] = d.y2, n[w++] = l, m[w++] = z * t + B * u + D, m[w++] = C * u + A * t + E, m[w++] = d.x3, m[w++] = d.y3, n[w++] = l, this.sprites[this.currentBatchSize++] = a }, b.WebGLSpriteBatch.prototype.flush = function() { if (0 !== this.currentBatchSize) { var a, c = this.gl; if (this.dirty) { this.dirty = !1, c.activeTexture(c.TEXTURE0), c.bindBuffer(c.ARRAY_BUFFER, this.vertexBuffer), c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, this.indexBuffer), a = this.defaultShader.shaders[c.id]; var d = 4 * this.vertSize; c.vertexAttribPointer(a.aVertexPosition, 2, c.FLOAT, !1, d, 0), c.vertexAttribPointer(a.aTextureCoord, 2, c.FLOAT, !1, d, 8), c.vertexAttribPointer(a.colorAttribute, 4, c.UNSIGNED_BYTE, !0, d, 16) } if (this.currentBatchSize > .5 * this.size) c.bufferSubData(c.ARRAY_BUFFER, 0, this.vertices); else { var e = this.positions.subarray(0, 4 * this.currentBatchSize * this.vertSize); c.bufferSubData(c.ARRAY_BUFFER, 0, e) } for (var f, g, h, i, j = 0, k = 0, l = null, m = this.renderSession.blendModeManager.currentBlendMode, n = null, o = !1, p = !1, q = 0, r = this.currentBatchSize; q < r; q++) { i = this.sprites[q], f = i.tilingTexture ? i.tilingTexture.baseTexture : i.texture.baseTexture, g = i.blendMode, h = i.shader || this.defaultShader, o = m !== g, p = n !== h; var s = f.skipRender; if (s && i.children.length > 0 && (s = !1), (l !== f && !s || o || p) && (this.renderBatch(l, j, k), k = q, j = 0, l = f, o && (m = g, this.renderSession.blendModeManager.setBlendMode(m)), p)) { n = h, a = n.shaders[c.id], a || (a = new b.PixiShader(c), a.fragmentSrc = n.fragmentSrc, a.uniforms = n.uniforms, a.init(), n.shaders[c.id] = a), this.renderSession.shaderManager.setShader(a), a.dirty && a.syncUniforms(); var t = this.renderSession.projection; c.uniform2f(a.projectionVector, t.x, t.y); var u = this.renderSession.offset; c.uniform2f(a.offsetVector, u.x, u.y) } j++ } this.renderBatch(l, j, k), this.currentBatchSize = 0 } }, b.WebGLSpriteBatch.prototype.renderBatch = function(a, b, c) { if (0 !== b) { var d = this.gl; if (a._dirty[d.id]) { if (!this.renderSession.renderer.updateTexture(a)) return } else d.bindTexture(d.TEXTURE_2D, a._glTextures[d.id]); d.drawElements(d.TRIANGLES, 6 * b, d.UNSIGNED_SHORT, 6 * c * 2), this.renderSession.drawCount++ } }, b.WebGLSpriteBatch.prototype.stop = function() { this.flush(), this.dirty = !0 }, b.WebGLSpriteBatch.prototype.start = function() { this.dirty = !0 }, b.WebGLSpriteBatch.prototype.destroy = function() { this.vertices = null, this.indices = null, this.gl.deleteBuffer(this.vertexBuffer), this.gl.deleteBuffer(this.indexBuffer), this.currentBaseTexture = null, this.gl = null }, b.WebGLFastSpriteBatch = function(a) { this.vertSize = 10, this.maxSize = 6e3, this.size = this.maxSize; var c = 4 * this.size * this.vertSize, d = 6 * this.maxSize; this.vertices = new b.Float32Array(c), this.indices = new b.Uint16Array(d), this.vertexBuffer = null, this.indexBuffer = null, this.lastIndexCount = 0; for (var e = 0, f = 0; e < d; e += 6, f += 4) this.indices[e + 0] = f + 0, this.indices[e + 1] = f + 1, this.indices[e + 2] = f + 2, this.indices[e + 3] = f + 0, this.indices[e + 4] = f + 2, this.indices[e + 5] = f + 3; this.drawing = !1, this.currentBatchSize = 0, this.currentBaseTexture = null, this.currentBlendMode = 0, this.renderSession = null, this.shader = null, this.matrix = null, this.setContext(a) }, b.WebGLFastSpriteBatch.prototype.constructor = b.WebGLFastSpriteBatch, b.WebGLFastSpriteBatch.prototype.setContext = function(a) { this.gl = a, this.vertexBuffer = a.createBuffer(), this.indexBuffer = a.createBuffer(), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer), a.bufferData(a.ELEMENT_ARRAY_BUFFER, this.indices, a.STATIC_DRAW), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), a.bufferData(a.ARRAY_BUFFER, this.vertices, a.DYNAMIC_DRAW) }, b.WebGLFastSpriteBatch.prototype.begin = function(a, b) { this.renderSession = b, this.shader = this.renderSession.shaderManager.fastShader, this.matrix = a.worldTransform.toArray(!0), this.start() }, b.WebGLFastSpriteBatch.prototype.end = function() { this.flush() }, b.WebGLFastSpriteBatch.prototype.render = function(a) { var b = a.children, c = b[0]; if (c.texture._uvs) { this.currentBaseTexture = c.texture.baseTexture, c.blendMode !== this.renderSession.blendModeManager.currentBlendMode && (this.flush(), this.renderSession.blendModeManager.setBlendMode(c.blendMode)); for (var d = 0, e = b.length; d < e; d++) this.renderSprite(b[d]); this.flush() } }, b.WebGLFastSpriteBatch.prototype.renderSprite = function(a) { if (a.visible && (a.texture.baseTexture === this.currentBaseTexture || a.texture.baseTexture.skipRender || (this.flush(), this.currentBaseTexture = a.texture.baseTexture, a.texture._uvs))) { var b, c, d, e, f, g, h = this.vertices; if (b = a.texture._uvs, a.texture.frame.width, a.texture.frame.height, a.texture.trim) { var i = a.texture.trim; d = i.x - a.anchor.x * i.width, c = d + a.texture.crop.width, f = i.y - a.anchor.y * i.height, e = f + a.texture.crop.height } else c = a.texture.frame.width * (1 - a.anchor.x), d = a.texture.frame.width * -a.anchor.x, e = a.texture.frame.height * (1 - a.anchor.y), f = a.texture.frame.height * -a.anchor.y; g = 4 * this.currentBatchSize * this.vertSize, h[g++] = d, h[g++] = f, h[g++] = a.position.x, h[g++] = a.position.y, h[g++] = a.scale.x, h[g++] = a.scale.y, h[g++] = a.rotation, h[g++] = b.x0, h[g++] = b.y1, h[g++] = a.alpha, h[g++] = c, h[g++] = f, h[g++] = a.position.x, h[g++] = a.position.y, h[g++] = a.scale.x, h[g++] = a.scale.y, h[g++] = a.rotation, h[g++] = b.x1, h[g++] = b.y1, h[g++] = a.alpha, h[g++] = c, h[g++] = e, h[g++] = a.position.x, h[g++] = a.position.y, h[g++] = a.scale.x, h[g++] = a.scale.y, h[g++] = a.rotation, h[g++] = b.x2, h[g++] = b.y2, h[g++] = a.alpha, h[g++] = d, h[g++] = e, h[g++] = a.position.x, h[g++] = a.position.y, h[g++] = a.scale.x, h[g++] = a.scale.y, h[g++] = a.rotation, h[g++] = b.x3, h[g++] = b.y3, h[g++] = a.alpha, this.currentBatchSize++, this.currentBatchSize >= this.size && this.flush() } }, b.WebGLFastSpriteBatch.prototype.flush = function() { if (0 !== this.currentBatchSize) { var a = this.gl; if (this.currentBaseTexture._glTextures[a.id] || this.renderSession.renderer.updateTexture(this.currentBaseTexture, a), a.bindTexture(a.TEXTURE_2D, this.currentBaseTexture._glTextures[a.id]), this.currentBatchSize > .5 * this.size) a.bufferSubData(a.ARRAY_BUFFER, 0, this.vertices); else { var b = this.vertices.subarray(0, 4 * this.currentBatchSize * this.vertSize); a.bufferSubData(a.ARRAY_BUFFER, 0, b) } a.drawElements(a.TRIANGLES, 6 * this.currentBatchSize, a.UNSIGNED_SHORT, 0), this.currentBatchSize = 0, this.renderSession.drawCount++ } }, b.WebGLFastSpriteBatch.prototype.stop = function() { this.flush() }, b.WebGLFastSpriteBatch.prototype.start = function() { var a = this.gl; a.activeTexture(a.TEXTURE0), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer); var b = this.renderSession.projection; a.uniform2f(this.shader.projectionVector, b.x, b.y), a.uniformMatrix3fv(this.shader.uMatrix, !1, this.matrix); var c = 4 * this.vertSize; a.vertexAttribPointer(this.shader.aVertexPosition, 2, a.FLOAT, !1, c, 0), a.vertexAttribPointer(this.shader.aPositionCoord, 2, a.FLOAT, !1, c, 8), a.vertexAttribPointer(this.shader.aScale, 2, a.FLOAT, !1, c, 16), a.vertexAttribPointer(this.shader.aRotation, 1, a.FLOAT, !1, c, 24), a.vertexAttribPointer(this.shader.aTextureCoord, 2, a.FLOAT, !1, c, 28), a.vertexAttribPointer(this.shader.colorAttribute, 1, a.FLOAT, !1, c, 36) }, b.WebGLFilterManager = function() { this.filterStack = [], this.offsetX = 0, this.offsetY = 0 }, b.WebGLFilterManager.prototype.constructor = b.WebGLFilterManager, b.WebGLFilterManager.prototype.setContext = function(a) { this.gl = a, this.texturePool = [], this.initShaderBuffers() }, b.WebGLFilterManager.prototype.begin = function(a, b) { this.renderSession = a, this.defaultShader = a.shaderManager.defaultShader; var c = this.renderSession.projection; this.width = 2 * c.x, this.height = 2 * -c.y, this.buffer = b }, b.WebGLFilterManager.prototype.pushFilter = function(a) { var c = this.gl, d = this.renderSession.projection, e = this.renderSession.offset; a._filterArea = a.target.filterArea || a.target.getBounds(), a._previous_stencil_mgr = this.renderSession.stencilManager, this.renderSession.stencilManager = new b.WebGLStencilManager, this.renderSession.stencilManager.setContext(c), c.disable(c.STENCIL_TEST), this.filterStack.push(a); var f = a.filterPasses[0]; this.offsetX += a._filterArea.x, this.offsetY += a._filterArea.y; var g = this.texturePool.pop(); g ? g.resize(this.width * this.renderSession.resolution, this.height * this.renderSession.resolution) : g = new b.FilterTexture(this.gl, this.width * this.renderSession.resolution, this.height * this.renderSession.resolution), c.bindTexture(c.TEXTURE_2D, g.texture); var h = a._filterArea, i = f.padding; h.x -= i, h.y -= i, h.width += 2 * i, h.height += 2 * i, h.x < 0 && (h.x = 0), h.width > this.width && (h.width = this.width), h.y < 0 && (h.y = 0), h.height > this.height && (h.height = this.height), c.bindFramebuffer(c.FRAMEBUFFER, g.frameBuffer), c.viewport(0, 0, h.width * this.renderSession.resolution, h.height * this.renderSession.resolution), d.x = h.width / 2, d.y = -h.height / 2, e.x = -h.x, e.y = -h.y, c.colorMask(!0, !0, !0, !0), c.clearColor(0, 0, 0, 0), c.clear(c.COLOR_BUFFER_BIT), a._glFilterTexture = g }, b.WebGLFilterManager.prototype.popFilter = function() { var a = this.gl, c = this.filterStack.pop(), d = c._filterArea, e = c._glFilterTexture, f = this.renderSession.projection, g = this.renderSession.offset; if (c.filterPasses.length > 1) { a.viewport(0, 0, d.width * this.renderSession.resolution, d.height * this.renderSession.resolution), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), this.vertexArray[0] = 0, this.vertexArray[1] = d.height, this.vertexArray[2] = d.width, this.vertexArray[3] = d.height, this.vertexArray[4] = 0, this.vertexArray[5] = 0, this.vertexArray[6] = d.width, this.vertexArray[7] = 0, a.bufferSubData(a.ARRAY_BUFFER, 0, this.vertexArray), a.bindBuffer(a.ARRAY_BUFFER, this.uvBuffer), this.uvArray[2] = d.width / this.width, this.uvArray[5] = d.height / this.height, this.uvArray[6] = d.width / this.width, this.uvArray[7] = d.height / this.height, a.bufferSubData(a.ARRAY_BUFFER, 0, this.uvArray); var h = e, i = this.texturePool.pop(); i || (i = new b.FilterTexture(this.gl, this.width * this.renderSession.resolution, this.height * this.renderSession.resolution)), i.resize(this.width * this.renderSession.resolution, this.height * this.renderSession.resolution), a.bindFramebuffer(a.FRAMEBUFFER, i.frameBuffer), a.clear(a.COLOR_BUFFER_BIT), a.disable(a.BLEND); for (var j = 0; j < c.filterPasses.length - 1; j++) { var k = c.filterPasses[j]; a.bindFramebuffer(a.FRAMEBUFFER, i.frameBuffer), a.activeTexture(a.TEXTURE0), a.bindTexture(a.TEXTURE_2D, h.texture), this.applyFilterPass(k, d, d.width, d.height); var l = h; h = i, i = l } a.enable(a.BLEND), e = h, this.texturePool.push(i) } var m = c.filterPasses[c.filterPasses.length - 1]; this.offsetX -= d.x, this.offsetY -= d.y; var n = this.width, o = this.height, p = 0, q = 0, r = this.buffer; if (0 === this.filterStack.length) a.colorMask(!0, !0, !0, !0); else { var s = this.filterStack[this.filterStack.length - 1]; d = s._filterArea, n = d.width, o = d.height, p = d.x, q = d.y, r = s._glFilterTexture.frameBuffer } f.x = n / 2, f.y = -o / 2, g.x = p, g.y = q, d = c._filterArea; var t = d.x - p, u = d.y - q; a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), this.vertexArray[0] = t, this.vertexArray[1] = u + d.height, this.vertexArray[2] = t + d.width, this.vertexArray[3] = u + d.height, this.vertexArray[4] = t, this.vertexArray[5] = u, this.vertexArray[6] = t + d.width, this.vertexArray[7] = u, a.bufferSubData(a.ARRAY_BUFFER, 0, this.vertexArray), a.bindBuffer(a.ARRAY_BUFFER, this.uvBuffer), this.uvArray[2] = d.width / this.width, this.uvArray[5] = d.height / this.height, this.uvArray[6] = d.width / this.width, this.uvArray[7] = d.height / this.height, a.bufferSubData(a.ARRAY_BUFFER, 0, this.uvArray), a.viewport(0, 0, n * this.renderSession.resolution, o * this.renderSession.resolution), a.bindFramebuffer(a.FRAMEBUFFER, r), a.activeTexture(a.TEXTURE0), a.bindTexture(a.TEXTURE_2D, e.texture), this.renderSession.stencilManager && this.renderSession.stencilManager.destroy(), this.renderSession.stencilManager = c._previous_stencil_mgr, c._previous_stencil_mgr = null, this.renderSession.stencilManager.count > 0 ? a.enable(a.STENCIL_TEST) : a.disable(a.STENCIL_TEST), this.applyFilterPass(m, d, n, o), this.texturePool.push(e), c._glFilterTexture = null }, b.WebGLFilterManager.prototype.applyFilterPass = function(a, c, d, e) { var f = this.gl, g = a.shaders[f.id]; g || (g = new b.PixiShader(f), g.fragmentSrc = a.fragmentSrc, g.uniforms = a.uniforms, g.init(), a.shaders[f.id] = g), this.renderSession.shaderManager.setShader(g), f.uniform2f(g.projectionVector, d / 2, -e / 2), f.uniform2f(g.offsetVector, 0, 0), a.uniforms.dimensions && (a.uniforms.dimensions.value[0] = this.width, a.uniforms.dimensions.value[1] = this.height, a.uniforms.dimensions.value[2] = this.vertexArray[0], a.uniforms.dimensions.value[3] = this.vertexArray[5]), g.syncUniforms(), f.bindBuffer(f.ARRAY_BUFFER, this.vertexBuffer), f.vertexAttribPointer(g.aVertexPosition, 2, f.FLOAT, !1, 0, 0), f.bindBuffer(f.ARRAY_BUFFER, this.uvBuffer), f.vertexAttribPointer(g.aTextureCoord, 2, f.FLOAT, !1, 0, 0), f.bindBuffer(f.ARRAY_BUFFER, this.colorBuffer), f.vertexAttribPointer(g.colorAttribute, 2, f.FLOAT, !1, 0, 0), f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, this.indexBuffer), f.drawElements(f.TRIANGLES, 6, f.UNSIGNED_SHORT, 0), this.renderSession.drawCount++ }, b.WebGLFilterManager.prototype.initShaderBuffers = function() { var a = this.gl; this.vertexBuffer = a.createBuffer(), this.uvBuffer = a.createBuffer(), this.colorBuffer = a.createBuffer(), this.indexBuffer = a.createBuffer(), this.vertexArray = new b.Float32Array([0, 0, 1, 0, 0, 1, 1, 1]), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), a.bufferData(a.ARRAY_BUFFER, this.vertexArray, a.STATIC_DRAW), this.uvArray = new b.Float32Array([0, 0, 1, 0, 0, 1, 1, 1]), a.bindBuffer(a.ARRAY_BUFFER, this.uvBuffer), a.bufferData(a.ARRAY_BUFFER, this.uvArray, a.STATIC_DRAW), this.colorArray = new b.Float32Array([1, 16777215, 1, 16777215, 1, 16777215, 1, 16777215]), a.bindBuffer(a.ARRAY_BUFFER, this.colorBuffer), a.bufferData(a.ARRAY_BUFFER, this.colorArray, a.STATIC_DRAW), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer), a.bufferData(a.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 1, 3, 2]), a.STATIC_DRAW) }, b.WebGLFilterManager.prototype.destroy = function() { var a = this.gl; this.filterStack = null, this.offsetX = 0, this.offsetY = 0; for (var b = 0; b < this.texturePool.length; b++) this.texturePool[b].destroy(); this.texturePool = null, a.deleteBuffer(this.vertexBuffer), a.deleteBuffer(this.uvBuffer), a.deleteBuffer(this.colorBuffer), a.deleteBuffer(this.indexBuffer) }, b.FilterTexture = function(a, c, d, e) { this.gl = a, this.frameBuffer = a.createFramebuffer(), this.texture = a.createTexture(), e = e || b.scaleModes.DEFAULT, a.bindTexture(a.TEXTURE_2D, this.texture), a.texParameteri(a.TEXTURE_2D, a.TEXTURE_MAG_FILTER, e === b.scaleModes.LINEAR ? a.LINEAR : a.NEAREST), a.texParameteri(a.TEXTURE_2D, a.TEXTURE_MIN_FILTER, e === b.scaleModes.LINEAR ? a.LINEAR : a.NEAREST), a.texParameteri(a.TEXTURE_2D, a.TEXTURE_WRAP_S, a.CLAMP_TO_EDGE), a.texParameteri(a.TEXTURE_2D, a.TEXTURE_WRAP_T, a.CLAMP_TO_EDGE), a.bindFramebuffer(a.FRAMEBUFFER, this.frameBuffer), a.bindFramebuffer(a.FRAMEBUFFER, this.frameBuffer), a.framebufferTexture2D(a.FRAMEBUFFER, a.COLOR_ATTACHMENT0, a.TEXTURE_2D, this.texture, 0), this.renderBuffer = a.createRenderbuffer(), a.bindRenderbuffer(a.RENDERBUFFER, this.renderBuffer), a.framebufferRenderbuffer(a.FRAMEBUFFER, a.DEPTH_STENCIL_ATTACHMENT, a.RENDERBUFFER, this.renderBuffer), this.resize(c, d) }, b.FilterTexture.prototype.constructor = b.FilterTexture, b.FilterTexture.prototype.clear = function() { var a = this.gl; a.clearColor(0, 0, 0, 0), a.clear(a.COLOR_BUFFER_BIT) }, b.FilterTexture.prototype.resize = function(a, b) { if (this.width !== a || this.height !== b) { this.width = a, this.height = b; var c = this.gl; c.bindTexture(c.TEXTURE_2D, this.texture), c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, a, b, 0, c.RGBA, c.UNSIGNED_BYTE, null), c.bindRenderbuffer(c.RENDERBUFFER, this.renderBuffer), c.renderbufferStorage(c.RENDERBUFFER, c.DEPTH_STENCIL, a, b) } }, b.FilterTexture.prototype.destroy = function() { var a = this.gl; a.deleteFramebuffer(this.frameBuffer), a.deleteTexture(this.texture), this.frameBuffer = null, this.texture = null }, b.CanvasBuffer = function(a, c) { this.width = a, this.height = c, this.canvas = b.CanvasPool.create(this, this.width, this.height), this.context = this.canvas.getContext("2d"), this.canvas.width = a, this.canvas.height = c }, b.CanvasBuffer.prototype.constructor = b.CanvasBuffer, b.CanvasBuffer.prototype.clear = function() { this.context.setTransform(1, 0, 0, 1, 0, 0), this.context.clearRect(0, 0, this.width, this.height) }, b.CanvasBuffer.prototype.resize = function(a, b) { this.width = this.canvas.width = a, this.height = this.canvas.height = b }, b.CanvasBuffer.prototype.destroy = function() { b.CanvasPool.remove(this) }, b.CanvasMaskManager = function() {}, b.CanvasMaskManager.prototype.constructor = b.CanvasMaskManager, b.CanvasMaskManager.prototype.pushMask = function(a, c) { var d = c.context; d.save(); var e = a.alpha, f = a.worldTransform, g = c.resolution; d.setTransform(f.a * g, f.b * g, f.c * g, f.d * g, f.tx * g, f.ty * g), b.CanvasGraphics.renderGraphicsMask(a, d), d.clip(), a.worldAlpha = e }, b.CanvasMaskManager.prototype.popMask = function(a) { a.context.restore() }, b.CanvasTinter = function() {}, b.CanvasTinter.getTintedTexture = function(a, c) { var d = a.tintedTexture || b.CanvasPool.create(this); return b.CanvasTinter.tintMethod(a.texture, c, d), d }, b.CanvasTinter.tintWithMultiply = function(a, b, c) { var d = c.getContext("2d"), e = a.crop; c.width === e.width && c.height === e.height || (c.width = e.width, c.height = e.height), d.clearRect(0, 0, e.width, e.height), d.fillStyle = "#" + ("00000" + (0 | b).toString(16)).substr(-6), d.fillRect(0, 0, e.width, e.height), d.globalCompositeOperation = "multiply", d.drawImage(a.baseTexture.source, e.x, e.y, e.width, e.height, 0, 0, e.width, e.height), d.globalCompositeOperation = "destination-atop", d.drawImage(a.baseTexture.source, e.x, e.y, e.width, e.height, 0, 0, e.width, e.height) }, b.CanvasTinter.tintWithPerPixel = function(a, c, d) { var e = d.getContext("2d"), f = a.crop; d.width = f.width, d.height = f.height, e.globalCompositeOperation = "copy", e.drawImage(a.baseTexture.source, f.x, f.y, f.width, f.height, 0, 0, f.width, f.height); for (var g = b.hex2rgb(c), h = g[0], i = g[1], j = g[2], k = e.getImageData(0, 0, f.width, f.height), l = k.data, m = 0; m < l.length; m += 4) if (l[m + 0] *= h, l[m + 1] *= i, l[m + 2] *= j, !b.CanvasTinter.canHandleAlpha) { var n = l[m + 3]; l[m + 0] /= 255 / n, l[m + 1] /= 255 / n, l[m + 2] /= 255 / n } e.putImageData(k, 0, 0) }, b.CanvasTinter.checkInverseAlpha = function() { var a = new b.CanvasBuffer(2, 1); a.context.fillStyle = "rgba(10, 20, 30, 0.5)", a.context.fillRect(0, 0, 1, 1); var c = a.context.getImageData(0, 0, 1, 1); if (null === c) return !1; a.context.putImageData(c, 1, 0); var d = a.context.getImageData(1, 0, 1, 1); return d.data[0] === c.data[0] && d.data[1] === c.data[1] && d.data[2] === c.data[2] && d.data[3] === c.data[3] }, b.CanvasTinter.canHandleAlpha = b.CanvasTinter.checkInverseAlpha(), b.CanvasTinter.canUseMultiply = b.canUseNewCanvasBlendModes(), b.CanvasTinter.tintMethod = b.CanvasTinter.canUseMultiply ? b.CanvasTinter.tintWithMultiply : b.CanvasTinter.tintWithPerPixel, b.CanvasRenderer = function(a) { this.game = a, b.defaultRenderer || (b.defaultRenderer = this), this.type = b.CANVAS_RENDERER, this.resolution = a.resolution, this.clearBeforeRender = a.clearBeforeRender, this.transparent = a.transparent, this.autoResize = !1, this.width = a.width * this.resolution, this.height = a.height * this.resolution, this.view = a.canvas, this.context = this.view.getContext("2d", { alpha: this.transparent }), this.refresh = !0, this.count = 0, this.maskManager = new b.CanvasMaskManager, this.renderSession = { context: this.context, maskManager: this.maskManager, scaleMode: null, smoothProperty: Phaser.Canvas.getSmoothingPrefix(this.context), roundPixels: !1 }, this.mapBlendModes(), this.resize(this.width, this.height) }, b.CanvasRenderer.prototype.constructor = b.CanvasRenderer, b.CanvasRenderer.prototype.render = function(a) { this.context.setTransform(1, 0, 0, 1, 0, 0), this.context.globalAlpha = 1, this.renderSession.currentBlendMode = 0, this.renderSession.shakeX = this.game.camera._shake.x, this.renderSession.shakeY = this.game.camera._shake.y, this.context.globalCompositeOperation = "source-over", navigator.isCocoonJS && this.view.screencanvas && (this.context.fillStyle = "black", this.context.clear()), this.clearBeforeRender && (this.transparent ? this.context.clearRect(0, 0, this.width, this.height) : a._bgColor && (this.context.fillStyle = a._bgColor.rgba, this.context.fillRect(0, 0, this.width, this.height))), this.renderDisplayObject(a) }, b.CanvasRenderer.prototype.destroy = function(a) { void 0 === a && (a = !0), a && this.view.parent && this.view.parent.removeChild(this.view), this.view = null, this.context = null, this.maskManager = null, this.renderSession = null }, b.CanvasRenderer.prototype.resize = function(a, c) { this.width = a * this.resolution, this.height = c * this.resolution, this.view.width = this.width, this.view.height = this.height, this.autoResize && (this.view.style.width = this.width / this.resolution + "px", this.view.style.height = this.height / this.resolution + "px"), this.renderSession.smoothProperty && (this.context[this.renderSession.smoothProperty] = this.renderSession.scaleMode === b.scaleModes.LINEAR) }, b.CanvasRenderer.prototype.renderDisplayObject = function(a, b, c) { this.renderSession.context = b || this.context, this.renderSession.resolution = this.resolution, a._renderCanvas(this.renderSession, c) }, b.CanvasRenderer.prototype.mapBlendModes = function() { if (!b.blendModesCanvas) { var a = [], c = b.blendModes, d = b.canUseNewCanvasBlendModes(); a[c.NORMAL] = "source-over", a[c.ADD] = "lighter", a[c.MULTIPLY] = d ? "multiply" : "source-over", a[c.SCREEN] = d ? "screen" : "source-over", a[c.OVERLAY] = d ? "overlay" : "source-over", a[c.DARKEN] = d ? "darken" : "source-over", a[c.LIGHTEN] = d ? "lighten" : "source-over", a[c.COLOR_DODGE] = d ? "color-dodge" : "source-over", a[c.COLOR_BURN] = d ? "color-burn" : "source-over", a[c.HARD_LIGHT] = d ? "hard-light" : "source-over", a[c.SOFT_LIGHT] = d ? "soft-light" : "source-over", a[c.DIFFERENCE] = d ? "difference" : "source-over", a[c.EXCLUSION] = d ? "exclusion" : "source-over", a[c.HUE] = d ? "hue" : "source-over", a[c.SATURATION] = d ? "saturation" : "source-over", a[c.COLOR] = d ? "color" : "source-over", a[c.LUMINOSITY] = d ? "luminosity" : "source-over", b.blendModesCanvas = a } }, b.BaseTexture = function(a, c) { this.resolution = 1, this.width = 100, this.height = 100, this.scaleMode = c || b.scaleModes.DEFAULT, this.hasLoaded = !1, this.source = a, this.premultipliedAlpha = !0, this._glTextures = [], this.mipmap = !1, this._dirty = [!0, !0, !0, !0], a && ((this.source.complete || this.source.getContext) && this.source.width && this.source.height && (this.hasLoaded = !0, this.width = this.source.naturalWidth || this.source.width, this.height = this.source.naturalHeight || this.source.height, this.dirty()), this.skipRender = !1, this._powerOf2 = !1) }, b.BaseTexture.prototype.constructor = b.BaseTexture, b.BaseTexture.prototype.forceLoaded = function(a, b) { this.hasLoaded = !0, this.width = a, this.height = b, this.dirty() }, b.BaseTexture.prototype.destroy = function() { this.source && b.CanvasPool.removeByCanvas(this.source), this.source = null, this.unloadFromGPU() }, b.BaseTexture.prototype.updateSourceImage = function(a) { console.warn("PIXI.BaseTexture.updateSourceImage is deprecated. Use Phaser.Sprite.loadTexture instead.") }, b.BaseTexture.prototype.dirty = function() { for (var a = 0; a < this._glTextures.length; a++) this._dirty[a] = !0 }, b.BaseTexture.prototype.unloadFromGPU = function() { this.dirty(); for (var a = this._glTextures.length - 1; a >= 0; a--) { var c = this._glTextures[a], d = b.glContexts[a]; d && c && d.deleteTexture(c) } this._glTextures.length = 0, this.dirty() }, b.BaseTexture.fromCanvas = function(a, c) { return 0 === a.width && (a.width = 1), 0 === a.height && (a.height = 1), new b.BaseTexture(a, c) }, b.TextureSilentFail = !1, b.Texture = function(a, c, d, e) { this.noFrame = !1, c || (this.noFrame = !0, c = new b.Rectangle(0, 0, 1, 1)), a instanceof b.Texture && (a = a.baseTexture), this.baseTexture = a, this.frame = c, this.trim = e, this.valid = !1, this.isTiling = !1, this.requiresUpdate = !1, this.requiresReTint = !1, this._uvs = null, this.width = 0, this.height = 0, this.crop = d || new b.Rectangle(0, 0, 1, 1), a.hasLoaded && (this.noFrame && (c = new b.Rectangle(0, 0, a.width, a.height)), this.setFrame(c)) }, b.Texture.prototype.constructor = b.Texture, b.Texture.prototype.onBaseTextureLoaded = function() { var a = this.baseTexture; this.noFrame && (this.frame = new b.Rectangle(0, 0, a.width, a.height)), this.setFrame(this.frame) }, b.Texture.prototype.destroy = function(a) { a && this.baseTexture.destroy(), this.valid = !1 }, b.Texture.prototype.setFrame = function(a) { if (this.noFrame = !1, this.frame = a, this.width = a.width, this.height = a.height, this.crop.x = a.x, this.crop.y = a.y, this.crop.width = a.width, this.crop.height = a.height, !this.trim && (a.x + a.width > this.baseTexture.width || a.y + a.height > this.baseTexture.height)) { if (!b.TextureSilentFail) throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); return void(this.valid = !1) } this.valid = a && a.width && a.height && this.baseTexture.source && this.baseTexture.hasLoaded, this.trim && (this.width = this.trim.width, this.height = this.trim.height, this.frame.width = this.trim.width, this.frame.height = this.trim.height), this.valid && this._updateUvs() }, b.Texture.prototype._updateUvs = function() { this._uvs || (this._uvs = new b.TextureUvs); var a = this.crop, c = this.baseTexture.width, d = this.baseTexture.height; this._uvs.x0 = a.x / c, this._uvs.y0 = a.y / d, this._uvs.x1 = (a.x + a.width) / c, this._uvs.y1 = a.y / d, this._uvs.x2 = (a.x + a.width) / c, this._uvs.y2 = (a.y + a.height) / d, this._uvs.x3 = a.x / c, this._uvs.y3 = (a.y + a.height) / d }, b.Texture.fromCanvas = function(a, c) { var d = b.BaseTexture.fromCanvas(a, c); return new b.Texture(d) }, b.TextureUvs = function() { this.x0 = 0, this.y0 = 0, this.x1 = 0, this.y1 = 0, this.x2 = 0, this.y2 = 0, this.x3 = 0, this.y3 = 0 }, b.RenderTexture = function(a, c, d, e, f) { if (this.width = a || 100, this.height = c || 100, this.resolution = f || 1, this.frame = new b.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution), this.crop = new b.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution), this.baseTexture = new b.BaseTexture, this.baseTexture.width = this.width * this.resolution, this.baseTexture.height = this.height * this.resolution, this.baseTexture._glTextures = [], this.baseTexture.resolution = this.resolution, this.baseTexture.scaleMode = e || b.scaleModes.DEFAULT, this.baseTexture.hasLoaded = !0, b.Texture.call(this, this.baseTexture, new b.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution)), this.renderer = d || b.defaultRenderer, this.renderer.type === b.WEBGL_RENDERER) { var g = this.renderer.gl; this.baseTexture._dirty[g.id] = !1, this.textureBuffer = new b.FilterTexture(g, this.width, this.height, this.baseTexture.scaleMode), this.baseTexture._glTextures[g.id] = this.textureBuffer.texture, this.render = this.renderWebGL, this.projection = new b.Point(.5 * this.width, .5 * -this.height) } else this.render = this.renderCanvas, this.textureBuffer = new b.CanvasBuffer(this.width * this.resolution, this.height * this.resolution), this.baseTexture.source = this.textureBuffer.canvas; this.valid = !0, this.tempMatrix = new Phaser.Matrix, this._updateUvs() }, b.RenderTexture.prototype = Object.create(b.Texture.prototype), b.RenderTexture.prototype.constructor = b.RenderTexture, b.RenderTexture.prototype.resize = function(a, c, d) { a === this.width && c === this.height || (this.valid = a > 0 && c > 0, this.width = a, this.height = c, this.frame.width = this.crop.width = a * this.resolution, this.frame.height = this.crop.height = c * this.resolution, d && (this.baseTexture.width = this.width * this.resolution, this.baseTexture.height = this.height * this.resolution), this.renderer.type === b.WEBGL_RENDERER && (this.projection.x = this.width / 2, this.projection.y = -this.height / 2), this.valid && this.textureBuffer.resize(this.width, this.height)) }, b.RenderTexture.prototype.clear = function() { this.valid && (this.renderer.type === b.WEBGL_RENDERER && this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER, this.textureBuffer.frameBuffer), this.textureBuffer.clear()) }, b.RenderTexture.prototype.renderWebGL = function(a, b, c) { if (this.valid && 0 !== a.alpha) { var d = a.worldTransform; d.identity(), d.translate(0, 2 * this.projection.y), b && d.append(b), d.scale(1, -1); for (var e = 0; e < a.children.length; e++) a.children[e].updateTransform(); var f = this.renderer.gl; f.viewport(0, 0, this.width * this.resolution, this.height * this.resolution), f.bindFramebuffer(f.FRAMEBUFFER, this.textureBuffer.frameBuffer), c && this.textureBuffer.clear(), this.renderer.spriteBatch.dirty = !0, this.renderer.renderDisplayObject(a, this.projection, this.textureBuffer.frameBuffer, b), this.renderer.spriteBatch.dirty = !0 } }, b.RenderTexture.prototype.renderCanvas = function(a, b, c) { if (this.valid && 0 !== a.alpha) { var d = a.worldTransform; d.identity(), b && d.append(b); for (var e = 0; e < a.children.length; e++) a.children[e].updateTransform(); c && this.textureBuffer.clear(); var f = this.renderer.resolution; this.renderer.resolution = this.resolution, this.renderer.renderDisplayObject(a, this.textureBuffer.context, b), this.renderer.resolution = f } }, b.RenderTexture.prototype.getImage = function() { var a = new Image; return a.src = this.getBase64(), a }, b.RenderTexture.prototype.getBase64 = function() { return this.getCanvas().toDataURL() }, b.RenderTexture.prototype.getCanvas = function() { if (this.renderer.type === b.WEBGL_RENDERER) { var a = this.renderer.gl, c = this.textureBuffer.width, d = this.textureBuffer.height, e = new Uint8Array(4 * c * d); a.bindFramebuffer(a.FRAMEBUFFER, this.textureBuffer.frameBuffer), a.readPixels(0, 0, c, d, a.RGBA, a.UNSIGNED_BYTE, e), a.bindFramebuffer(a.FRAMEBUFFER, null); var f = new b.CanvasBuffer(c, d), g = f.context.getImageData(0, 0, c, d); return g.data.set(e), f.context.putImageData(g, 0, 0), f.canvas } return this.textureBuffer.canvas }, b.AbstractFilter = function(a, b) { this.passes = [this], this.shaders = [], this.dirty = !0, this.padding = 0, this.uniforms = b || {}, this.fragmentSrc = a || [] }, b.AbstractFilter.prototype.constructor = b.AbstractFilter, b.AbstractFilter.prototype.syncUniforms = function() { for (var a = 0, b = this.shaders.length; a < b; a++) this.shaders[a].dirty = !0 }, b.Strip = function(a) { b.DisplayObjectContainer.call(this), this.texture = a, this.uvs = new b.Float32Array([0, 1, 1, 1, 1, 0, 0, 1]), this.vertices = new b.Float32Array([0, 0, 100, 0, 100, 100, 0, 100]), this.colors = new b.Float32Array([1, 1, 1, 1]), this.indices = new b.Uint16Array([0, 1, 2, 3]), this.dirty = !0, this.blendMode = b.blendModes.NORMAL, this.canvasPadding = 0, this.drawMode = b.Strip.DrawModes.TRIANGLE_STRIP }, b.Strip.prototype = Object.create(b.DisplayObjectContainer.prototype), b.Strip.prototype.constructor = b.Strip, b.Strip.prototype._renderWebGL = function(a) {!this.visible || this.alpha <= 0 || (a.spriteBatch.stop(), this._vertexBuffer || this._initWebGL(a), a.shaderManager.setShader(a.shaderManager.stripShader), this._renderStrip(a), a.spriteBatch.start()) }, b.Strip.prototype._initWebGL = function(a) { var b = a.gl; this._vertexBuffer = b.createBuffer(), this._indexBuffer = b.createBuffer(), this._uvBuffer = b.createBuffer(), this._colorBuffer = b.createBuffer(), b.bindBuffer(b.ARRAY_BUFFER, this._vertexBuffer), b.bufferData(b.ARRAY_BUFFER, this.vertices, b.DYNAMIC_DRAW), b.bindBuffer(b.ARRAY_BUFFER, this._uvBuffer), b.bufferData(b.ARRAY_BUFFER, this.uvs, b.STATIC_DRAW), b.bindBuffer(b.ARRAY_BUFFER, this._colorBuffer), b.bufferData(b.ARRAY_BUFFER, this.colors, b.STATIC_DRAW), b.bindBuffer(b.ELEMENT_ARRAY_BUFFER, this._indexBuffer), b.bufferData(b.ELEMENT_ARRAY_BUFFER, this.indices, b.STATIC_DRAW) }, b.Strip.prototype._renderStrip = function(a) { var c = a.gl, d = a.projection, e = a.offset, f = a.shaderManager.stripShader, g = this.drawMode === b.Strip.DrawModes.TRIANGLE_STRIP ? c.TRIANGLE_STRIP : c.TRIANGLES; a.blendModeManager.setBlendMode(this.blendMode), c.uniformMatrix3fv(f.translationMatrix, !1, this.worldTransform.toArray(!0)), c.uniform2f(f.projectionVector, d.x, -d.y), c.uniform2f(f.offsetVector, -e.x, -e.y), c.uniform1f(f.alpha, this.worldAlpha), this.dirty ? (this.dirty = !1, c.bindBuffer(c.ARRAY_BUFFER, this._vertexBuffer), c.bufferData(c.ARRAY_BUFFER, this.vertices, c.STATIC_DRAW), c.vertexAttribPointer(f.aVertexPosition, 2, c.FLOAT, !1, 0, 0), c.bindBuffer(c.ARRAY_BUFFER, this._uvBuffer), c.bufferData(c.ARRAY_BUFFER, this.uvs, c.STATIC_DRAW), c.vertexAttribPointer(f.aTextureCoord, 2, c.FLOAT, !1, 0, 0), c.activeTexture(c.TEXTURE0), this.texture.baseTexture._dirty[c.id] ? a.renderer.updateTexture(this.texture.baseTexture) : c.bindTexture(c.TEXTURE_2D, this.texture.baseTexture._glTextures[c.id]), c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, this._indexBuffer), c.bufferData(c.ELEMENT_ARRAY_BUFFER, this.indices, c.STATIC_DRAW)) : (c.bindBuffer(c.ARRAY_BUFFER, this._vertexBuffer), c.bufferSubData(c.ARRAY_BUFFER, 0, this.vertices), c.vertexAttribPointer(f.aVertexPosition, 2, c.FLOAT, !1, 0, 0), c.bindBuffer(c.ARRAY_BUFFER, this._uvBuffer), c.vertexAttribPointer(f.aTextureCoord, 2, c.FLOAT, !1, 0, 0), c.activeTexture(c.TEXTURE0), this.texture.baseTexture._dirty[c.id] ? a.renderer.updateTexture(this.texture.baseTexture) : c.bindTexture(c.TEXTURE_2D, this.texture.baseTexture._glTextures[c.id]), c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, this._indexBuffer)), c.drawElements(g, this.indices.length, c.UNSIGNED_SHORT, 0) }, b.Strip.prototype._renderCanvas = function(a) { var c = a.context, d = this.worldTransform, e = d.tx * a.resolution + a.shakeX, f = d.ty * a.resolution + a.shakeY; a.roundPixels ? c.setTransform(d.a, d.b, d.c, d.d, 0 | e, 0 | f) : c.setTransform(d.a, d.b, d.c, d.d, e, f), this.drawMode === b.Strip.DrawModes.TRIANGLE_STRIP ? this._renderCanvasTriangleStrip(c) : this._renderCanvasTriangles(c) }, b.Strip.prototype._renderCanvasTriangleStrip = function(a) { var b = this.vertices, c = this.uvs, d = b.length / 2; this.count++; for (var e = 0; e < d - 2; e++) { var f = 2 * e; this._renderCanvasDrawTriangle(a, b, c, f, f + 2, f + 4) } }, b.Strip.prototype._renderCanvasTriangles = function(a) { var b = this.vertices, c = this.uvs, d = this.indices, e = d.length; this.count++; for (var f = 0; f < e; f += 3) { var g = 2 * d[f], h = 2 * d[f + 1], i = 2 * d[f + 2]; this._renderCanvasDrawTriangle(a, b, c, g, h, i) } }, b.Strip.prototype._renderCanvasDrawTriangle = function(a, b, c, d, e, f) { var g = this.texture.baseTexture.source, h = this.texture.width, i = this.texture.height, j = b[d], k = b[e], l = b[f], m = b[d + 1], n = b[e + 1], o = b[f + 1], p = c[d] * h, q = c[e] * h, r = c[f] * h, s = c[d + 1] * i, t = c[e + 1] * i, u = c[f + 1] * i; if (this.canvasPadding > 0) { var v = this.canvasPadding / this.worldTransform.a, w = this.canvasPadding / this.worldTransform.d, x = (j + k + l) / 3, y = (m + n + o) / 3, z = j - x, A = m - y, B = Math.sqrt(z * z + A * A); j = x + z / B * (B + v), m = y + A / B * (B + w), z = k - x, A = n - y, B = Math.sqrt(z * z + A * A), k = x + z / B * (B + v), n = y + A / B * (B + w), z = l - x, A = o - y, B = Math.sqrt(z * z + A * A), l = x + z / B * (B + v), o = y + A / B * (B + w) } a.save(), a.beginPath(), a.moveTo(j, m), a.lineTo(k, n), a.lineTo(l, o), a.closePath(), a.clip(); var C = p * t + s * r + q * u - t * r - s * q - p * u, D = j * t + s * l + k * u - t * l - s * k - j * u, E = p * k + j * r + q * l - k * r - j * q - p * l, F = p * t * l + s * k * r + j * q * u - j * t * r - s * q * l - p * k * u, G = m * t + s * o + n * u - t * o - s * n - m * u, H = p * n + m * r + q * o - n * r - m * q - p * o, I = p * t * o + s * n * r + m * q * u - m * t * r - s * q * o - p * n * u; a.transform(D / C, G / C, E / C, H / C, F / C, I / C), a.drawImage(g, 0, 0), a.restore() }, b.Strip.prototype.renderStripFlat = function(a) { var b = this.context, c = a.vertices, d = c.length / 2; this.count++, b.beginPath(); for (var e = 1; e < d - 2; e++) { var f = 2 * e, g = c[f], h = c[f + 2], i = c[f + 4], j = c[f + 1], k = c[f + 3], l = c[f + 5]; b.moveTo(g, j), b.lineTo(h, k), b.lineTo(i, l) } b.fillStyle = "#FF0000", b.fill(), b.closePath() }, b.Strip.prototype.onTextureUpdate = function() { this.updateFrame = !0 }, b.Strip.prototype.getBounds = function(a) { for (var c = a || this.worldTransform, d = c.a, e = c.b, f = c.c, g = c.d, h = c.tx, i = c.ty, j = -1 / 0, k = -1 / 0, l = 1 / 0, m = 1 / 0, n = this.vertices, o = 0, p = n.length; o < p; o += 2) { var q = n[o], r = n[o + 1], s = d * q + f * r + h, t = g * r + e * q + i; l = s < l ? s : l, m = t < m ? t : m, j = s > j ? s : j, k = t > k ? t : k } if (l === -1 / 0 || k === 1 / 0) return b.EmptyRectangle; var u = this._bounds; return u.x = l, u.width = j - l, u.y = m, u.height = k - m, this._currentBounds = u, u }, b.Strip.DrawModes = { TRIANGLE_STRIP: 0, TRIANGLES: 1 }, b.Rope = function(a, c) { b.Strip.call(this, a), this.points = c, this.vertices = new b.Float32Array(4 * c.length), this.uvs = new b.Float32Array(4 * c.length), this.colors = new b.Float32Array(2 * c.length), this.indices = new b.Uint16Array(2 * c.length), this.refresh() }, b.Rope.prototype = Object.create(b.Strip.prototype), b.Rope.prototype.constructor = b.Rope, b.Rope.prototype.refresh = function() { var a = this.points; if (!(a.length < 1)) { var b = this.uvs, c = (a[0], this.indices), d = this.colors; this.count -= .2, b[0] = 0, b[1] = 0, b[2] = 0, b[3] = 1, d[0] = 1, d[1] = 1, c[0] = 0, c[1] = 1; for (var e, f, g, h = a.length, i = 1; i < h; i++) e = a[i], f = 4 * i, g = i / (h - 1), b[f] = g, b[f + 1] = 0, b[f + 2] = g, b[f + 3] = 1, f = 2 * i, d[f] = 1, d[f + 1] = 1, f = 2 * i, c[f] = f, c[f + 1] = f + 1, e } }, b.Rope.prototype.updateTransform = function() { var a = this.points; if (!(a.length < 1)) { var c, d = a[0], e = { x: 0, y: 0 }; this.count -= .2; for (var f, g, h, i, j, k = this.vertices, l = a.length, m = 0; m < l; m++) f = a[m], g = 4 * m, c = m < a.length - 1 ? a[m + 1] : f, e.y = -(c.x - d.x), e.x = c.y - d.y, h = 10 * (1 - m / (l - 1)), h > 1 && (h = 1), i = Math.sqrt(e.x * e.x + e.y * e.y), j = this.texture.height / 2, e.x /= i, e.y /= i, e.x *= j, e.y *= j, k[g] = f.x + e.x, k[g + 1] = f.y + e.y, k[g + 2] = f.x - e.x, k[g + 3] = f.y - e.y, d = f; b.DisplayObjectContainer.prototype.updateTransform.call(this) } }, b.Rope.prototype.setTexture = function(a) { this.texture = a }, b.TilingSprite = function(a, c, d) { b.Sprite.call(this, a), this._width = c || 128, this._height = d || 128, this.tileScale = new b.Point(1, 1), this.tileScaleOffset = new b.Point(1, 1), this.tilePosition = new b.Point, this.renderable = !0, this.tint = 16777215, this.textureDebug = !1, this.blendMode = b.blendModes.NORMAL, this.canvasBuffer = null, this.tilingTexture = null, this.tilePattern = null, this.refreshTexture = !0, this.frameWidth = 0, this.frameHeight = 0 }, b.TilingSprite.prototype = Object.create(b.Sprite.prototype), b.TilingSprite.prototype.constructor = b.TilingSprite, b.TilingSprite.prototype.setTexture = function(a) { this.texture !== a && (this.texture = a, this.refreshTexture = !0, this.cachedTint = 16777215) }, b.TilingSprite.prototype._renderWebGL = function(a) { if (this.visible && this.renderable && 0 !== this.alpha) { if (this._mask && (a.spriteBatch.stop(), a.maskManager.pushMask(this.mask, a), a.spriteBatch.start()), this._filters && (a.spriteBatch.flush(), a.filterManager.pushFilter(this._filterBlock)), this.refreshTexture) { if (this.generateTilingTexture(!0, a), !this.tilingTexture) return; this.tilingTexture.needsUpdate && (a.renderer.updateTexture(this.tilingTexture.baseTexture), this.tilingTexture.needsUpdate = !1) } a.spriteBatch.renderTilingSprite(this); for (var b = 0; b < this.children.length; b++) this.children[b]._renderWebGL(a); a.spriteBatch.stop(), this._filters && a.filterManager.popFilter(), this._mask && a.maskManager.popMask(this._mask, a), a.spriteBatch.start() } }, b.TilingSprite.prototype._renderCanvas = function(a) { if (this.visible && this.renderable && 0 !== this.alpha) { var c = a.context; this._mask && a.maskManager.pushMask(this._mask, a), c.globalAlpha = this.worldAlpha; var d = this.worldTransform, e = a.resolution, f = d.tx * e + a.shakeX, g = d.ty * e + a.shakeY; if (c.setTransform(d.a * e, d.b * e, d.c * e, d.d * e, f, g), this.refreshTexture) { if (this.generateTilingTexture(!1, a), !this.tilingTexture) return; this.tilePattern = c.createPattern(this.tilingTexture.baseTexture.source, "repeat") } var h = a.currentBlendMode; this.blendMode !== a.currentBlendMode && (a.currentBlendMode = this.blendMode, c.globalCompositeOperation = b.blendModesCanvas[a.currentBlendMode]); var i = this.tilePosition, j = this.tileScale; i.x %= this.tilingTexture.baseTexture.width, i.y %= this.tilingTexture.baseTexture.height, c.scale(j.x, j.y), c.translate(i.x + this.anchor.x * -this._width, i.y + this.anchor.y * -this._height), c.fillStyle = this.tilePattern; var f = -i.x, g = -i.y, k = this._width / j.x, l = this._height / j.y; a.roundPixels && (f |= 0, g |= 0, k |= 0, l |= 0), c.fillRect(f, g, k, l), c.scale(1 / j.x, 1 / j.y), c.translate(-i.x + this.anchor.x * this._width, -i.y + this.anchor.y * this._height), this._mask && a.maskManager.popMask(a); for (var m = 0; m < this.children.length; m++) this.children[m]._renderCanvas(a); h !== this.blendMode && (a.currentBlendMode = h, c.globalCompositeOperation = b.blendModesCanvas[h]) } }, b.TilingSprite.prototype.onTextureUpdate = function() {}, b.TilingSprite.prototype.generateTilingTexture = function(a, c) { if (this.texture.baseTexture.hasLoaded) { var d = this.texture, e = d.frame, f = this._frame.sourceSizeW || this._frame.width, g = this._frame.sourceSizeH || this._frame.height, h = 0, i = 0; this._frame.trimmed && (h = this._frame.spriteSourceSizeX, i = this._frame.spriteSourceSizeY), a && (f = b.getNextPowerOfTwo(f), g = b.getNextPowerOfTwo(g)), this.canvasBuffer ? (this.canvasBuffer.resize(f, g), this.tilingTexture.baseTexture.width = f, this.tilingTexture.baseTexture.height = g, this.tilingTexture.needsUpdate = !0) : (this.canvasBuffer = new b.CanvasBuffer(f, g), this.tilingTexture = b.Texture.fromCanvas(this.canvasBuffer.canvas), this.tilingTexture.isTiling = !0, this.tilingTexture.needsUpdate = !0), this.textureDebug && (this.canvasBuffer.context.strokeStyle = "#00ff00", this.canvasBuffer.context.strokeRect(0, 0, f, g)); var j = d.crop.width, k = d.crop.height; j === f && k === g || (j = f, k = g), this.canvasBuffer.context.drawImage(d.baseTexture.source, d.crop.x, d.crop.y, d.crop.width, d.crop.height, h, i, j, k), this.tileScaleOffset.x = e.width / f, this.tileScaleOffset.y = e.height / g, this.refreshTexture = !1, this.tilingTexture.baseTexture._powerOf2 = !0 } }, b.TilingSprite.prototype.getBounds = function() { var a = this._width, b = this._height, c = a * (1 - this.anchor.x), d = a * -this.anchor.x, e = b * (1 - this.anchor.y), f = b * -this.anchor.y, g = this.worldTransform, h = g.a, i = g.b, j = g.c, k = g.d, l = g.tx, m = g.ty, n = h * d + j * f + l, o = k * f + i * d + m, p = h * c + j * f + l, q = k * f + i * c + m, r = h * c + j * e + l, s = k * e + i * c + m, t = h * d + j * e + l, u = k * e + i * d + m, v = -1 / 0, w = -1 / 0, x = 1 / 0, y = 1 / 0; x = n < x ? n : x, x = p < x ? p : x, x = r < x ? r : x, x = t < x ? t : x, y = o < y ? o : y, y = q < y ? q : y, y = s < y ? s : y, y = u < y ? u : y, v = n > v ? n : v, v = p > v ? p : v, v = r > v ? r : v, v = t > v ? t : v, w = o > w ? o : w, w = q > w ? q : w, w = s > w ? s : w, w = u > w ? u : w; var z = this._bounds; return z.x = x, z.width = v - x, z.y = y, z.height = w - y, this._currentBounds = z, z }, b.TilingSprite.prototype.destroy = function() { b.Sprite.prototype.destroy.call(this), this.canvasBuffer && (this.canvasBuffer.destroy(), this.canvasBuffer = null), this.tileScale = null, this.tileScaleOffset = null, this.tilePosition = null, this.tilingTexture && (this.tilingTexture.destroy(!0), this.tilingTexture = null) }, Object.defineProperty(b.TilingSprite.prototype, "width", { get: function() { return this._width }, set: function(a) { this._width = a } }), Object.defineProperty(b.TilingSprite.prototype, "height", { get: function() { return this._height }, set: function(a) { this._height = a } }), "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = b), exports.PIXI = b) : "undefined" != typeof define && define.amd ? define("PIXI", function() { return a.PIXI = b }()) : a.PIXI = b, b }.call(this), function() { function a(a, b) { this._scaleFactor = a, this._deltaMode = b, this.originalEvent = null } var b = this, c = c || { VERSION: "2.6.15", GAMES: [], AUTO: 0, CANVAS: 1, WEBGL: 2, HEADLESS: 3, NONE: 0, LEFT: 1, RIGHT: 2, UP: 3, DOWN: 4, SPRITE: 0, BUTTON: 1, IMAGE: 2, GRAPHICS: 3, TEXT: 4, TILESPRITE: 5, BITMAPTEXT: 6, GROUP: 7, RENDERTEXTURE: 8, TILEMAP: 9, TILEMAPLAYER: 10, EMITTER: 11, POLYGON: 12, BITMAPDATA: 13, CANVAS_FILTER: 14, WEBGL_FILTER: 15, ELLIPSE: 16, SPRITEBATCH: 17, RETROFONT: 18, POINTER: 19, ROPE: 20, CIRCLE: 21, RECTANGLE: 22, LINE: 23, MATRIX: 24, POINT: 25, ROUNDEDRECTANGLE: 26, CREATURE: 27, VIDEO: 28, PENDING_ATLAS: -1, HORIZONTAL: 0, VERTICAL: 1, LANDSCAPE: 0, PORTRAIT: 1, ANGLE_UP: 270, ANGLE_DOWN: 90, ANGLE_LEFT: 180, ANGLE_RIGHT: 0, ANGLE_NORTH_EAST: 315, ANGLE_NORTH_WEST: 225, ANGLE_SOUTH_EAST: 45, ANGLE_SOUTH_WEST: 135, TOP_LEFT: 0, TOP_CENTER: 1, TOP_RIGHT: 2, LEFT_TOP: 3, LEFT_CENTER: 4, LEFT_BOTTOM: 5, CENTER: 6, RIGHT_TOP: 7, RIGHT_CENTER: 8, RIGHT_BOTTOM: 9, BOTTOM_LEFT: 10, BOTTOM_CENTER: 11, BOTTOM_RIGHT: 12, blendModes: { NORMAL: 0, ADD: 1, MULTIPLY: 2, SCREEN: 3, OVERLAY: 4, DARKEN: 5, LIGHTEN: 6, COLOR_DODGE: 7, COLOR_BURN: 8, HARD_LIGHT: 9, SOFT_LIGHT: 10, DIFFERENCE: 11, EXCLUSION: 12, HUE: 13, SATURATION: 14, COLOR: 15, LUMINOSITY: 16 }, scaleModes: { DEFAULT: 0, LINEAR: 0, NEAREST: 1 }, PIXI: PIXI || {} }; if (Math.trunc || (Math.trunc = function(a) { return a < 0 ? Math.ceil(a) : Math.floor(a) }), Function.prototype.bind || (Function.prototype.bind = function() { var a = Array.prototype.slice; return function(b) { function c() { var f = e.concat(a.call(arguments)); d.apply(this instanceof c ? this : b, f) } var d = this, e = a.call(arguments, 1); if ("function" != typeof d) throw new TypeError; return c.prototype = function a(b) { if (b && (a.prototype = b), !(this instanceof a)) return new a }(d.prototype), c } }()), Array.isArray || (Array.isArray = function(a) { return "[object Array]" === Object.prototype.toString.call(a) }), Array.prototype.forEach || (Array.prototype.forEach = function(a) { "use strict"; if (void 0 === this || null === this) throw new TypeError; var b = Object(this), c = b.length >>> 0; if ("function" != typeof a) throw new TypeError; for (var d = arguments.length >= 2 ? arguments[1] : void 0, e = 0; e < c; e++) e in b && a.call(d, b[e], e, b) }), "function" != typeof window.Uint32Array && "object" != typeof window.Uint32Array) { var d = function(a) { var b = new Array; window[a] = function(a) { if ("number" == typeof a) { Array.call(this, a), this.length = a; for (var b = 0; b < this.length; b++) this[b] = 0 } else { Array.call(this, a.length), this.length = a.length; for (var b = 0; b < this.length; b++) this[b] = a[b] } }, window[a].prototype = b, window[a].constructor = window[a] }; d("Uint32Array"), d("Int16Array") } window.console || (window.console = {}, window.console.log = window.console.assert = function() {}, window.console.warn = window.console.assert = function() {}), /firefox/i.test(navigator.userAgent) && (window.oldGetComputedStyle = window.getComputedStyle, window.getComputedStyle = function(a, b) { var c = window.oldGetComputedStyle(a, b); return null === c ? { getPropertyValue: function() {} } : c }), c.Utils = { reverseString: function(a) { return a.split("").reverse().join("") }, getProperty: function(a, b) { for (var c = b.split("."), d = c.pop(), e = c.length, f = 1, g = c[0]; f < e && (a = a[g]);) g = c[f], f++; return a ? a[d] : null }, setProperty: function(a, b, c) { for (var d = b.split("."), e = d.pop(), f = d.length, g = 1, h = d[0]; g < f && (a = a[h]);) h = d[g], g++; return a && (a[e] = c), a }, chanceRoll: function(a) { return void 0 === a && (a = 50), a > 0 && 100 * Math.random() <= a }, randomChoice: function(a, b) { return Math.random() < .5 ? a : b }, parseDimension: function(a, b) { var c = 0, d = 0; return "string" == typeof a ? "%" === a.substr(-1) ? (c = parseInt(a, 10) / 100, d = 0 === b ? window.innerWidth * c : window.innerHeight * c) : d = parseInt(a, 10) : d = a, d }, pad: function(a, b, c, d) { if (void 0 === b) var b = 0; if (void 0 === c) var c = " "; if (void 0 === d) var d = 3; a = a.toString(); var e = 0; if (b + 1 >= a.length) switch (d) { case 1: a = new Array(b + 1 - a.length).join(c) + a; break; case 3: var f = Math.ceil((e = b - a.length) / 2), g = e - f; a = new Array(g + 1).join(c) + a + new Array(f + 1).join(c); break; default: a += new Array(b + 1 - a.length).join(c) } return a }, isPlainObject: function(a) { if ("object" != typeof a || a.nodeType || a === a.window) return !1; try { if (a.constructor && !{}.hasOwnProperty.call(a.constructor.prototype, "isPrototypeOf")) return !1 } catch (a) { return !1 } return !0 }, extend: function() { var a, b, d, e, f, g, h = arguments[0] || {}, i = 1, j = arguments.length, k = !1; for ("boolean" == typeof h && (k = h, h = arguments[1] || {}, i = 2), j === i && (h = this, --i); i < j; i++) if (null != (a = arguments[i])) for (b in a) d = h[b], e = a[b], h !== e && (k && e && (c.Utils.isPlainObject(e) || (f = Array.isArray(e))) ? (f ? (f = !1, g = d && Array.isArray(d) ? d : []) : g = d && c.Utils.isPlainObject(d) ? d : {}, h[b] = c.Utils.extend(k, g, e)) : void 0 !== e && (h[b] = e)); return h }, mixinPrototype: function(a, b, c) { void 0 === c && (c = !1); for (var d = Object.keys(b), e = 0; e < d.length; e++) { var f = d[e], g = b[f];!c && f in a || (!g || "function" != typeof g.get && "function" != typeof g.set ? a[f] = g : "function" == typeof g.clone ? a[f] = g.clone() : Object.defineProperty(a, f, g)) } }, mixin: function(a, b) { if (!a || "object" != typeof a) return b; for (var d in a) { var e = a[d]; if (!e.childNodes && !e.cloneNode) { var f = typeof a[d]; a[d] && "object" === f ? typeof b[d] === f ? b[d] = c.Utils.mixin(a[d], b[d]) : b[d] = c.Utils.mixin(a[d], new e.constructor) : b[d] = a[d] } } return b } }, c.Circle = function(a, b, d) { a = a || 0, b = b || 0, d = d || 0, this.x = a, this.y = b, this._diameter = d, this._radius = 0, d > 0 && (this._radius = .5 * d), this.type = c.CIRCLE }, c.Circle.prototype = { circumference: function() { return Math.PI * this._radius * 2 }, random: function(a) { void 0 === a && (a = new c.Point); var b = 2 * Math.PI * Math.random(), d = Math.random() + Math.random(), e = d > 1 ? 2 - d : d, f = e * Math.cos(b), g = e * Math.sin(b); return a.x = this.x + f * this.radius, a.y = this.y + g * this.radius, a }, getBounds: function() { return new c.Rectangle(this.x - this.radius, this.y - this.radius, this.diameter, this.diameter) }, setTo: function(a, b, c) { return this.x = a, this.y = b, this._diameter = c, this._radius = .5 * c, this }, copyFrom: function(a) { return this.setTo(a.x, a.y, a.diameter) }, copyTo: function(a) { return a.x = this.x, a.y = this.y, a.diameter = this._diameter, a }, distance: function(a, b) { var d = c.Math.distance(this.x, this.y, a.x, a.y); return b ? Math.round(d) : d }, clone: function(a) { return void 0 === a || null === a ? a = new c.Circle(this.x, this.y, this.diameter) : a.setTo(this.x, this.y, this.diameter), a }, contains: function(a, b) { return c.Circle.contains(this, a, b) }, circumferencePoint: function(a, b, d) { return c.Circle.circumferencePoint(this, a, b, d) }, offset: function(a, b) { return this.x += a, this.y += b, this }, offsetPoint: function(a) { return this.offset(a.x, a.y) }, toString: function() { return "[{Phaser.Circle (x=" + this.x + " y=" + this.y + " diameter=" + this.diameter + " radius=" + this.radius + ")}]" } }, c.Circle.prototype.constructor = c.Circle, Object.defineProperty(c.Circle.prototype, "diameter", { get: function() { return this._diameter }, set: function(a) { a > 0 && (this._diameter = a, this._radius = .5 * a) } }), Object.defineProperty(c.Circle.prototype, "radius", { get: function() { return this._radius }, set: function(a) { a > 0 && (this._radius = a, this._diameter = 2 * a) } }), Object.defineProperty(c.Circle.prototype, "left", { get: function() { return this.x - this._radius }, set: function(a) { a > this.x ? (this._radius = 0, this._diameter = 0) : this.radius = this.x - a } }), Object.defineProperty(c.Circle.prototype, "right", { get: function() { return this.x + this._radius }, set: function(a) { a < this.x ? (this._radius = 0, this._diameter = 0) : this.radius = a - this.x } }), Object.defineProperty(c.Circle.prototype, "top", { get: function() { return this.y - this._radius }, set: function(a) { a > this.y ? (this._radius = 0, this._diameter = 0) : this.radius = this.y - a } }), Object.defineProperty(c.Circle.prototype, "bottom", { get: function() { return this.y + this._radius }, set: function(a) { a < this.y ? (this._radius = 0, this._diameter = 0) : this.radius = a - this.y } }), Object.defineProperty(c.Circle.prototype, "area", { get: function() { return this._radius > 0 ? Math.PI * this._radius * this._radius : 0 } }), Object.defineProperty(c.Circle.prototype, "empty", { get: function() { return 0 === this._diameter }, set: function(a) {!0 === a && this.setTo(0, 0, 0) } }), c.Circle.contains = function(a, b, c) { if (a.radius > 0 && b >= a.left && b <= a.right && c >= a.top && c <= a.bottom) { return (a.x - b) * (a.x - b) + (a.y - c) * (a.y - c) <= a.radius * a.radius } return !1 }, c.Circle.equals = function(a, b) { return a.x === b.x && a.y === b.y && a.diameter === b.diameter }, c.Circle.intersects = function(a, b) { return c.Math.distance(a.x, a.y, b.x, b.y) <= a.radius + b.radius }, c.Circle.circumferencePoint = function(a, b, d, e) { return void 0 === d && (d = !1), void 0 === e && (e = new c.Point), !0 === d && (b = c.Math.degToRad(b)), e.x = a.x + a.radius * Math.cos(b), e.y = a.y + a.radius * Math.sin(b), e }, c.Circle.intersectsRectangle = function(a, b) { var c = Math.abs(a.x - b.x - b.halfWidth); if (c > b.halfWidth + a.radius) return !1; var d = Math.abs(a.y - b.y - b.halfHeight); if (d > b.halfHeight + a.radius) return !1; if (c <= b.halfWidth || d <= b.halfHeight) return !0; var e = c - b.halfWidth, f = d - b.halfHeight; return e * e + f * f <= a.radius * a.radius }, PIXI.Circle = c.Circle, c.Ellipse = function(a, b, d, e) { a = a || 0, b = b || 0, d = d || 0, e = e || 0, this.x = a, this.y = b, this.width = d, this.height = e, this.type = c.ELLIPSE }, c.Ellipse.prototype = { setTo: function(a, b, c, d) { return this.x = a, this.y = b, this.width = c, this.height = d, this }, getBounds: function() { return new c.Rectangle(this.x - this.width, this.y - this.height, this.width, this.height) }, copyFrom: function(a) { return this.setTo(a.x, a.y, a.width, a.height) }, copyTo: function(a) { return a.x = this.x, a.y = this.y, a.width = this.width, a.height = this.height, a }, clone: function(a) { return void 0 === a || null === a ? a = new c.Ellipse(this.x, this.y, this.width, this.height) : a.setTo(this.x, this.y, this.width, this.height), a }, contains: function(a, b) { return c.Ellipse.contains(this, a, b) }, random: function(a) { void 0 === a && (a = new c.Point); var b = Math.random() * Math.PI * 2, d = Math.random(); return a.x = Math.sqrt(d) * Math.cos(b), a.y = Math.sqrt(d) * Math.sin(b), a.x = this.x + a.x * this.width / 2, a.y = this.y + a.y * this.height / 2, a }, toString: function() { return "[{Phaser.Ellipse (x=" + this.x + " y=" + this.y + " width=" + this.width + " height=" + this.height + ")}]" } }, c.Ellipse.prototype.constructor = c.Ellipse, Object.defineProperty(c.Ellipse.prototype, "left", { get: function() { return this.x }, set: function(a) { this.x = a } }), Object.defineProperty(c.Ellipse.prototype, "right", { get: function() { return this.x + this.width }, set: function(a) { a < this.x ? this.width = 0 : this.width = a - this.x } }), Object.defineProperty(c.Ellipse.prototype, "top", { get: function() { return this.y }, set: function(a) { this.y = a } }), Object.defineProperty(c.Ellipse.prototype, "bottom", { get: function() { return this.y + this.height }, set: function(a) { a < this.y ? this.height = 0 : this.height = a - this.y } }), Object.defineProperty(c.Ellipse.prototype, "empty", { get: function() { return 0 === this.width || 0 === this.height }, set: function(a) {!0 === a && this.setTo(0, 0, 0, 0) } }), c.Ellipse.contains = function(a, b, c) { if (a.width <= 0 || a.height <= 0) return !1; var d = (b - a.x) / a.width - .5, e = (c - a.y) / a.height - .5; return d *= d, e *= e, d + e < .25 }, PIXI.Ellipse = c.Ellipse, c.Line = function(a, b, d, e) { a = a || 0, b = b || 0, d = d || 0, e = e || 0, this.start = new c.Point(a, b), this.end = new c.Point(d, e), this.type = c.LINE }, c.Line.prototype = { setTo: function(a, b, c, d) { return this.start.setTo(a, b), this.end.setTo(c, d), this }, fromSprite: function(a, b, c) { return void 0 === c && (c = !1), c ? this.setTo(a.center.x, a.center.y, b.center.x, b.center.y) : this.setTo(a.x, a.y, b.x, b.y) }, fromAngle: function(a, b, c, d) { return this.start.setTo(a, b), this.end.setTo(a + Math.cos(c) * d, b + Math.sin(c) * d), this }, rotate: function(a, b) { var c = (this.start.x + this.end.x) / 2, d = (this.start.y + this.end.y) / 2; return this.start.rotate(c, d, a, b), this.end.rotate(c, d, a, b), this }, rotateAround: function(a, b, c, d) { return this.start.rotate(a, b, c, d), this.end.rotate(a, b, c, d), this }, intersects: function(a, b, d) { return c.Line.intersectsPoints(this.start, this.end, a.start, a.end, b, d) }, reflect: function(a) { return c.Line.reflect(this, a) }, midPoint: function(a) { return void 0 === a && (a = new c.Point), a.x = (this.start.x + this.end.x) / 2, a.y = (this.start.y + this.end.y) / 2, a }, centerOn: function(a, b) { var c = (this.start.x + this.end.x) / 2, d = (this.start.y + this.end.y) / 2, e = a - c, f = b - d; this.start.add(e, f), this.end.add(e, f) }, pointOnLine: function(a, b) { return (a - this.start.x) * (this.end.y - this.start.y) == (this.end.x - this.start.x) * (b - this.start.y) }, pointOnSegment: function(a, b) { var c = Math.min(this.start.x, this.end.x), d = Math.max(this.start.x, this.end.x), e = Math.min(this.start.y, this.end.y), f = Math.max(this.start.y, this.end.y); return this.pointOnLine(a, b) && a >= c && a <= d && b >= e && b <= f }, random: function(a) { void 0 === a && (a = new c.Point); var b = Math.random(); return a.x = this.start.x + b * (this.end.x - this.start.x), a.y = this.start.y + b * (this.end.y - this.start.y), a }, coordinatesOnLine: function(a, b) { void 0 === a && (a = 1), void 0 === b && (b = []); var c = Math.round(this.start.x), d = Math.round(this.start.y), e = Math.round(this.end.x), f = Math.round(this.end.y), g = Math.abs(e - c), h = Math.abs(f - d), i = c < e ? 1 : -1, j = d < f ? 1 : -1, k = g - h; b.push([c, d]); for (var l = 1; c !== e || d !== f;) { var m = k << 1; m > -h && (k -= h, c += i), m < g && (k += g, d += j), l % a == 0 && b.push([c, d]), l++ } return b }, clone: function(a) { return void 0 === a || null === a ? a = new c.Line(this.start.x, this.start.y, this.end.x, this.end.y) : a.setTo(this.start.x, this.start.y, this.end.x, this.end.y), a } }, Object.defineProperty(c.Line.prototype, "length", { get: function() { return Math.sqrt((this.end.x - this.start.x) * (this.end.x - this.start.x) + (this.end.y - this.start.y) * (this.end.y - this.start.y)) } }), Object.defineProperty(c.Line.prototype, "angle", { get: function() { return Math.atan2(this.end.y - this.start.y, this.end.x - this.start.x) } }), Object.defineProperty(c.Line.prototype, "slope", { get: function() { return (this.end.y - this.start.y) / (this.end.x - this.start.x) } }), Object.defineProperty(c.Line.prototype, "perpSlope", { get: function() { return -(this.end.x - this.start.x) / (this.end.y - this.start.y) } }), Object.defineProperty(c.Line.prototype, "x", { get: function() { return Math.min(this.start.x, this.end.x) } }), Object.defineProperty(c.Line.prototype, "y", { get: function() { return Math.min(this.start.y, this.end.y) } }), Object.defineProperty(c.Line.prototype, "left", { get: function() { return Math.min(this.start.x, this.end.x) } }), Object.defineProperty(c.Line.prototype, "right", { get: function() { return Math.max(this.start.x, this.end.x) } }), Object.defineProperty(c.Line.prototype, "top", { get: function() { return Math.min(this.start.y, this.end.y) } }), Object.defineProperty(c.Line.prototype, "bottom", { get: function() { return Math.max(this.start.y, this.end.y) } }), Object.defineProperty(c.Line.prototype, "width", { get: function() { return Math.abs(this.start.x - this.end.x) } }), Object.defineProperty(c.Line.prototype, "height", { get: function() { return Math.abs(this.start.y - this.end.y) } }), Object.defineProperty(c.Line.prototype, "normalX", { get: function() { return Math.cos(this.angle - 1.5707963267948966) } }), Object.defineProperty(c.Line.prototype, "normalY", { get: function() { return Math.sin(this.angle - 1.5707963267948966) } }), Object.defineProperty(c.Line.prototype, "normalAngle", { get: function() { return c.Math.wrap(this.angle - 1.5707963267948966, -Math.PI, Math.PI) } }), c.Line.intersectsPoints = function(a, b, d, e, f, g) { void 0 === f && (f = !0), void 0 === g && (g = new c.Point); var h = b.y - a.y, i = e.y - d.y, j = a.x - b.x, k = d.x - e.x, l = b.x * a.y - a.x * b.y, m = e.x * d.y - d.x * e.y, n = h * k - i * j; if (0 === n) return null; if (g.x = (j * m - k * l) / n, g.y = (i * l - h * m) / n, f) { var o = (e.y - d.y) * (b.x - a.x) - (e.x - d.x) * (b.y - a.y), p = ((e.x - d.x) * (a.y - d.y) - (e.y - d.y) * (a.x - d.x)) / o, q = ((b.x - a.x) * (a.y - d.y) - (b.y - a.y) * (a.x - d.x)) / o; return p >= 0 && p <= 1 && q >= 0 && q <= 1 ? g : null } return g }, c.Line.intersects = function(a, b, d, e) { return c.Line.intersectsPoints(a.start, a.end, b.start, b.end, d, e) }, c.Line.intersectsRectangle = function(a, b) { if (!c.Rectangle.intersects(a, b)) return !1; var d = a.start.x, e = a.start.y, f = a.end.x, g = a.end.y, h = b.x, i = b.y, j = b.right, k = b.bottom, l = 0; if (d >= h && d <= j && e >= i && e <= k || f >= h && f <= j && g >= i && g <= k) return !0; if (d < h && f >= h) { if ((l = e + (g - e) * (h - d) / (f - d)) > i && l <= k) return !0 } else if (d > j && f <= j && (l = e + (g - e) * (j - d) / (f - d)) >= i && l <= k) return !0; if (e < i && g >= i) { if ((l = d + (f - d) * (i - e) / (g - e)) >= h && l <= j) return !0 } else if (e > k && g <= k && (l = d + (f - d) * (k - e) / (g - e)) >= h && l <= j) return !0; return !1 }, c.Line.reflect = function(a, b) { return 2 * b.normalAngle - 3.141592653589793 - a.angle }, c.Matrix = function(a, b, d, e, f, g) { void 0 !== a && null !== a || (a = 1), void 0 !== b && null !== b || (b = 0), void 0 !== d && null !== d || (d = 0), void 0 !== e && null !== e || (e = 1), void 0 !== f && null !== f || (f = 0), void 0 !== g && null !== g || (g = 0), this.a = a, this.b = b, this.c = d, this.d = e, this.tx = f, this.ty = g, this.type = c.MATRIX }, c.Matrix.prototype = { fromArray: function(a) { return this.setTo(a[0], a[1], a[3], a[4], a[2], a[5]) }, setTo: function(a, b, c, d, e, f) { return this.a = a, this.b = b, this.c = c, this.d = d, this.tx = e, this.ty = f, this }, clone: function(a) { return void 0 === a || null === a ? a = new c.Matrix(this.a, this.b, this.c, this.d, this.tx, this.ty) : (a.a = this.a, a.b = this.b, a.c = this.c, a.d = this.d, a.tx = this.tx, a.ty = this.ty), a }, copyTo: function(a) { return a.copyFrom(this), a }, copyFrom: function(a) { return this.a = a.a, this.b = a.b, this.c = a.c, this.d = a.d, this.tx = a.tx, this.ty = a.ty, this }, toArray: function(a, b) { return void 0 === b && (b = new PIXI.Float32Array(9)), a ? (b[0] = this.a, b[1] = this.b, b[2] = 0, b[3] = this.c, b[4] = this.d, b[5] = 0, b[6] = this.tx, b[7] = this.ty, b[8] = 1) : (b[0] = this.a, b[1] = this.c, b[2] = this.tx, b[3] = this.b, b[4] = this.d, b[5] = this.ty, b[6] = 0, b[7] = 0, b[8] = 1), b }, apply: function(a, b) { return void 0 === b && (b = new c.Point), b.x = this.a * a.x + this.c * a.y + this.tx, b.y = this.b * a.x + this.d * a.y + this.ty, b }, applyInverse: function(a, b) { void 0 === b && (b = new c.Point); var d = 1 / (this.a * this.d + this.c * -this.b), e = a.x, f = a.y; return b.x = this.d * d * e + -this.c * d * f + (this.ty * this.c - this.tx * this.d) * d, b.y = this.a * d * f + -this.b * d * e + (-this.ty * this.a + this.tx * this.b) * d, b }, translate: function(a, b) { return this.tx += a, this.ty += b, this }, scale: function(a, b) { return this.a *= a, this.d *= b, this.c *= a, this.b *= b, this.tx *= a, this.ty *= b, this }, rotate: function(a) { var b = Math.cos(a), c = Math.sin(a), d = this.a, e = this.c, f = this.tx; return this.a = d * b - this.b * c, this.b = d * c + this.b * b, this.c = e * b - this.d * c, this.d = e * c + this.d * b, this.tx = f * b - this.ty * c, this.ty = f * c + this.ty * b, this }, append: function(a) { var b = this.a, c = this.b, d = this.c, e = this.d; return this.a = a.a * b + a.b * d, this.b = a.a * c + a.b * e, this.c = a.c * b + a.d * d, this.d = a.c * c + a.d * e, this.tx = a.tx * b + a.ty * d + this.tx, this.ty = a.tx * c + a.ty * e + this.ty, this }, identity: function() { return this.setTo(1, 0, 0, 1, 0, 0) } }, c.identityMatrix = new c.Matrix, PIXI.Matrix = c.Matrix, PIXI.identityMatrix = c.identityMatrix, c.Point = function(a, b) { a = a || 0, b = b || 0, this.x = a, this.y = b, this.type = c.POINT }, c.Point.prototype = { copyFrom: function(a) { return this.setTo(a.x, a.y) }, invert: function() { return this.setTo(this.y, this.x) }, setTo: function(a, b) { return this.x = a || 0, this.y = b || (0 !== b ? this.x : 0), this }, set: function(a, b) { return this.x = a || 0, this.y = b || (0 !== b ? this.x : 0), this }, add: function(a, b) { return this.x += a, this.y += b, this }, subtract: function(a, b) { return this.x -= a, this.y -= b, this }, multiply: function(a, b) { return this.x *= a, this.y *= b, this }, divide: function(a, b) { return this.x /= a, this.y /= b, this }, clampX: function(a, b) { return this.x = c.Math.clamp(this.x, a, b), this }, clampY: function(a, b) { return this.y = c.Math.clamp(this.y, a, b), this }, clamp: function(a, b) { return this.x = c.Math.clamp(this.x, a, b), this.y = c.Math.clamp(this.y, a, b), this }, clone: function(a) { return void 0 === a || null === a ? a = new c.Point(this.x, this.y) : a.setTo(this.x, this.y), a }, copyTo: function(a) { return a.x = this.x, a.y = this.y, a }, distance: function(a, b) { return c.Point.distance(this, a, b) }, equals: function(a) { return a.x === this.x && a.y === this.y }, angle: function(a, b) { return void 0 === b && (b = !1), b ? c.Math.radToDeg(Math.atan2(a.y - this.y, a.x - this.x)) : Math.atan2(a.y - this.y, a.x - this.x) }, rotate: function(a, b, d, e, f) { return c.Point.rotate(this, a, b, d, e, f) }, getMagnitude: function() { return Math.sqrt(this.x * this.x + this.y * this.y) }, getMagnitudeSq: function() { return this.x * this.x + this.y * this.y }, setMagnitude: function(a) { return this.normalize().multiply(a, a) }, normalize: function() { if (!this.isZero()) { var a = this.getMagnitude(); this.x /= a, this.y /= a } return this }, isZero: function() { return 0 === this.x && 0 === this.y }, dot: function(a) { return this.x * a.x + this.y * a.y }, cross: function(a) { return this.x * a.y - this.y * a.x }, perp: function() { return this.setTo(-this.y, this.x) }, rperp: function() { return this.setTo(this.y, -this.x) }, normalRightHand: function() { return this.setTo(-1 * this.y, this.x) }, floor: function() { return this.setTo(Math.floor(this.x), Math.floor(this.y)) }, ceil: function() { return this.setTo(Math.ceil(this.x), Math.ceil(this.y)) }, toString: function() { return "[{Point (x=" + this.x + " y=" + this.y + ")}]" } }, c.Point.prototype.constructor = c.Point, c.Point.add = function(a, b, d) { return void 0 === d && (d = new c.Point), d.x = a.x + b.x, d.y = a.y + b.y, d }, c.Point.subtract = function(a, b, d) { return void 0 === d && (d = new c.Point), d.x = a.x - b.x, d.y = a.y - b.y, d }, c.Point.multiply = function(a, b, d) { return void 0 === d && (d = new c.Point), d.x = a.x * b.x, d.y = a.y * b.y, d }, c.Point.divide = function(a, b, d) { return void 0 === d && (d = new c.Point), d.x = a.x / b.x, d.y = a.y / b.y, d }, c.Point.equals = function(a, b) { return a.x === b.x && a.y === b.y }, c.Point.angle = function(a, b) { return Math.atan2(a.y - b.y, a.x - b.x) }, c.Point.negative = function(a, b) { return void 0 === b && (b = new c.Point), b.setTo(-a.x, -a.y) }, c.Point.multiplyAdd = function(a, b, d, e) { return void 0 === e && (e = new c.Point), e.setTo(a.x + b.x * d, a.y + b.y * d) }, c.Point.interpolate = function(a, b, d, e) { return void 0 === e && (e = new c.Point), e.setTo(a.x + (b.x - a.x) * d, a.y + (b.y - a.y) * d) }, c.Point.perp = function(a, b) { return void 0 === b && (b = new c.Point), b.setTo(-a.y, a.x) }, c.Point.rperp = function(a, b) { return void 0 === b && (b = new c.Point), b.setTo(a.y, -a.x) }, c.Point.distance = function(a, b, d) { var e = c.Math.distance(a.x, a.y, b.x, b.y); return d ? Math.round(e) : e }, c.Point.project = function(a, b, d) { void 0 === d && (d = new c.Point); var e = a.dot(b) / b.getMagnitudeSq(); return 0 !== e && d.setTo(e * b.x, e * b.y), d }, c.Point.projectUnit = function(a, b, d) { void 0 === d && (d = new c.Point); var e = a.dot(b); return 0 !== e && d.setTo(e * b.x, e * b.y), d }, c.Point.normalRightHand = function(a, b) { return void 0 === b && (b = new c.Point), b.setTo(-1 * a.y, a.x) }, c.Point.normalize = function(a, b) { void 0 === b && (b = new c.Point); var d = a.getMagnitude(); return 0 !== d && b.setTo(a.x / d, a.y / d), b }, c.Point.rotate = function(a, b, d, e, f, g) { if (f && (e = c.Math.degToRad(e)), void 0 === g) { a.subtract(b, d); var h = Math.sin(e), i = Math.cos(e), j = i * a.x - h * a.y, k = h * a.x + i * a.y; a.x = j + b, a.y = k + d } else { var l = e + Math.atan2(a.y - d, a.x - b); a.x = b + g * Math.cos(l), a.y = d + g * Math.sin(l) } return a }, c.Point.centroid = function(a, b) { if (void 0 === b && (b = new c.Point), "[object Array]" !== Object.prototype.toString.call(a)) throw new Error("Phaser.Point. Parameter 'points' must be an array"); var d = a.length; if (d < 1) throw new Error("Phaser.Point. Parameter 'points' array must not be empty"); if (1 === d) return b.copyFrom(a[0]), b; for (var e = 0; e < d; e++) c.Point.add(b, a[e], b); return b.divide(d, d), b }, c.Point.parse = function(a, b, d) { b = b || "x", d = d || "y"; var e = new c.Point; return a[b] && (e.x = parseInt(a[b], 10)), a[d] && (e.y = parseInt(a[d], 10)), e }, PIXI.Point = c.Point, c.Polygon = function() { this.area = 0, this._points = [], arguments.length > 0 && this.setTo.apply(this, arguments), this.closed = !0, this.flattened = !1, this.type = c.POLYGON }, c.Polygon.prototype = { toNumberArray: function(a) { void 0 === a && (a = []); for (var b = 0; b < this._points.length; b++) "number" == typeof this._points[b] ? (a.push(this._points[b]), a.push(this._points[b + 1]), b++) : (a.push(this._points[b].x), a.push(this._points[b].y)); return a }, flatten: function() { return this._points = this.toNumberArray(), this.flattened = !0, this }, clone: function(a) { var b = this._points.slice(); return void 0 === a || null === a ? a = new c.Polygon(b) : a.setTo(b), a }, contains: function(a, b) { var c = !1; if (this.flattened) for (var d = -2, e = this._points.length - 2; (d += 2) < this._points.length; e = d) { var f = this._points[d], g = this._points[d + 1], h = this._points[e], i = this._points[e + 1]; (g <= b && b < i || i <= b && b < g) && a < (h - f) * (b - g) / (i - g) + f && (c = !c) } else for (var d = -1, e = this._points.length - 1; ++d < this._points.length; e = d) { var f = this._points[d].x, g = this._points[d].y, h = this._points[e].x, i = this._points[e].y; (g <= b && b < i || i <= b && b < g) && a < (h - f) * (b - g) / (i - g) + f && (c = !c) } return c }, setTo: function(a) { if (this.area = 0, this._points = [], arguments.length > 0) { Array.isArray(a) || (a = Array.prototype.slice.call(arguments)); for (var b = Number.MAX_VALUE, c = 0, d = a.length; c < d; c++) { if ("number" == typeof a[c]) { var e = new PIXI.Point(a[c], a[c + 1]); c++ } else if (Array.isArray(a[c])) var e = new PIXI.Point(a[c][0], a[c][1]); else var e = new PIXI.Point(a[c].x, a[c].y); this._points.push(e), e.y < b && (b = e.y) } this.calculateArea(b) } return this }, calculateArea: function(a) { for (var b, c, d, e, f = 0, g = this._points.length; f < g; f++) b = this._points[f], c = f === g - 1 ? this._points[0] : this._points[f + 1], d = (b.y - a + (c.y - a)) / 2, e = b.x - c.x, this.area += d * e; return this.area } }, c.Polygon.prototype.constructor = c.Polygon, Object.defineProperty(c.Polygon.prototype, "points", { get: function() { return this._points }, set: function(a) { null != a ? this.setTo(a) : this.setTo() } }), PIXI.Polygon = c.Polygon, c.Rectangle = function(a, b, d, e) { a = a || 0, b = b || 0, d = d || 0, e = e || 0, this.x = a, this.y = b, this.width = d, this.height = e, this.type = c.RECTANGLE }, c.Rectangle.prototype = { offset: function(a, b) { return this.x += a, this.y += b, this }, offsetPoint: function(a) { return this.offset(a.x, a.y) }, setTo: function(a, b, c, d) { return this.x = a, this.y = b, this.width = c, this.height = d, this }, scale: function(a, b) { return void 0 === b && (b = a), this.width *= a, this.height *= b, this }, centerOn: function(a, b) { return this.centerX = a, this.centerY = b, this }, floor: function() { this.x = Math.floor(this.x), this.y = Math.floor(this.y) }, floorAll: function() { this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.width = Math.floor(this.width), this.height = Math.floor(this.height) }, ceil: function() { this.x = Math.ceil(this.x), this.y = Math.ceil(this.y) }, ceilAll: function() { this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.width = Math.ceil(this.width), this.height = Math.ceil(this.height) }, copyFrom: function(a) { return this.setTo(a.x, a.y, a.width, a.height) }, copyTo: function(a) { return a.x = this.x, a.y = this.y, a.width = this.width, a.height = this.height, a }, inflate: function(a, b) { return c.Rectangle.inflate(this, a, b) }, size: function(a) { return c.Rectangle.size(this, a) }, resize: function(a, b) { return this.width = a, this.height = b, this }, clone: function(a) { return c.Rectangle.clone(this, a) }, contains: function(a, b) { return c.Rectangle.contains(this, a, b) }, containsRect: function(a) { return c.Rectangle.containsRect(a, this) }, equals: function(a) { return c.Rectangle.equals(this, a) }, intersection: function(a, b) { return c.Rectangle.intersection(this, a, b) }, intersects: function(a) { return c.Rectangle.intersects(this, a) }, intersectsRaw: function(a, b, d, e, f) { return c.Rectangle.intersectsRaw(this, a, b, d, e, f) }, union: function(a, b) { return c.Rectangle.union(this, a, b) }, random: function(a) { return void 0 === a && (a = new c.Point), a.x = this.randomX, a.y = this.randomY, a }, getPoint: function(a, b) { switch (void 0 === b && (b = new c.Point), a) { default: case c.TOP_LEFT: return b.set(this.x, this.y); case c.TOP_CENTER: return b.set(this.centerX, this.y); case c.TOP_RIGHT: return b.set(this.right, this.y); case c.LEFT_CENTER: return b.set(this.x, this.centerY); case c.CENTER: return b.set(this.centerX, this.centerY); case c.RIGHT_CENTER: return b.set(this.right, this.centerY); case c.BOTTOM_LEFT: return b.set(this.x, this.bottom); case c.BOTTOM_CENTER: return b.set(this.centerX, this.bottom); case c.BOTTOM_RIGHT: return b.set(this.right, this.bottom) } }, toString: function() { return "[{Rectangle (x=" + this.x + " y=" + this.y + " width=" + this.width + " height=" + this.height + " empty=" + this.empty + ")}]" } }, Object.defineProperty(c.Rectangle.prototype, "halfWidth", { get: function() { return Math.round(this.width / 2) } }), Object.defineProperty(c.Rectangle.prototype, "halfHeight", { get: function() { return Math.round(this.height / 2) } }), Object.defineProperty(c.Rectangle.prototype, "bottom", { get: function() { return this.y + this.height }, set: function(a) { a <= this.y ? this.height = 0 : this.height = a - this.y } }), Object.defineProperty(c.Rectangle.prototype, "bottomLeft", { get: function() { return new c.Point(this.x, this.bottom) }, set: function(a) { this.x = a.x, this.bottom = a.y } }), Object.defineProperty(c.Rectangle.prototype, "bottomRight", { get: function() { return new c.Point(this.right, this.bottom) }, set: function(a) { this.right = a.x, this.bottom = a.y } }), Object.defineProperty(c.Rectangle.prototype, "left", { get: function() { return this.x }, set: function(a) { a >= this.right ? this.width = 0 : this.width = this.right - a, this.x = a } }), Object.defineProperty(c.Rectangle.prototype, "right", { get: function() { return this.x + this.width }, set: function(a) { a <= this.x ? this.width = 0 : this.width = a - this.x } }), Object.defineProperty(c.Rectangle.prototype, "volume", { get: function() { return this.width * this.height } }), Object.defineProperty(c.Rectangle.prototype, "perimeter", { get: function() { return 2 * this.width + 2 * this.height } }), Object.defineProperty(c.Rectangle.prototype, "centerX", { get: function() { return this.x + this.halfWidth }, set: function(a) { this.x = a - this.halfWidth } }), Object.defineProperty(c.Rectangle.prototype, "centerY", { get: function() { return this.y + this.halfHeight }, set: function(a) { this.y = a - this.halfHeight } }), Object.defineProperty(c.Rectangle.prototype, "randomX", { get: function() { return this.x + Math.random() * this.width } }), Object.defineProperty(c.Rectangle.prototype, "randomY", { get: function() { return this.y + Math.random() * this.height } }), Object.defineProperty(c.Rectangle.prototype, "top", { get: function() { return this.y }, set: function(a) { a >= this.bottom ? (this.height = 0, this.y = a) : this.height = this.bottom - a } }), Object.defineProperty(c.Rectangle.prototype, "topLeft", { get: function() { return new c.Point(this.x, this.y) }, set: function(a) { this.x = a.x, this.y = a.y } }), Object.defineProperty(c.Rectangle.prototype, "topRight", { get: function() { return new c.Point(this.x + this.width, this.y) }, set: function(a) { this.right = a.x, this.y = a.y } }), Object.defineProperty(c.Rectangle.prototype, "empty", { get: function() { return !this.width || !this.height }, set: function(a) {!0 === a && this.setTo(0, 0, 0, 0) } }), c.Rectangle.prototype.constructor = c.Rectangle, c.Rectangle.inflate = function(a, b, c) { return a.x -= b, a.width += 2 * b, a.y -= c, a.height += 2 * c, a }, c.Rectangle.inflatePoint = function(a, b) { return c.Rectangle.inflate(a, b.x, b.y) }, c.Rectangle.size = function(a, b) { return void 0 === b || null === b ? b = new c.Point(a.width, a.height) : b.setTo(a.width, a.height), b }, c.Rectangle.clone = function(a, b) { return void 0 === b || null === b ? b = new c.Rectangle(a.x, a.y, a.width, a.height) : b.setTo(a.x, a.y, a.width, a.height), b }, c.Rectangle.contains = function(a, b, c) { return !(a.width <= 0 || a.height <= 0) && (b >= a.x && b < a.right && c >= a.y && c < a.bottom) }, c.Rectangle.containsRaw = function(a, b, c, d, e, f) { return e >= a && e < a + c && f >= b && f < b + d }, c.Rectangle.containsPoint = function(a, b) { return c.Rectangle.contains(a, b.x, b.y) }, c.Rectangle.containsRect = function(a, b) { return !(a.volume > b.volume) && (a.x >= b.x && a.y >= b.y && a.right < b.right && a.bottom < b.bottom) }, c.Rectangle.equals = function(a, b) { return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height }, c.Rectangle.sameDimensions = function(a, b) { return a.width === b.width && a.height === b.height }, c.Rectangle.intersection = function(a, b, d) { return void 0 === d && (d = new c.Rectangle), c.Rectangle.intersects(a, b) && (d.x = Math.max(a.x, b.x), d.y = Math.max(a.y, b.y), d.width = Math.min(a.right, b.right) - d.x, d.height = Math.min(a.bottom, b.bottom) - d.y), d }, c.Rectangle.intersects = function(a, b) { return !(a.width <= 0 || a.height <= 0 || b.width <= 0 || b.height <= 0) && !(a.right < b.x || a.bottom < b.y || a.x > b.right || a.y > b.bottom) }, c.Rectangle.intersectsRaw = function(a, b, c, d, e, f) { return void 0 === f && (f = 0), !(b > a.right + f || c < a.left - f || d > a.bottom + f || e < a.top - f) }, c.Rectangle.union = function(a, b, d) { return void 0 === d && (d = new c.Rectangle), d.setTo(Math.min(a.x, b.x), Math.min(a.y, b.y), Math.max(a.right, b.right) - Math.min(a.left, b.left), Math.max(a.bottom, b.bottom) - Math.min(a.top, b.top)) }, c.Rectangle.aabb = function(a, b) { void 0 === b && (b = new c.Rectangle); var d = Number.NEGATIVE_INFINITY, e = Number.POSITIVE_INFINITY, f = Number.NEGATIVE_INFINITY, g = Number.POSITIVE_INFINITY; return a.forEach(function(a) { a.x > d && (d = a.x), a.x < e && (e = a.x), a.y > f && (f = a.y), a.y < g && (g = a.y) }), b.setTo(e, g, d - e, f - g), b }, PIXI.Rectangle = c.Rectangle, PIXI.EmptyRectangle = new c.Rectangle(0, 0, 0, 0), c.RoundedRectangle = function(a, b, d, e, f) { void 0 === a && (a = 0), void 0 === b && (b = 0), void 0 === d && (d = 0), void 0 === e && (e = 0), void 0 === f && (f = 20), this.x = a, this.y = b, this.width = d, this.height = e, this.radius = f || 20, this.type = c.ROUNDEDRECTANGLE }, c.RoundedRectangle.prototype = { clone: function() { return new c.RoundedRectangle(this.x, this.y, this.width, this.height, this.radius) }, contains: function(a, b) { if (this.width <= 0 || this.height <= 0) return !1; var c = this.x; if (a >= c && a <= c + this.width) { var d = this.y; if (b >= d && b <= d + this.height) return !0 } return !1 } }, c.RoundedRectangle.prototype.constructor = c.RoundedRectangle, PIXI.RoundedRectangle = c.RoundedRectangle, c.Camera = function(a, b, d, e, f, g) { this.game = a, this.world = a.world, this.id = 0, this.view = new c.Rectangle(d, e, f, g), this.bounds = new c.Rectangle(d, e, f, g), this.deadzone = null, this.visible = !0, this.roundPx = !0, this.atLimit = { x: !1, y: !1 }, this.target = null, this.displayObject = null, this.scale = null, this.totalInView = 0, this.lerp = new c.Point(1, 1), this.onShakeComplete = new c.Signal, this.onFlashComplete = new c.Signal, this.onFadeComplete = new c.Signal, this.fx = null, this._targetPosition = new c.Point, this._edge = 0, this._position = new c.Point, this._shake = { intensity: 0, duration: 0, horizontal: !1, vertical: !1, shakeBounds: !0, x: 0, y: 0 }, this._fxDuration = 0, this._fxType = 0 }, c.Camera.FOLLOW_LOCKON = 0, c.Camera.FOLLOW_PLATFORMER = 1, c.Camera.FOLLOW_TOPDOWN = 2, c.Camera.FOLLOW_TOPDOWN_TIGHT = 3, c.Camera.SHAKE_BOTH = 4, c.Camera.SHAKE_HORIZONTAL = 5, c.Camera.SHAKE_VERTICAL = 6, c.Camera.ENABLE_FX = !0, c.Camera.prototype = { boot: function() { this.displayObject = this.game.world, this.scale = this.game.world.scale, this.game.camera = this, c.Graphics && c.Camera.ENABLE_FX && (this.fx = new c.Graphics(this.game), this.game.stage.addChild(this.fx)) }, preUpdate: function() { this.totalInView = 0 }, follow: function(a, b, d, e) { void 0 === b && (b = c.Camera.FOLLOW_LOCKON), void 0 === d && (d = 1), void 0 === e && (e = 1), this.target = a, this.lerp.set(d, e); var f; switch (b) { case c.Camera.FOLLOW_PLATFORMER: var g = this.width / 8, h = this.height / 3; this.deadzone = new c.Rectangle((this.width - g) / 2, (this.height - h) / 2 - .25 * h, g, h); break; case c.Camera.FOLLOW_TOPDOWN: f = Math.max(this.width, this.height) / 4, this.deadzone = new c.Rectangle((this.width - f) / 2, (this.height - f) / 2, f, f); break; case c.Camera.FOLLOW_TOPDOWN_TIGHT: f = Math.max(this.width, this.height) / 8, this.deadzone = new c.Rectangle((this.width - f) / 2, (this.height - f) / 2, f, f); break; case c.Camera.FOLLOW_LOCKON: default: this.deadzone = null } }, unfollow: function() { this.target = null }, focusOn: function(a) { this.setPosition(Math.round(a.x - this.view.halfWidth), Math.round(a.y - this.view.halfHeight)) }, focusOnXY: function(a, b) { this.setPosition(Math.round(a - this.view.halfWidth), Math.round(b - this.view.halfHeight)) }, shake: function(a, b, d, e, f) { return void 0 === a && (a = .05), void 0 === b && (b = 500), void 0 === d && (d = !0), void 0 === e && (e = c.Camera.SHAKE_BOTH), void 0 === f && (f = !0), !(!d && this._shake.duration > 0) && (this._shake.intensity = a, this._shake.duration = b, this._shake.shakeBounds = f, this._shake.x = 0, this._shake.y = 0, this._shake.horizontal = e === c.Camera.SHAKE_BOTH || e === c.Camera.SHAKE_HORIZONTAL, this._shake.vertical = e === c.Camera.SHAKE_BOTH || e === c.Camera.SHAKE_VERTICAL, !0) }, flash: function(a, b, c) { return void 0 === a && (a = 16777215), void 0 === b && (b = 500), void 0 === c && (c = !1), !(!this.fx || !c && this._fxDuration > 0) && (this.fx.clear(), this.fx.beginFill(a), this.fx.drawRect(0, 0, this.width, this.height), this.fx.endFill(), this.fx.alpha = 1, this._fxDuration = b, this._fxType = 0, !0) }, fade: function(a, b, c) { return void 0 === a && (a = 0), void 0 === b && (b = 500), void 0 === c && (c = !1), !(!this.fx || !c && this._fxDuration > 0) && (this.fx.clear(), this.fx.beginFill(a), this.fx.drawRect(0, 0, this.width, this.height), this.fx.endFill(), this.fx.alpha = 0, this._fxDuration = b, this._fxType = 1, !0) }, update: function() { this._fxDuration > 0 && this.updateFX(), this._shake.duration > 0 && this.updateShake(), this.bounds && this.checkBounds(), this.roundPx && (this.view.floor(), this._shake.x = Math.floor(this._shake.x), this._shake.y = Math.floor(this._shake.y)), this.displayObject.position.x = -this.view.x, this.displayObject.position.y = -this.view.y }, updateFX: function() { 0 === this._fxType ? (this.fx.alpha -= this.game.time.elapsedMS / this._fxDuration, this.fx.alpha <= 0 && (this._fxDuration = 0, this.fx.alpha = 0, this.onFlashComplete.dispatch())) : (this.fx.alpha += this.game.time.elapsedMS / this._fxDuration, this.fx.alpha >= 1 && (this._fxDuration = 0, this.fx.alpha = 1, this.onFadeComplete.dispatch())) }, updateShake: function() { this._shake.duration -= this.game.time.elapsedMS, this._shake.duration <= 0 ? (this.onShakeComplete.dispatch(), this._shake.x = 0, this._shake.y = 0) : (this._shake.horizontal && (this._shake.x = this.game.rnd.frac() * this._shake.intensity * this.view.width * 2 - this._shake.intensity * this.view.width), this._shake.vertical && (this._shake.y = this.game.rnd.frac() * this._shake.intensity * this.view.height * 2 - this._shake.intensity * this.view.height)) }, updateTarget: function() { this._targetPosition.x = this.view.x + this.target.worldPosition.x, this._targetPosition.y = this.view.y + this.target.worldPosition.y, this.deadzone ? (this._edge = this._targetPosition.x - this.view.x, this._edge < this.deadzone.left ? this.view.x = this.game.math.linear(this.view.x, this._targetPosition.x - this.deadzone.left, this.lerp.x) : this._edge > this.deadzone.right && (this.view.x = this.game.math.linear(this.view.x, this._targetPosition.x - this.deadzone.right, this.lerp.x)), this._edge = this._targetPosition.y - this.view.y, this._edge < this.deadzone.top ? this.view.y = this.game.math.linear(this.view.y, this._targetPosition.y - this.deadzone.top, this.lerp.y) : this._edge > this.deadzone.bottom && (this.view.y = this.game.math.linear(this.view.y, this._targetPosition.y - this.deadzone.bottom, this.lerp.y))) : (this.view.x = this.game.math.linear(this.view.x, this._targetPosition.x - this.view.halfWidth, this.lerp.x), this.view.y = this.game.math.linear(this.view.y, this._targetPosition.y - this.view.halfHeight, this.lerp.y)), this.bounds && this.checkBounds(), this.roundPx && this.view.floor(), this.displayObject.position.x = -this.view.x, this.displayObject.position.y = -this.view.y }, setBoundsToWorld: function() { this.bounds && this.bounds.copyFrom(this.game.world.bounds) }, checkBounds: function() { this.atLimit.x = !1, this.atLimit.y = !1; var a = this.view.x + this._shake.x, b = this.view.right + this._shake.x, c = this.view.y + this._shake.y, d = this.view.bottom + this._shake.y; a <= this.bounds.x * this.scale.x && (this.atLimit.x = !0, this.view.x = this.bounds.x * this.scale.x, this._shake.shakeBounds || (this._shake.x = 0)), b >= this.bounds.right * this.scale.x && (this.atLimit.x = !0, this.view.x = this.bounds.right * this.scale.x - this.width, this._shake.shakeBounds || (this._shake.x = 0)), c <= this.bounds.top * this.scale.y && (this.atLimit.y = !0, this.view.y = this.bounds.top * this.scale.y, this._shake.shakeBounds || (this._shake.y = 0)), d >= this.bounds.bottom * this.scale.y && (this.atLimit.y = !0, this.view.y = this.bounds.bottom * this.scale.y - this.height, this._shake.shakeBounds || (this._shake.y = 0)) }, setPosition: function(a, b) { this.view.x = a, this.view.y = b, this.bounds && this.checkBounds() }, setSize: function(a, b) { this.view.width = a, this.view.height = b }, reset: function() { this.target = null, this.view.x = 0, this.view.y = 0, this._shake.duration = 0, this.resetFX() }, resetFX: function() { this.fx && (this.fx.clear(), this.fx.alpha = 0, this._fxDuration = 0) } }, c.Camera.prototype.constructor = c.Camera, Object.defineProperty(c.Camera.prototype, "x", { get: function() { return this.view.x }, set: function(a) { this.view.x = a, this.bounds && this.checkBounds() } }), Object.defineProperty(c.Camera.prototype, "y", { get: function() { return this.view.y }, set: function(a) { this.view.y = a, this.bounds && this.checkBounds() } }), Object.defineProperty(c.Camera.prototype, "position", { get: function() { return this._position.set(this.view.x, this.view.y), this._position }, set: function(a) { void 0 !== a.x && (this.view.x = a.x), void 0 !== a.y && (this.view.y = a.y), this.bounds && this.checkBounds() } }), Object.defineProperty(c.Camera.prototype, "width", { get: function() { return this.view.width }, set: function(a) { this.view.width = a } }), Object.defineProperty(c.Camera.prototype, "height", { get: function() { return this.view.height }, set: function(a) { this.view.height = a } }), Object.defineProperty(c.Camera.prototype, "shakeIntensity", { get: function() { return this._shake.intensity }, set: function(a) { this._shake.intensity = a } }), c.State = function() { this.game = null, this.key = "", this.add = null, this.make = null, this.camera = null, this.cache = null, this.input = null, this.load = null, this.math = null, this.sound = null, this.scale = null, this.stage = null, this.state = null, this.time = null, this.tweens = null, this.world = null, this.particles = null, this.physics = null, this.rnd = null }, c.State.prototype = { init: function() {}, preload: function() {}, loadUpdate: function() {}, loadRender: function() {}, create: function() {}, update: function() {}, preRender: function() {}, render: function() {}, resize: function() {}, paused: function() {}, resumed: function() {}, pauseUpdate: function() {}, shutdown: function() {} }, c.State.prototype.constructor = c.State, c.StateManager = function(a, b) { this.game = a, this.states = {}, this._pendingState = null, void 0 !== b && null !== b && (this._pendingState = b), this._clearWorld = !1, this._clearCache = !1, this._created = !1, this._args = [], this.current = "", this.onStateChange = new c.Signal, this.onInitCallback = null, this.onPreloadCallback = null, this.onCreateCallback = null, this.onUpdateCallback = null, this.onRenderCallback = null, this.onResizeCallback = null, this.onPreRenderCallback = null, this.onLoadUpdateCallback = null, this.onLoadRenderCallback = null, this.onPausedCallback = null, this.onResumedCallback = null, this.onPauseUpdateCallback = null, this.onShutDownCallback = null }, c.StateManager.prototype = { boot: function() { this.game.onPause.add(this.pause, this), this.game.onResume.add(this.resume, this), null !== this._pendingState && "string" != typeof this._pendingState && this.add("default", this._pendingState, !0) }, add: function(a, b, d) { void 0 === d && (d = !1); var e; return b instanceof c.State ? e = b : "object" == typeof b ? (e = b, e.game = this.game) : "function" == typeof b && (e = new b(this.game)), this.states[a] = e, d && (this.game.isBooted ? this.start(a) : this._pendingState = a), e }, remove: function(a) { this.current === a && (this.callbackContext = null, this.onInitCallback = null, this.onShutDownCallback = null, this.onPreloadCallback = null, this.onLoadRenderCallback = null, this.onLoadUpdateCallback = null, this.onCreateCallback = null, this.onUpdateCallback = null, this.onPreRenderCallback = null, this.onRenderCallback = null, this.onResizeCallback = null, this.onPausedCallback = null, this.onResumedCallback = null, this.onPauseUpdateCallback = null), delete this.states[a] }, start: function(a, b, c) { void 0 === b && (b = !0), void 0 === c && (c = !1), this.checkState(a) && (this._pendingState = a, this._clearWorld = b, this._clearCache = c, arguments.length > 3 && (this._args = Array.prototype.splice.call(arguments, 3))) }, restart: function(a, b) { void 0 === a && (a = !0), void 0 === b && (b = !1), this._pendingState = this.current, this._clearWorld = a, this._clearCache = b, arguments.length > 2 && (this._args = Array.prototype.slice.call(arguments, 2)) }, dummy: function() {}, preUpdate: function() { if (this._pendingState && this.game.isBooted) { var a = this.current; if (this.clearCurrentState(), this.setCurrentState(this._pendingState), this.onStateChange.dispatch(this.current, a), this.current !== this._pendingState) return; this._pendingState = null, this.onPreloadCallback ? (this.game.load.reset(!0), this.onPreloadCallback.call(this.callbackContext, this.game), 0 === this.game.load.totalQueuedFiles() && 0 === this.game.load.totalQueuedPacks() ? this.loadComplete() : this.game.load.start()) : this.loadComplete() } }, clearCurrentState: function() { this.current && (this.onShutDownCallback && this.onShutDownCallback.call(this.callbackContext, this.game), this.game.tweens.removeAll(), this.game.camera.reset(), this.game.input.reset(!0), this.game.physics.clear(), this.game.time.removeAll(), this.game.scale.reset(this._clearWorld), this.game.debug && this.game.debug.reset(), this._clearWorld && (this.game.world.shutdown(), this._clearCache && this.game.cache.destroy())) }, checkState: function(a) { return this.states[a] ? !!(this.states[a].preload || this.states[a].create || this.states[a].update || this.states[a].render) || (console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions: preload, create, update or render"), !1) : (console.warn("Phaser.StateManager - No state found with the key: " + a), !1) }, link: function(a) { this.states[a].game = this.game, this.states[a].add = this.game.add, this.states[a].make = this.game.make, this.states[a].camera = this.game.camera, this.states[a].cache = this.game.cache, this.states[a].input = this.game.input, this.states[a].load = this.game.load, this.states[a].math = this.game.math, this.states[a].sound = this.game.sound, this.states[a].scale = this.game.scale, this.states[a].state = this, this.states[a].stage = this.game.stage, this.states[a].time = this.game.time, this.states[a].tweens = this.game.tweens, this.states[a].world = this.game.world, this.states[a].particles = this.game.particles, this.states[a].rnd = this.game.rnd, this.states[a].physics = this.game.physics, this.states[a].key = a }, unlink: function(a) { this.states[a] && (this.states[a].game = null, this.states[a].add = null, this.states[a].make = null, this.states[a].camera = null, this.states[a].cache = null, this.states[a].input = null, this.states[a].load = null, this.states[a].math = null, this.states[a].sound = null, this.states[a].scale = null, this.states[a].state = null, this.states[a].stage = null, this.states[a].time = null, this.states[a].tweens = null, this.states[a].world = null, this.states[a].particles = null, this.states[a].rnd = null, this.states[a].physics = null) }, setCurrentState: function(a) { this.callbackContext = this.states[a], this.link(a), this.onInitCallback = this.states[a].init || this.dummy, this.onPreloadCallback = this.states[a].preload || null, this.onLoadRenderCallback = this.states[a].loadRender || null, this.onLoadUpdateCallback = this.states[a].loadUpdate || null, this.onCreateCallback = this.states[a].create || null, this.onUpdateCallback = this.states[a].update || null, this.onPreRenderCallback = this.states[a].preRender || null, this.onRenderCallback = this.states[a].render || null, this.onResizeCallback = this.states[a].resize || null, this.onPausedCallback = this.states[a].paused || null, this.onResumedCallback = this.states[a].resumed || null, this.onPauseUpdateCallback = this.states[a].pauseUpdate || null, this.onShutDownCallback = this.states[a].shutdown || this.dummy, "" !== this.current && this.game.physics.reset(), this.current = a, this._created = !1, this.onInitCallback.apply(this.callbackContext, this._args), a === this._pendingState && (this._args = []), this.game._kickstart = !0 }, getCurrentState: function() { return this.states[this.current] }, loadComplete: function() {!1 === this._created && this.onLoadUpdateCallback && this.onLoadUpdateCallback.call(this.callbackContext, this.game), !1 === this._created && this.onCreateCallback ? (this._created = !0, this.onCreateCallback.call(this.callbackContext, this.game)) : this._created = !0 }, pause: function() { this._created && this.onPausedCallback && this.onPausedCallback.call(this.callbackContext, this.game) }, resume: function() { this._created && this.onResumedCallback && this.onResumedCallback.call(this.callbackContext, this.game) }, update: function() { this._created ? this.onUpdateCallback && this.onUpdateCallback.call(this.callbackContext, this.game) : this.onLoadUpdateCallback && this.onLoadUpdateCallback.call(this.callbackContext, this.game) }, pauseUpdate: function() { this._created ? this.onPauseUpdateCallback && this.onPauseUpdateCallback.call(this.callbackContext, this.game) : this.onLoadUpdateCallback && this.onLoadUpdateCallback.call(this.callbackContext, this.game) }, preRender: function(a) { this._created && this.onPreRenderCallback && this.onPreRenderCallback.call(this.callbackContext, this.game, a) }, resize: function(a, b) { this.onResizeCallback && this.onResizeCallback.call(this.callbackContext, a, b) }, render: function() { this._created ? this.onRenderCallback && (this.game.renderType === c.CANVAS ? (this.game.context.save(), this.game.context.setTransform(1, 0, 0, 1, 0, 0), this.onRenderCallback.call(this.callbackContext, this.game), this.game.context.restore()) : this.onRenderCallback.call(this.callbackContext, this.game)) : this.onLoadRenderCallback && this.onLoadRenderCallback.call(this.callbackContext, this.game) }, destroy: function() { this._clearWorld = !0, this._clearCache = !0, this.clearCurrentState(), this.callbackContext = null, this.onInitCallback = null, this.onShutDownCallback = null, this.onPreloadCallback = null, this.onLoadRenderCallback = null, this.onLoadUpdateCallback = null, this.onCreateCallback = null, this.onUpdateCallback = null, this.onRenderCallback = null, this.onPausedCallback = null, this.onResumedCallback = null, this.onPauseUpdateCallback = null, this.game = null, this.states = {}, this._pendingState = null, this.current = "" } }, c.StateManager.prototype.constructor = c.StateManager, Object.defineProperty(c.StateManager.prototype, "created", { get: function() { return this._created } }), c.Signal = function() {}, c.Signal.prototype = { _bindings: null, _prevParams: null, memorize: !1, _shouldPropagate: !0, active: !0, _boundDispatch: !1, validateListener: function(a, b) { if ("function" != typeof a) throw new Error("Phaser.Signal: listener is a required param of {fn}() and should be a Function.".replace("{fn}", b)) }, _registerListener: function(a, b, d, e, f) { var g, h = this._indexOfListener(a, d); if (-1 !== h) { if (g = this._bindings[h], g.isOnce() !== b) throw new Error("You cannot add" + (b ? "" : "Once") + "() then add" + (b ? "Once" : "") + "() the same listener without removing the relationship first.") } else g = new c.SignalBinding(this, a, b, d, e, f), this._addBinding(g); return this.memorize && this._prevParams && g.execute(this._prevParams), g }, _addBinding: function(a) { this._bindings || (this._bindings = []); var b = this._bindings.length; do { b-- } while (this._bindings[b] && a._priority <= this._bindings[b]._priority); this._bindings.splice(b + 1, 0, a) }, _indexOfListener: function(a, b) { if (!this._bindings) return -1; void 0 === b && (b = null); for (var c, d = this._bindings.length; d--;) if (c = this._bindings[d], c._listener === a && c.context === b) return d; return -1 }, has: function(a, b) { return -1 !== this._indexOfListener(a, b) }, add: function(a, b, c) { this.validateListener(a, "add"); var d = []; if (arguments.length > 3) for (var e = 3; e < arguments.length; e++) d.push(arguments[e]); return this._registerListener(a, !1, b, c, d) }, addOnce: function(a, b, c) { this.validateListener(a, "addOnce"); var d = []; if (arguments.length > 3) for (var e = 3; e < arguments.length; e++) d.push(arguments[e]); return this._registerListener(a, !0, b, c, d) }, remove: function(a, b) { this.validateListener(a, "remove"); var c = this._indexOfListener(a, b); return -1 !== c && (this._bindings[c]._destroy(), this._bindings.splice(c, 1)), a }, removeAll: function(a) { if (void 0 === a && (a = null), this._bindings) { for (var b = this._bindings.length; b--;) a ? this._bindings[b].context === a && (this._bindings[b]._destroy(), this._bindings.splice(b, 1)) : this._bindings[b]._destroy(); a || (this._bindings.length = 0) } }, getNumListeners: function() { return this._bindings ? this._bindings.length : 0 }, halt: function() { this._shouldPropagate = !1 }, dispatch: function() { if (this.active && this._bindings) { var a, b = Array.prototype.slice.call(arguments), c = this._bindings.length; if (this.memorize && (this._prevParams = b), c) { a = this._bindings.slice(), this._shouldPropagate = !0; do { c-- } while (a[c] && this._shouldPropagate && !1 !== a[c].execute(b)) } } }, forget: function() { this._prevParams && (this._prevParams = null) }, dispose: function() { this.removeAll(), this._bindings = null, this._prevParams && (this._prevParams = null) }, toString: function() { return "[Phaser.Signal active:" + this.active + " numListeners:" + this.getNumListeners() + "]" } }, Object.defineProperty(c.Signal.prototype, "boundDispatch", { get: function() { var a = this; return this._boundDispatch || (this._boundDispatch = function() { return a.dispatch.apply(a, arguments) }) } }), c.Signal.prototype.constructor = c.Signal, c.SignalBinding = function(a, b, c, d, e, f) { this._listener = b, c && (this._isOnce = !0), null != d && (this.context = d), this._signal = a, e && (this._priority = e), f && f.length && (this._args = f) }, c.SignalBinding.prototype = { context: null, _isOnce: !1, _priority: 0, _args: null, callCount: 0, active: !0, params: null, execute: function(a) { var b, c; return this.active && this._listener && (c = this.params ? this.params.concat(a) : a, this._args && (c = c.concat(this._args)), b = this._listener.apply(this.context, c), this.callCount++, this._isOnce && this.detach()), b }, detach: function() { return this.isBound() ? this._signal.remove(this._listener, this.context) : null }, isBound: function() { return !!this._signal && !!this._listener }, isOnce: function() { return this._isOnce }, getListener: function() { return this._listener }, getSignal: function() { return this._signal }, _destroy: function() { delete this._signal, delete this._listener, delete this.context }, toString: function() { return "[Phaser.SignalBinding isOnce:" + this._isOnce + ", isBound:" + this.isBound() + ", active:" + this.active + "]" } }, c.SignalBinding.prototype.constructor = c.SignalBinding, c.Filter = function(a, b, d) { this.game = a, this.type = c.WEBGL_FILTER, this.passes = [this], this.shaders = [], this.dirty = !0, this.padding = 0, this.prevPoint = new c.Point; var e = new Date; if (this.uniforms = { resolution: { type: "2f", value: { x: 256, y: 256 } }, time: { type: "1f", value: 0 }, mouse: { type: "2f", value: { x: 0, y: 0 } }, date: { type: "4fv", value: [e.getFullYear(), e.getMonth(), e.getDate(), 60 * e.getHours() * 60 + 60 * e.getMinutes() + e.getSeconds()] }, sampleRate: { type: "1f", value: 44100 }, iChannel0: { type: "sampler2D", value: null, textureData: { repeat: !0 } }, iChannel1: { type: "sampler2D", value: null, textureData: { repeat: !0 } }, iChannel2: { type: "sampler2D", value: null, textureData: { repeat: !0 } }, iChannel3: { type: "sampler2D", value: null, textureData: { repeat: !0 } } }, b) for (var f in b) this.uniforms[f] = b[f]; this.fragmentSrc = d || "" }, c.Filter.prototype = { init: function() {}, setResolution: function(a, b) { this.uniforms.resolution.value.x = a, this.uniforms.resolution.value.y = b }, update: function(a) { if (void 0 !== a) { var b = a.x / this.game.width, c = 1 - a.y / this.game.height; b === this.prevPoint.x && c === this.prevPoint.y || (this.uniforms.mouse.value.x = b.toFixed(2), this.uniforms.mouse.value.y = c.toFixed(2), this.prevPoint.set(b, c)) } this.uniforms.time.value = this.game.time.totalElapsedSeconds() }, addToWorld: function(a, b, c, d, e, f) { void 0 === e && (e = 0), void 0 === f && (f = 0), void 0 !== c && null !== c ? this.width = c : c = this.width, void 0 !== d && null !== d ? this.height = d : d = this.height; var g = this.game.add.image(a, b, "__default"); return g.width = c, g.height = d, g.anchor.set(e, f), g.filters = [this], g }, destroy: function() { this.game = null } }, c.Filter.prototype.constructor = c.Filter, Object.defineProperty(c.Filter.prototype, "width", { get: function() { return this.uniforms.resolution.value.x }, set: function(a) { this.uniforms.resolution.value.x = a } }), Object.defineProperty(c.Filter.prototype, "height", { get: function() { return this.uniforms.resolution.value.y }, set: function(a) { this.uniforms.resolution.value.y = a } }), c.Plugin = function(a, b) { void 0 === b && (b = null), this.game = a, this.parent = b, this.active = !1, this.visible = !1, this.hasPreUpdate = !1, this.hasUpdate = !1, this.hasPostUpdate = !1, this.hasRender = !1, this.hasPostRender = !1 }, c.Plugin.prototype = { preUpdate: function() {}, update: function() {}, render: function() {}, postRender: function() {}, destroy: function() { this.game = null, this.parent = null, this.active = !1, this.visible = !1 } }, c.Plugin.prototype.constructor = c.Plugin, c.PluginManager = function(a) { this.game = a, this.plugins = [], this._len = 0, this._i = 0 }, c.PluginManager.prototype = { add: function(a) { var b = Array.prototype.slice.call(arguments, 1), c = !1; return "function" == typeof a ? a = new a(this.game, this) : (a.game = this.game, a.parent = this), "function" == typeof a.preUpdate && (a.hasPreUpdate = !0, c = !0), "function" == typeof a.update && (a.hasUpdate = !0, c = !0), "function" == typeof a.postUpdate && (a.hasPostUpdate = !0, c = !0), "function" == typeof a.render && (a.hasRender = !0, c = !0), "function" == typeof a.postRender && (a.hasPostRender = !0, c = !0), c ? ((a.hasPreUpdate || a.hasUpdate || a.hasPostUpdate) && (a.active = !0), (a.hasRender || a.hasPostRender) && (a.visible = !0), this._len = this.plugins.push(a), "function" == typeof a.init && a.init.apply(a, b), a) : null }, remove: function(a, b) { for (void 0 === b && (b = !0), this._i = this._len; this._i--;) if (this.plugins[this._i] === a) return b && a.destroy(), this.plugins.splice(this._i, 1), void this._len-- }, removeAll: function() { for (this._i = this._len; this._i--;) this.plugins[this._i].destroy(); this.plugins.length = 0, this._len = 0 }, preUpdate: function() { for (this._i = this._len; this._i--;) this.plugins[this._i].active && this.plugins[this._i].hasPreUpdate && this.plugins[this._i].preUpdate() }, update: function() { for (this._i = this._len; this._i--;) this.plugins[this._i].active && this.plugins[this._i].hasUpdate && this.plugins[this._i].update() }, postUpdate: function() { for (this._i = this._len; this._i--;) this.plugins[this._i].active && this.plugins[this._i].hasPostUpdate && this.plugins[this._i].postUpdate() }, render: function() { for (this._i = this._len; this._i--;) this.plugins[this._i].visible && this.plugins[this._i].hasRender && this.plugins[this._i].render() }, postRender: function() { for (this._i = this._len; this._i--;) this.plugins[this._i].visible && this.plugins[this._i].hasPostRender && this.plugins[this._i].postRender() }, destroy: function() { this.removeAll(), this.game = null } }, c.PluginManager.prototype.constructor = c.PluginManager, c.Stage = function(a) { this.game = a, PIXI.DisplayObjectContainer.call(this), this.name = "_stage_root", this.disableVisibilityChange = !1, this.exists = !0, this.worldTransform = new PIXI.Matrix, this.stage = this, this.currentRenderOrderID = 0, this._hiddenVar = "hidden", this._onChange = null, this._bgColor = { r: 0, g: 0, b: 0, a: 0, color: 0, rgba: "#000000" }, this.game.transparent || (this._bgColor.a = 1), a.config && this.parseConfig(a.config) }, c.Stage.prototype = Object.create(PIXI.DisplayObjectContainer.prototype), c.Stage.prototype.constructor = c.Stage, c.Stage.prototype.parseConfig = function(a) { a.disableVisibilityChange && (this.disableVisibilityChange = a.disableVisibilityChange), a.backgroundColor && this.setBackgroundColor(a.backgroundColor) }, c.Stage.prototype.boot = function() { c.DOM.getOffset(this.game.canvas, this.offset), c.Canvas.setUserSelect(this.game.canvas, "none"), c.Canvas.setTouchAction(this.game.canvas, "none"), this.checkVisibility() }, c.Stage.prototype.preUpdate = function() { this.currentRenderOrderID = 0; for (var a = 0; a < this.children.length;) { var b = this.children[a]; b.preUpdate(), this === b.parent && a++ } }, c.Stage.prototype.update = function() { for (var a = this.children.length; a--;) this.children[a].update() }, c.Stage.prototype.postUpdate = function() { this.game.camera.update(), this.game.camera.target && (this.game.camera.target.postUpdate(), this.updateTransform(), this.game.camera.updateTarget()); for (var a = 0; a < this.children.length; a++) this.children[a].postUpdate(); this.updateTransform() }, c.Stage.prototype.updateTransform = function() { this.worldAlpha = 1; for (var a = 0; a < this.children.length; a++) this.children[a].updateTransform() }, c.Stage.prototype.checkVisibility = function() { void 0 !== document.hidden ? this._hiddenVar = "visibilitychange" : void 0 !== document.webkitHidden ? this._hiddenVar = "webkitvisibilitychange" : void 0 !== document.mozHidden ? this._hiddenVar = "mozvisibilitychange" : void 0 !== document.msHidden ? this._hiddenVar = "msvisibilitychange" : this._hiddenVar = null; var a = this; this._onChange = function(b) { return a.visibilityChange(b) }, this._onClick = function(b) { document.hasFocus() || a.visibilityChange(b) }, this._hiddenVar && document.addEventListener(this._hiddenVar, this._onChange, !1), window.onblur = this._onChange, window.onfocus = this._onChange, window.onpagehide = this._onChange, window.onpageshow = this._onChange, window.addEventListener("click", this._onClick), this.game.device.cocoonJSApp && (CocoonJS.App.onSuspended.addEventListener(function() { c.Stage.prototype.visibilityChange.call(a, { type: "pause" }) }), CocoonJS.App.onActivated.addEventListener(function() { c.Stage.prototype.visibilityChange.call(a, { type: "resume" }) })) }, c.Stage.prototype.visibilityChange = function(a) { switch (a.type) { case "blur": case "pagehide": return void this.game.focusLoss(a); case "click": case "focus": case "pageshow": return void this.game.focusGain(a) } this.disableVisibilityChange || (document.hidden || document.mozHidden || document.msHidden || document.webkitHidden || "pause" === a.type ? this.game.gamePaused(a) : this.game.gameResumed(a)) }, c.Stage.prototype.setBackgroundColor = function(a) { this.game.transparent || (c.Color.valueToColor(a, this._bgColor), c.Color.updateColor(this._bgColor), this._bgColor.r /= 255, this._bgColor.g /= 255, this._bgColor.b /= 255, this._bgColor.a = 1) }, c.Stage.prototype.destroy = function() { this._hiddenVar && document.removeEventListener(this._hiddenVar, this._onChange, !1), window.onpagehide = null, window.onpageshow = null, window.onblur = null, window.onfocus = null, window.removeEventListener("click", this._onClick) }, Object.defineProperty(c.Stage.prototype, "backgroundColor", { get: function() { return this._bgColor.color }, set: function(a) { this.setBackgroundColor(a) } }), Object.defineProperty(c.Stage.prototype, "smoothed", { get: function() { return PIXI.scaleModes.DEFAULT === PIXI.scaleModes.LINEAR }, set: function(a) { PIXI.scaleModes.DEFAULT = a ? PIXI.scaleModes.LINEAR : PIXI.scaleModes.NEAREST } }), c.Group = function(a, b, d, e, f, g) { void 0 === e && (e = !1), void 0 === f && (f = !1), void 0 === g && (g = c.Physics.ARCADE), this.game = a, void 0 === b && (b = a.world), this.name = d || "group", this.z = 0, PIXI.DisplayObjectContainer.call(this), e ? (this.game.stage.addChild(this), this.z = this.game.stage.children.length) : b && (b.addChild(this), this.z = b.children.length), this.type = c.GROUP, this.physicsType = c.GROUP, this.alive = !0, this.exists = !0, this.ignoreDestroy = !1, this.pendingDestroy = !1, this.classType = c.Sprite, this.cursor = null, this.inputEnableChildren = !1, this.onChildInputDown = new c.Signal, this.onChildInputUp = new c.Signal, this.onChildInputOver = new c.Signal, this.onChildInputOut = new c.Signal, this.enableBody = f, this.enableBodyDebug = !1, this.physicsBodyType = g, this.physicsSortDirection = null, this.onDestroy = new c.Signal, this.cursorIndex = 0, this.fixedToCamera = !1, this.cameraOffset = new c.Point, this.hash = [], this._sortProperty = "z" }, c.Group.prototype = Object.create(PIXI.DisplayObjectContainer.prototype), c.Group.prototype.constructor = c.Group, c.Group.RETURN_NONE = 0, c.Group.RETURN_TOTAL = 1, c.Group.RETURN_CHILD = 2, c.Group.RETURN_ALL = 3, c.Group.SORT_ASCENDING = -1, c.Group.SORT_DESCENDING = 1, c.Group.prototype.add = function(a, b, c) { return void 0 === b && (b = !1), a.parent === this ? a : (a.body && a.parent && a.parent.hash && a.parent.removeFromHash(a), void 0 === c ? (a.z = this.children.length, this.addChild(a)) : (this.addChildAt(a, c), this.updateZ()), this.enableBody && a.hasOwnProperty("body") && null === a.body ? this.game.physics.enable(a, this.physicsBodyType) : a.body && this.addToHash(a), !this.inputEnableChildren || a.input && !a.inputEnabled || (a.inputEnabled = !0), !b && a.events && a.events.onAddedToGroup$dispatch(a, this), null === this.cursor && (this.cursor = a), a) }, c.Group.prototype.addAt = function(a, b, c) { this.add(a, c, b) }, c.Group.prototype.addToHash = function(a) { if (a.parent === this) { if (-1 === this.hash.indexOf(a)) return this.hash.push(a), !0 } return !1 }, c.Group.prototype.removeFromHash = function(a) { if (a) { var b = this.hash.indexOf(a); if (-1 !== b) return this.hash.splice(b, 1), !0 } return !1 }, c.Group.prototype.addMultiple = function(a, b) { if (a instanceof c.Group) a.moveAll(this, b); else if (Array.isArray(a)) for (var d = 0; d < a.length; d++) this.add(a[d], b); return a }, c.Group.prototype.getAt = function(a) { return a < 0 || a >= this.children.length ? -1 : this.getChildAt(a) }, c.Group.prototype.create = function(a, b, c, d, e, f) { void 0 === e && (e = !0); var g = new this.classType(this.game, a, b, c, d); return g.exists = e, g.visible = e, g.alive = e, this.add(g, !1, f) }, c.Group.prototype.createMultiple = function(a, b, c, d) { void 0 === c && (c = 0), void 0 === d && (d = !1), Array.isArray(b) || (b = [b]), Array.isArray(c) || (c = [c]); var e = this, f = []; return b.forEach(function(b) { c.forEach(function(c) { for (var g = 0; g < a; g++) f.push(e.create(0, 0, b, c, d)) }) }), f }, c.Group.prototype.updateZ = function() { for (var a = this.children.length; a--;) this.children[a].z = a }; c.Group.prototype.align = function(a, b, d, e, f, g) { if (void 0 === f && (f = c.TOP_LEFT), void 0 === g && (g = 0), 0 === this.children.length || g > this.children.length || -1 === a && -1 === b) return !1; for (var h = new c.Rectangle(0, 0, d, e), i = a * d, j = b * e, k = g; k < this.children.length; k++) { var l = this.children[k]; if (l.alignIn) if (l.alignIn(h, f), -1 === a) h.y += e, h.y === j && (h.x += d, h.y = 0); else if (-1 === b) h.x += d, h.x === i && (h.x = 0, h.y += e); else if (h.x += d, h.x === i && (h.x = 0, h.y += e, h.y === j)) return !0 } return !0 }, c.Group.prototype.resetCursor = function(a) { if (void 0 === a && (a = 0), a > this.children.length - 1 && (a = 0), this.cursor) return this.cursorIndex = a, this.cursor = this.children[this.cursorIndex], this.cursor }, c.Group.prototype.next = function() { if (this.cursor) return this.cursorIndex >= this.children.length - 1 ? this.cursorIndex = 0 : this.cursorIndex++, this.cursor = this.children[this.cursorIndex], this.cursor }, c.Group.prototype.previous = function() { if (this.cursor) return 0 === this.cursorIndex ? this.cursorIndex = this.children.length - 1 : this.cursorIndex--, this.cursor = this.children[this.cursorIndex], this.cursor }, c.Group.prototype.swap = function(a, b) { this.swapChildren(a, b), this.updateZ() }, c.Group.prototype.bringToTop = function(a) { return a.parent === this && this.getIndex(a) < this.children.length && (this.remove(a, !1, !0), this.add(a, !0)), a }, c.Group.prototype.sendToBack = function(a) { return a.parent === this && this.getIndex(a) > 0 && (this.remove(a, !1, !0), this.addAt(a, 0, !0)), a }, c.Group.prototype.moveUp = function(a) { if (a.parent === this && this.getIndex(a) < this.children.length - 1) { var b = this.getIndex(a), c = this.getAt(b + 1); c && this.swap(a, c) } return a }, c.Group.prototype.moveDown = function(a) { if (a.parent === this && this.getIndex(a) > 0) { var b = this.getIndex(a), c = this.getAt(b - 1); c && this.swap(a, c) } return a }, c.Group.prototype.xy = function(a, b, c) { if (a < 0 || a > this.children.length) return -1; this.getChildAt(a).x = b, this.getChildAt(a).y = c }, c.Group.prototype.reverse = function() { this.children.reverse(), this.updateZ() }, c.Group.prototype.getIndex = function(a) { return this.children.indexOf(a) }, c.Group.prototype.getByName = function(a) { for (var b = 0; b < this.children.length; b++) if (this.children[b].name === a) return this.children[b]; return null }, c.Group.prototype.replace = function(a, b) { var d = this.getIndex(a); if (-1 !== d) return b.parent && (b.parent instanceof c.Group ? b.parent.remove(b) : b.parent.removeChild(b)), this.remove(a), this.addAt(b, d), a }, c.Group.prototype.hasProperty = function(a, b) { var c = b.length; return 1 === c && b[0] in a || (2 === c && b[0] in a && b[1] in a[b[0]] || (3 === c && b[0] in a && b[1] in a[b[0]] && b[2] in a[b[0]][b[1]] || 4 === c && b[0] in a && b[1] in a[b[0]] && b[2] in a[b[0]][b[1]] && b[3] in a[b[0]][b[1]][b[2]])) }, c.Group.prototype.setProperty = function(a, b, c, d, e) { if (void 0 === e && (e = !1), d = d || 0, !this.hasProperty(a, b) && (!e || d > 0)) return !1; var f = b.length; return 1 === f ? 0 === d ? a[b[0]] = c : 1 === d ? a[b[0]] += c : 2 === d ? a[b[0]] -= c : 3 === d ? a[b[0]] *= c : 4 === d && (a[b[0]] /= c) : 2 === f ? 0 === d ? a[b[0]][b[1]] = c : 1 === d ? a[b[0]][b[1]] += c : 2 === d ? a[b[0]][b[1]] -= c : 3 === d ? a[b[0]][b[1]] *= c : 4 === d && (a[b[0]][b[1]] /= c) : 3 === f ? 0 === d ? a[b[0]][b[1]][b[2]] = c : 1 === d ? a[b[0]][b[1]][b[2]] += c : 2 === d ? a[b[0]][b[1]][b[2]] -= c : 3 === d ? a[b[0]][b[1]][b[2]] *= c : 4 === d && (a[b[0]][b[1]][b[2]] /= c) : 4 === f && (0 === d ? a[b[0]][b[1]][b[2]][b[3]] = c : 1 === d ? a[b[0]][b[1]][b[2]][b[3]] += c : 2 === d ? a[b[0]][b[1]][b[2]][b[3]] -= c : 3 === d ? a[b[0]][b[1]][b[2]][b[3]] *= c : 4 === d && (a[b[0]][b[1]][b[2]][b[3]] /= c)), !0 }, c.Group.prototype.checkProperty = function(a, b, d, e) { return void 0 === e && (e = !1), !(!c.Utils.getProperty(a, b) && e) && c.Utils.getProperty(a, b) === d }, c.Group.prototype.set = function(a, b, c, d, e, f, g) { if (void 0 === g && (g = !1), b = b.split("."), void 0 === d && (d = !1), void 0 === e && (e = !1), (!1 === d || d && a.alive) && (!1 === e || e && a.visible)) return this.setProperty(a, b, c, f, g) }, c.Group.prototype.setAll = function(a, b, c, d, e, f) { void 0 === c && (c = !1), void 0 === d && (d = !1), void 0 === f && (f = !1), a = a.split("."), e = e || 0; for (var g = 0; g < this.children.length; g++)(!c || c && this.children[g].alive) && (!d || d && this.children[g].visible) && this.setProperty(this.children[g], a, b, e, f) }, c.Group.prototype.setAllChildren = function(a, b, d, e, f, g) { void 0 === d && (d = !1), void 0 === e && (e = !1), void 0 === g && (g = !1), f = f || 0; for (var h = 0; h < this.children.length; h++)(!d || d && this.children[h].alive) && (!e || e && this.children[h].visible) && (this.children[h] instanceof c.Group ? this.children[h].setAllChildren(a, b, d, e, f, g) : this.setProperty(this.children[h], a.split("."), b, f, g)) }, c.Group.prototype.checkAll = function(a, b, c, d, e) { void 0 === c && (c = !1), void 0 === d && (d = !1), void 0 === e && (e = !1); for (var f = 0; f < this.children.length; f++) if ((!c || c && this.children[f].alive) && (!d || d && this.children[f].visible) && !this.checkProperty(this.children[f], a, b, e)) return !1; return !0 }, c.Group.prototype.addAll = function(a, b, c, d) { this.setAll(a, b, c, d, 1) }, c.Group.prototype.subAll = function(a, b, c, d) { this.setAll(a, b, c, d, 2) }, c.Group.prototype.multiplyAll = function(a, b, c, d) { this.setAll(a, b, c, d, 3) }, c.Group.prototype.divideAll = function(a, b, c, d) { this.setAll(a, b, c, d, 4) }, c.Group.prototype.callAllExists = function(a, b) { var c; if (arguments.length > 2) { c = []; for (var d = 2; d < arguments.length; d++) c.push(arguments[d]) } for (var d = 0; d < this.children.length; d++) this.children[d].exists === b && this.children[d][a] && this.children[d][a].apply(this.children[d], c) }, c.Group.prototype.callbackFromArray = function(a, b, c) { if (1 === c) { if (a[b[0]]) return a[b[0]] } else if (2 === c) { if (a[b[0]][b[1]]) return a[b[0]][b[1]] } else if (3 === c) { if (a[b[0]][b[1]][b[2]]) return a[b[0]][b[1]][b[2]] } else if (4 === c) { if (a[b[0]][b[1]][b[2]][b[3]]) return a[b[0]][b[1]][b[2]][b[3]] } else if (a[b]) return a[b]; return !1 }, c.Group.prototype.callAll = function(a, b) { if (void 0 !== a) { a = a.split("."); var c = a.length; if (void 0 === b || null === b || "" === b) b = null; else if ("string" == typeof b) { b = b.split("."); var d = b.length } var e; if (arguments.length > 2) { e = []; for (var f = 2; f < arguments.length; f++) e.push(arguments[f]) } for (var g = null, h = null, f = 0; f < this.children.length; f++) g = this.callbackFromArray(this.children[f], a, c), b && g ? (h = this.callbackFromArray(this.children[f], b, d), g && g.apply(h, e)) : g && g.apply(this.children[f], e) } }, c.Group.prototype.preUpdate = function() { if (this.pendingDestroy) return this.destroy(), !1; if (!this.exists || !this.parent.exists) return this.renderOrderID = -1, !1; for (var a = 0; a < this.children.length; a++) this.children[a].preUpdate(); return !0 }, c.Group.prototype.update = function() { for (var a = this.children.length; a--;) this.children[a].update() }, c.Group.prototype.postUpdate = function() { this.fixedToCamera && (this.x = this.game.camera.view.x + this.cameraOffset.x, this.y = this.game.camera.view.y + this.cameraOffset.y); for (var a = 0; a < this.children.length; a++) this.children[a].postUpdate() }, c.Group.prototype.filter = function(a, b) { for (var d = -1, e = this.children.length, f = []; ++d < e;) { var g = this.children[d]; (!b || b && g.exists) && a(g, d, this.children) && f.push(g) } return new c.ArraySet(f) }, c.Group.prototype.forEach = function(a, b, c) { if (void 0 === c && (c = !1), arguments.length <= 3) for (var d = 0; d < this.children.length; d++)(!c || c && this.children[d].exists) && a.call(b, this.children[d]); else { for (var e = [null], d = 3; d < arguments.length; d++) e.push(arguments[d]); for (var d = 0; d < this.children.length; d++)(!c || c && this.children[d].exists) && (e[0] = this.children[d], a.apply(b, e)) } }, c.Group.prototype.forEachExists = function(a, b) { var d; if (arguments.length > 2) { d = [null]; for (var e = 2; e < arguments.length; e++) d.push(arguments[e]) } this.iterate("exists", !0, c.Group.RETURN_TOTAL, a, b, d) }, c.Group.prototype.forEachAlive = function(a, b) { var d; if (arguments.length > 2) { d = [null]; for (var e = 2; e < arguments.length; e++) d.push(arguments[e]) } this.iterate("alive", !0, c.Group.RETURN_TOTAL, a, b, d) }, c.Group.prototype.forEachDead = function(a, b) { var d; if (arguments.length > 2) { d = [null]; for (var e = 2; e < arguments.length; e++) d.push(arguments[e]) } this.iterate("alive", !1, c.Group.RETURN_TOTAL, a, b, d) }, c.Group.prototype.sort = function(a, b) { this.children.length < 2 || (void 0 === a && (a = "z"), void 0 === b && (b = c.Group.SORT_ASCENDING), this._sortProperty = a, b === c.Group.SORT_ASCENDING ? this.children.sort(this.ascendingSortHandler.bind(this)) : this.children.sort(this.descendingSortHandler.bind(this)), this.updateZ()) }, c.Group.prototype.customSort = function(a, b) { this.children.length < 2 || (this.children.sort(a.bind(b)), this.updateZ()) }, c.Group.prototype.ascendingSortHandler = function(a, b) { return a[this._sortProperty] < b[this._sortProperty] ? -1 : a[this._sortProperty] > b[this._sortProperty] ? 1 : a.z < b.z ? -1 : 1 }, c.Group.prototype.descendingSortHandler = function(a, b) { return a[this._sortProperty] < b[this._sortProperty] ? 1 : a[this._sortProperty] > b[this._sortProperty] ? -1 : 0 }, c.Group.prototype.iterate = function(a, b, d, e, f, g) { if (0 === this.children.length) { if (d === c.Group.RETURN_TOTAL) return 0; if (d === c.Group.RETURN_ALL) return [] } var h = 0; if (d === c.Group.RETURN_ALL) var i = []; for (var j = 0; j < this.children.length; j++) if (this.children[j][a] === b) { if (h++, e && (g ? (g[0] = this.children[j], e.apply(f, g)) : e.call(f, this.children[j])), d === c.Group.RETURN_CHILD) return this.children[j]; d === c.Group.RETURN_ALL && i.push(this.children[j]) } return d === c.Group.RETURN_TOTAL ? h : d === c.Group.RETURN_ALL ? i : null }, c.Group.prototype.getFirstExists = function(a, b, d, e, f, g) { void 0 === b && (b = !1), "boolean" != typeof a && (a = !0); var h = this.iterate("exists", a, c.Group.RETURN_CHILD); return null === h && b ? this.create(d, e, f, g) : this.resetChild(h, d, e, f, g) }, c.Group.prototype.getFirstAlive = function(a, b, d, e, f) { void 0 === a && (a = !1); var g = this.iterate("alive", !0, c.Group.RETURN_CHILD); return null === g && a ? this.create(b, d, e, f) : this.resetChild(g, b, d, e, f) }, c.Group.prototype.getFirstDead = function(a, b, d, e, f) { void 0 === a && (a = !1); var g = this.iterate("alive", !1, c.Group.RETURN_CHILD); return null === g && a ? this.create(b, d, e, f) : this.resetChild(g, b, d, e, f) }, c.Group.prototype.resetChild = function(a, b, c, d, e) { return null === a ? null : (void 0 === b && (b = null), void 0 === c && (c = null), null !== b && null !== c && a.reset(b, c), void 0 !== d && a.loadTexture(d, e), a) }, c.Group.prototype.getTop = function() { if (this.children.length > 0) return this.children[this.children.length - 1] }, c.Group.prototype.getBottom = function() { if (this.children.length > 0) return this.children[0] }, c.Group.prototype.getClosestTo = function(a, b, d) { for (var e = Number.MAX_VALUE, f = 0, g = null, h = 0; h < this.children.length; h++) { var i = this.children[h]; i.exists && (f = Math.abs(c.Point.distance(a, i))) < e && (!b || b.call(d, i, f)) && (e = f, g = i) } return g }, c.Group.prototype.getFurthestFrom = function(a, b, d) { for (var e = 0, f = 0, g = null, h = 0; h < this.children.length; h++) { var i = this.children[h]; i.exists && (f = Math.abs(c.Point.distance(a, i))) > e && (!b || b.call(d, i, f)) && (e = f, g = i) } return g }, c.Group.prototype.countLiving = function() { return this.iterate("alive", !0, c.Group.RETURN_TOTAL) }, c.Group.prototype.countDead = function() { return this.iterate("alive", !1, c.Group.RETURN_TOTAL) }, c.Group.prototype.getRandom = function(a, b) { return void 0 === a && (a = 0), void 0 === b && (b = this.children.length), 0 === b ? null : c.ArrayUtils.getRandomItem(this.children, a, b) }, c.Group.prototype.getRandomExists = function(a, b) { var c = this.getAll("exists", !0, a, b); return this.game.rnd.pick(c) }, c.Group.prototype.getAll = function(a, b, c, d) { void 0 === c && (c = 0), void 0 === d && (d = this.children.length); for (var e = [], f = c; f < d; f++) { var g = this.children[f]; a && g[a] === b && e.push(g) } return e }, c.Group.prototype.remove = function(a, b, c) { if (void 0 === b && (b = !1), void 0 === c && (c = !1), 0 === this.children.length || -1 === this.children.indexOf(a)) return !1; c || !a.events || a.destroyPhase || a.events.onRemovedFromGroup$dispatch(a, this); var d = this.removeChild(a); return this.removeFromHash(a), this.updateZ(), this.cursor === a && this.next(), b && d && d.destroy(!0), !0 }, c.Group.prototype.moveAll = function(a, b) { if (void 0 === b && (b = !1), this.children.length > 0 && a instanceof c.Group) { do { a.add(this.children[0], b) } while (this.children.length > 0); this.hash = [], this.cursor = null } return a }, c.Group.prototype.removeAll = function(a, b, c) { if (void 0 === a && (a = !1), void 0 === b && (b = !1), void 0 === c && (c = !1), 0 !== this.children.length) { do {!b && this.children[0].events && this.children[0].events.onRemovedFromGroup$dispatch(this.children[0], this); var d = this.removeChild(this.children[0]); this.removeFromHash(d), a && d && d.destroy(!0, c) } while (this.children.length > 0); this.hash = [], this.cursor = null } }, c.Group.prototype.removeBetween = function(a, b, c, d) { if (void 0 === b && (b = this.children.length - 1), void 0 === c && (c = !1), void 0 === d && (d = !1), 0 !== this.children.length) { if (a > b || a < 0 || b > this.children.length) return !1; for (var e = b; e >= a;) {!d && this.children[e].events && this.children[e].events.onRemovedFromGroup$dispatch(this.children[e], this); var f = this.removeChild(this.children[e]); this.removeFromHash(f), c && f && f.destroy(!0), this.cursor === this.children[e] && (this.cursor = null), e-- } this.updateZ() } }, c.Group.prototype.destroy = function(a, b) { null === this.game || this.ignoreDestroy || (void 0 === a && (a = !0), void 0 === b && (b = !1), this.onDestroy.dispatch(this, a, b), this.removeAll(a), this.cursor = null, this.filters = null, this.pendingDestroy = !1, b || (this.parent && this.parent.removeChild(this), this.game = null, this.exists = !1)) }, Object.defineProperty(c.Group.prototype, "total", { get: function() { return this.iterate("exists", !0, c.Group.RETURN_TOTAL) } }), Object.defineProperty(c.Group.prototype, "length", { get: function() { return this.children.length } }), Object.defineProperty(c.Group.prototype, "angle", { get: function() { return c.Math.radToDeg(this.rotation) }, set: function(a) { this.rotation = c.Math.degToRad(a) } }), Object.defineProperty(c.Group.prototype, "centerX", { get: function() { return this.getBounds(this.parent).centerX }, set: function(a) { var b = this.getBounds(this.parent), c = this.x - b.x; this.x = a + c - b.halfWidth } }), Object.defineProperty(c.Group.prototype, "centerY", { get: function() { return this.getBounds(this.parent).centerY }, set: function(a) { var b = this.getBounds(this.parent), c = this.y - b.y; this.y = a + c - b.halfHeight } }), Object.defineProperty(c.Group.prototype, "left", { get: function() { return this.getBounds(this.parent).left }, set: function(a) { var b = this.getBounds(this.parent), c = this.x - b.x; this.x = a + c } }), Object.defineProperty(c.Group.prototype, "right", { get: function() { return this.getBounds(this.parent).right }, set: function(a) { var b = this.getBounds(this.parent), c = this.x - b.x; this.x = a + c - b.width } }), Object.defineProperty(c.Group.prototype, "top", { get: function() { return this.getBounds(this.parent).top }, set: function(a) { var b = this.getBounds(this.parent), c = this.y - b.y; this.y = a + c } }), Object.defineProperty(c.Group.prototype, "bottom", { get: function() { return this.getBounds(this.parent).bottom }, set: function(a) { var b = this.getBounds(this.parent), c = this.y - b.y; this.y = a + c - b.height } }), c.World = function(a) { c.Group.call(this, a, null, "__world", !1), this.bounds = new c.Rectangle(0, 0, a.width, a.height), this.camera = null, this._definedSize = !1, this._width = a.width, this._height = a.height, this.game.state.onStateChange.add(this.stateChange, this) }, c.World.prototype = Object.create(c.Group.prototype), c.World.prototype.constructor = c.World, c.World.prototype.boot = function() { this.camera = new c.Camera(this.game, 0, 0, 0, this.game.width, this.game.height), this.game.stage.addChild(this), this.camera.boot() }, c.World.prototype.stateChange = function() { this.x = 0, this.y = 0, this.camera.reset() }, c.World.prototype.setBounds = function(a, b, c, d) { this._definedSize = !0, this._width = c, this._height = d, this.bounds.setTo(a, b, c, d), this.x = a, this.y = b, this.camera.bounds && this.camera.bounds.setTo(a, b, Math.max(c, this.game.width), Math.max(d, this.game.height)), this.game.physics.setBoundsToWorld() }, c.World.prototype.resize = function(a, b) { this._definedSize && (a < this._width && (a = this._width), b < this._height && (b = this._height)), this.bounds.width = a, this.bounds.height = b, this.game.camera.setBoundsToWorld(), this.game.physics.setBoundsToWorld() }, c.World.prototype.shutdown = function() { this.destroy(!0, !0) }, c.World.prototype.wrap = function(a, b, c, d, e) { void 0 === b && (b = 0), void 0 === c && (c = !1), void 0 === d && (d = !0), void 0 === e && (e = !0), c ? (a.getBounds(), d && (a.x + a._currentBounds.width < this.bounds.x ? a.x = this.bounds.right : a.x > this.bounds.right && (a.x = this.bounds.left)), e && (a.y + a._currentBounds.height < this.bounds.top ? a.y = this.bounds.bottom : a.y > this.bounds.bottom && (a.y = this.bounds.top))) : (d && a.x + b < this.bounds.x ? a.x = this.bounds.right + b : d && a.x - b > this.bounds.right && (a.x = this.bounds.left - b), e && a.y + b < this.bounds.top ? a.y = this.bounds.bottom + b : e && a.y - b > this.bounds.bottom && (a.y = this.bounds.top - b)) }, Object.defineProperty(c.World.prototype, "width", { get: function() { return this.bounds.width }, set: function(a) { a < this.game.width && (a = this.game.width), this.bounds.width = a, this._width = a, this._definedSize = !0 } }), Object.defineProperty(c.World.prototype, "height", { get: function() { return this.bounds.height }, set: function(a) { a < this.game.height && (a = this.game.height), this.bounds.height = a, this._height = a, this._definedSize = !0 } }), Object.defineProperty(c.World.prototype, "centerX", { get: function() { return this.bounds.halfWidth + this.bounds.x } }), Object.defineProperty(c.World.prototype, "centerY", { get: function() { return this.bounds.halfHeight + this.bounds.y } }), Object.defineProperty(c.World.prototype, "randomX", { get: function() { return this.bounds.x < 0 ? this.game.rnd.between(this.bounds.x, this.bounds.width - Math.abs(this.bounds.x)) : this.game.rnd.between(this.bounds.x, this.bounds.width) } }), Object.defineProperty(c.World.prototype, "randomY", { get: function() { return this.bounds.y < 0 ? this.game.rnd.between(this.bounds.y, this.bounds.height - Math.abs(this.bounds.y)) : this.game.rnd.between(this.bounds.y, this.bounds.height) } }), c.Game = function(a, b, d, e, f, g, h, i) { return this.id = c.GAMES.push(this) - 1, this.config = null, this.physicsConfig = i, this.parent = "", this.width = 800, this.height = 600, this.resolution = 1, this._width = 800, this._height = 600, this.transparent = !1, this.antialias = !0, this.preserveDrawingBuffer = !1, this.clearBeforeRender = !0, this.renderer = null, this.renderType = c.AUTO, this.state = null, this.isBooted = !1, this.isRunning = !1, this.raf = null, this.add = null, this.make = null, this.cache = null, this.input = null, this.load = null, this.math = null, this.net = null, this.scale = null, this.sound = null, this.stage = null, this.time = null, this.tweens = null, this.world = null, this.physics = null, this.plugins = null, this.rnd = null, this.device = c.Device, this.camera = null, this.canvas = null, this.context = null, this.debug = null, this.particles = null, this.create = null, this.lockRender = !1, this.stepping = !1, this.pendingStep = !1, this.stepCount = 0, this.onPause = null, this.onResume = null, this.onBlur = null, this.onFocus = null, this._paused = !1, this._codePaused = !1, this.currentUpdateID = 0, this.updatesThisFrame = 1, this._deltaTime = 0, this._lastCount = 0, this._spiraling = 0, this._kickstart = !0, this.fpsProblemNotifier = new c.Signal, this.forceSingleUpdate = !0, this._nextFpsNotification = 0, 1 === arguments.length && "object" == typeof arguments[0] ? this.parseConfig(arguments[0]) : (this.config = { enableDebug: !0 }, void 0 !== a && (this._width = a), void 0 !== b && (this._height = b), void 0 !== d && (this.renderType = d), void 0 !== e && (this.parent = e), void 0 !== g && (this.transparent = g), void 0 !== h && (this.antialias = h), this.rnd = new c.RandomDataGenerator([(Date.now() * Math.random()).toString()]), this.state = new c.StateManager(this, f)), this.device.whenReady(this.boot, this), this }, c.Game.prototype = { parseConfig: function(a) { this.config = a, void 0 === a.enableDebug && (this.config.enableDebug = !0), a.width && (this._width = a.width), a.height && (this._height = a.height), a.renderer && (this.renderType = a.renderer), a.parent && (this.parent = a.parent), void 0 !== a.transparent && (this.transparent = a.transparent), void 0 !== a.antialias && (this.antialias = a.antialias), a.resolution && (this.resolution = a.resolution), void 0 !== a.preserveDrawingBuffer && (this.preserveDrawingBuffer = a.preserveDrawingBuffer), a.physicsConfig && (this.physicsConfig = a.physicsConfig); var b = [(Date.now() * Math.random()).toString()]; a.seed && (b = a.seed), this.rnd = new c.RandomDataGenerator(b); var d = null; a.state && (d = a.state), this.state = new c.StateManager(this, d) }, boot: function() { this.isBooted || (this.onPause = new c.Signal, this.onResume = new c.Signal, this.onBlur = new c.Signal, this.onFocus = new c.Signal, this.isBooted = !0, PIXI.game = this, this.math = c.Math, this.scale = new c.ScaleManager(this, this._width, this._height), this.stage = new c.Stage(this), this.setUpRenderer(), this.world = new c.World(this), this.add = new c.GameObjectFactory(this), this.make = new c.GameObjectCreator(this), this.cache = new c.Cache(this), this.load = new c.Loader(this), this.time = new c.Time(this), this.tweens = new c.TweenManager(this), this.input = new c.Input(this), this.sound = new c.SoundManager(this), this.physics = new c.Physics(this, this.physicsConfig), this.particles = new c.Particles(this), this.create = new c.Create(this), this.plugins = new c.PluginManager(this), this.net = new c.Net(this), this.time.boot(), this.stage.boot(), this.world.boot(), this.scale.boot(), this.input.boot(), this.sound.boot(), this.state.boot(), this.config.enableDebug ? (this.debug = new c.Utils.Debug(this), this.debug.boot()) : this.debug = { preUpdate: function() {}, update: function() {}, reset: function() {} }, this.showDebugHeader(), this.isRunning = !0, this.config && this.config.forceSetTimeOut ? this.raf = new c.RequestAnimationFrame(this, this.config.forceSetTimeOut) : this.raf = new c.RequestAnimationFrame(this, !1), this._kickstart = !0, window.focus && (!window.PhaserGlobal || window.PhaserGlobal && !window.PhaserGlobal.stopFocus) && window.focus(), this.raf.start()) }, showDebugHeader: function() { if (!window.PhaserGlobal || !window.PhaserGlobal.hideBanner) { var a = c.VERSION, b = "Canvas", d = "HTML Audio", e = 1; if (this.renderType === c.WEBGL ? (b = "WebGL", e++) : this.renderType === c.HEADLESS && (b = "Headless"), this.device.webAudio && (d = "WebAudio", e++), this.device.chrome) { for (var f = ["%c %c %c @azerion/phaser v" + a + " | Pixi.js | " + b + " | " + d + " %c %c %c https://github.com/azerion / https://www.azerion.com %c♥%c♥%c♥", "background: #7ab3eb", "background: #378ce1", "color: #ffffff; background: #207cd8;", "background: #378ce1", "background: #7ab3eb", "background: #ffffff"], g = 0; g < 3; g++) g < e ? f.push("color: #ff2424; background: #fff") : f.push("color: #959595; background: #fff"); console.log.apply(console, f) } else window.console && console.log("@azerion/phaser v" + a + " | Pixi.js " + PIXI.VERSION + " | " + b + " | " + d + " | https://github.com/azerion / https://www.azerion.com") } }, setUpRenderer: function() { if (this.config.canvas ? this.canvas = this.config.canvas : this.canvas = c.Canvas.create(this, this.width, this.height, this.config.canvasID, !0), this.config.canvasStyle ? this.canvas.style = this.config.canvasStyle : this.canvas.style["-webkit-full-screen"] = "width: 100%; height: 100%", this.renderType === c.HEADLESS || this.renderType === c.CANVAS || this.renderType === c.AUTO && !this.device.webGL) { if (!this.device.canvas) throw new Error("Phaser.Game - Cannot create Canvas or WebGL context, aborting."); this.renderType = c.CANVAS, this.renderer = new PIXI.CanvasRenderer(this), this.context = this.renderer.context } else this.renderType = c.WEBGL, this.renderer = new PIXI.WebGLRenderer(this), this.context = null, this.canvas.addEventListener("webglcontextlost", this.contextLost.bind(this), !1), this.canvas.addEventListener("webglcontextrestored", this.contextRestored.bind(this), !1); this.device.cocoonJS && (this.canvas.screencanvas = this.renderType === c.CANVAS), this.renderType !== c.HEADLESS && (this.stage.smoothed = this.antialias, c.Canvas.addToDOM(this.canvas, this.parent, !1), c.Canvas.setTouchAction(this.canvas)) }, contextLost: function(a) { a.preventDefault(), this.renderer.contextLost = !0 }, contextRestored: function() { this.renderer.initContext(), this.cache.clearGLTextures(), this.renderer.contextLost = !1 }, update: function(a) { if (this.time.update(a), this._kickstart) return this.updateLogic(this.time.desiredFpsMult), this.updateRender(this.time.slowMotion * this.time.desiredFps), void(this._kickstart = !1); if (this._spiraling > 1 && !this.forceSingleUpdate) this.time.time > this._nextFpsNotification && (this._nextFpsNotification = this.time.time + 1e4, this.fpsProblemNotifier.dispatch()), this._deltaTime = 0, this._spiraling = 0, this.updateRender(this.time.slowMotion * this.time.desiredFps); else { var b = 1e3 * this.time.slowMotion / this.time.desiredFps; this._deltaTime += Math.max(Math.min(3 * b, this.time.elapsed), 0); var c = 0; for (this.updatesThisFrame = Math.floor(this._deltaTime / b), this.forceSingleUpdate && (this.updatesThisFrame = Math.min(1, this.updatesThisFrame)); this._deltaTime >= b && (this._deltaTime -= b, this.currentUpdateID = c, this.updateLogic(this.time.desiredFpsMult), c++, !this.forceSingleUpdate || 1 !== c);) this.time.refresh(); c > this._lastCount ? this._spiraling++ : c < this._lastCount && (this._spiraling = 0), this._lastCount = c, this.updateRender(this._deltaTime / b) } }, updateLogic: function(a) { this._paused || this.pendingStep ? (this.scale.pauseUpdate(), this.state.pauseUpdate(), this.debug.preUpdate()) : (this.stepping && (this.pendingStep = !0), this.scale.preUpdate(), this.debug.preUpdate(), this.camera.preUpdate(), this.physics.preUpdate(), this.state.preUpdate(a), this.plugins.preUpdate(a), this.stage.preUpdate(), this.state.update(), this.stage.update(), this.tweens.update(), this.sound.update(), this.input.update(), this.physics.update(), this.particles.update(), this.plugins.update(), this.stage.postUpdate(), this.plugins.postUpdate()), this.stage.updateTransform() }, updateRender: function(a) { this.lockRender || (this.state.preRender(a), this.renderType !== c.HEADLESS && (this.renderer.render(this.stage), this.plugins.render(a), this.state.render(a)), this.plugins.postRender(a)) }, enableStep: function() { this.stepping = !0, this.pendingStep = !1, this.stepCount = 0 }, disableStep: function() { this.stepping = !1, this.pendingStep = !1 }, step: function() { this.pendingStep = !1, this.stepCount++ }, destroy: function() { this.raf.stop(), this.state.destroy(), this.sound.destroy(), this.scale.destroy(), this.stage.destroy(), this.input.destroy(), this.physics.destroy(), this.plugins.destroy(), this.state = null, this.sound = null, this.scale = null, this.stage = null, this.input = null, this.physics = null, this.plugins = null, this.cache = null, this.load = null, this.time = null, this.world = null, this.isBooted = !1, this.renderer.destroy(!1), c.Canvas.removeFromDOM(this.canvas), PIXI.defaultRenderer = null, c.GAMES[this.id] = null }, gamePaused: function(a) { this._paused || (this._paused = !0, this.time.gamePaused(), this.sound.muteOnPause && this.sound.setMute(), this.onPause.dispatch(a), this.device.cordova && this.device.iOS && (this.lockRender = !0)) }, gameResumed: function(a) { this._paused && !this._codePaused && (this._paused = !1, this.time.gameResumed(), this.input.reset(), this.sound.muteOnPause && this.sound.unsetMute(), this.onResume.dispatch(a), this.device.cordova && this.device.iOS && (this.lockRender = !1)) }, focusLoss: function(a) { this.onBlur.dispatch(a), this.stage.disableVisibilityChange || this.gamePaused(a) }, focusGain: function(a) { this.onFocus.dispatch(a), this.stage.disableVisibilityChange || this.gameResumed(a) } }, c.Game.prototype.constructor = c.Game, Object.defineProperty(c.Game.prototype, "paused", { get: function() { return this._paused }, set: function(a) {!0 === a ? (!1 === this._paused && (this._paused = !0, this.sound.setMute(), this.time.gamePaused(), this.onPause.dispatch(this)), this._codePaused = !0) : (this._paused && (this._paused = !1, this.input.reset(), this.sound.unsetMute(), this.time.gameResumed(), this.onResume.dispatch(this)), this._codePaused = !1) } }), c.Input = function(a) { this.game = a, this.hitCanvas = null, this.hitContext = null, this.moveCallbacks = [], this.customCandidateHandler = null, this.customCandidateHandlerContext = null, this.pollRate = 0, this.enabled = !0, this.multiInputOverride = c.Input.MOUSE_TOUCH_COMBINE, this.position = null, this.speed = null, this.circle = null, this.scale = null, this.maxPointers = -1, this.tapRate = 200, this.doubleTapRate = 300, this.holdRate = 2e3, this.justPressedRate = 200, this.justReleasedRate = 200, this.recordPointerHistory = !1, this.recordRate = 100, this.recordLimit = 100, this.pointer1 = null, this.pointer2 = null, this.pointer3 = null, this.pointer4 = null, this.pointer5 = null, this.pointer6 = null, this.pointer7 = null, this.pointer8 = null, this.pointer9 = null, this.pointer10 = null, this.pointers = [], this.activePointer = null, this.mousePointer = null, this.mouse = null, this.keyboard = null, this.touch = null, this.mspointer = null, this.gamepad = null, this.resetLocked = !1, this.onDown = null, this.onUp = null, this.onTap = null, this.onHold = null, this.minPriorityID = 0, this.interactiveItems = new c.ArraySet, this._localPoint = new c.Point, this._pollCounter = 0, this._oldPosition = null, this._x = 0, this._y = 0 }, c.Input.MOUSE_OVERRIDES_TOUCH = 0, c.Input.TOUCH_OVERRIDES_MOUSE = 1, c.Input.MOUSE_TOUCH_COMBINE = 2, c.Input.MAX_POINTERS = 10, c.Input.prototype = { boot: function() { this.mousePointer = new c.Pointer(this.game, 0, c.PointerMode.CURSOR), this.addPointer(), this.addPointer(), this.mouse = new c.Mouse(this.game), this.touch = new c.Touch(this.game), this.mspointer = new c.MSPointer(this.game), c.Keyboard && (this.keyboard = new c.Keyboard(this.game)), c.Gamepad && (this.gamepad = new c.Gamepad(this.game)), this.onDown = new c.Signal, this.onUp = new c.Signal, this.onTap = new c.Signal, this.onHold = new c.Signal, this.scale = new c.Point(1, 1), this.speed = new c.Point, this.position = new c.Point, this._oldPosition = new c.Point, this.circle = new c.Circle(0, 0, 45), this.activePointer = this.mousePointer, this.hitCanvas = PIXI.CanvasPool.create(this, 1, 1), this.hitContext = this.hitCanvas.getContext("2d"), this.game.device.mspointer ? this.mspointer.start() : this.game.device.touch && this.touch.start(), this.mspointer.active || this.mouse.start(), this.mousePointer.active = !0, this.keyboard && this.keyboard.start(); var a = this; this._onClickTrampoline = function(b) { a.onClickTrampoline(b) }, this.game.canvas.addEventListener("click", this._onClickTrampoline, !1) }, destroy: function() { this.mouse.stop(), this.touch.stop(), this.mspointer.stop(), this.keyboard && this.keyboard.stop(), this.gamepad && this.gamepad.stop(), this.moveCallbacks = [], PIXI.CanvasPool.remove(this), this.game.canvas.removeEventListener("click", this._onClickTrampoline) }, setInteractiveCandidateHandler: function(a, b) { this.customCandidateHandler = a, this.customCandidateHandlerContext = b }, addMoveCallback: function(a, b) { this.moveCallbacks.push({ callback: a, context: b }) }, deleteMoveCallback: function(a, b) { for (var c = this.moveCallbacks.length; c--;) if (this.moveCallbacks[c].callback === a && this.moveCallbacks[c].context === b) return void this.moveCallbacks.splice(c, 1) }, addPointer: function() { if (this.pointers.length >= c.Input.MAX_POINTERS) return console.warn("Phaser.Input.addPointer: Maximum limit of " + c.Input.MAX_POINTERS + " pointers reached."), null; var a = this.pointers.length + 1, b = new c.Pointer(this.game, a, c.PointerMode.TOUCH); return this.pointers.push(b), this["pointer" + a] = b, b }, update: function() { if (this.keyboard && this.keyboard.update(), this.pollRate > 0 && this._pollCounter < this.pollRate) return void this._pollCounter++; this.speed.x = this.position.x - this._oldPosition.x, this.speed.y = this.position.y - this._oldPosition.y, this._oldPosition.copyFrom(this.position), this.mousePointer.update(), this.gamepad && this.gamepad.active && this.gamepad.update(); for (var a = 0; a < this.pointers.length; a++) this.pointers[a].update(); this._pollCounter = 0 }, reset: function(a) { if (this.game.isBooted && !this.resetLocked) { void 0 === a && (a = !1), this.mousePointer.reset(), this.keyboard && this.keyboard.reset(a), this.gamepad && this.gamepad.reset(); for (var b = 0; b < this.pointers.length; b++) this.pointers[b].reset(); "none" !== this.game.canvas.style.cursor && (this.game.canvas.style.cursor = "inherit"), a && (this.onDown.dispose(), this.onUp.dispose(), this.onTap.dispose(), this.onHold.dispose(), this.onDown = new c.Signal, this.onUp = new c.Signal, this.onTap = new c.Signal, this.onHold = new c.Signal, this.moveCallbacks = []), this._pollCounter = 0 } }, resetSpeed: function(a, b) { this._oldPosition.setTo(a, b), this.speed.setTo(0, 0) }, startPointer: function(a) { if (this.maxPointers >= 0 && this.countActivePointers(this.maxPointers) >= this.maxPointers) return null; if (!this.pointer1.active) return this.pointer1.start(a); if (!this.pointer2.active) return this.pointer2.start(a); for (var b = 2; b < this.pointers.length; b++) { var c = this.pointers[b]; if (!c.active) return c.start(a) } return null }, updatePointer: function(a) { if (this.pointer1.active && this.pointer1.identifier === a.identifier) return this.pointer1.move(a); if (this.pointer2.active && this.pointer2.identifier === a.identifier) return this.pointer2.move(a); for (var b = 2; b < this.pointers.length; b++) { var c = this.pointers[b]; if (c.active && c.identifier === a.identifier) return c.move(a) } return null }, stopPointer: function(a) { if (this.pointer1.active && this.pointer1.identifier === a.identifier) return this.pointer1.stop(a); if (this.pointer2.active && this.pointer2.identifier === a.identifier) return this.pointer2.stop(a); for (var b = 2; b < this.pointers.length; b++) { var c = this.pointers[b]; if (c.active && c.identifier === a.identifier) return c.stop(a) } return null }, countActivePointers: function(a) { void 0 === a && (a = this.pointers.length); for (var b = a, c = 0; c < this.pointers.length && b > 0; c++) { this.pointers[c].active && b-- } return a - b }, getPointer: function(a) { void 0 === a && (a = !1); for (var b = 0; b < this.pointers.length; b++) { var c = this.pointers[b]; if (c.active === a) return c } return null }, getPointerFromIdentifier: function(a) { for (var b = 0; b < this.pointers.length; b++) { var c = this.pointers[b]; if (c.identifier === a) return c } return null }, getPointerFromId: function(a) { for (var b = 0; b < this.pointers.length; b++) { var c = this.pointers[b]; if (c.pointerId === a) return c } return null }, getLocalPosition: function(a, b, d) { void 0 === d && (d = new c.Point); var e = a.worldTransform, f = 1 / (e.a * e.d + e.c * -e.b); return d.setTo(e.d * f * b.x + -e.c * f * b.y + (e.ty * e.c - e.tx * e.d) * f, e.a * f * b.y + -e.b * f * b.x + (-e.ty * e.a + e.tx * e.b) * f) }, hitTest: function(a, b, d) { if (!a.worldVisible) return !1; if (this.getLocalPosition(a, b, this._localPoint), d.copyFrom(this._localPoint), a.hitArea && a.hitArea.contains) return a.hitArea.contains(this._localPoint.x, this._localPoint.y); if (a instanceof c.TileSprite) { var e = a.width, f = a.height, g = -e * a.anchor.x; if (this._localPoint.x >= g && this._localPoint.x < g + e) { var h = -f * a.anchor.y; if (this._localPoint.y >= h && this._localPoint.y < h + f) return !0 } } else if (a instanceof PIXI.Sprite) { var e = a.texture.frame.width, f = a.texture.frame.height, g = -e * a.anchor.x; if (this._localPoint.x >= g && this._localPoint.x < g + e) { var h = -f * a.anchor.y; if (this._localPoint.y >= h && this._localPoint.y < h + f) return !0 } } else if (c.Graphics && a instanceof c.Graphics) for (var i = 0; i < a.graphicsData.length; i++) { var j = a.graphicsData[i]; if (j.fill && (j.shape && j.shape.contains(this._localPoint.x, this._localPoint.y))) return !0 } for (var i = 0; i < a.children.length; i++) if (this.hitTest(a.children[i], b, d)) return !0; return !1 }, onClickTrampoline: function() { this.activePointer.processClickTrampolines() } }, c.Input.prototype.constructor = c.Input, Object.defineProperty(c.Input.prototype, "x", { get: function() { return this._x }, set: function(a) { this._x = Math.floor(a) } }), Object.defineProperty(c.Input.prototype, "y", { get: function() { return this._y }, set: function(a) { this._y = Math.floor(a) } }), Object.defineProperty(c.Input.prototype, "pollLocked", { get: function() { return this.pollRate > 0 && this._pollCounter < this.pollRate } }), Object.defineProperty(c.Input.prototype, "totalInactivePointers", { get: function() { return this.pointers.length - this.countActivePointers() } }), Object.defineProperty(c.Input.prototype, "totalActivePointers", { get: function() { return this.countActivePointers() } }), Object.defineProperty(c.Input.prototype, "worldX", { get: function() { return this.game.camera.view.x + this.x } }), Object.defineProperty(c.Input.prototype, "worldY", { get: function() { return this.game.camera.view.y + this.y } }), c.Mouse = function(a) { this.game = a, this.input = a.input, this.callbackContext = this.game, this.mouseDownCallback = null, this.mouseUpCallback = null, this.mouseOutCallback = null, this.mouseOverCallback = null, this.mouseWheelCallback = null, this.capture = !1, this.button = -1, this.wheelDelta = 0, this.enabled = !0, this.locked = !1, this.stopOnGameOut = !1, this.pointerLock = new c.Signal, this.event = null, this._onMouseDown = null, this._onMouseMove = null, this._onMouseUp = null, this._onMouseOut = null, this._onMouseOver = null, this._onMouseWheel = null, this._wheelEvent = null }, c.Mouse.NO_BUTTON = -1, c.Mouse.LEFT_BUTTON = 0, c.Mouse.MIDDLE_BUTTON = 1, c.Mouse.RIGHT_BUTTON = 2, c.Mouse.BACK_BUTTON = 3, c.Mouse.FORWARD_BUTTON = 4, c.Mouse.WHEEL_UP = 1, c.Mouse.WHEEL_DOWN = -1, c.Mouse.prototype = { start: function() { if ((!this.game.device.android || !1 !== this.game.device.chrome) && null === this._onMouseDown) { var b = this; this._onMouseDown = function(a) { return b.onMouseDown(a) }, this._onMouseMove = function(a) { return b.onMouseMove(a) }, this._onMouseUp = function(a) { return b.onMouseUp(a) }, this._onMouseUpGlobal = function(a) { return b.onMouseUpGlobal(a) }, this._onMouseOutGlobal = function(a) { return b.onMouseOutGlobal(a) }, this._onMouseOut = function(a) { return b.onMouseOut(a) }, this._onMouseOver = function(a) { return b.onMouseOver(a) }, this._onMouseWheel = function(a) { return b.onMouseWheel(a) }; var c = this.game.canvas; c.addEventListener("mousedown", this._onMouseDown, !0), c.addEventListener("mousemove", this._onMouseMove, !0), c.addEventListener("mouseup", this._onMouseUp, !0), this.game.device.cocoonJS || (window.addEventListener("mouseup", this._onMouseUpGlobal, !0), window.addEventListener("mouseout", this._onMouseOutGlobal, !0), c.addEventListener("mouseover", this._onMouseOver, !0), c.addEventListener("mouseout", this._onMouseOut, !0)); var d = this.game.device.wheelEvent; d && (c.addEventListener(d, this._onMouseWheel, !0), "mousewheel" === d ? this._wheelEvent = new a(-.025, 1) : "DOMMouseScroll" === d && (this._wheelEvent = new a(1, 1))) } }, onMouseDown: function(a) { this.event = a, this.capture && a.preventDefault(), this.mouseDownCallback && this.mouseDownCallback.call(this.callbackContext, a), this.input.enabled && this.enabled && (a.identifier = 0, this.input.mousePointer.start(a)) }, onMouseMove: function(a) { this.event = a, this.capture && a.preventDefault(), this.mouseMoveCallback && this.mouseMoveCallback.call(this.callbackContext, a), this.input.enabled && this.enabled && (a.identifier = 0, this.input.mousePointer.move(a)) }, onMouseUp: function(a) { this.event = a, this.capture && a.preventDefault(), this.mouseUpCallback && this.mouseUpCallback.call(this.callbackContext, a), this.input.enabled && this.enabled && (a.identifier = 0, this.input.mousePointer.stop(a)) }, onMouseUpGlobal: function(a) { this.input.mousePointer.withinGame || (this.mouseUpCallback && this.mouseUpCallback.call(this.callbackContext, a), a.identifier = 0, this.input.mousePointer.stop(a)) }, onMouseOutGlobal: function(a) { this.event = a, this.capture && a.preventDefault(), this.input.mousePointer.withinGame = !1, this.input.enabled && this.enabled && (this.input.mousePointer.stop(a), this.input.mousePointer.leftButton.stop(a), this.input.mousePointer.rightButton.stop(a)) }, onMouseOut: function(a) { this.event = a, this.capture && a.preventDefault(), this.input.mousePointer.withinGame = !1, this.mouseOutCallback && this.mouseOutCallback.call(this.callbackContext, a), this.input.enabled && this.enabled && this.stopOnGameOut && (a.identifier = 0, this.input.mousePointer.stop(a)) }, onMouseOver: function(a) { this.event = a, this.capture && a.preventDefault(), this.input.mousePointer.withinGame = !0, this.mouseOverCallback && this.mouseOverCallback.call(this.callbackContext, a) }, onMouseWheel: function(a) { this._wheelEvent && (a = this._wheelEvent.bindEvent(a)), this.event = a, this.capture && a.preventDefault(), this.wheelDelta = c.Math.clamp(-a.deltaY, -1, 1), this.mouseWheelCallback && this.mouseWheelCallback.call(this.callbackContext, a) }, requestPointerLock: function() { if (this.game.device.pointerLock) { var a = this.game.canvas; a.requestPointerLock = a.requestPointerLock || a.mozRequestPointerLock || a.webkitRequestPointerLock, a.requestPointerLock(); var b = this; this._pointerLockChange = function(a) { return b.pointerLockChange(a) }, document.addEventListener("pointerlockchange", this._pointerLockChange, !0), document.addEventListener("mozpointerlockchange", this._pointerLockChange, !0), document.addEventListener("webkitpointerlockchange", this._pointerLockChange, !0) } }, pointerLockChange: function(a) { var b = this.game.canvas; document.pointerLockElement === b || document.mozPointerLockElement === b || document.webkitPointerLockElement === b ? (this.locked = !0, this.pointerLock.dispatch(!0, a)) : (this.locked = !1, this.pointerLock.dispatch(!1, a)) }, releasePointerLock: function() { document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock, document.exitPointerLock(), document.removeEventListener("pointerlockchange", this._pointerLockChange, !0), document.removeEventListener("mozpointerlockchange", this._pointerLockChange, !0), document.removeEventListener("webkitpointerlockchange", this._pointerLockChange, !0) }, stop: function() { var a = this.game.canvas; a.removeEventListener("mousedown", this._onMouseDown, !0), a.removeEventListener("mousemove", this._onMouseMove, !0), a.removeEventListener("mouseup", this._onMouseUp, !0), a.removeEventListener("mouseover", this._onMouseOver, !0), a.removeEventListener("mouseout", this._onMouseOut, !0); var b = this.game.device.wheelEvent; b && a.removeEventListener(b, this._onMouseWheel, !0), window.removeEventListener("mouseup", this._onMouseUpGlobal, !0), window.removeEventListener("mouseout", this._onMouseOutGlobal, !0), document.removeEventListener("pointerlockchange", this._pointerLockChange, !0), document.removeEventListener("mozpointerlockchange", this._pointerLockChange, !0), document.removeEventListener("webkitpointerlockchange", this._pointerLockChange, !0) } }, c.Mouse.prototype.constructor = c.Mouse, a.prototype = {}, a.prototype.constructor = a, a.prototype.bindEvent = function(b) { if (!a._stubsGenerated && b) { for (var c in b) c in a.prototype || Object.defineProperty(a.prototype, c, { get: function(a) { return function() { var b = this.originalEvent[a]; return "function" != typeof b ? b : b.bind(this.originalEvent) } }(c) }); a._stubsGenerated = !0 } return this.originalEvent = b, this }, Object.defineProperties(a.prototype, { type: { value: "wheel" }, deltaMode: { get: function() { return this._deltaMode } }, deltaY: { get: function() { return this._scaleFactor * (this.originalEvent.wheelDelta || this.originalEvent.detail) || 0 } }, deltaX: { get: function() { return this._scaleFactor * this.originalEvent.wheelDeltaX || 0 } }, deltaZ: { value: 0 } }), c.MSPointer = function(a) { this.game = a, this.input = a.input, this.callbackContext = this.game, this.pointerDownCallback = null, this.pointerMoveCallback = null, this.pointerUpCallback = null, this.capture = !1, this.event = null, this.active = !1, this.enabled = !0, this._onMSPointerDown = null, this._onMSPointerMove = null, this._onMSPointerUp = null, this._onMSPointerUpGlobal = null, this._onMSPointerOut = null, this._onMSPointerOver = null }, c.MSPointer.prototype = { start: function() { if (!this.game.device.mspointer) return !1; if (null !== this._onMSPointerDown) return !1; var a = this; this._onMSPointerDown = function(b) { return a.onPointerDown(b) }, this._onMSPointerMove = function(b) { return a.onPointerMove(b) }, this._onMSPointerUp = function(b) { return a.onPointerUp(b) }, this._onMSPointerUpGlobal = function(b) { return a.onPointerUpGlobal(b) }, this._onMSPointerOut = function(b) { return a.onPointerOut(b) }, this._onMSPointerOver = function(b) { return a.onPointerOver(b) }; var b = this.game.canvas; return b.addEventListener("MSPointerDown", this._onMSPointerDown, !1), b.addEventListener("MSPointerMove", this._onMSPointerMove, !1), b.addEventListener("MSPointerUp", this._onMSPointerUp, !1), b.addEventListener("pointerdown", this._onMSPointerDown, !1), b.addEventListener("pointermove", this._onMSPointerMove, !1), b.addEventListener("pointerup", this._onMSPointerUp, !1), b.style["-ms-content-zooming"] = "none", b.style["-ms-touch-action"] = "none", this.game.device.cocoonJS || (window.addEventListener("MSPointerUp", this._onMSPointerUpGlobal, !0), b.addEventListener("MSPointerOver", this._onMSPointerOver, !0), b.addEventListener("MSPointerOut", this._onMSPointerOut, !0), window.addEventListener("pointerup", this._onMSPointerUpGlobal, !0), b.addEventListener("pointerover", this._onMSPointerOver, !0), b.addEventListener("pointerout", this._onMSPointerOut, !0)), this.active = !0, !0 }, onPointerDown: function(a) { this.event = a, this.capture && a.preventDefault(), this.pointerDownCallback && this.pointerDownCallback.call(this.callbackContext, a), this.input.enabled && this.enabled && (a.identifier = a.pointerId, "mouse" === a.pointerType || 4 === a.pointerType ? this.input.mousePointer.start(a) : this.input.startPointer(a)) }, onPointerMove: function(a) { this.event = a, this.capture && a.preventDefault(), this.pointerMoveCallback && this.pointerMoveCallback.call(this.callbackContext, a), this.input.enabled && this.enabled && (a.identifier = a.pointerId, "mouse" === a.pointerType || 4 === a.pointerType ? this.input.mousePointer.move(a) : this.input.updatePointer(a)) }, onPointerUp: function(a) { this.event = a, this.capture && a.preventDefault(), this.pointerUpCallback && this.pointerUpCallback.call(this.callbackContext, a), this.input.enabled && this.enabled && (a.identifier = a.pointerId, "mouse" === a.pointerType || 4 === a.pointerType ? this.input.mousePointer.stop(a) : this.input.stopPointer(a)) }, onPointerUpGlobal: function(a) { if ("mouse" !== a.pointerType && 4 !== a.pointerType || this.input.mousePointer.withinGame) { var b = this.input.getPointerFromIdentifier(a.identifier); b && b.withinGame && this.onPointerUp(a) } else this.onPointerUp(a) }, onPointerOut: function(a) { if (this.event = a, this.capture && a.preventDefault(), "mouse" === a.pointerType || 4 === a.pointerType) this.input.mousePointer.withinGame = !1; else { var b = this.input.getPointerFromIdentifier(a.identifier); b && (b.withinGame = !1) } this.input.mouse.mouseOutCallback && this.input.mouse.mouseOutCallback.call(this.input.mouse.callbackContext, a), this.input.enabled && this.enabled && this.input.mouse.stopOnGameOut && (a.identifier = 0, b ? b.stop(a) : this.input.mousePointer.stop(a)) }, onPointerOver: function(a) { if (this.event = a, this.capture && a.preventDefault(), "mouse" === a.pointerType || 4 === a.pointerType) this.input.mousePointer.withinGame = !0; else { var b = this.input.getPointerFromIdentifier(a.identifier); b && (b.withinGame = !0) } this.input.mouse.mouseOverCallback && this.input.mouse.mouseOverCallback.call(this.input.mouse.callbackContext, a) }, stop: function() { var a = this.game.canvas; a.removeEventListener("MSPointerDown", this._onMSPointerDown, !1), a.removeEventListener("MSPointerMove", this._onMSPointerMove, !1), a.removeEventListener("MSPointerUp", this._onMSPointerUp, !1), a.removeEventListener("pointerdown", this._onMSPointerDown, !1), a.removeEventListener("pointermove", this._onMSPointerMove, !1), a.removeEventListener("pointerup", this._onMSPointerUp, !1), window.removeEventListener("MSPointerUp", this._onMSPointerUpGlobal, !0), a.removeEventListener("MSPointerOver", this._onMSPointerOver, !0), a.removeEventListener("MSPointerOut", this._onMSPointerOut, !0), window.removeEventListener("pointerup", this._onMSPointerUpGlobal, !0), a.removeEventListener("pointerover", this._onMSPointerOver, !0), a.removeEventListener("pointerout", this._onMSPointerOut, !0), this.active = !1 } }, c.MSPointer.prototype.constructor = c.MSPointer, c.DeviceButton = function(a, b) { this.parent = a, this.game = a.game, this.event = null, this.isDown = !1, this.isUp = !0, this.timeDown = 0, this.timeUp = 0, this.repeats = 0, this.altKey = !1, this.shiftKey = !1, this.ctrlKey = !1, this.value = 0, this.buttonCode = b, this.onDown = new c.Signal, this.onUp = new c.Signal, this.onFloat = new c.Signal }, c.DeviceButton.prototype = { start: function(a, b) { this.isDown || (this.isDown = !0, this.isUp = !1, this.timeDown = this.game.time.time, this.repeats = 0, this.event = a, this.value = b, a && (this.altKey = a.altKey, this.shiftKey = a.shiftKey, this.ctrlKey = a.ctrlKey), this.onDown.dispatch(this, b)) }, stop: function(a, b) { this.isUp || (this.isDown = !1, this.isUp = !0, this.timeUp = this.game.time.time, this.event = a, this.value = b, a && (this.altKey = a.altKey, this.shiftKey = a.shiftKey, this.ctrlKey = a.ctrlKey), this.onUp.dispatch(this, b)) }, padFloat: function(a) { this.value = a, this.onFloat.dispatch(this, a) }, justPressed: function(a) { return a = a || 250, this.isDown && this.timeDown + a > this.game.time.time }, justReleased: function(a) { return a = a || 250, this.isUp && this.timeUp + a > this.game.time.time }, reset: function() { this.isDown = !1, this.isUp = !0, this.timeDown = this.game.time.time, this.repeats = 0, this.altKey = !1, this.shiftKey = !1, this.ctrlKey = !1 }, destroy: function() { this.onDown.dispose(), this.onUp.dispose(), this.onFloat.dispose(), this.parent = null, this.game = null } }, c.DeviceButton.prototype.constructor = c.DeviceButton, Object.defineProperty(c.DeviceButton.prototype, "duration", { get: function() { return this.isUp ? -1 : this.game.time.time - this.timeDown } }), c.Pointer = function(a, b, d) { this.game = a, this.id = b, this.type = c.POINTER, this.exists = !0, this.identifier = 0, this.pointerId = null, this.pointerMode = d || c.PointerMode.CURSOR | c.PointerMode.CONTACT, this.target = null, this.button = null, this.leftButton = new c.DeviceButton(this, c.Pointer.LEFT_BUTTON), this.middleButton = new c.DeviceButton(this, c.Pointer.MIDDLE_BUTTON), this.rightButton = new c.DeviceButton(this, c.Pointer.RIGHT_BUTTON), this.backButton = new c.DeviceButton(this, c.Pointer.BACK_BUTTON), this.forwardButton = new c.DeviceButton(this, c.Pointer.FORWARD_BUTTON), this.eraserButton = new c.DeviceButton(this, c.Pointer.ERASER_BUTTON), this._holdSent = !1, this._history = [], this._nextDrop = 0, this._stateReset = !1, this.withinGame = !1, this.clientX = -1, this.clientY = -1, this.pageX = -1, this.pageY = -1, this.screenX = -1, this.screenY = -1, this.rawMovementX = 0, this.rawMovementY = 0, this.movementX = 0, this.movementY = 0, this.x = -1, this.y = -1, this.isMouse = 0 === b, this.isDown = !1, this.isUp = !0, this.timeDown = 0, this.timeUp = 0, this.previousTapTime = 0, this.totalTouches = 0, this.msSinceLastClick = Number.MAX_VALUE, this.targetObject = null, this.interactiveCandidates = [], this.active = !1, this.dirty = !1, this.position = new c.Point, this.positionDown = new c.Point, this.positionUp = new c.Point, this.circle = new c.Circle(0, 0, 44), this._clickTrampolines = null, this._trampolineTargetObject = null }, c.Pointer.NO_BUTTON = 0, c.Pointer.LEFT_BUTTON = 1, c.Pointer.RIGHT_BUTTON = 2, c.Pointer.MIDDLE_BUTTON = 4, c.Pointer.BACK_BUTTON = 8, c.Pointer.FORWARD_BUTTON = 16, c.Pointer.ERASER_BUTTON = 32, c.Pointer.prototype = { resetButtons: function() { this.isDown = !1, this.isUp = !0, this.isMouse && (this.leftButton.reset(), this.middleButton.reset(), this.rightButton.reset(), this.backButton.reset(), this.forwardButton.reset(), this.eraserButton.reset()) }, processButtonsDown: function(a, b) { c.Pointer.LEFT_BUTTON & a && this.leftButton.start(b), c.Pointer.RIGHT_BUTTON & a && this.rightButton.start(b), c.Pointer.MIDDLE_BUTTON & a && this.middleButton.start(b), c.Pointer.BACK_BUTTON & a && this.backButton.start(b), c.Pointer.FORWARD_BUTTON & a && this.forwardButton.start(b), c.Pointer.ERASER_BUTTON & a && this.eraserButton.start(b) }, processButtonsUp: function(a, b) { a === c.Mouse.LEFT_BUTTON && this.leftButton.stop(b), a === c.Mouse.RIGHT_BUTTON && this.rightButton.stop(b), a === c.Mouse.MIDDLE_BUTTON && this.middleButton.stop(b), a === c.Mouse.BACK_BUTTON && this.backButton.stop(b), a === c.Mouse.FORWARD_BUTTON && this.forwardButton.stop(b), 5 === a && this.eraserButton.stop(b) }, updateButtons: function(a) { this.button = a.button; var b = "down" === a.type.toLowerCase().substr(-4); void 0 !== a.buttons ? b ? this.processButtonsDown(a.buttons, a) : this.processButtonsUp(a.button, a) : b ? this.leftButton.start(a) : (this.leftButton.stop(a), this.rightButton.stop(a)), 1 === a.buttons && a.ctrlKey && this.leftButton.isDown && (this.leftButton.stop(a), this.rightButton.start(a)), this.isUp = !0, this.isDown = !1, (this.leftButton.isDown || this.rightButton.isDown || this.middleButton.isDown || this.backButton.isDown || this.forwardButton.isDown || this.eraserButton.isDown) && (this.isUp = !1, this.isDown = !0) }, start: function(a) { var b = this.game.input; return a.pointerId && (this.pointerId = a.pointerId), this.identifier = a.identifier, this.target = a.target, this.isMouse ? this.updateButtons(a) : (this.isDown = !0, this.isUp = !1), this.active = !0, this.withinGame = !0, this.dirty = !1, this._history = [], this._clickTrampolines = null, this._trampolineTargetObject = null, this.msSinceLastClick = this.game.time.time - this.timeDown, this.timeDown = this.game.time.time, this._holdSent = !1, this.move(a, !0), this.positionDown.setTo(this.x, this.y), (b.multiInputOverride === c.Input.MOUSE_OVERRIDES_TOUCH || b.multiInputOverride === c.Input.MOUSE_TOUCH_COMBINE || b.multiInputOverride === c.Input.TOUCH_OVERRIDES_MOUSE && 0 === b.totalActivePointers) && (b.x = this.x, b.y = this.y, b.position.setTo(this.x, this.y), b.onDown.dispatch(this, a), b.resetSpeed(this.x, this.y)), this._stateReset = !1, this.totalTouches++, null !== this.targetObject && this.targetObject._touchedHandler(this), this }, update: function() { var a = this.game.input; this.active && (this.dirty && (a.interactiveItems.total > 0 && this.processInteractiveObjects(!1), this.dirty = !1), !1 === this._holdSent && this.duration >= a.holdRate && ((a.multiInputOverride === c.Input.MOUSE_OVERRIDES_TOUCH || a.multiInputOverride === c.Input.MOUSE_TOUCH_COMBINE || a.multiInputOverride === c.Input.TOUCH_OVERRIDES_MOUSE && 0 === a.totalActivePointers) && a.onHold.dispatch(this), this._holdSent = !0), a.recordPointerHistory && this.game.time.time >= this._nextDrop && (this._nextDrop = this.game.time.time + a.recordRate, this._history.push({ x: this.position.x, y: this.position.y }), this._history.length > a.recordLimit && this._history.shift())) }, move: function(a, b) { var d = this.game.input; if (!d.pollLocked) { void 0 === b && (b = !1), void 0 !== a.button && (this.button = a.button), b && this.isMouse && this.updateButtons(a), this.clientX = a.clientX, this.clientY = a.clientY, this.pageX = a.pageX, this.pageY = a.pageY, this.screenX = a.screenX, this.screenY = a.screenY, this.isMouse && d.mouse.locked && !b && (this.rawMovementX = a.movementX || a.mozMovementX || a.webkitMovementX || 0, this.rawMovementY = a.movementY || a.mozMovementY || a.webkitMovementY || 0, this.movementX += this.rawMovementX, this.movementY += this.rawMovementY), this.x = (this.pageX - this.game.scale.offset.x) * d.scale.x, this.y = (this.pageY - this.game.scale.offset.y) * d.scale.y, this.position.setTo(this.x, this.y), this.circle.x = this.x, this.circle.y = this.y, (d.multiInputOverride === c.Input.MOUSE_OVERRIDES_TOUCH || d.multiInputOverride === c.Input.MOUSE_TOUCH_COMBINE || d.multiInputOverride === c.Input.TOUCH_OVERRIDES_MOUSE && 0 === d.totalActivePointers) && (d.activePointer = this, d.x = this.x, d.y = this.y, d.position.setTo(d.x, d.y), d.circle.x = d.x, d.circle.y = d.y), this.withinGame = this.game.scale.bounds.contains(this.pageX, this.pageY); for (var e = d.moveCallbacks.length; e--;) d.moveCallbacks[e].callback.call(d.moveCallbacks[e].context, this, this.x, this.y, b); return null !== this.targetObject && !0 === this.targetObject.isDragged ? !1 === this.targetObject.update(this) && (this.targetObject = null) : d.interactiveItems.total > 0 && this.processInteractiveObjects(b), this } }, processInteractiveObjects: function(a) { var b = 0, c = -1, d = null, e = this.game.input.interactiveItems.first; for (this.interactiveCandidates = []; e;) e.checked = !1, e.validForInput(c, b, !1) && (e.checked = !0, (a && e.checkPointerDown(this, !0) || !a && e.checkPointerOver(this, !0)) && (b = e.sprite.renderOrderID, c = e.priorityID, d = e, this.interactiveCandidates.push(e))), e = this.game.input.interactiveItems.next; for (e = this.game.input.interactiveItems.first; e;) !e.checked && e.validForInput(c, b, !0) && (a && e.checkPointerDown(this, !1) || !a && e.checkPointerOver(this, !1)) && (b = e.sprite.renderOrderID, c = e.priorityID, d = e, this.interactiveCandidates.push(e)), e = this.game.input.interactiveItems.next; return this.game.input.customCandidateHandler && (d = this.game.input.customCandidateHandler.call(this.game.input.customCandidateHandlerContext, this, this.interactiveCandidates, d)), this.swapTarget(d, !1), null !== this.targetObject }, swapTarget: function(a, b) { void 0 === b && (b = !1), null === a ? this.targetObject && (this.targetObject._pointerOutHandler(this, b), this.targetObject = null) : null === this.targetObject ? (this.targetObject = a, a._pointerOverHandler(this, b)) : this.targetObject === a ? !1 === a.update(this) && (this.targetObject = null) : (this.targetObject._pointerOutHandler(this, b), this.targetObject = a, this.targetObject._pointerOverHandler(this, b)) }, leave: function(a) { this.withinGame = !1, this.move(a, !1) }, stop: function(a) { var b = this.game.input; return this._stateReset && this.withinGame ? void a.preventDefault() : (this.timeUp = this.game.time.time, (b.multiInputOverride === c.Input.MOUSE_OVERRIDES_TOUCH || b.multiInputOverride === c.Input.MOUSE_TOUCH_COMBINE || b.multiInputOverride === c.Input.TOUCH_OVERRIDES_MOUSE && 0 === b.totalActivePointers) && (b.onUp.dispatch(this, a), this.duration >= 0 && this.duration <= b.tapRate && (this.timeUp - this.previousTapTime < b.doubleTapRate ? b.onTap.dispatch(this, !0) : b.onTap.dispatch(this, !1), this.previousTapTime = this.timeUp)), this.isMouse ? this.updateButtons(a) : (this.isDown = !1, this.isUp = !0), this.id > 0 && (this.active = !1), this.withinGame = this.game.scale.bounds.contains(a.pageX, a.pageY), this.pointerId = null, this.identifier = null, this.positionUp.setTo(this.x, this.y), !1 === this.isMouse && b.currentPointers--, b.interactiveItems.callAll("_releasedHandler", this), this._clickTrampolines && (this._trampolineTargetObject = this.targetObject), this.targetObject = null, this) }, justPressed: function(a) { return a = a || this.game.input.justPressedRate, !0 === this.isDown && this.timeDown + a > this.game.time.time }, justReleased: function(a) { return a = a || this.game.input.justReleasedRate, this.isUp && this.timeUp + a > this.game.time.time }, addClickTrampoline: function(a, b, c, d) { if (this.isDown) { for (var e = this._clickTrampolines = this._clickTrampolines || [], f = 0; f < e.length; f++) if (e[f].name === a) { e.splice(f, 1); break } e.push({ name: a, targetObject: this.targetObject, callback: b, callbackContext: c, callbackArgs: d }) } }, processClickTrampolines: function() { var a = this._clickTrampolines; if (a) { for (var b = 0; b < a.length; b++) { var c = a[b]; c.targetObject === this._trampolineTargetObject && c.callback.apply(c.callbackContext, c.callbackArgs) } this._clickTrampolines = null, this._trampolineTargetObject = null } }, reset: function() {!1 === this.isMouse && (this.active = !1), this.pointerId = null, this.identifier = null, this.dirty = !1, this.totalTouches = 0, this._holdSent = !1, this._history.length = 0, this._stateReset = !0, this.resetButtons(), this.targetObject && this.targetObject._releasedHandler(this), this.targetObject = null }, resetMovement: function() { this.movementX = 0, this.movementY = 0 } }, c.Pointer.prototype.constructor = c.Pointer, Object.defineProperty(c.Pointer.prototype, "duration", { get: function() { return this.isUp ? -1 : this.game.time.time - this.timeDown } }), Object.defineProperty(c.Pointer.prototype, "worldX", { get: function() { return this.game.world.camera.x + this.x } }), Object.defineProperty(c.Pointer.prototype, "worldY", { get: function() { return this.game.world.camera.y + this.y } }), c.PointerMode = { CURSOR: 1, CONTACT: 2 }, c.Touch = function(a) { this.game = a, this.enabled = !0, this.touchLockCallbacks = [], this.callbackContext = this.game, this.touchStartCallback = null, this.touchMoveCallback = null, this.touchEndCallback = null, this.touchEnterCallback = null, this.touchLeaveCallback = null, this.touchCancelCallback = null, this.preventDefault = !0, this.event = null, this._onTouchStart = null, this._onTouchMove = null, this._onTouchEnd = null, this._onTouchEnter = null, this._onTouchLeave = null, this._onTouchCancel = null, this._onTouchMove = null }, c.Touch.prototype = { start: function() { if (null === this._onTouchStart) { var a = this; this.game.device.touch && (this._onTouchStart = function(b) { return a.onTouchStart(b) }, this._onTouchMove = function(b) { return a.onTouchMove(b) }, this._onTouchEnd = function(b) { return a.onTouchEnd(b) }, this._onTouchEnter = function(b) { return a.onTouchEnter(b) }, this._onTouchLeave = function(b) { return a.onTouchLeave(b) }, this._onTouchCancel = function(b) { return a.onTouchCancel(b) }, this.game.canvas.addEventListener("touchstart", this._onTouchStart, !1), this.game.canvas.addEventListener("touchmove", this._onTouchMove, !1), this.game.canvas.addEventListener("touchend", this._onTouchEnd, !1), this.game.canvas.addEventListener("touchcancel", this._onTouchCancel, !1), this.game.device.cocoonJS || (this.game.canvas.addEventListener("touchenter", this._onTouchEnter, !1), this.game.canvas.addEventListener("touchleave", this._onTouchLeave, !1))) } }, consumeDocumentTouches: function() { this._documentTouchMove = function(a) { a.preventDefault() }, document.addEventListener("touchmove", this._documentTouchMove, !1) }, addTouchLockCallback: function(a, b, c) { void 0 === c && (c = !1), this.touchLockCallbacks.push({ callback: a, context: b, onEnd: c }) }, removeTouchLockCallback: function(a, b) { for (var c = this.touchLockCallbacks.length; c--;) if (this.touchLockCallbacks[c].callback === a && this.touchLockCallbacks[c].context === b) return this.touchLockCallbacks.splice(c, 1), !0; return !1 }, onTouchStart: function(a) { for (var b = this.touchLockCallbacks.length; b--;) { var c = this.touchLockCallbacks[b];!c.onEnd && c.callback.call(c.context, this, a) && this.touchLockCallbacks.splice(b, 1) } if (this.event = a, this.game.input.enabled && this.enabled) { this.touchStartCallback && this.touchStartCallback.call(this.callbackContext, a), this.preventDefault && a.preventDefault(); for (var b = 0; b < a.changedTouches.length; b++) this.game.input.startPointer(a.changedTouches[b]) } }, onTouchCancel: function(a) { if (this.event = a, this.touchCancelCallback && this.touchCancelCallback.call(this.callbackContext, a), this.game.input.enabled && this.enabled) { this.preventDefault && a.preventDefault(); for (var b = 0; b < a.changedTouches.length; b++) this.game.input.stopPointer(a.changedTouches[b]) } }, onTouchEnter: function(a) { this.event = a, this.touchEnterCallback && this.touchEnterCallback.call(this.callbackContext, a), this.game.input.enabled && this.enabled && this.preventDefault && a.preventDefault() }, onTouchLeave: function(a) { this.event = a, this.touchLeaveCallback && this.touchLeaveCallback.call(this.callbackContext, a), this.preventDefault && a.preventDefault() }, onTouchMove: function(a) { this.event = a, this.touchMoveCallback && this.touchMoveCallback.call(this.callbackContext, a), this.preventDefault && a.preventDefault(); for (var b = 0; b < a.changedTouches.length; b++) this.game.input.updatePointer(a.changedTouches[b]) }, onTouchEnd: function(a) { for (var b = this.touchLockCallbacks.length; b--;) { var c = this.touchLockCallbacks[b]; c.onEnd && c.callback.call(c.context, this, a) && this.touchLockCallbacks.splice(b, 1) } this.event = a, this.touchEndCallback && this.touchEndCallback.call(this.callbackContext, a), this.preventDefault && a.preventDefault(); for (var b = 0; b < a.changedTouches.length; b++) this.game.input.stopPointer(a.changedTouches[b]) }, stop: function() { this.game.device.touch && (this.game.canvas.removeEventListener("touchstart", this._onTouchStart), this.game.canvas.removeEventListener("touchmove", this._onTouchMove), this.game.canvas.removeEventListener("touchend", this._onTouchEnd), this.game.canvas.removeEventListener("touchenter", this._onTouchEnter), this.game.canvas.removeEventListener("touchleave", this._onTouchLeave), this.game.canvas.removeEventListener("touchcancel", this._onTouchCancel)) } }, c.Touch.prototype.constructor = c.Touch, c.InputHandler = function(a) { this.sprite = a, this.game = a.game, this.enabled = !1, this.checked = !1, this.priorityID = 0, this.useHandCursor = !1, this._setHandCursor = !1, this.isDragged = !1, this.allowHorizontalDrag = !0, this.allowVerticalDrag = !0, this.bringToTop = !1, this.snapOffset = null, this.snapOnDrag = !1, this.snapOnRelease = !1, this.snapX = 0, this.snapY = 0, this.snapOffsetX = 0, this.snapOffsetY = 0, this.pixelPerfectOver = !1, this.pixelPerfectClick = !1, this.pixelPerfectAlpha = 255, this.draggable = !1, this.boundsRect = null, this.boundsSprite = null, this.scaleLayer = !1, this.dragOffset = new c.Point, this.dragFromCenter = !1, this.dragStopBlocksInputUp = !1, this.dragStartPoint = new c.Point, this.dragDistanceThreshold = 0, this.dragTimeThreshold = 0, this.downPoint = new c.Point, this.snapPoint = new c.Point, this._dragPoint = new c.Point, this._dragPhase = !1, this._pendingDrag = !1, this._dragTimePass = !1, this._dragDistancePass = !1, this._wasEnabled = !1, this._tempPoint = new c.Point, this._pointerData = [], this._pointerData.push({ id: 0, x: 0, y: 0, camX: 0, camY: 0, isDown: !1, isUp: !1, isOver: !1, isOut: !1, timeOver: 0, timeOut: 0, timeDown: 0, timeUp: 0, downDuration: 0, isDragged: !1 }) }, c.InputHandler.prototype = { start: function(a, b) { if (a = a || 0, void 0 === b && (b = !1), !1 === this.enabled) { this.game.input.interactiveItems.add(this), this.useHandCursor = b, this.priorityID = a; for (var d = 0; d < 10; d++) this._pointerData[d] = { id: d, x: 0, y: 0, isDown: !1, isUp: !1, isOver: !1, isOut: !1, timeOver: 0, timeOut: 0, timeDown: 0, timeUp: 0, downDuration: 0, isDragged: !1 }; this.snapOffset = new c.Point, this.enabled = !0, this._wasEnabled = !0 } return this.sprite.events.onAddedToGroup.add(this.addedToGroup, this), this.sprite.events.onRemovedFromGroup.add(this.removedFromGroup, this), this.sprite }, addedToGroup: function() { this._dragPhase || this._wasEnabled && !this.enabled && this.start() }, removedFromGroup: function() { this._dragPhase || (this.enabled ? (this._wasEnabled = !0, this.stop()) : this._wasEnabled = !1) }, reset: function() { this.enabled = !1; for (var a = 0; a < 10; a++) this._pointerData[a] = { id: a, x: 0, y: 0, isDown: !1, isUp: !1, isOver: !1, isOut: !1, timeOver: 0, timeOut: 0, timeDown: 0, timeUp: 0, downDuration: 0, isDragged: !1 } }, stop: function() {!1 !== this.enabled && (this.enabled = !1, this.game.input.interactiveItems.remove(this)) }, destroy: function() { this.sprite && (this._setHandCursor && (this.game.canvas.style.cursor = "default", this._setHandCursor = !1), this.enabled = !1, this.game.input.interactiveItems.remove(this), this._pointerData.length = 0, this.boundsRect = null, this.boundsSprite = null, this.sprite = null) }, validForInput: function(a, b, c) { return void 0 === c && (c = !0), !(!this.enabled || 0 === this.sprite.scale.x || 0 === this.sprite.scale.y || this.priorityID < this.game.input.minPriorityID || this.sprite.parent && this.sprite.parent.ignoreChildInput) && (!(!c && (this.pixelPerfectClick || this.pixelPerfectOver)) && (this.priorityID > a || this.priorityID === a && this.sprite.renderOrderID > b)) }, isPixelPerfect: function() { return this.pixelPerfectClick || this.pixelPerfectOver }, pointerX: function(a) { return a = a || 0, this._pointerData[a].x }, pointerY: function(a) { return a = a || 0, this._pointerData[a].y }, pointerDown: function(a) { return a = a || 0, this._pointerData[a].isDown }, pointerUp: function(a) { return a = a || 0, this._pointerData[a].isUp }, pointerTimeDown: function(a) { return a = a || 0, this._pointerData[a].timeDown }, pointerTimeUp: function(a) { return a = a || 0, this._pointerData[a].timeUp }, pointerOver: function(a) { if (!this.enabled) return !1; if (void 0 === a) { for (var b = 0; b < 10; b++) if (this._pointerData[b].isOver) return !0; return !1 } return this._pointerData[a].isOver }, pointerOut: function(a) { if (!this.enabled) return !1; if (void 0 !== a) return this._pointerData[a].isOut; for (var b = 0; b < 10; b++) if (this._pointerData[b].isOut) return !0 }, pointerTimeOver: function(a) { return a = a || 0, this._pointerData[a].timeOver }, pointerTimeOut: function(a) { return a = a || 0, this._pointerData[a].timeOut }, pointerDragged: function(a) { return a = a || 0, this._pointerData[a].isDragged }, checkPointerDown: function(a, b) { return !!(a.isDown && this.enabled && this.sprite && this.sprite.parent && this.sprite.visible && this.sprite.parent.visible && 0 !== this.sprite.worldScale.x && 0 !== this.sprite.worldScale.y) && (!!this.game.input.hitTest(this.sprite, a, this._tempPoint) && (void 0 === b && (b = !1), !(!b && this.pixelPerfectClick) || this.checkPixel(this._tempPoint.x, this._tempPoint.y))) }, checkPointerOver: function(a, b) { return !!(this.enabled && this.sprite && this.sprite.parent && this.sprite.visible && this.sprite.parent.visible && 0 !== this.sprite.worldScale.x && 0 !== this.sprite.worldScale.y) && (!!this.game.input.hitTest(this.sprite, a, this._tempPoint) && (void 0 === b && (b = !1), !(!b && this.pixelPerfectOver) || this.checkPixel(this._tempPoint.x, this._tempPoint.y))) }, checkPixel: function(a, b, c) { if (this.sprite.texture.baseTexture.source) { if (null === a && null === b) { this.game.input.getLocalPosition(this.sprite, c, this._tempPoint); var a = this._tempPoint.x, b = this._tempPoint.y } if (0 !== this.sprite.anchor.x && (a -= -this.sprite.texture.frame.width * this.sprite.anchor.x), 0 !== this.sprite.anchor.y && (b -= -this.sprite.texture.frame.height * this.sprite.anchor.y), a += this.sprite.texture.frame.x, b += this.sprite.texture.frame.y, this.sprite.texture.trim && (a -= this.sprite.texture.trim.x, b -= this.sprite.texture.trim.y, a < this.sprite.texture.crop.x || a > this.sprite.texture.crop.right || b < this.sprite.texture.crop.y || b > this.sprite.texture.crop.bottom)) return this._dx = a, this._dy = b, !1; this._dx = a, this._dy = b, this.game.input.hitContext.clearRect(0, 0, 1, 1), this.game.input.hitContext.drawImage(this.sprite.texture.baseTexture.source, a, b, 1, 1, 0, 0, 1, 1); if (this.game.input.hitContext.getImageData(0, 0, 1, 1).data[3] >= this.pixelPerfectAlpha) return !0 } return !1 }, update: function(a) { if (null !== this.sprite && void 0 !== this.sprite.parent) return this.enabled && this.sprite.visible && this.sprite.parent.visible ? this._pendingDrag ? (this._dragDistancePass || (this._dragDistancePass = c.Math.distance(a.x, a.y, this.downPoint.x, this.downPoint.y) >= this.dragDistanceThreshold), this._dragDistancePass && this._dragTimePass && this.startDrag(a), !0) : this.draggable && this._draggedPointerID === a.id ? this.updateDrag(a, !1) : this._pointerData[a.id].isOver ? this.checkPointerOver(a) ? (this._pointerData[a.id].x = a.x - this.sprite.x, this._pointerData[a.id].y = a.y - this.sprite.y, !0) : (this._pointerOutHandler(a), !1) : void 0 : (this._pointerOutHandler(a), !1) }, _pointerOverHandler: function(a, b) { if (null !== this.sprite) { var d = this._pointerData[a.id]; if (!1 === d.isOver || a.dirty) { var e = !1 === d.isOver; d.isOver = !0, d.isOut = !1, d.timeOver = this.game.time.time, d.x = a.x - this.sprite.x, d.y = a.y - this.sprite.y, this.useHandCursor && !1 === d.isDragged && (this.game.canvas.style.cursor = "pointer", this._setHandCursor = !0), !b && e && this.sprite && this.sprite.events && this.sprite.events.onInputOver$dispatch(this.sprite, a), this.sprite.parent && this.sprite.parent.type === c.GROUP && this.sprite.parent.onChildInputOver.dispatch(this.sprite, a) } } }, _pointerOutHandler: function(a, b) { if (null !== this.sprite) { var d = this._pointerData[a.id]; d.isOver = !1, d.isOut = !0, d.timeOut = this.game.time.time, this.useHandCursor && !1 === d.isDragged && (this.game.canvas.style.cursor = "default", this._setHandCursor = !1), !b && this.sprite && this.sprite.events && (this.sprite.events.onInputOut$dispatch(this.sprite, a), this.sprite && this.sprite.parent && this.sprite.parent.type === c.GROUP && this.sprite.parent.onChildInputOut.dispatch(this.sprite, a)) } }, _touchedHandler: function(a) { if (null !== this.sprite) { var b = this._pointerData[a.id]; if (!b.isDown && b.isOver) { if (this.pixelPerfectClick && !this.checkPixel(null, null, a)) return; if (b.isDown = !0, b.isUp = !1, b.timeDown = this.game.time.time, this.downPoint.set(a.x, a.y), a.dirty = !0, this.sprite && this.sprite.events && (this.sprite.events.onInputDown$dispatch(this.sprite, a), this.sprite && this.sprite.parent && this.sprite.parent.type === c.GROUP && this.sprite.parent.onChildInputDown.dispatch(this.sprite, a), null === this.sprite)) return; this.draggable && !1 === this.isDragged && (0 === this.dragTimeThreshold && 0 === this.dragDistanceThreshold ? this.startDrag(a) : (this._pendingDrag = !0, this._dragDistancePass = 0 === this.dragDistanceThreshold, this.dragTimeThreshold > 0 ? (this._dragTimePass = !1, this.game.time.events.add(this.dragTimeThreshold, this.dragTimeElapsed, this, a)) : this._dragTimePass = !0)), this.bringToTop && this.sprite.bringToTop() } } }, dragTimeElapsed: function(a) { this._dragTimePass = !0, this._pendingDrag && this.sprite && this._dragDistancePass && this.startDrag(a) }, _releasedHandler: function(a) { if (null !== this.sprite) { var b = this._pointerData[a.id]; if (b.isDown && a.isUp) { b.isDown = !1, b.isUp = !0, b.timeUp = this.game.time.time, b.downDuration = b.timeUp - b.timeDown; var d = this.checkPointerOver(a); this.sprite && this.sprite.events && (this.dragStopBlocksInputUp && (!this.dragStopBlocksInputUp || this.draggable && this.isDragged && this._draggedPointerID === a.id) || this.sprite.events.onInputUp$dispatch(this.sprite, a, d), this.sprite && this.sprite.parent && this.sprite.parent.type === c.GROUP && this.sprite.parent.onChildInputUp.dispatch(this.sprite, a, d), d && (d = this.checkPointerOver(a))), b.isOver = d, !d && this.useHandCursor && (this.game.canvas.style.cursor = "default", this._setHandCursor = !1), a.dirty = !0, this._pendingDrag = !1, this.draggable && this.isDragged && this._draggedPointerID === a.id && this.stopDrag(a) } } }, updateDrag: function(a, b) { if (void 0 === b && (b = !1), a.isUp) return this.stopDrag(a), !1; var c = this.globalToLocalX(a.x) + this._dragPoint.x + this.dragOffset.x, d = this.globalToLocalY(a.y) + this._dragPoint.y + this.dragOffset.y; if (this.sprite.fixedToCamera) this.allowHorizontalDrag && (this.sprite.cameraOffset.x = c), this.allowVerticalDrag && (this.sprite.cameraOffset.y = d), this.boundsRect && this.checkBoundsRect(), this.boundsSprite && this.checkBoundsSprite(), this.snapOnDrag && (this.sprite.cameraOffset.x = Math.round((this.sprite.cameraOffset.x - this.snapOffsetX % this.snapX) / this.snapX) * this.snapX + this.snapOffsetX % this.snapX, this.sprite.cameraOffset.y = Math.round((this.sprite.cameraOffset.y - this.snapOffsetY % this.snapY) / this.snapY) * this.snapY + this.snapOffsetY % this.snapY, this.snapPoint.set(this.sprite.cameraOffset.x, this.sprite.cameraOffset.y)); else { var e = this.game.camera.x - this._pointerData[a.id].camX, f = this.game.camera.y - this._pointerData[a.id].camY; this.allowHorizontalDrag && (this.sprite.x = c + e), this.allowVerticalDrag && (this.sprite.y = d + f), this.boundsRect && this.checkBoundsRect(), this.boundsSprite && this.checkBoundsSprite(), this.snapOnDrag && (this.sprite.x = Math.round((this.sprite.x - this.snapOffsetX % this.snapX) / this.snapX) * this.snapX + this.snapOffsetX % this.snapX, this.sprite.y = Math.round((this.sprite.y - this.snapOffsetY % this.snapY) / this.snapY) * this.snapY + this.snapOffsetY % this.snapY, this.snapPoint.set(this.sprite.x, this.sprite.y)) } return this.sprite.events.onDragUpdate.dispatch(this.sprite, a, c, d, this.snapPoint, b), !0 }, justOver: function(a, b) { return a = a || 0, b = b || 500, this._pointerData[a].isOver && this.overDuration(a) < b }, justOut: function(a, b) { return a = a || 0, b = b || 500, this._pointerData[a].isOut && this.game.time.time - this._pointerData[a].timeOut < b }, justPressed: function(a, b) { return a = a || 0, b = b || 500, this._pointerData[a].isDown && this.downDuration(a) < b }, justReleased: function(a, b) { return a = a || 0, b = b || 500, this._pointerData[a].isUp && this.game.time.time - this._pointerData[a].timeUp < b }, overDuration: function(a) { return a = a || 0, this._pointerData[a].isOver ? this.game.time.time - this._pointerData[a].timeOver : -1 }, downDuration: function(a) { return a = a || 0, this._pointerData[a].isDown ? this.game.time.time - this._pointerData[a].timeDown : -1 }, enableDrag: function(a, b, d, e, f, g) { void 0 === a && (a = !1), void 0 === b && (b = !1), void 0 === d && (d = !1), void 0 === e && (e = 255), void 0 === f && (f = null), void 0 === g && (g = null), this._dragPoint = new c.Point, this.draggable = !0, this.bringToTop = b, this.dragOffset = new c.Point, this.dragFromCenter = a, this.pixelPerfectClick = d, this.pixelPerfectAlpha = e, f && (this.boundsRect = f), g && (this.boundsSprite = g) }, disableDrag: function() { if (this._pointerData) for (var a = 0; a < 10; a++) this._pointerData[a].isDragged = !1; this.draggable = !1, this.isDragged = !1, this._draggedPointerID = -1, this._pendingDrag = !1 }, startDrag: function(a) { var b = this.sprite.x, c = this.sprite.y; if (this.isDragged = !0, this._draggedPointerID = a.id, this._pointerData[a.id].camX = this.game.camera.x, this._pointerData[a.id].camY = this.game.camera.y, this._pointerData[a.id].isDragged = !0, this.sprite.fixedToCamera) { if (this.dragFromCenter) { var d = this.sprite.getBounds(); this.sprite.cameraOffset.x = this.globalToLocalX(a.x) + (this.sprite.cameraOffset.x - d.centerX), this.sprite.cameraOffset.y = this.globalToLocalY(a.y) + (this.sprite.cameraOffset.y - d.centerY) } this._dragPoint.setTo(this.sprite.cameraOffset.x - a.x, this.sprite.cameraOffset.y - a.y) } else { if (this.dragFromCenter) { var d = this.sprite.getBounds(); this.sprite.x = this.globalToLocalX(a.x) + (this.sprite.x - d.centerX), this.sprite.y = this.globalToLocalY(a.y) + (this.sprite.y - d.centerY) } this._dragPoint.setTo(this.sprite.x - this.globalToLocalX(a.x), this.sprite.y - this.globalToLocalY(a.y)) } this.updateDrag(a, !0), this.bringToTop && (this._dragPhase = !0, this.sprite.bringToTop()), this.dragStartPoint.set(b, c), this.sprite.events.onDragStart$dispatch(this.sprite, a, b, c), this._pendingDrag = !1 }, globalToLocalX: function(a) { return this.scaleLayer && (a -= this.game.scale.grid.boundsFluid.x, a *= this.game.scale.grid.scaleFluidInversed.x), a }, globalToLocalY: function(a) { return this.scaleLayer && (a -= this.game.scale.grid.boundsFluid.y, a *= this.game.scale.grid.scaleFluidInversed.y), a }, stopDrag: function(a) { this.isDragged = !1, this._draggedPointerID = -1, this._pointerData[a.id].isDragged = !1, this._dragPhase = !1, this._pendingDrag = !1, this.snapOnRelease && (this.sprite.fixedToCamera ? (this.sprite.cameraOffset.x = Math.round((this.sprite.cameraOffset.x - this.snapOffsetX % this.snapX) / this.snapX) * this.snapX + this.snapOffsetX % this.snapX, this.sprite.cameraOffset.y = Math.round((this.sprite.cameraOffset.y - this.snapOffsetY % this.snapY) / this.snapY) * this.snapY + this.snapOffsetY % this.snapY) : (this.sprite.x = Math.round((this.sprite.x - this.snapOffsetX % this.snapX) / this.snapX) * this.snapX + this.snapOffsetX % this.snapX, this.sprite.y = Math.round((this.sprite.y - this.snapOffsetY % this.snapY) / this.snapY) * this.snapY + this.snapOffsetY % this.snapY)), this.sprite.events.onDragStop$dispatch(this.sprite, a), !1 === this.checkPointerOver(a) && this._pointerOutHandler(a) }, setDragLock: function(a, b) { void 0 === a && (a = !0), void 0 === b && (b = !0), this.allowHorizontalDrag = a, this.allowVerticalDrag = b }, enableSnap: function(a, b, c, d, e, f) { void 0 === c && (c = !0), void 0 === d && (d = !1), void 0 === e && (e = 0), void 0 === f && (f = 0), this.snapX = a, this.snapY = b, this.snapOffsetX = e, this.snapOffsetY = f, this.snapOnDrag = c, this.snapOnRelease = d }, disableSnap: function() { this.snapOnDrag = !1, this.snapOnRelease = !1 }, checkBoundsRect: function() { this.sprite.fixedToCamera ? (this.sprite.cameraOffset.x < this.boundsRect.left ? this.sprite.cameraOffset.x = this.boundsRect.left : this.sprite.cameraOffset.x + this.sprite.width > this.boundsRect.right && (this.sprite.cameraOffset.x = this.boundsRect.right - this.sprite.width), this.sprite.cameraOffset.y < this.boundsRect.top ? this.sprite.cameraOffset.y = this.boundsRect.top : this.sprite.cameraOffset.y + this.sprite.height > this.boundsRect.bottom && (this.sprite.cameraOffset.y = this.boundsRect.bottom - this.sprite.height)) : (this.sprite.left < this.boundsRect.left ? this.sprite.x = this.boundsRect.x + this.sprite.offsetX : this.sprite.right > this.boundsRect.right && (this.sprite.x = this.boundsRect.right - (this.sprite.width - this.sprite.offsetX)), this.sprite.top < this.boundsRect.top ? this.sprite.y = this.boundsRect.top + this.sprite.offsetY : this.sprite.bottom > this.boundsRect.bottom && (this.sprite.y = this.boundsRect.bottom - (this.sprite.height - this.sprite.offsetY))) }, checkBoundsSprite: function() { this.sprite.fixedToCamera && this.boundsSprite.fixedToCamera ? (this.sprite.cameraOffset.x < this.boundsSprite.cameraOffset.x ? this.sprite.cameraOffset.x = this.boundsSprite.cameraOffset.x : this.sprite.cameraOffset.x + this.sprite.width > this.boundsSprite.cameraOffset.x + this.boundsSprite.width && (this.sprite.cameraOffset.x = this.boundsSprite.cameraOffset.x + this.boundsSprite.width - this.sprite.width), this.sprite.cameraOffset.y < this.boundsSprite.cameraOffset.y ? this.sprite.cameraOffset.y = this.boundsSprite.cameraOffset.y : this.sprite.cameraOffset.y + this.sprite.height > this.boundsSprite.cameraOffset.y + this.boundsSprite.height && (this.sprite.cameraOffset.y = this.boundsSprite.cameraOffset.y + this.boundsSprite.height - this.sprite.height)) : (this.sprite.left < this.boundsSprite.left ? this.sprite.x = this.boundsSprite.left + this.sprite.offsetX : this.sprite.right > this.boundsSprite.right && (this.sprite.x = this.boundsSprite.right - (this.sprite.width - this.sprite.offsetX)), this.sprite.top < this.boundsSprite.top ? this.sprite.y = this.boundsSprite.top + this.sprite.offsetY : this.sprite.bottom > this.boundsSprite.bottom && (this.sprite.y = this.boundsSprite.bottom - (this.sprite.height - this.sprite.offsetY))) } }, c.InputHandler.prototype.constructor = c.InputHandler, c.Gamepad = function(a) { this.game = a, this._gamepadIndexMap = {}, this._rawPads = [], this._active = !1, this.enabled = !0, this._gamepadSupportAvailable = !!navigator.webkitGetGamepads || !!navigator.webkitGamepads || -1 !== navigator.userAgent.indexOf("Firefox/") || !!navigator.getGamepads, this._prevRawGamepadTypes = [], this._prevTimestamps = [], this.callbackContext = this, this.onConnectCallback = null, this.onDisconnectCallback = null, this.onDownCallback = null, this.onUpCallback = null, this.onAxisCallback = null, this.onFloatCallback = null, this._ongamepadconnected = null, this._gamepaddisconnected = null, this._gamepads = [new c.SinglePad(a, this), new c.SinglePad(a, this), new c.SinglePad(a, this), new c.SinglePad(a, this)] }, c.Gamepad.prototype = { addCallbacks: function(a, b) { void 0 !== b && (this.onConnectCallback = "function" == typeof b.onConnect ? b.onConnect : this.onConnectCallback, this.onDisconnectCallback = "function" == typeof b.onDisconnect ? b.onDisconnect : this.onDisconnectCallback, this.onDownCallback = "function" == typeof b.onDown ? b.onDown : this.onDownCallback, this.onUpCallback = "function" == typeof b.onUp ? b.onUp : this.onUpCallback, this.onAxisCallback = "function" == typeof b.onAxis ? b.onAxis : this.onAxisCallback, this.onFloatCallback = "function" == typeof b.onFloat ? b.onFloat : this.onFloatCallback, this.callbackContext = a) }, start: function() { if (!this._active) { this._active = !0; var a = this; this._onGamepadConnected = function(b) { return a.onGamepadConnected(b) }, this._onGamepadDisconnected = function(b) { return a.onGamepadDisconnected(b) }, window.addEventListener("gamepadconnected", this._onGamepadConnected, !1), window.addEventListener("gamepaddisconnected", this._onGamepadDisconnected, !1) } }, onGamepadConnected: function(a) { var b = a.gamepad; this._rawPads.push(b), this._gamepads[b.index].connect(b) }, onGamepadDisconnected: function(a) { var b = a.gamepad; for (var c in this._rawPads) this._rawPads[c].index === b.index && this._rawPads.splice(c, 1); this._gamepads[b.index].disconnect() }, update: function() { this._pollGamepads(), this.pad1.pollStatus(), this.pad2.pollStatus(), this.pad3.pollStatus(), this.pad4.pollStatus() }, _pollGamepads: function() { if (this._active) { if (navigator.getGamepads) var a = navigator.getGamepads(); else if (navigator.webkitGetGamepads) var a = navigator.webkitGetGamepads(); else if (navigator.webkitGamepads) var a = navigator.webkitGamepads(); if (a) { this._rawPads = []; for (var b = !1, c = 0; c < a.length && (typeof a[c] !== this._prevRawGamepadTypes[c] && (b = !0, this._prevRawGamepadTypes[c] = typeof a[c]), a[c] && this._rawPads.push(a[c]), 3 !== c); c++); for (var d = 0; d < this._gamepads.length; d++) this._gamepads[d]._rawPad = this._rawPads[d]; if (b) { for (var e, f = { rawIndices: {}, padIndices: {} }, g = 0; g < this._gamepads.length; g++) if (e = this._gamepads[g], e.connected) for (var h = 0; h < this._rawPads.length; h++) this._rawPads[h].index === e.index && (f.rawIndices[e.index] = !0, f.padIndices[g] = !0); for (var i = 0; i < this._gamepads.length; i++) if (e = this._gamepads[i], !f.padIndices[i]) { this._rawPads.length < 1 && e.disconnect(); for (var j = 0; j < this._rawPads.length && !f.padIndices[i]; j++) { var k = this._rawPads[j]; if (k) { if (f.rawIndices[k.index]) { e.disconnect(); continue } e.connect(k), f.rawIndices[k.index] = !0, f.padIndices[i] = !0 } else e.disconnect() } } } } } }, setDeadZones: function(a) { for (var b = 0; b < this._gamepads.length; b++) this._gamepads[b].deadZone = a }, stop: function() { this._active = !1, window.removeEventListener("gamepadconnected", this._onGamepadConnected), window.removeEventListener("gamepaddisconnected", this._onGamepadDisconnected) }, reset: function() { this.update(); for (var a = 0; a < this._gamepads.length; a++) this._gamepads[a].reset() }, justPressed: function(a, b) { for (var c = 0; c < this._gamepads.length; c++) if (!0 === this._gamepads[c].justPressed(a, b)) return !0; return !1 }, justReleased: function(a, b) { for (var c = 0; c < this._gamepads.length; c++) if (!0 === this._gamepads[c].justReleased(a, b)) return !0; return !1 }, isDown: function(a) { for (var b = 0; b < this._gamepads.length; b++) if (!0 === this._gamepads[b].isDown(a)) return !0; return !1 }, destroy: function() { this.stop(); for (var a = 0; a < this._gamepads.length; a++) this._gamepads[a].destroy() } }, c.Gamepad.prototype.constructor = c.Gamepad, Object.defineProperty(c.Gamepad.prototype, "active", { get: function() { return this._active } }), Object.defineProperty(c.Gamepad.prototype, "supported", { get: function() { return this._gamepadSupportAvailable } }), Object.defineProperty(c.Gamepad.prototype, "padsConnected", { get: function() { return this._rawPads.length } }), Object.defineProperty(c.Gamepad.prototype, "pad1", { get: function() { return this._gamepads[0] } }), Object.defineProperty(c.Gamepad.prototype, "pad2", { get: function() { return this._gamepads[1] } }), Object.defineProperty(c.Gamepad.prototype, "pad3", { get: function() { return this._gamepads[2] } }), Object.defineProperty(c.Gamepad.prototype, "pad4", { get: function() { return this._gamepads[3] } }), c.Gamepad.BUTTON_0 = 0, c.Gamepad.BUTTON_1 = 1, c.Gamepad.BUTTON_2 = 2, c.Gamepad.BUTTON_3 = 3, c.Gamepad.BUTTON_4 = 4, c.Gamepad.BUTTON_5 = 5, c.Gamepad.BUTTON_6 = 6, c.Gamepad.BUTTON_7 = 7, c.Gamepad.BUTTON_8 = 8, c.Gamepad.BUTTON_9 = 9, c.Gamepad.BUTTON_10 = 10, c.Gamepad.BUTTON_11 = 11, c.Gamepad.BUTTON_12 = 12, c.Gamepad.BUTTON_13 = 13, c.Gamepad.BUTTON_14 = 14, c.Gamepad.BUTTON_15 = 15, c.Gamepad.AXIS_0 = 0, c.Gamepad.AXIS_1 = 1, c.Gamepad.AXIS_2 = 2, c.Gamepad.AXIS_3 = 3, c.Gamepad.AXIS_4 = 4, c.Gamepad.AXIS_5 = 5, c.Gamepad.AXIS_6 = 6, c.Gamepad.AXIS_7 = 7, c.Gamepad.AXIS_8 = 8, c.Gamepad.AXIS_9 = 9, c.Gamepad.XBOX360_A = 0, c.Gamepad.XBOX360_B = 1, c.Gamepad.XBOX360_X = 2, c.Gamepad.XBOX360_Y = 3, c.Gamepad.XBOX360_LEFT_BUMPER = 4, c.Gamepad.XBOX360_RIGHT_BUMPER = 5, c.Gamepad.XBOX360_LEFT_TRIGGER = 6, c.Gamepad.XBOX360_RIGHT_TRIGGER = 7, c.Gamepad.XBOX360_BACK = 8, c.Gamepad.XBOX360_START = 9, c.Gamepad.XBOX360_STICK_LEFT_BUTTON = 10, c.Gamepad.XBOX360_STICK_RIGHT_BUTTON = 11, c.Gamepad.XBOX360_DPAD_LEFT = 14, c.Gamepad.XBOX360_DPAD_RIGHT = 15, c.Gamepad.XBOX360_DPAD_UP = 12, c.Gamepad.XBOX360_DPAD_DOWN = 13, c.Gamepad.XBOX360_STICK_LEFT_X = 0, c.Gamepad.XBOX360_STICK_LEFT_Y = 1, c.Gamepad.XBOX360_STICK_RIGHT_X = 2, c.Gamepad.XBOX360_STICK_RIGHT_Y = 3, c.Gamepad.PS3XC_X = 0; c.Gamepad.PS3XC_CIRCLE = 1, c.Gamepad.PS3XC_SQUARE = 2, c.Gamepad.PS3XC_TRIANGLE = 3, c.Gamepad.PS3XC_L1 = 4, c.Gamepad.PS3XC_R1 = 5, c.Gamepad.PS3XC_L2 = 6, c.Gamepad.PS3XC_R2 = 7, c.Gamepad.PS3XC_SELECT = 8, c.Gamepad.PS3XC_START = 9, c.Gamepad.PS3XC_STICK_LEFT_BUTTON = 10, c.Gamepad.PS3XC_STICK_RIGHT_BUTTON = 11, c.Gamepad.PS3XC_DPAD_UP = 12, c.Gamepad.PS3XC_DPAD_DOWN = 13, c.Gamepad.PS3XC_DPAD_LEFT = 14, c.Gamepad.PS3XC_DPAD_RIGHT = 15, c.Gamepad.PS3XC_STICK_LEFT_X = 0, c.Gamepad.PS3XC_STICK_LEFT_Y = 1, c.Gamepad.PS3XC_STICK_RIGHT_X = 2, c.Gamepad.PS3XC_STICK_RIGHT_Y = 3, c.SinglePad = function(a, b) { this.game = a, this.index = null, this.connected = !1, this.callbackContext = this, this.onConnectCallback = null, this.onDisconnectCallback = null, this.onDownCallback = null, this.onUpCallback = null, this.onAxisCallback = null, this.onFloatCallback = null, this.deadZone = .26, this._padParent = b, this._rawPad = null, this._prevTimestamp = null, this._buttons = [], this._buttonsLen = 0, this._axes = [], this._axesLen = 0 }, c.SinglePad.prototype = { addCallbacks: function(a, b) { void 0 !== b && (this.onConnectCallback = "function" == typeof b.onConnect ? b.onConnect : this.onConnectCallback, this.onDisconnectCallback = "function" == typeof b.onDisconnect ? b.onDisconnect : this.onDisconnectCallback, this.onDownCallback = "function" == typeof b.onDown ? b.onDown : this.onDownCallback, this.onUpCallback = "function" == typeof b.onUp ? b.onUp : this.onUpCallback, this.onAxisCallback = "function" == typeof b.onAxis ? b.onAxis : this.onAxisCallback, this.onFloatCallback = "function" == typeof b.onFloat ? b.onFloat : this.onFloatCallback, this.callbackContext = a) }, getButton: function(a) { return this._buttons[a] ? this._buttons[a] : null }, pollStatus: function() { if (this.connected && this.game.input.enabled && this.game.input.gamepad.enabled && (!this._rawPad.timestamp || this._rawPad.timestamp !== this._prevTimestamp)) { for (var a = 0; a < this._buttonsLen; a++) { var b = isNaN(this._rawPad.buttons[a]) ? this._rawPad.buttons[a].value : this._rawPad.buttons[a]; b !== this._buttons[a].value && (1 === b ? this.processButtonDown(a, b) : 0 === b ? this.processButtonUp(a, b) : this.processButtonFloat(a, b)) } for (var c = 0; c < this._axesLen; c++) { var d = this._rawPad.axes[c]; d > 0 && d > this.deadZone || d < 0 && d < -this.deadZone ? this.processAxisChange(c, d) : this.processAxisChange(c, 0) } this._prevTimestamp = this._rawPad.timestamp } }, connect: function(a) { var b = !this.connected; this.connected = !0, this.index = a.index, this._rawPad = a, this._buttons = [], this._buttonsLen = a.buttons.length, this._axes = [], this._axesLen = a.axes.length; for (var d = 0; d < this._axesLen; d++) this._axes[d] = a.axes[d]; for (var e in a.buttons) e = parseInt(e, 10), this._buttons[e] = new c.DeviceButton(this, e); b && this._padParent.onConnectCallback && this._padParent.onConnectCallback.call(this._padParent.callbackContext, this.index), b && this.onConnectCallback && this.onConnectCallback.call(this.callbackContext) }, disconnect: function() { var a = this.connected, b = this.index; this.connected = !1, this.index = null, this._rawPad = void 0; for (var c = 0; c < this._buttonsLen; c++) this._buttons[c].destroy(); this._buttons = [], this._buttonsLen = 0, this._axes = [], this._axesLen = 0, a && this._padParent.onDisconnectCallback && this._padParent.onDisconnectCallback.call(this._padParent.callbackContext, b), a && this.onDisconnectCallback && this.onDisconnectCallback.call(this.callbackContext) }, destroy: function() { this._rawPad = void 0; for (var a = 0; a < this._buttonsLen; a++) this._buttons[a].destroy(); this._buttons = [], this._buttonsLen = 0, this._axes = [], this._axesLen = 0, this.onConnectCallback = null, this.onDisconnectCallback = null, this.onDownCallback = null, this.onUpCallback = null, this.onAxisCallback = null, this.onFloatCallback = null }, processAxisChange: function(a, b) { this._axes[a] !== b && (this._axes[a] = b, this._padParent.onAxisCallback && this._padParent.onAxisCallback.call(this._padParent.callbackContext, this, a, b), this.onAxisCallback && this.onAxisCallback.call(this.callbackContext, this, a, b)) }, processButtonDown: function(a, b) { this._buttons[a] && this._buttons[a].start(null, b), this._padParent.onDownCallback && this._padParent.onDownCallback.call(this._padParent.callbackContext, a, b, this.index), this.onDownCallback && this.onDownCallback.call(this.callbackContext, a, b) }, processButtonUp: function(a, b) { this._padParent.onUpCallback && this._padParent.onUpCallback.call(this._padParent.callbackContext, a, b, this.index), this.onUpCallback && this.onUpCallback.call(this.callbackContext, a, b), this._buttons[a] && this._buttons[a].stop(null, b) }, processButtonFloat: function(a, b) { this._padParent.onFloatCallback && this._padParent.onFloatCallback.call(this._padParent.callbackContext, a, b, this.index), this.onFloatCallback && this.onFloatCallback.call(this.callbackContext, a, b), this._buttons[a] && this._buttons[a].padFloat(b) }, axis: function(a) { return !!this._axes[a] && this._axes[a] }, isDown: function(a) { return !!this._buttons[a] && this._buttons[a].isDown }, isUp: function(a) { return !!this._buttons[a] && this._buttons[a].isUp }, justReleased: function(a, b) { if (this._buttons[a]) return this._buttons[a].justReleased(b) }, justPressed: function(a, b) { if (this._buttons[a]) return this._buttons[a].justPressed(b) }, buttonValue: function(a) { return this._buttons[a] ? this._buttons[a].value : null }, reset: function() { for (var a = 0; a < this._axes.length; a++) this._axes[a] = 0 } }, c.SinglePad.prototype.constructor = c.SinglePad, c.Key = function(a, b) { this.game = a, this._enabled = !0, this.event = null, this.isDown = !1, this.isUp = !0, this.altKey = !1, this.ctrlKey = !1, this.shiftKey = !1, this.timeDown = 0, this.duration = 0, this.timeUp = -2500, this.repeats = 0, this.keyCode = b, this.onDown = new c.Signal, this.onHoldCallback = null, this.onHoldContext = null, this.onUp = new c.Signal, this._justDown = !1, this._justUp = !1 }, c.Key.prototype = { update: function() { this._enabled && this.isDown && (this.duration = this.game.time.time - this.timeDown, this.repeats++, this.onHoldCallback && this.onHoldCallback.call(this.onHoldContext, this)) }, processKeyDown: function(a) { this._enabled && (this.event = a, this.isDown || (this.altKey = a.altKey, this.ctrlKey = a.ctrlKey, this.shiftKey = a.shiftKey, this.isDown = !0, this.isUp = !1, this.timeDown = this.game.time.time, this.duration = 0, this.repeats = 0, this._justDown = !0, this.onDown.dispatch(this))) }, processKeyUp: function(a) { this._enabled && (this.event = a, this.isUp || (this.isDown = !1, this.isUp = !0, this.timeUp = this.game.time.time, this.duration = this.game.time.time - this.timeDown, this._justUp = !0, this.onUp.dispatch(this))) }, reset: function(a) { void 0 === a && (a = !0), this.isDown = !1, this.isUp = !0, this.timeUp = this.game.time.time, this.duration = 0, this._enabled = !0, this._justDown = !1, this._justUp = !1, a && (this.onDown.removeAll(), this.onUp.removeAll(), this.onHoldCallback = null, this.onHoldContext = null) }, downDuration: function(a) { return void 0 === a && (a = 50), this.isDown && this.duration < a }, upDuration: function(a) { return void 0 === a && (a = 50), !this.isDown && this.game.time.time - this.timeUp < a } }, Object.defineProperty(c.Key.prototype, "justDown", { get: function() { var a = this._justDown; return this._justDown = !1, a } }), Object.defineProperty(c.Key.prototype, "justUp", { get: function() { var a = this._justUp; return this._justUp = !1, a } }), Object.defineProperty(c.Key.prototype, "enabled", { get: function() { return this._enabled }, set: function(a) { (a = !!a) !== this._enabled && (a || this.reset(!1), this._enabled = a) } }), c.Key.prototype.constructor = c.Key, c.Keyboard = function(a) { this.game = a, this.enabled = !0, this.event = null, this.pressEvent = null, this.callbackContext = this, this.onDownCallback = null, this.onPressCallback = null, this.onUpCallback = null, this._keys = [], this._capture = [], this._onKeyDown = null, this._onKeyPress = null, this._onKeyUp = null, this._i = 0, this._k = 0 }, c.Keyboard.prototype = { addCallbacks: function(a, b, c, d) { this.callbackContext = a, void 0 !== b && null !== b && (this.onDownCallback = b), void 0 !== c && null !== c && (this.onUpCallback = c), void 0 !== d && null !== d && (this.onPressCallback = d) }, addKey: function(a) { return this._keys[a] || (this._keys[a] = new c.Key(this.game, a), this.addKeyCapture(a)), this._keys[a] }, addKeys: function(a) { var b = {}; for (var c in a) b[c] = this.addKey(a[c]); return b }, removeKey: function(a) { this._keys[a] && (this._keys[a] = null, this.removeKeyCapture(a)) }, createCursorKeys: function() { return this.addKeys({ up: c.KeyCode.UP, down: c.KeyCode.DOWN, left: c.KeyCode.LEFT, right: c.KeyCode.RIGHT }) }, start: function() { if (!this.game.device.cocoonJS && null === this._onKeyDown) { var a = this; this._onKeyDown = function(b) { return a.processKeyDown(b) }, this._onKeyUp = function(b) { return a.processKeyUp(b) }, this._onKeyPress = function(b) { return a.processKeyPress(b) }, window.addEventListener("keydown", this._onKeyDown, !1), window.addEventListener("keyup", this._onKeyUp, !1), window.addEventListener("keypress", this._onKeyPress, !1) } }, stop: function() { window.removeEventListener("keydown", this._onKeyDown), window.removeEventListener("keyup", this._onKeyUp), window.removeEventListener("keypress", this._onKeyPress), this._onKeyDown = null, this._onKeyUp = null, this._onKeyPress = null }, destroy: function() { this.stop(), this.clearCaptures(), this._keys.length = 0, this._i = 0 }, addKeyCapture: function(a) { if ("object" == typeof a) for (var b in a) this._capture[a[b]] = !0; else this._capture[a] = !0 }, removeKeyCapture: function(a) { delete this._capture[a] }, clearCaptures: function() { this._capture = {} }, update: function() { for (this._i = this._keys.length; this._i--;) this._keys[this._i] && this._keys[this._i].update() }, processKeyDown: function(a) { if (this.event = a, this.game.input.enabled && this.enabled) { var b = a.keyCode; this._capture[b] && a.preventDefault(), this._keys[b] || (this._keys[b] = new c.Key(this.game, b)), this._keys[b].processKeyDown(a), this._k = b, this.onDownCallback && this.onDownCallback.call(this.callbackContext, a) } }, processKeyPress: function(a) { this.pressEvent = a, this.game.input.enabled && this.enabled && this.onPressCallback && this.onPressCallback.call(this.callbackContext, String.fromCharCode(a.charCode), a) }, processKeyUp: function(a) { if (this.event = a, this.game.input.enabled && this.enabled) { var b = a.keyCode; this._capture[b] && a.preventDefault(), this._keys[b] || (this._keys[b] = new c.Key(this.game, b)), this._keys[b].processKeyUp(a), this.onUpCallback && this.onUpCallback.call(this.callbackContext, a) } }, reset: function(a) { void 0 === a && (a = !0), this.event = null; for (var b = this._keys.length; b--;) this._keys[b] && this._keys[b].reset(a) }, downDuration: function(a, b) { return this._keys[a] ? this._keys[a].downDuration(b) : null }, upDuration: function(a, b) { return this._keys[a] ? this._keys[a].upDuration(b) : null }, isDown: function(a) { return this._keys[a] ? this._keys[a].isDown : null } }, Object.defineProperty(c.Keyboard.prototype, "lastChar", { get: function() { return 32 === this.event.charCode ? "" : String.fromCharCode(this.pressEvent.charCode) } }), Object.defineProperty(c.Keyboard.prototype, "lastKey", { get: function() { return this._keys[this._k] } }), c.Keyboard.prototype.constructor = c.Keyboard, c.KeyCode = { A: "A".charCodeAt(0), B: "B".charCodeAt(0), C: "C".charCodeAt(0), D: "D".charCodeAt(0), E: "E".charCodeAt(0), F: "F".charCodeAt(0), G: "G".charCodeAt(0), H: "H".charCodeAt(0), I: "I".charCodeAt(0), J: "J".charCodeAt(0), K: "K".charCodeAt(0), L: "L".charCodeAt(0), M: "M".charCodeAt(0), N: "N".charCodeAt(0), O: "O".charCodeAt(0), P: "P".charCodeAt(0), Q: "Q".charCodeAt(0), R: "R".charCodeAt(0), S: "S".charCodeAt(0), T: "T".charCodeAt(0), U: "U".charCodeAt(0), V: "V".charCodeAt(0), W: "W".charCodeAt(0), X: "X".charCodeAt(0), Y: "Y".charCodeAt(0), Z: "Z".charCodeAt(0), ZERO: "0".charCodeAt(0), ONE: "1".charCodeAt(0), TWO: "2".charCodeAt(0), THREE: "3".charCodeAt(0), FOUR: "4".charCodeAt(0), FIVE: "5".charCodeAt(0), SIX: "6".charCodeAt(0), SEVEN: "7".charCodeAt(0), EIGHT: "8".charCodeAt(0), NINE: "9".charCodeAt(0), NUMPAD_0: 96, NUMPAD_1: 97, NUMPAD_2: 98, NUMPAD_3: 99, NUMPAD_4: 100, NUMPAD_5: 101, NUMPAD_6: 102, NUMPAD_7: 103, NUMPAD_8: 104, NUMPAD_9: 105, NUMPAD_MULTIPLY: 106, NUMPAD_ADD: 107, NUMPAD_ENTER: 108, NUMPAD_SUBTRACT: 109, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, F1: 112, F2: 113, F3: 114, F4: 115, F5: 116, F6: 117, F7: 118, F8: 119, F9: 120, F10: 121, F11: 122, F12: 123, F13: 124, F14: 125, F15: 126, COLON: 186, EQUALS: 187, COMMA: 188, UNDERSCORE: 189, PERIOD: 190, QUESTION_MARK: 191, TILDE: 192, OPEN_BRACKET: 219, BACKWARD_SLASH: 220, CLOSED_BRACKET: 221, QUOTES: 222, BACKSPACE: 8, TAB: 9, CLEAR: 12, ENTER: 13, SHIFT: 16, CONTROL: 17, ALT: 18, CAPS_LOCK: 20, ESC: 27, SPACEBAR: 32, PAGE_UP: 33, PAGE_DOWN: 34, END: 35, HOME: 36, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, PLUS: 43, MINUS: 44, INSERT: 45, DELETE: 46, HELP: 47, NUM_LOCK: 144 }; for (var e in c.KeyCode) c.KeyCode.hasOwnProperty(e) && !e.match(/[a-z]/) && (c.Keyboard[e] = c.KeyCode[e]); c.Component = function() {}, c.Component.Angle = function() {}, c.Component.Angle.prototype = { angle: { get: function() { return c.Math.wrapAngle(c.Math.radToDeg(this.rotation)) }, set: function(a) { this.rotation = c.Math.degToRad(c.Math.wrapAngle(a)) } } }, c.Component.Animation = function() {}, c.Component.Animation.prototype = { play: function(a, b, c, d) { if (this.animations) return this.animations.play(a, b, c, d) } }, c.Component.AutoCull = function() {}, c.Component.AutoCull.prototype = { autoCull: !1, inCamera: { get: function() { return this.autoCull || this.checkWorldBounds || (this._bounds.copyFrom(this.getBounds()), this._bounds.x += this.game.camera.view.x, this._bounds.y += this.game.camera.view.y), this.game.world.camera.view.intersects(this._bounds) } } }, c.Component.Bounds = function() {}, c.Component.Bounds.prototype = { offsetX: { get: function() { return this.anchor.x * this.width } }, offsetY: { get: function() { return this.anchor.y * this.height } }, centerX: { get: function() { return this.x - this.offsetX + .5 * this.width }, set: function(a) { this.x = a + this.offsetX - .5 * this.width } }, centerY: { get: function() { return this.y - this.offsetY + .5 * this.height }, set: function(a) { this.y = a + this.offsetY - .5 * this.height } }, left: { get: function() { return this.x - this.offsetX }, set: function(a) { this.x = a + this.offsetX } }, right: { get: function() { return this.x + this.width - this.offsetX }, set: function(a) { this.x = a - this.width + this.offsetX } }, top: { get: function() { return this.y - this.offsetY }, set: function(a) { this.y = a + this.offsetY } }, bottom: { get: function() { return this.y + this.height - this.offsetY }, set: function(a) { this.y = a - this.height + this.offsetY } }, alignIn: function(a, b, d, e) { switch (void 0 === d && (d = 0), void 0 === e && (e = 0), b) { default: case c.TOP_LEFT: this.left = a.left - d, this.top = a.top - e; break; case c.TOP_CENTER: this.centerX = a.centerX + d, this.top = a.top - e; break; case c.TOP_RIGHT: this.right = a.right + d, this.top = a.top - e; break; case c.LEFT_CENTER: this.left = a.left - d, this.centerY = a.centerY + e; break; case c.CENTER: this.centerX = a.centerX + d, this.centerY = a.centerY + e; break; case c.RIGHT_CENTER: this.right = a.right + d, this.centerY = a.centerY + e; break; case c.BOTTOM_LEFT: this.left = a.left - d, this.bottom = a.bottom + e; break; case c.BOTTOM_CENTER: this.centerX = a.centerX + d, this.bottom = a.bottom + e; break; case c.BOTTOM_RIGHT: this.right = a.right + d, this.bottom = a.bottom + e } return this }, alignTo: function(a, b, d, e) { switch (void 0 === d && (d = 0), void 0 === e && (e = 0), b) { default: case c.TOP_LEFT: this.left = a.left - d, this.bottom = a.top - e; break; case c.TOP_CENTER: this.centerX = a.centerX + d, this.bottom = a.top - e; break; case c.TOP_RIGHT: this.right = a.right + d, this.bottom = a.top - e; break; case c.LEFT_TOP: this.right = a.left - d, this.top = a.top - e; break; case c.LEFT_CENTER: this.right = a.left - d, this.centerY = a.centerY + e; break; case c.LEFT_BOTTOM: this.right = a.left - d, this.bottom = a.bottom + e; break; case c.RIGHT_TOP: this.left = a.right + d, this.top = a.top - e; break; case c.RIGHT_CENTER: this.left = a.right + d, this.centerY = a.centerY + e; break; case c.RIGHT_BOTTOM: this.left = a.right + d, this.bottom = a.bottom + e; break; case c.BOTTOM_LEFT: this.left = a.left - d, this.top = a.bottom + e; break; case c.BOTTOM_CENTER: this.centerX = a.centerX + d, this.top = a.bottom + e; break; case c.BOTTOM_RIGHT: this.right = a.right + d, this.top = a.bottom + e } return this } }, c.Group.prototype.alignIn = c.Component.Bounds.prototype.alignIn, c.Group.prototype.alignTo = c.Component.Bounds.prototype.alignTo, c.Component.BringToTop = function() {}, c.Component.BringToTop.prototype.bringToTop = function() { return this.parent && this.parent.bringToTop(this), this }, c.Component.BringToTop.prototype.sendToBack = function() { return this.parent && this.parent.sendToBack(this), this }, c.Component.BringToTop.prototype.moveUp = function() { return this.parent && this.parent.moveUp(this), this }, c.Component.BringToTop.prototype.moveDown = function() { return this.parent && this.parent.moveDown(this), this }, c.Component.Core = function() {}, c.Component.Core.install = function(a) { c.Utils.mixinPrototype(this, c.Component.Core.prototype), this.components = {}; for (var b = 0; b < a.length; b++) { var d = a[b], e = !1; "Destroy" === d && (e = !0), c.Utils.mixinPrototype(this, c.Component[d].prototype, e), this.components[d] = !0 } }, c.Component.Core.init = function(a, b, d, e, f) { this.game = a, this.key = e, this.data = {}, this.position.set(b, d), this.world = new c.Point(b, d), this.previousPosition = new c.Point(b, d), this.events = new c.Events(this), this._bounds = new c.Rectangle, this.components.PhysicsBody && (this.body = this.body), this.components.Animation && (this.animations = new c.AnimationManager(this)), this.components.LoadTexture && null !== e && this.loadTexture(e, f), this.components.FixedToCamera && (this.cameraOffset = new c.Point(b, d)) }, c.Component.Core.preUpdate = function() { if (this.pendingDestroy) return void this.destroy(); if (this.previousPosition.set(this.world.x, this.world.y), this.previousRotation = this.rotation, !this.exists || !this.parent.exists) return this.renderOrderID = -1, !1; this.world.setTo(this.game.camera.x + this.worldTransform.tx, this.game.camera.y + this.worldTransform.ty), this.visible && (this.renderOrderID = this.game.stage.currentRenderOrderID++), this.animations && this.animations.update(), this.body && this.body.preUpdate(); for (var a = 0; a < this.children.length; a++) this.children[a].preUpdate(); return !0 }, c.Component.Core.prototype = { game: null, name: "", data: {}, components: {}, z: 0, events: void 0, animations: void 0, key: "", world: null, debug: !1, previousPosition: null, previousRotation: 0, renderOrderID: 0, fresh: !0, pendingDestroy: !1, _bounds: null, _exists: !0, exists: { get: function() { return this._exists }, set: function(a) { a ? (this._exists = !0, this.body && this.body.type === c.Physics.P2JS && this.body.addToWorld(), this.visible = !0) : (this._exists = !1, this.body && this.body.type === c.Physics.P2JS && this.body.removeFromWorld(), this.visible = !1) } }, update: function() {}, postUpdate: function() { this.customRender && this.key.render(), this.components.PhysicsBody && c.Component.PhysicsBody.postUpdate.call(this), this.components.FixedToCamera && c.Component.FixedToCamera.postUpdate.call(this); for (var a = 0; a < this.children.length; a++) this.children[a].postUpdate() } }, c.Component.Crop = function() {}, c.Component.Crop.prototype = { cropRect: null, _crop: null, crop: function(a, b) { void 0 === b && (b = !1), a ? (b && null !== this.cropRect ? this.cropRect.setTo(a.x, a.y, a.width, a.height) : b && null === this.cropRect ? this.cropRect = new c.Rectangle(a.x, a.y, a.width, a.height) : this.cropRect = a, this.updateCrop()) : (this._crop = null, this.cropRect = null, this.resetFrame()) }, updateCrop: function() { if (this.cropRect) { var a = this.texture.crop.x, b = this.texture.crop.y, d = this.texture.crop.width, e = this.texture.crop.height; this._crop = c.Rectangle.clone(this.cropRect, this._crop), this._crop.x += this._frame.x, this._crop.y += this._frame.y; var f = Math.max(this._frame.x, this._crop.x), g = Math.max(this._frame.y, this._crop.y), h = Math.min(this._frame.right, this._crop.right) - f, i = Math.min(this._frame.bottom, this._crop.bottom) - g; this.texture.crop.x = f, this.texture.crop.y = g, this.texture.crop.width = h, this.texture.crop.height = i, this.texture.frame.width = Math.min(h, this.cropRect.width), this.texture.frame.height = Math.min(i, this.cropRect.height), this.texture.width = this.texture.frame.width, this.texture.height = this.texture.frame.height, this.texture._updateUvs(), 16777215 === this.tint || a === f && b === g && d === h && e === i || (this.texture.requiresReTint = !0) } } }, c.Component.Delta = function() {}, c.Component.Delta.prototype = { deltaX: { get: function() { return this.world.x - this.previousPosition.x } }, deltaY: { get: function() { return this.world.y - this.previousPosition.y } }, deltaZ: { get: function() { return this.rotation - this.previousRotation } } }, c.Component.Destroy = function() {}, c.Component.Destroy.prototype = { destroyPhase: !1, destroy: function(a, b) { if (null !== this.game && !this.destroyPhase) { void 0 === a && (a = !0), void 0 === b && (b = !1), this.destroyPhase = !0, this.events && this.events.onDestroy$dispatch(this), this.parent && (this.parent instanceof c.Group ? this.parent.remove(this) : this.parent.removeChild(this)), this.input && this.input.destroy(), this.animations && this.animations.destroy(), this.body && this.body.destroy(), this.events && this.events.destroy(), this.game.tweens.removeFrom(this); var d = this.children.length; if (a) for (; d--;) this.children[d].destroy(a); else for (; d--;) this.removeChild(this.children[d]); this._crop && (this._crop = null, this.cropRect = null), this._frame && (this._frame = null), c.Video && this.key instanceof c.Video && this.key.onChangeSource.remove(this.resizeFrame, this), c.BitmapText && this._glyphs && (this._glyphs = []), this.alive = !1, this.exists = !1, this.visible = !1, this.filters = null, this.mask = null, this.game = null, this.data = {}, this.renderable = !1, this.transformCallback && (this.transformCallback = null, this.transformCallbackContext = null), this.hitArea = null, this.parent = null, this.stage = null, this.worldTransform = null, this.filterArea = null, this._bounds = null, this._currentBounds = null, this._mask = null, this._destroyCachedSprite(), b && this.texture.destroy(!0), this.destroyPhase = !1, this.pendingDestroy = !1 } } }, c.Events = function(a) { this.parent = a }, c.Events.prototype = { destroy: function() { this._parent = null, this._onDestroy && this._onDestroy.dispose(), this._onAddedToGroup && this._onAddedToGroup.dispose(), this._onRemovedFromGroup && this._onRemovedFromGroup.dispose(), this._onRemovedFromWorld && this._onRemovedFromWorld.dispose(), this._onKilled && this._onKilled.dispose(), this._onRevived && this._onRevived.dispose(), this._onEnterBounds && this._onEnterBounds.dispose(), this._onOutOfBounds && this._onOutOfBounds.dispose(), this._onInputOver && this._onInputOver.dispose(), this._onInputOut && this._onInputOut.dispose(), this._onInputDown && this._onInputDown.dispose(), this._onInputUp && this._onInputUp.dispose(), this._onDragStart && this._onDragStart.dispose(), this._onDragUpdate && this._onDragUpdate.dispose(), this._onDragStop && this._onDragStop.dispose(), this._onAnimationStart && this._onAnimationStart.dispose(), this._onAnimationComplete && this._onAnimationComplete.dispose(), this._onAnimationLoop && this._onAnimationLoop.dispose() }, onAddedToGroup: null, onRemovedFromGroup: null, onRemovedFromWorld: null, onDestroy: null, onKilled: null, onRevived: null, onOutOfBounds: null, onEnterBounds: null, onInputOver: null, onInputOut: null, onInputDown: null, onInputUp: null, onDragStart: null, onDragUpdate: null, onDragStop: null, onAnimationStart: null, onAnimationComplete: null, onAnimationLoop: null }, c.Events.prototype.constructor = c.Events; for (var f in c.Events.prototype) c.Events.prototype.hasOwnProperty(f) && 0 === f.indexOf("on") && null === c.Events.prototype[f] && function(a, b) { "use strict"; Object.defineProperty(c.Events.prototype, a, { get: function() { return this[b] || (this[b] = new c.Signal) } }), c.Events.prototype[a + "$dispatch"] = function() { return this[b] ? this[b].dispatch.apply(this[b], arguments) : null } }(f, "_" + f); c.Component.FixedToCamera = function() {}, c.Component.FixedToCamera.postUpdate = function() { this.fixedToCamera && (this.position.x = (this.game.camera.view.x + this.cameraOffset.x) / this.game.camera.scale.x, this.position.y = (this.game.camera.view.y + this.cameraOffset.y) / this.game.camera.scale.y) }, c.Component.FixedToCamera.prototype = { _fixedToCamera: !1, fixedToCamera: { get: function() { return this._fixedToCamera }, set: function(a) { a ? (this._fixedToCamera = !0, this.cameraOffset.set(this.x, this.y)) : this._fixedToCamera = !1 } }, cameraOffset: new c.Point }, c.Component.Health = function() {}, c.Component.Health.prototype = { health: 1, maxHealth: 100, damage: function(a) { return this.alive && (this.health -= a, this.health <= 0 && this.kill()), this }, setHealth: function(a) { return this.health = a, this.health > this.maxHealth && (this.health = this.maxHealth), this }, heal: function(a) { return this.alive && (this.health += a, this.health > this.maxHealth && (this.health = this.maxHealth)), this } }, c.Component.InCamera = function() {}, c.Component.InCamera.prototype = { inCamera: { get: function() { return this.game.world.camera.view.intersects(this._bounds) } } }, c.Component.InputEnabled = function() {}, c.Component.InputEnabled.prototype = { input: null, inputEnabled: { get: function() { return this.input && this.input.enabled }, set: function(a) { a ? null === this.input ? (this.input = new c.InputHandler(this), this.input.start()) : this.input && !this.input.enabled && this.input.start() : this.input && this.input.enabled && this.input.stop() } } }, c.Component.InWorld = function() {}, c.Component.InWorld.preUpdate = function() { if (this.autoCull || this.checkWorldBounds) { if (this._bounds.copyFrom(this.getBounds()), this._bounds.x += this.game.camera.view.x, this._bounds.y += this.game.camera.view.y, this.autoCull) if (this.game.world.camera.view.intersects(this._bounds)) this.renderable = !0, this.game.world.camera.totalInView++; else if (this.renderable = !1, this.outOfCameraBoundsKill) return this.kill(), !1; if (this.checkWorldBounds) if (this._outOfBoundsFired && this.game.world.bounds.intersects(this._bounds)) this._outOfBoundsFired = !1, this.events.onEnterBounds$dispatch(this); else if (!this._outOfBoundsFired && !this.game.world.bounds.intersects(this._bounds) && (this._outOfBoundsFired = !0, this.events.onOutOfBounds$dispatch(this), this.outOfBoundsKill)) return this.kill(), !1 } return !0 }, c.Component.InWorld.prototype = { checkWorldBounds: !1, outOfBoundsKill: !1, outOfCameraBoundsKill: !1, _outOfBoundsFired: !1, inWorld: { get: function() { return this.game.world.bounds.intersects(this.getBounds()) } } }, c.Component.LifeSpan = function() {}, c.Component.LifeSpan.preUpdate = function() { return !(this.lifespan > 0 && (this.lifespan -= this.game.time.physicsElapsedMS, this.lifespan <= 0)) || (this.kill(), !1) }, c.Component.LifeSpan.prototype = { alive: !0, lifespan: 0, revive: function(a) { return void 0 === a && (a = 100), this.alive = !0, this.exists = !0, this.visible = !0, "function" == typeof this.setHealth && this.setHealth(a), this.events && this.events.onRevived$dispatch(this), this }, kill: function() { return this.alive = !1, this.exists = !1, this.visible = !1, this.events && this.events.onKilled$dispatch(this), this } }, c.Component.LoadTexture = function() {}, c.Component.LoadTexture.prototype = { customRender: !1, _frame: null, loadTexture: function(a, b, d) { a === c.PENDING_ATLAS ? (a = b, b = 0) : b = b || 0, (d || void 0 === d) && this.animations && this.animations.stop(), this.key = a, this.customRender = !1; var e = this.game.cache, f = !0, g = !this.texture.baseTexture.scaleMode; if (c.RenderTexture && a instanceof c.RenderTexture) this.key = a.key, this.setTexture(a); else if (c.BitmapData && a instanceof c.BitmapData) this.customRender = !0, this.setTexture(a.texture), f = e.hasFrameData(a.key, c.Cache.BITMAPDATA) ? !this.animations.loadFrameData(e.getFrameData(a.key, c.Cache.BITMAPDATA), b) : !this.animations.loadFrameData(a.frameData, 0); else if (c.Video && a instanceof c.Video) { this.customRender = !0; var h = a.texture.valid; this.setTexture(a.texture), this.setFrame(a.texture.frame.clone()), a.onChangeSource.add(this.resizeFrame, this), this.texture.valid = h } else if (c.Tilemap && a instanceof c.TilemapLayer) this.setTexture(PIXI.Texture.fromCanvas(a.canvas)); else if (a instanceof PIXI.Texture) this.setTexture(a); else { var i = e.getImage(a, !0); this.key = i.key, this.setTexture(new PIXI.Texture(i.base)), this.texture.baseTexture.skipRender = "__default" === a, f = !this.animations.loadFrameData(i.frameData, b) } f && (this._frame = c.Rectangle.clone(this.texture.frame)), g || (this.texture.baseTexture.scaleMode = 1) }, setFrame: function(a) { this._frame = a, this.texture.frame.x = a.x, this.texture.frame.y = a.y, this.texture.frame.width = a.width, this.texture.frame.height = a.height, this.texture.crop.x = a.x, this.texture.crop.y = a.y, this.texture.crop.width = a.width, this.texture.crop.height = a.height, a.trimmed ? (this.texture.trim ? (this.texture.trim.x = a.spriteSourceSizeX, this.texture.trim.y = a.spriteSourceSizeY, this.texture.trim.width = a.sourceSizeW, this.texture.trim.height = a.sourceSizeH) : this.texture.trim = { x: a.spriteSourceSizeX, y: a.spriteSourceSizeY, width: a.sourceSizeW, height: a.sourceSizeH }, this.texture.width = a.sourceSizeW, this.texture.height = a.sourceSizeH, this.texture.frame.width = a.sourceSizeW, this.texture.frame.height = a.sourceSizeH) : !a.trimmed && this.texture.trim && (this.texture.trim = null), this.cropRect && this.updateCrop(), this.texture.requiresReTint = !0, this.texture._updateUvs(), this.tilingTexture && (this.refreshTexture = !0) }, resizeFrame: function(a, b, c) { this.texture.frame.resize(b, c), this.texture.setFrame(this.texture.frame) }, resetFrame: function() { this._frame && this.setFrame(this._frame) }, frame: { get: function() { return this.animations.frame }, set: function(a) { this.animations.frame = a } }, frameName: { get: function() { return this.animations.frameName }, set: function(a) { this.animations.frameName = a } } }, c.Component.Overlap = function() {}, c.Component.Overlap.prototype = { overlap: function(a) { return c.Rectangle.intersects(this.getBounds(), a.getBounds()) } }, c.Component.PhysicsBody = function() {}, c.Component.PhysicsBody.preUpdate = function() { return this.fresh && this.exists ? (this.world.setTo(this.parent.position.x + this.position.x, this.parent.position.y + this.position.y), this.worldTransform.tx = this.world.x, this.worldTransform.ty = this.world.y, this.previousPosition.set(this.world.x, this.world.y), this.previousRotation = this.rotation, this.body && this.body.preUpdate(), this.fresh = !1, !1) : (this.previousPosition.set(this.world.x, this.world.y), this.previousRotation = this.rotation, !(!this._exists || !this.parent.exists) || (this.renderOrderID = -1, !1)) }, c.Component.PhysicsBody.postUpdate = function() { this.exists && this.body && this.body.postUpdate() }, c.Component.PhysicsBody.prototype = { body: null, x: { get: function() { return this.position.x }, set: function(a) { this.position.x = a, this.body && !this.body.dirty && (this.body._reset = !0) } }, y: { get: function() { return this.position.y }, set: function(a) { this.position.y = a, this.body && !this.body.dirty && (this.body._reset = !0) } } }, c.Component.Reset = function() {}, c.Component.Reset.prototype.reset = function(a, b, c) { return void 0 === c && (c = 1), this.world.set(a, b), this.position.set(a, b), this.fresh = !0, this.exists = !0, this.visible = !0, this.renderable = !0, this.components.InWorld && (this._outOfBoundsFired = !1), this.components.LifeSpan && (this.alive = !0, this.health = c), this.components.PhysicsBody && this.body && this.body.reset(a, b, !1, !1), this }, c.Component.ScaleMinMax = function() {}, c.Component.ScaleMinMax.prototype = { transformCallback: null, transformCallbackContext: this, scaleMin: null, scaleMax: null, checkTransform: function(a) { this.scaleMin && (a.a < this.scaleMin.x && (a.a = this.scaleMin.x), a.d < this.scaleMin.y && (a.d = this.scaleMin.y)), this.scaleMax && (a.a > this.scaleMax.x && (a.a = this.scaleMax.x), a.d > this.scaleMax.y && (a.d = this.scaleMax.y)) }, setScaleMinMax: function(a, b, d, e) { void 0 === b ? b = d = e = a : void 0 === d && (d = e = b, b = a), null === a ? this.scaleMin = null : this.scaleMin ? this.scaleMin.set(a, b) : this.scaleMin = new c.Point(a, b), null === d ? this.scaleMax = null : this.scaleMax ? this.scaleMax.set(d, e) : this.scaleMax = new c.Point(d, e), null === this.scaleMin ? this.transformCallback = null : (this.transformCallback = this.checkTransform, this.transformCallbackContext = this) } }, c.Component.Smoothed = function() {}, c.Component.Smoothed.prototype = { smoothed: { get: function() { return !this.texture.baseTexture.scaleMode }, set: function(a) { a ? this.texture && (this.texture.baseTexture.scaleMode = 0) : this.texture && (this.texture.baseTexture.scaleMode = 1) } } }, c.GameObjectFactory = function(a) { this.game = a, this.world = this.game.world }, c.GameObjectFactory.prototype = { existing: function(a) { return this.world.add(a) }, weapon: function(a, b, d, e) { var f = this.game.plugins.add(c.Weapon); return f.createBullets(a, b, d, e), f }, image: function(a, b, d, e, f) { return void 0 === f && (f = this.world), f.add(new c.Image(this.game, a, b, d, e)) }, sprite: function(a, b, c, d, e) { return void 0 === e && (e = this.world), e.create(a, b, c, d) }, creature: function(a, b, d, e, f) { void 0 === f && (f = this.world); var g = new c.Creature(this.game, a, b, d, e); return f.add(g), g }, tween: function(a) { return this.game.tweens.create(a) }, group: function(a, b, d, e, f) { return new c.Group(this.game, a, b, d, e, f) }, physicsGroup: function(a, b, d, e) { return new c.Group(this.game, b, d, e, !0, a) }, spriteBatch: function(a, b, d) { return void 0 === a && (a = null), void 0 === b && (b = "group"), void 0 === d && (d = !1), new c.SpriteBatch(this.game, a, b, d) }, audio: function(a, b, c, d) { return this.game.sound.add(a, b, c, d) }, sound: function(a, b, c, d) { return this.game.sound.add(a, b, c, d) }, audioSprite: function(a) { return this.game.sound.addSprite(a) }, tileSprite: function(a, b, d, e, f, g, h) { return void 0 === h && (h = this.world), h.add(new c.TileSprite(this.game, a, b, d, e, f, g)) }, rope: function(a, b, d, e, f, g) { return void 0 === g && (g = this.world), g.add(new c.Rope(this.game, a, b, d, e, f)) }, text: function(a, b, d, e, f) { return void 0 === f && (f = this.world), f.add(new c.Text(this.game, a, b, d, e)) }, button: function(a, b, d, e, f, g, h, i, j, k) { return void 0 === k && (k = this.world), k.add(new c.Button(this.game, a, b, d, e, f, g, h, i, j)) }, graphics: function(a, b, d) { return void 0 === d && (d = this.world), d.add(new c.Graphics(this.game, a, b)) }, emitter: function(a, b, d) { return this.game.particles.add(new c.Particles.Arcade.Emitter(this.game, a, b, d)) }, retroFont: function(a, b, d, e, f, g, h, i, j) { return new c.RetroFont(this.game, a, b, d, e, f, g, h, i, j) }, bitmapText: function(a, b, d, e, f, g) { return void 0 === g && (g = this.world), g.add(new c.BitmapText(this.game, a, b, d, e, f)) }, tilemap: function(a, b, d, e, f) { return new c.Tilemap(this.game, a, b, d, e, f) }, renderTexture: function(a, b, d, e) { void 0 !== d && "" !== d || (d = this.game.rnd.uuid()), void 0 === e && (e = !1); var f = new c.RenderTexture(this.game, a, b, d); return e && this.game.cache.addRenderTexture(d, f), f }, video: function(a, b) { return new c.Video(this.game, a, b) }, bitmapData: function(a, b, d, e) { void 0 === e && (e = !1), void 0 !== d && "" !== d || (d = this.game.rnd.uuid()); var f = new c.BitmapData(this.game, d, a, b); return e && this.game.cache.addBitmapData(d, f), f }, filter: function(a) { var b = Array.prototype.slice.call(arguments, 1), a = new c.Filter[a](this.game); return a.init.apply(a, b), a }, plugin: function(a) { return this.game.plugins.add(a) } }, c.GameObjectFactory.prototype.constructor = c.GameObjectFactory, c.GameObjectCreator = function(a) { this.game = a, this.world = this.game.world }, c.GameObjectCreator.prototype = { image: function(a, b, d, e) { return new c.Image(this.game, a, b, d, e) }, sprite: function(a, b, d, e) { return new c.Sprite(this.game, a, b, d, e) }, tween: function(a) { return new c.Tween(a, this.game, this.game.tweens) }, group: function(a, b, d, e, f) { return new c.Group(this.game, a, b, d, e, f) }, spriteBatch: function(a, b, d) { return void 0 === b && (b = "group"), void 0 === d && (d = !1), new c.SpriteBatch(this.game, a, b, d) }, audio: function(a, b, c, d) { return this.game.sound.add(a, b, c, d) }, audioSprite: function(a) { return this.game.sound.addSprite(a) }, sound: function(a, b, c, d) { return this.game.sound.add(a, b, c, d) }, tileSprite: function(a, b, d, e, f, g) { return new c.TileSprite(this.game, a, b, d, e, f, g) }, rope: function(a, b, d, e, f) { return new c.Rope(this.game, a, b, d, e, f) }, text: function(a, b, d, e) { return new c.Text(this.game, a, b, d, e) }, button: function(a, b, d, e, f, g, h, i, j) { return new c.Button(this.game, a, b, d, e, f, g, h, i, j) }, graphics: function(a, b) { return new c.Graphics(this.game, a, b) }, emitter: function(a, b, d) { return new c.Particles.Arcade.Emitter(this.game, a, b, d) }, retroFont: function(a, b, d, e, f, g, h, i, j) { return new c.RetroFont(this.game, a, b, d, e, f, g, h, i, j) }, bitmapText: function(a, b, d, e, f, g) { return new c.BitmapText(this.game, a, b, d, e, f, g) }, tilemap: function(a, b, d, e, f) { return new c.Tilemap(this.game, a, b, d, e, f) }, renderTexture: function(a, b, d, e) { void 0 !== d && "" !== d || (d = this.game.rnd.uuid()), void 0 === e && (e = !1); var f = new c.RenderTexture(this.game, a, b, d); return e && this.game.cache.addRenderTexture(d, f), f }, bitmapData: function(a, b, d, e) { void 0 === e && (e = !1), void 0 !== d && "" !== d || (d = this.game.rnd.uuid()); var f = new c.BitmapData(this.game, d, a, b); return e && this.game.cache.addBitmapData(d, f), f }, filter: function(a) { var b = Array.prototype.slice.call(arguments, 1), a = new c.Filter[a](this.game); return a.init.apply(a, b), a } }, c.GameObjectCreator.prototype.constructor = c.GameObjectCreator, c.Sprite = function(a, b, d, e, f) { b = b || 0, d = d || 0, e = e || null, f = f || null, this.type = c.SPRITE, this.physicsType = c.SPRITE, PIXI.Sprite.call(this, c.Cache.DEFAULT), c.Component.Core.init.call(this, a, b, d, e, f) }, c.Sprite.prototype = Object.create(PIXI.Sprite.prototype), c.Sprite.prototype.constructor = c.Sprite, c.Component.Core.install.call(c.Sprite.prototype, ["Angle", "Animation", "AutoCull", "Bounds", "BringToTop", "Crop", "Delta", "Destroy", "FixedToCamera", "Health", "InCamera", "InputEnabled", "InWorld", "LifeSpan", "LoadTexture", "Overlap", "PhysicsBody", "Reset", "ScaleMinMax", "Smoothed"]), c.Sprite.prototype.preUpdatePhysics = c.Component.PhysicsBody.preUpdate, c.Sprite.prototype.preUpdateLifeSpan = c.Component.LifeSpan.preUpdate, c.Sprite.prototype.preUpdateInWorld = c.Component.InWorld.preUpdate, c.Sprite.prototype.preUpdateCore = c.Component.Core.preUpdate, c.Sprite.prototype.preUpdate = function() { return !!(this.preUpdatePhysics() && this.preUpdateLifeSpan() && this.preUpdateInWorld()) && this.preUpdateCore() }, c.Image = function(a, b, d, e, f) { b = b || 0, d = d || 0, e = e || null, f = f || null, this.type = c.IMAGE, PIXI.Sprite.call(this, c.Cache.DEFAULT), c.Component.Core.init.call(this, a, b, d, e, f) }, c.Image.prototype = Object.create(PIXI.Sprite.prototype), c.Image.prototype.constructor = c.Image, c.Component.Core.install.call(c.Image.prototype, ["Angle", "Animation", "AutoCull", "Bounds", "BringToTop", "Crop", "Destroy", "FixedToCamera", "InputEnabled", "LifeSpan", "LoadTexture", "Overlap", "Reset", "ScaleMinMax", "Smoothed"]), c.Image.prototype.preUpdateInWorld = c.Component.InWorld.preUpdate, c.Image.prototype.preUpdateCore = c.Component.Core.preUpdate, c.Image.prototype.preUpdate = function() { return !!this.preUpdateInWorld() && this.preUpdateCore() }, c.Button = function(a, b, d, e, f, g, h, i, j, k) { b = b || 0, d = d || 0, e = e || null, f = f || null, g = g || this, c.Image.call(this, a, b, d, e, i), this.type = c.BUTTON, this.physicsType = c.SPRITE, this._onOverFrame = null, this._onOutFrame = null, this._onDownFrame = null, this._onUpFrame = null, this.onOverSound = null, this.onOutSound = null, this.onDownSound = null, this.onUpSound = null, this.onOverSoundMarker = "", this.onOutSoundMarker = "", this.onDownSoundMarker = "", this.onUpSoundMarker = "", this.onInputOver = new c.Signal, this.onInputOut = new c.Signal, this.onInputDown = new c.Signal, this.onInputUp = new c.Signal, this.onOverMouseOnly = !0, this.justReleasedPreventsOver = c.PointerMode.TOUCH, this.freezeFrames = !1, this.forceOut = !1, this.inputEnabled = !0, this.input.start(0, !0), this.input.useHandCursor = !0, this.setFrames(h, i, j, k), null !== f && this.onInputUp.add(f, g), this.events.onInputOver.add(this.onInputOverHandler, this), this.events.onInputOut.add(this.onInputOutHandler, this), this.events.onInputDown.add(this.onInputDownHandler, this), this.events.onInputUp.add(this.onInputUpHandler, this), this.events.onRemovedFromWorld.add(this.removedFromWorld, this) }, c.Button.prototype = Object.create(c.Image.prototype), c.Button.prototype.constructor = c.Button; c.Button.prototype.clearFrames = function() { this.setFrames(null, null, null, null) }, c.Button.prototype.removedFromWorld = function() { this.inputEnabled = !1 }, c.Button.prototype.setStateFrame = function(a, b, c) { var d = "_on" + a + "Frame"; null !== b ? (this[d] = b, c && this.changeStateFrame(a)) : this[d] = null }, c.Button.prototype.changeStateFrame = function(a) { if (this.freezeFrames) return !1; var b = "_on" + a + "Frame", c = this[b]; return "string" == typeof c ? (this.frameName = c, !0) : "number" == typeof c && (this.frame = c, !0) }, c.Button.prototype.setFrames = function(a, b, c, d) { this.setStateFrame("Over", a, this.input.pointerOver()), this.setStateFrame("Out", b, !this.input.pointerOver()), this.setStateFrame("Down", c, this.input.pointerDown()), this.setStateFrame("Up", d, this.input.pointerUp()) }, c.Button.prototype.setStateSound = function(a, b, d) { var e = "on" + a + "Sound", f = "on" + a + "SoundMarker"; b instanceof c.Sound || b instanceof c.AudioSprite ? (this[e] = b, this[f] = "string" == typeof d ? d : "") : (this[e] = null, this[f] = "") }, c.Button.prototype.playStateSound = function(a) { var b = "on" + a + "Sound", c = this[b]; if (c) { var d = "on" + a + "SoundMarker", e = this[d]; return c.play(e), !0 } return !1 }, c.Button.prototype.setSounds = function(a, b, c, d, e, f, g, h) { this.setStateSound("Over", a, b), this.setStateSound("Out", e, f), this.setStateSound("Down", c, d), this.setStateSound("Up", g, h) }, c.Button.prototype.setOverSound = function(a, b) { this.setStateSound("Over", a, b) }, c.Button.prototype.setOutSound = function(a, b) { this.setStateSound("Out", a, b) }, c.Button.prototype.setDownSound = function(a, b) { this.setStateSound("Down", a, b) }, c.Button.prototype.setUpSound = function(a, b) { this.setStateSound("Up", a, b) }, c.Button.prototype.onInputOverHandler = function(a, b) { b.justReleased() && (this.justReleasedPreventsOver & b.pointerMode) === b.pointerMode || (this.changeStateFrame("Over"), this.onOverMouseOnly && !b.isMouse || (this.playStateSound("Over"), this.onInputOver && this.onInputOver.dispatch(this, b))) }, c.Button.prototype.onInputOutHandler = function(a, b) { this.changeStateFrame("Out"), this.playStateSound("Out"), this.onInputOut && this.onInputOut.dispatch(this, b) }, c.Button.prototype.onInputDownHandler = function(a, b) { this.changeStateFrame("Down"), this.playStateSound("Down"), this.onInputDown && this.onInputDown.dispatch(this, b) }, c.Button.prototype.onInputUpHandler = function(a, b, c) { if (this.playStateSound("Up"), this.onInputUp && this.onInputUp.dispatch(this, b, c), !this.freezeFrames) if (!0 === this.forceOut || (this.forceOut & b.pointerMode) === b.pointerMode) this.changeStateFrame("Out"); else { var d = this.changeStateFrame("Up"); d || (c ? this.changeStateFrame("Over") : this.changeStateFrame("Out")) } }, c.SpriteBatch = function(a, b, d, e) { void 0 !== b && null !== b || (b = a.world), PIXI.SpriteBatch.call(this), c.Group.call(this, a, b, d, e), this.type = c.SPRITEBATCH }, c.SpriteBatch.prototype = c.Utils.extend(!0, c.SpriteBatch.prototype, PIXI.SpriteBatch.prototype, c.Group.prototype), c.SpriteBatch.prototype.constructor = c.SpriteBatch, c.BitmapData = function(a, b, d, e, f) { void 0 !== d && 0 !== d || (d = 256), void 0 !== e && 0 !== e || (e = 256), void 0 === f && (f = !1), this.game = a, this.key = b, this.width = d, this.height = e, this.canvas = c.Canvas.create(this, d, e, null, f), this.context = this.canvas.getContext("2d", { alpha: !0 }), this.ctx = this.context, this.smoothProperty = a.renderType === c.CANVAS ? a.renderer.renderSession.smoothProperty : c.Canvas.getSmoothingPrefix(this.context), this.imageData = this.context.getImageData(0, 0, d, e), this.data = null, this.imageData && (this.data = this.imageData.data), this.pixels = null, this.data && (this.imageData.data.buffer ? (this.buffer = this.imageData.data.buffer, this.pixels = new Uint32Array(this.buffer)) : window.ArrayBuffer ? (this.buffer = new ArrayBuffer(this.imageData.data.length), this.pixels = new Uint32Array(this.buffer)) : this.pixels = this.imageData.data), this.baseTexture = new PIXI.BaseTexture(this.canvas), this.texture = new PIXI.Texture(this.baseTexture), this.frameData = new c.FrameData, this.textureFrame = this.frameData.addFrame(new c.Frame(0, 0, 0, d, e, "bitmapData")), this.texture.frame = this.textureFrame, this.type = c.BITMAPDATA, this.disableTextureUpload = !1, this.dirty = !1, this.cls = this.clear, this._image = null, this._pos = new c.Point, this._size = new c.Point, this._scale = new c.Point, this._rotate = 0, this._alpha = { prev: 1, current: 1 }, this._anchor = new c.Point, this._tempR = 0, this._tempG = 0, this._tempB = 0, this._circle = new c.Circle, this._swapCanvas = void 0 }, c.BitmapData.prototype = { move: function(a, b, c) { return 0 !== a && this.moveH(a, c), 0 !== b && this.moveV(b, c), this }, moveH: function(a, b) { void 0 === b && (b = !0), void 0 === this._swapCanvas && (this._swapCanvas = PIXI.CanvasPool.create(this, this.width, this.height)); var c = this._swapCanvas, d = c.getContext("2d"), e = this.height, f = this.canvas; if (d.clearRect(0, 0, this.width, this.height), a < 0) { a = Math.abs(a); var g = this.width - a; b && d.drawImage(f, 0, 0, a, e, g, 0, a, e), d.drawImage(f, a, 0, g, e, 0, 0, g, e) } else { var g = this.width - a; b && d.drawImage(f, g, 0, a, e, 0, 0, a, e), d.drawImage(f, 0, 0, g, e, a, 0, g, e) } return this.clear(), this.copy(this._swapCanvas) }, moveV: function(a, b) { void 0 === b && (b = !0), void 0 === this._swapCanvas && (this._swapCanvas = PIXI.CanvasPool.create(this, this.width, this.height)); var c = this._swapCanvas, d = c.getContext("2d"), e = this.width, f = this.canvas; if (d.clearRect(0, 0, this.width, this.height), a < 0) { a = Math.abs(a); var g = this.height - a; b && d.drawImage(f, 0, 0, e, a, 0, g, e, a), d.drawImage(f, 0, a, e, g, 0, 0, e, g) } else { var g = this.height - a; b && d.drawImage(f, 0, g, e, a, 0, 0, e, a), d.drawImage(f, 0, 0, e, g, 0, a, e, g) } return this.clear(), this.copy(this._swapCanvas) }, add: function(a) { if (Array.isArray(a)) for (var b = 0; b < a.length; b++) a[b].loadTexture && a[b].loadTexture(this); else a.loadTexture(this); return this }, load: function(a) { if ("string" == typeof a && (a = this.game.cache.getImage(a)), a) return this.resize(a.width, a.height), this.cls(), this.draw(a), this.update(), this }, clear: function(a, b, c, d) { return void 0 === a && (a = 0), void 0 === b && (b = 0), void 0 === c && (c = this.width), void 0 === d && (d = this.height), this.context.clearRect(a, b, c, d), this.dirty = !0, this }, fill: function(a, b, c, d) { return void 0 === d && (d = 1), this.context.fillStyle = "rgba(" + a + "," + b + "," + c + "," + d + ")", this.context.fillRect(0, 0, this.width, this.height), this.dirty = !0, this }, generateTexture: function(a) { var b = new Image; b.src = this.canvas.toDataURL("image/png"); var c = this.game.cache.addImage(a, "", b); return new PIXI.Texture(c.base) }, resize: function(a, b) { return a === this.width && b === this.height || (this.width = a, this.height = b, this.canvas.width = a, this.canvas.height = b, void 0 !== this._swapCanvas && (this._swapCanvas.width = a, this._swapCanvas.height = b), this.baseTexture.width = a, this.baseTexture.height = b, this.textureFrame.width = a, this.textureFrame.height = b, this.texture.width = a, this.texture.height = b, this.texture.crop.width = a, this.texture.crop.height = b, this.update(), this.dirty = !0), this }, update: function(a, b, c, d) { return void 0 === a && (a = 0), void 0 === b && (b = 0), void 0 === c && (c = Math.max(1, this.width)), void 0 === d && (d = Math.max(1, this.height)), this.imageData = this.context.getImageData(a, b, c, d), this.data = this.imageData.data, this.imageData.data.buffer ? (this.buffer = this.imageData.data.buffer, this.pixels = new Uint32Array(this.buffer)) : window.ArrayBuffer ? (this.buffer = new ArrayBuffer(this.imageData.data.length), this.pixels = new Uint32Array(this.buffer)) : this.pixels = this.imageData.data, this }, processPixelRGB: function(a, b, d, e, f, g) { void 0 === d && (d = 0), void 0 === e && (e = 0), void 0 === f && (f = this.width), void 0 === g && (g = this.height); for (var h = d + f, i = e + g, j = c.Color.createColor(), k = { r: 0, g: 0, b: 0, a: 0 }, l = !1, m = e; m < i; m++) for (var n = d; n < h; n++) c.Color.unpackPixel(this.getPixel32(n, m), j), !1 !== (k = a.call(b, j, n, m)) && null !== k && void 0 !== k && (this.setPixel32(n, m, k.r, k.g, k.b, k.a, !1), l = !0); return l && (this.context.putImageData(this.imageData, 0, 0), this.dirty = !0), this }, processPixel: function(a, b, c, d, e, f) { void 0 === c && (c = 0), void 0 === d && (d = 0), void 0 === e && (e = this.width), void 0 === f && (f = this.height); for (var g = c + e, h = d + f, i = 0, j = 0, k = !1, l = d; l < h; l++) for (var m = c; m < g; m++) i = this.getPixel32(m, l), (j = a.call(b, i, m, l)) !== i && (this.pixels[l * this.width + m] = j, k = !0); return k && (this.context.putImageData(this.imageData, 0, 0), this.dirty = !0), this }, replaceRGB: function(a, b, d, e, f, g, h, i, j) { var k = 0, l = 0, m = this.width, n = this.height, o = c.Color.packPixel(a, b, d, e); void 0 !== j && j instanceof c.Rectangle && (k = j.x, l = j.y, m = j.width, n = j.height); for (var p = 0; p < n; p++) for (var q = 0; q < m; q++) this.getPixel32(k + q, l + p) === o && this.setPixel32(k + q, l + p, f, g, h, i, !1); return this.context.putImageData(this.imageData, 0, 0), this.dirty = !0, this }, setHSL: function(a, b, d, e) { var f = a || 0 === a, g = b || 0 === b, h = d || 0 === d; if (f || g || h) { void 0 === e && (e = new c.Rectangle(0, 0, this.width, this.height)); for (var i = c.Color.createColor(), j = e.y; j < e.bottom; j++) for (var k = e.x; k < e.right; k++) c.Color.unpackPixel(this.getPixel32(k, j), i, !0), f && (i.h = a), g && (i.s = b), h && (i.l = d), c.Color.HSLtoRGB(i.h, i.s, i.l, i), this.setPixel32(k, j, i.r, i.g, i.b, i.a, !1); return this.context.putImageData(this.imageData, 0, 0), this.dirty = !0, this } }, shiftHSL: function(a, b, d, e) { if (void 0 !== a && null !== a || (a = !1), void 0 !== b && null !== b || (b = !1), void 0 !== d && null !== d || (d = !1), a || b || d) { void 0 === e && (e = new c.Rectangle(0, 0, this.width, this.height)); for (var f = c.Color.createColor(), g = e.y; g < e.bottom; g++) for (var h = e.x; h < e.right; h++) c.Color.unpackPixel(this.getPixel32(h, g), f, !0), a && (f.h = this.game.math.wrap(f.h + a, 0, 1)), b && (f.s = this.game.math.clamp(f.s + b, 0, 1)), d && (f.l = this.game.math.clamp(f.l + d, 0, 1)), c.Color.HSLtoRGB(f.h, f.s, f.l, f), this.setPixel32(h, g, f.r, f.g, f.b, f.a, !1); return this.context.putImageData(this.imageData, 0, 0), this.dirty = !0, this } }, setPixel32: function(a, b, d, e, f, g, h) { return void 0 === h && (h = !0), a >= 0 && a <= this.width && b >= 0 && b <= this.height && (c.Device.LITTLE_ENDIAN ? this.pixels[b * this.width + a] = g << 24 | f << 16 | e << 8 | d : this.pixels[b * this.width + a] = d << 24 | e << 16 | f << 8 | g, h && (this.context.putImageData(this.imageData, 0, 0), this.dirty = !0)), this }, setPixel: function(a, b, c, d, e, f) { return this.setPixel32(a, b, c, d, e, 255, f) }, getPixel: function(a, b, d) { d || (d = c.Color.createColor()); var e = ~~(a + b * this.width); return e *= 4, d.r = this.data[e], d.g = this.data[++e], d.b = this.data[++e], d.a = this.data[++e], d }, getPixel32: function(a, b) { if (a >= 0 && a <= this.width && b >= 0 && b <= this.height) return this.pixels[b * this.width + a] }, getPixelRGB: function(a, b, d, e, f) { return c.Color.unpackPixel(this.getPixel32(a, b), d, e, f) }, getPixels: function(a) { return this.context.getImageData(a.x, a.y, a.width, a.height) }, getFirstPixel: function(a) { void 0 === a && (a = 0); var b = c.Color.createColor(), d = 0, e = 0, f = 1, g = !1; 1 === a ? (f = -1, e = this.height) : 3 === a && (f = -1, d = this.width); do { c.Color.unpackPixel(this.getPixel32(d, e), b), 0 === a || 1 === a ? ++d === this.width && (d = 0, ((e += f) >= this.height || e <= 0) && (g = !0)) : 2 !== a && 3 !== a || ++e === this.height && (e = 0, ((d += f) >= this.width || d <= 0) && (g = !0)) } while (0 === b.a && !g); return b.x = d, b.y = e, b }, getBounds: function(a) { return void 0 === a && (a = new c.Rectangle), a.x = this.getFirstPixel(2).x, a.x === this.width ? a.setTo(0, 0, 0, 0) : (a.y = this.getFirstPixel(0).y, a.width = this.getFirstPixel(3).x - a.x + 1, a.height = this.getFirstPixel(1).y - a.y + 1, a) }, addToWorld: function(a, b, c, d, e, f) { e = e || 1, f = f || 1; var g = this.game.add.image(a, b, this); return g.anchor.set(c, d), g.scale.set(e, f), g }, copy: function(a, b, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) { if (void 0 !== a && null !== a || (a = this), (a instanceof c.RenderTexture || a instanceof PIXI.RenderTexture) && (a = a.getCanvas()), this._image = a, a instanceof c.Sprite || a instanceof c.Image || a instanceof c.Text || a instanceof PIXI.Sprite) this._pos.set(a.texture.crop.x, a.texture.crop.y), this._size.set(a.texture.crop.width, a.texture.crop.height), this._scale.set(a.scale.x, a.scale.y), this._anchor.set(a.anchor.x, a.anchor.y), this._rotate = a.rotation, this._alpha.current = a.alpha, a.texture instanceof c.RenderTexture || a.texture instanceof PIXI.RenderTexture ? this._image = a.texture.getCanvas() : this._image = a.texture.baseTexture.source, void 0 !== g && null !== g || (g = a.x), void 0 !== h && null !== h || (h = a.y), a.texture.trim && (g += a.texture.trim.x - a.anchor.x * a.texture.trim.width, h += a.texture.trim.y - a.anchor.y * a.texture.trim.height), 16777215 !== a.tint && (a.cachedTint !== a.tint && (a.cachedTint = a.tint, a.tintedTexture = PIXI.CanvasTinter.getTintedTexture(a, a.tint)), this._image = a.tintedTexture, this._pos.set(0)); else { if (this._pos.set(0), this._scale.set(1), this._anchor.set(0), this._rotate = 0, this._alpha.current = 1, a instanceof c.BitmapData) this._image = a.canvas; else if ("string" == typeof a) { if (null === (a = this.game.cache.getImage(a))) return; this._image = a } this._size.set(this._image.width, this._image.height) } if (void 0 !== b && null !== b || (b = 0), void 0 !== d && null !== d || (d = 0), e && (this._size.x = e), f && (this._size.y = f), void 0 !== g && null !== g || (g = b), void 0 !== h && null !== h || (h = d), void 0 !== i && null !== i || (i = this._size.x), void 0 !== j && null !== j || (j = this._size.y), "number" == typeof k && (this._rotate = k), "number" == typeof l && (this._anchor.x = l), "number" == typeof m && (this._anchor.y = m), "number" == typeof n && (this._scale.x = n), "number" == typeof o && (this._scale.y = o), "number" == typeof p && (this._alpha.current = p), void 0 === q && (q = null), void 0 === r && (r = !1), !(this._alpha.current <= 0 || 0 === this._scale.x || 0 === this._scale.y || 0 === this._size.x || 0 === this._size.y)) { var s = this.context; return this._alpha.prev = s.globalAlpha, s.save(), s.globalAlpha = this._alpha.current, q && (this.op = q), r && (g |= 0, h |= 0), s.translate(g, h), s.scale(this._scale.x, this._scale.y), s.rotate(this._rotate), s.drawImage(this._image, this._pos.x + b, this._pos.y + d, this._size.x, this._size.y, -i * this._anchor.x, -j * this._anchor.y, i, j), s.restore(), s.globalAlpha = this._alpha.prev, this.dirty = !0, this } }, copyTransform: function(a, b, d) { if (void 0 === b && (b = null), void 0 === d && (d = !1), !a.hasOwnProperty("worldTransform") || !a.worldVisible || 0 === a.worldAlpha) return this; var e = a.worldTransform; if (this._pos.set(a.texture.crop.x, a.texture.crop.y), this._size.set(a.texture.crop.width, a.texture.crop.height), 0 === e.a || 0 === e.d || 0 === this._size.x || 0 === this._size.y) return this; a.texture instanceof c.RenderTexture || a.texture instanceof PIXI.RenderTexture ? this._image = a.texture.getCanvas() : this._image = a.texture.baseTexture.source; var f = e.tx, g = e.ty; a.texture.trim && (f += a.texture.trim.x - a.anchor.x * a.texture.trim.width, g += a.texture.trim.y - a.anchor.y * a.texture.trim.height), 16777215 !== a.tint && (a.cachedTint !== a.tint && (a.cachedTint = a.tint, a.tintedTexture = PIXI.CanvasTinter.getTintedTexture(a, a.tint)), this._image = a.tintedTexture, this._pos.set(0)), d && (f |= 0, g |= 0); var h = this.context; return this._alpha.prev = h.globalAlpha, h.save(), h.globalAlpha = this._alpha.current, b && (this.op = b), h[this.smoothProperty] = a.texture.baseTexture.scaleMode === PIXI.scaleModes.LINEAR, h.setTransform(e.a, e.b, e.c, e.d, f, g), h.drawImage(this._image, this._pos.x, this._pos.y, this._size.x, this._size.y, -this._size.x * a.anchor.x, -this._size.y * a.anchor.y, this._size.x, this._size.y), h.restore(), h.globalAlpha = this._alpha.prev, this.dirty = !0, this }, copyRect: function(a, b, c, d, e, f, g) { return this.copy(a, b.x, b.y, b.width, b.height, c, d, b.width, b.height, 0, 0, 0, 1, 1, e, f, g) }, draw: function(a, b, c, d, e, f, g) { return this.copy(a, null, null, null, null, b, c, d, e, null, null, null, null, null, null, f, g) }, drawGroup: function(a, b, c) { return a.total > 0 && a.forEachExists(this.drawGroupProxy, this, b, c), this }, drawGroupProxy: function(a, b, d) { if (a.hasOwnProperty("texture") && this.copyTransform(a, b, d), a.type === c.GROUP && a.exists) this.drawGroup(a, b, d); else if (a.hasOwnProperty("children") && a.children.length > 0) for (var e = 0; e < a.children.length; e++) a.children[e].exists && this.copyTransform(a.children[e], b, d) }, drawFull: function(a, b, d) { if (!1 === a.worldVisible || 0 === a.worldAlpha || a.hasOwnProperty("exists") && !1 === a.exists) return this; if (a.type !== c.GROUP && a.type !== c.EMITTER && a.type !== c.BITMAPTEXT) if (a.type === c.GRAPHICS) { var e = a.getBounds(); this.ctx.save(), this.ctx.translate(e.x, e.y), PIXI.CanvasGraphics.renderGraphics(a, this.ctx), this.ctx.restore() } else this.copy(a, null, null, null, null, a.worldPosition.x, a.worldPosition.y, null, null, a.worldRotation, null, null, a.worldScale.x, a.worldScale.y, a.worldAlpha, b, d); if (a.children) for (var f = 0; f < a.children.length; f++) this.drawFull(a.children[f], b, d); return this }, shadow: function(a, b, c, d) { var e = this.context; return void 0 === a || null === a ? e.shadowColor = "rgba(0,0,0,0)" : (e.shadowColor = a, e.shadowBlur = b || 5, e.shadowOffsetX = c || 10, e.shadowOffsetY = d || 10), this }, alphaMask: function(a, b, c, d) { return void 0 === d || null === d ? this.draw(b).blendSourceAtop() : this.draw(b, d.x, d.y, d.width, d.height).blendSourceAtop(), void 0 === c || null === c ? this.draw(a).blendReset() : this.draw(a, c.x, c.y, c.width, c.height).blendReset(), this }, extract: function(a, b, c, d, e, f, g, h, i) { return void 0 === e && (e = 255), void 0 === f && (f = !1), void 0 === g && (g = b), void 0 === h && (h = c), void 0 === i && (i = d), f && a.resize(this.width, this.height), this.processPixelRGB(function(f, j, k) { return f.r === b && f.g === c && f.b === d && a.setPixel32(j, k, g, h, i, e, !1), !1 }, this), a.context.putImageData(a.imageData, 0, 0), a.dirty = !0, a }, rect: function(a, b, c, d, e) { return void 0 !== e && (this.context.fillStyle = e), this.context.fillRect(a, b, c, d), this }, text: function(a, b, c, d, e, f) { void 0 === b && (b = 0), void 0 === c && (c = 0), void 0 === d && (d = "14px Courier"), void 0 === e && (e = "rgb(255,255,255)"), void 0 === f && (f = !0); var g = this.context, h = g.font; return g.font = d, f && (g.fillStyle = "rgb(0,0,0)", g.fillText(a, b + 1, c + 1)), g.fillStyle = e, g.fillText(a, b, c), g.font = h, this }, circle: function(a, b, c, d) { var e = this.context; return void 0 !== d && (e.fillStyle = d), e.beginPath(), e.arc(a, b, c, 0, 2 * Math.PI, !1), e.closePath(), e.fill(), this }, line: function(a, b, c, d, e, f) { void 0 === e && (e = "#fff"), void 0 === f && (f = 1); var g = this.context; return g.beginPath(), g.moveTo(a, b), g.lineTo(c, d), g.lineWidth = f, g.strokeStyle = e, g.stroke(), g.closePath(), this }, textureLine: function(a, b, d) { if (void 0 === d && (d = "repeat-x"), "string" != typeof b || (b = this.game.cache.getImage(b))) { var e = a.length; "no-repeat" === d && e > b.width && (e = b.width); var f = this.context; return f.fillStyle = f.createPattern(b, d), this._circle = new c.Circle(a.start.x, a.start.y, b.height), this._circle.circumferencePoint(a.angle - 1.5707963267948966, !1, this._pos), f.save(), f.translate(this._pos.x, this._pos.y), f.rotate(a.angle), f.fillRect(0, 0, e, b.height), f.restore(), this.dirty = !0, this } }, render: function() { return !this.disableTextureUpload && this.dirty && (this.baseTexture.dirty(), this.dirty = !1), this }, destroy: function() { this.frameData.destroy(), this.texture.destroy(!0), PIXI.CanvasPool.remove(this) }, blendReset: function() { return this.op = "source-over", this }, blendSourceOver: function() { return this.op = "source-over", this }, blendSourceIn: function() { return this.op = "source-in", this }, blendSourceOut: function() { return this.op = "source-out", this }, blendSourceAtop: function() { return this.op = "source-atop", this }, blendDestinationOver: function() { return this.op = "destination-over", this }, blendDestinationIn: function() { return this.op = "destination-in", this }, blendDestinationOut: function() { return this.op = "destination-out", this }, blendDestinationAtop: function() { return this.op = "destination-atop", this }, blendXor: function() { return this.op = "xor", this }, blendAdd: function() { return this.op = "lighter", this }, blendMultiply: function() { return this.op = "multiply", this }, blendScreen: function() { return this.op = "screen", this }, blendOverlay: function() { return this.op = "overlay", this }, blendDarken: function() { return this.op = "darken", this }, blendLighten: function() { return this.op = "lighten", this }, blendColorDodge: function() { return this.op = "color-dodge", this }, blendColorBurn: function() { return this.op = "color-burn", this }, blendHardLight: function() { return this.op = "hard-light", this }, blendSoftLight: function() { return this.op = "soft-light", this }, blendDifference: function() { return this.op = "difference", this }, blendExclusion: function() { return this.op = "exclusion", this }, blendHue: function() { return this.op = "hue", this }, blendSaturation: function() { return this.op = "saturation", this }, blendColor: function() { return this.op = "color", this }, blendLuminosity: function() { return this.op = "luminosity", this } }, Object.defineProperty(c.BitmapData.prototype, "smoothed", { get: function() { c.Canvas.getSmoothingEnabled(this.context) }, set: function(a) { c.Canvas.setSmoothingEnabled(this.context, a) } }), Object.defineProperty(c.BitmapData.prototype, "op", { get: function() { return this.context.globalCompositeOperation }, set: function(a) { this.context.globalCompositeOperation = a } }), c.BitmapData.getTransform = function(a, b, c, d, e, f) { return "number" != typeof a && (a = 0), "number" != typeof b && (b = 0), "number" != typeof c && (c = 1), "number" != typeof d && (d = 1), "number" != typeof e && (e = 0), "number" != typeof f && (f = 0), { sx: c, sy: d, scaleX: c, scaleY: d, skewX: e, skewY: f, translateX: a, translateY: b, tx: a, ty: b } }, c.BitmapData.prototype.constructor = c.BitmapData, PIXI.Graphics = function() { PIXI.DisplayObjectContainer.call(this), this.renderable = !0, this.fillAlpha = 1, this.lineWidth = 0, this.lineColor = 0, this.graphicsData = [], this.tint = 16777215, this.blendMode = PIXI.blendModes.NORMAL, this.currentPath = null, this._webGL = [], this.isMask = !1, this.boundsPadding = 0, this._localBounds = new PIXI.Rectangle(0, 0, 1, 1), this.dirty = !0, this._boundsDirty = !1, this.webGLDirty = !1, this.cachedSpriteDirty = !1 }, PIXI.Graphics.prototype = Object.create(PIXI.DisplayObjectContainer.prototype), PIXI.Graphics.prototype.constructor = PIXI.Graphics, PIXI.Graphics.prototype.lineStyle = function(a, b, c) { return this.lineWidth = a || 0, this.lineColor = b || 0, this.lineAlpha = void 0 === c ? 1 : c, this.currentPath && (this.currentPath.shape.points.length ? this.drawShape(new PIXI.Polygon(this.currentPath.shape.points.slice(-2))) : (this.currentPath.lineWidth = this.lineWidth, this.currentPath.lineColor = this.lineColor, this.currentPath.lineAlpha = this.lineAlpha)), this }, PIXI.Graphics.prototype.moveTo = function(a, b) { return this.drawShape(new PIXI.Polygon([a, b])), this }, PIXI.Graphics.prototype.lineTo = function(a, b) { return this.currentPath || this.moveTo(0, 0), this.currentPath.shape.points.push(a, b), this.dirty = !0, this._boundsDirty = !0, this }, PIXI.Graphics.prototype.quadraticCurveTo = function(a, b, c, d) { this.currentPath ? 0 === this.currentPath.shape.points.length && (this.currentPath.shape.points = [0, 0]) : this.moveTo(0, 0); var e, f, g = this.currentPath.shape.points; 0 === g.length && this.moveTo(0, 0); for (var h = g[g.length - 2], i = g[g.length - 1], j = 0, k = 1; k <= 20; ++k) j = k / 20, e = h + (a - h) * j, f = i + (b - i) * j, g.push(e + (a + (c - a) * j - e) * j, f + (b + (d - b) * j - f) * j); return this.dirty = !0, this._boundsDirty = !0, this }, PIXI.Graphics.prototype.bezierCurveTo = function(a, b, c, d, e, f) { this.currentPath ? 0 === this.currentPath.shape.points.length && (this.currentPath.shape.points = [0, 0]) : this.moveTo(0, 0); for (var g, h, i, j, k, l = this.currentPath.shape.points, m = l[l.length - 2], n = l[l.length - 1], o = 0, p = 1; p <= 20; ++p) o = p / 20, g = 1 - o, h = g * g, i = h * g, j = o * o, k = j * o, l.push(i * m + 3 * h * o * a + 3 * g * j * c + k * e, i * n + 3 * h * o * b + 3 * g * j * d + k * f); return this.dirty = !0, this._boundsDirty = !0, this }, PIXI.Graphics.prototype.arcTo = function(a, b, c, d, e) { this.currentPath ? 0 === this.currentPath.shape.points.length && this.currentPath.shape.points.push(a, b) : this.moveTo(a, b); var f = this.currentPath.shape.points, g = f[f.length - 2], h = f[f.length - 1], i = h - b, j = g - a, k = d - b, l = c - a, m = Math.abs(i * l - j * k); if (m < 1e-8 || 0 === e) f[f.length - 2] === a && f[f.length - 1] === b || f.push(a, b); else { var n = i * i + j * j, o = k * k + l * l, p = i * k + j * l, q = e * Math.sqrt(n) / m, r = e * Math.sqrt(o) / m, s = q * p / n, t = r * p / o, u = q * l + r * j, v = q * k + r * i, w = j * (r + s), x = i * (r + s), y = l * (q + t), z = k * (q + t), A = Math.atan2(x - v, w - u), B = Math.atan2(z - v, y - u); this.arc(u + a, v + b, e, A, B, j * k > l * i) } return this.dirty = !0, this._boundsDirty = !0, this }, PIXI.Graphics.prototype.arc = function(a, b, c, d, e, f, g) { if (d === e) return this; void 0 === f && (f = !1), void 0 === g && (g = 40), !f && e <= d ? e += 2 * Math.PI : f && d <= e && (d += 2 * Math.PI); var h = f ? -1 * (d - e) : e - d, i = Math.ceil(Math.abs(h) / (2 * Math.PI)) * g; if (0 === h) return this; var j = a + Math.cos(d) * c, k = b + Math.sin(d) * c; f && this.filling ? this.moveTo(a, b) : this.moveTo(j, k); for (var l = this.currentPath.shape.points, m = h / (2 * i), n = 2 * m, o = Math.cos(m), p = Math.sin(m), q = i - 1, r = q % 1 / q, s = 0; s <= q; s++) { var t = s + r * s, u = m + d + n * t, v = Math.cos(u), w = -Math.sin(u); l.push((o * v + p * w) * c + a, (o * -w + p * v) * c + b) } return this.dirty = !0, this._boundsDirty = !0, this }, PIXI.Graphics.prototype.beginFill = function(a, b) { return this.filling = !0, this.fillColor = a || 0, this.fillAlpha = void 0 === b ? 1 : b, this.currentPath && this.currentPath.shape.points.length <= 2 && (this.currentPath.fill = this.filling, this.currentPath.fillColor = this.fillColor, this.currentPath.fillAlpha = this.fillAlpha), this }, PIXI.Graphics.prototype.endFill = function() { return this.filling = !1, this.fillColor = null, this.fillAlpha = 1, this }, PIXI.Graphics.prototype.drawRect = function(a, b, c, d) { return this.drawShape(new PIXI.Rectangle(a, b, c, d)), this }, PIXI.Graphics.prototype.drawRoundedRect = function(a, b, c, d, e) { return this.drawShape(new PIXI.RoundedRectangle(a, b, c, d, e)), this }, PIXI.Graphics.prototype.drawCircle = function(a, b, c) { return this.drawShape(new PIXI.Circle(a, b, c)), this }, PIXI.Graphics.prototype.drawEllipse = function(a, b, c, d) { return this.drawShape(new PIXI.Ellipse(a, b, c, d)), this }, PIXI.Graphics.prototype.drawPolygon = function(a) { (a instanceof c.Polygon || a instanceof PIXI.Polygon) && (a = a.points); var b = a; if (!Array.isArray(b)) { b = new Array(arguments.length); for (var d = 0; d < b.length; ++d) b[d] = arguments[d] } return this.drawShape(new c.Polygon(b)), this }, PIXI.Graphics.prototype.clear = function() { return this.lineWidth = 0, this.filling = !1, this.dirty = !0, this._boundsDirty = !0, this.clearDirty = !0, this.graphicsData = [], this.updateLocalBounds(), this }, PIXI.Graphics.prototype.generateTexture = function(a, b, c) { void 0 === a && (a = 1), void 0 === b && (b = PIXI.scaleModes.DEFAULT), void 0 === c && (c = 0); var d = this.getBounds(); d.width += c, d.height += c; var e = new PIXI.CanvasBuffer(d.width * a, d.height * a), f = PIXI.Texture.fromCanvas(e.canvas, b); return f.baseTexture.resolution = a, e.context.scale(a, a), e.context.translate(-d.x, -d.y), PIXI.CanvasGraphics.renderGraphics(this, e.context), f }, PIXI.Graphics.prototype._renderWebGL = function(a) { if (!1 !== this.visible && 0 !== this.alpha && !0 !== this.isMask) { if (this._cacheAsBitmap) return (this.dirty || this.cachedSpriteDirty) && (this._generateCachedSprite(), this.updateCachedSpriteTexture(), this.cachedSpriteDirty = !1, this.dirty = !1), this._cachedSprite.worldAlpha = this.worldAlpha, void PIXI.Sprite.prototype._renderWebGL.call(this._cachedSprite, a); if (a.spriteBatch.stop(), a.blendModeManager.setBlendMode(this.blendMode), this._mask && a.maskManager.pushMask(this._mask, a), this._filters && a.filterManager.pushFilter(this._filterBlock), this.blendMode !== a.spriteBatch.currentBlendMode) { a.spriteBatch.currentBlendMode = this.blendMode; var b = PIXI.blendModesWebGL[a.spriteBatch.currentBlendMode]; a.spriteBatch.gl.blendFunc(b[0], b[1]) } if (this.webGLDirty && (this.dirty = !0, this.webGLDirty = !1), PIXI.WebGLGraphics.renderGraphics(this, a), this.children.length) { a.spriteBatch.start(); for (var c = 0; c < this.children.length; c++) this.children[c]._renderWebGL(a); a.spriteBatch.stop() } this._filters && a.filterManager.popFilter(), this._mask && a.maskManager.popMask(this.mask, a), a.drawCount++, a.spriteBatch.start() } }, PIXI.Graphics.prototype._renderCanvas = function(a) { if (!1 !== this.visible && 0 !== this.alpha && !0 !== this.isMask) { if (this._prevTint !== this.tint && (this.dirty = !0, this._prevTint = this.tint), this._cacheAsBitmap) return (this.dirty || this.cachedSpriteDirty) && (this._generateCachedSprite(), this.updateCachedSpriteTexture(), this.cachedSpriteDirty = !1, this.dirty = !1), this._cachedSprite.alpha = this.alpha, void PIXI.Sprite.prototype._renderCanvas.call(this._cachedSprite, a); var b = a.context, c = this.worldTransform; this.blendMode !== a.currentBlendMode && (a.currentBlendMode = this.blendMode, b.globalCompositeOperation = PIXI.blendModesCanvas[a.currentBlendMode]), this._mask && a.maskManager.pushMask(this._mask, a); var d = a.resolution, e = c.tx * a.resolution + a.shakeX, f = c.ty * a.resolution + a.shakeY; b.setTransform(c.a * d, c.b * d, c.c * d, c.d * d, e, f), PIXI.CanvasGraphics.renderGraphics(this, b); for (var g = 0; g < this.children.length; g++) this.children[g]._renderCanvas(a); this._mask && a.maskManager.popMask(a) } }, PIXI.Graphics.prototype.getBounds = function(a) { if (!this._currentBounds) { if (!this.renderable) return PIXI.EmptyRectangle; this.dirty && (this.updateLocalBounds(), this.webGLDirty = !0, this.cachedSpriteDirty = !0, this.dirty = !1); var b = this._localBounds, c = b.x, d = b.width + b.x, e = b.y, f = b.height + b.y, g = a || this.worldTransform, h = g.a, i = g.b, j = g.c, k = g.d, l = g.tx, m = g.ty, n = h * d + j * f + l, o = k * f + i * d + m, p = h * c + j * f + l, q = k * f + i * c + m, r = h * c + j * e + l, s = k * e + i * c + m, t = h * d + j * e + l, u = k * e + i * d + m, v = n, w = o, x = n, y = o; x = p < x ? p : x, x = r < x ? r : x, x = t < x ? t : x, y = q < y ? q : y, y = s < y ? s : y, y = u < y ? u : y, v = p > v ? p : v, v = r > v ? r : v, v = t > v ? t : v, w = q > w ? q : w, w = s > w ? s : w, w = u > w ? u : w, this._bounds.x = x, this._bounds.width = v - x, this._bounds.y = y, this._bounds.height = w - y, this._currentBounds = this._bounds } return this._currentBounds }, PIXI.Graphics.prototype.getLocalBounds = function() { var a = this.worldTransform; this.worldTransform = PIXI.identityMatrix; for (var b = 0; b < this.children.length; b++) this.children[b].updateTransform(); var c = this.getBounds(); for (this.worldTransform = a, b = 0; b < this.children.length; b++) this.children[b].updateTransform(); return c }, PIXI.Graphics.prototype.containsPoint = function(a) { this.worldTransform.applyInverse(a, tempPoint); for (var b = this.graphicsData, c = 0; c < b.length; c++) { var d = b[c]; if (d.fill && (d.shape && d.shape.contains(tempPoint.x, tempPoint.y))) return !0 } return !1 }, PIXI.Graphics.prototype.updateLocalBounds = function() { var a = 1 / 0, b = -1 / 0, d = 1 / 0, e = -1 / 0; if (this.graphicsData.length) for (var f, g, h, i, j, k, l = 0; l < this.graphicsData.length; l++) { var m = this.graphicsData[l], n = m.type, o = m.lineWidth; if (f = m.shape, n === PIXI.Graphics.RECT || n === PIXI.Graphics.RREC) h = f.x - o / 2, i = f.y - o / 2, j = f.width + o, k = f.height + o, a = h < a ? h : a, b = h + j > b ? h + j : b, d = i < d ? i : d, e = i + k > e ? i + k : e; else if (n === PIXI.Graphics.CIRC) h = f.x, i = f.y, j = f.radius + o / 2, k = f.radius + o / 2, a = h - j < a ? h - j : a, b = h + j > b ? h + j : b, d = i - k < d ? i - k : d, e = i + k > e ? i + k : e; else if (n === PIXI.Graphics.ELIP) h = f.x, i = f.y, j = f.width + o / 2, k = f.height + o / 2, a = h - j < a ? h - j : a, b = h + j > b ? h + j : b, d = i - k < d ? i - k : d, e = i + k > e ? i + k : e; else { g = f.points; for (var p = 0; p < g.length; p++) g[p] instanceof c.Point ? (h = g[p].x, i = g[p].y) : (h = g[p], i = g[p + 1], p < g.length - 1 && p++), a = h - o < a ? h - o : a, b = h + o > b ? h + o : b, d = i - o < d ? i - o : d, e = i + o > e ? i + o : e } } else a = 0, b = 0, d = 0, e = 0; var q = this.boundsPadding; this._localBounds.x = a - q, this._localBounds.width = b - a + 2 * q, this._localBounds.y = d - q, this._localBounds.height = e - d + 2 * q }, PIXI.Graphics.prototype._generateCachedSprite = function() { var a = this.getLocalBounds(); if (this._cachedSprite) this._cachedSprite.buffer.resize(a.width, a.height); else { var b = new PIXI.CanvasBuffer(a.width, a.height), c = PIXI.Texture.fromCanvas(b.canvas); this._cachedSprite = new PIXI.Sprite(c), this._cachedSprite.buffer = b, this._cachedSprite.worldTransform = this.worldTransform } this._cachedSprite.anchor.x = -a.x / a.width, this._cachedSprite.anchor.y = -a.y / a.height, this._cachedSprite.buffer.context.translate(-a.x, -a.y), this.worldAlpha = 1, PIXI.CanvasGraphics.renderGraphics(this, this._cachedSprite.buffer.context), this._cachedSprite.alpha = this.alpha }, PIXI.Graphics.prototype.updateCachedSpriteTexture = function() { var a = this._cachedSprite, b = a.texture, c = a.buffer.canvas; b.baseTexture.width = c.width, b.baseTexture.height = c.height, b.crop.width = b.frame.width = c.width, b.crop.height = b.frame.height = c.height, a._width = c.width, a._height = c.height, b.baseTexture.dirty() }, PIXI.Graphics.prototype.destroyCachedSprite = function() { this._cachedSprite.texture.destroy(!0), this._cachedSprite = null }, PIXI.Graphics.prototype.drawShape = function(a) { this.currentPath && this.currentPath.shape.points.length <= 2 && this.graphicsData.pop(), this.currentPath = null, a instanceof c.Polygon && (a = a.clone(), a.flatten()); var b = new PIXI.GraphicsData(this.lineWidth, this.lineColor, this.lineAlpha, this.fillColor, this.fillAlpha, this.filling, a); return this.graphicsData.push(b), b.type === PIXI.Graphics.POLY && (b.shape.closed = this.filling, this.currentPath = b), this.dirty = !0, this._boundsDirty = !0, b }, Object.defineProperty(PIXI.Graphics.prototype, "cacheAsBitmap", { get: function() { return this._cacheAsBitmap }, set: function(a) { this._cacheAsBitmap = a, this._cacheAsBitmap ? this._generateCachedSprite() : this.destroyCachedSprite(), this.dirty = !0, this.webGLDirty = !0 } }), PIXI.GraphicsData = function(a, b, c, d, e, f, g) { this.lineWidth = a, this.lineColor = b, this.lineAlpha = c, this._lineTint = b, this.fillColor = d, this.fillAlpha = e, this._fillTint = d, this.fill = f, this.shape = g, this.type = g.type }, PIXI.GraphicsData.prototype.constructor = PIXI.GraphicsData, PIXI.GraphicsData.prototype.clone = function() { return new GraphicsData(this.lineWidth, this.lineColor, this.lineAlpha, this.fillColor, this.fillAlpha, this.fill, this.shape) }, PIXI.EarCut = {}, PIXI.EarCut.Triangulate = function(a, b, c) { c = c || 2; var d = b && b.length, e = d ? b[0] * c : a.length, f = PIXI.EarCut.linkedList(a, 0, e, c, !0), g = []; if (!f) return g; var h, i, j, k, l, m, n; if (d && (f = PIXI.EarCut.eliminateHoles(a, b, f, c)), a.length > 80 * c) { h = j = a[0], i = k = a[1]; for (var o = c; o < e; o += c) l = a[o], m = a[o + 1], l < h && (h = l), m < i && (i = m), l > j && (j = l), m > k && (k = m); n = Math.max(j - h, k - i) } return PIXI.EarCut.earcutLinked(f, g, c, h, i, n), g }, PIXI.EarCut.linkedList = function(a, b, c, d, e) { var f, g, h, i = 0; for (f = b, g = c - d; f < c; f += d) i += (a[g] - a[f]) * (a[f + 1] + a[g + 1]), g = f; if (e === i > 0) for (f = b; f < c; f += d) h = PIXI.EarCut.insertNode(f, a[f], a[f + 1], h); else for (f = c - d; f >= b; f -= d) h = PIXI.EarCut.insertNode(f, a[f], a[f + 1], h); return h }, PIXI.EarCut.filterPoints = function(a, b) { if (!a) return a; b || (b = a); var c, d = a; do { if (c = !1, d.steiner || !PIXI.EarCut.equals(d, d.next) && 0 !== PIXI.EarCut.area(d.prev, d, d.next)) d = d.next; else { if (PIXI.EarCut.removeNode(d), (d = b = d.prev) === d.next) return null; c = !0 } } while (c || d !== b); return b }, PIXI.EarCut.earcutLinked = function(a, b, c, d, e, f, g) { if (a) {!g && f && PIXI.EarCut.indexCurve(a, d, e, f); for (var h, i, j = a; a.prev !== a.next;) if (h = a.prev, i = a.next, f ? PIXI.EarCut.isEarHashed(a, d, e, f) : PIXI.EarCut.isEar(a)) b.push(h.i / c), b.push(a.i / c), b.push(i.i / c), PIXI.EarCut.removeNode(a), a = i.next, j = i.next; else if ((a = i) === j) { g ? 1 === g ? (a = PIXI.EarCut.cureLocalIntersections(a, b, c), PIXI.EarCut.earcutLinked(a, b, c, d, e, f, 2)) : 2 === g && PIXI.EarCut.splitEarcut(a, b, c, d, e, f) : PIXI.EarCut.earcutLinked(PIXI.EarCut.filterPoints(a), b, c, d, e, f, 1); break } } }, PIXI.EarCut.isEar = function(a) { var b = a.prev, c = a, d = a.next; if (PIXI.EarCut.area(b, c, d) >= 0) return !1; for (var e = a.next.next; e !== a.prev;) { if (PIXI.EarCut.pointInTriangle(b.x, b.y, c.x, c.y, d.x, d.y, e.x, e.y) && PIXI.EarCut.area(e.prev, e, e.next) >= 0) return !1; e = e.next } return !0 }, PIXI.EarCut.isEarHashed = function(a, b, c, d) { var e = a.prev, f = a, g = a.next; if (PIXI.EarCut.area(e, f, g) >= 0) return !1; for (var h = e.x < f.x ? e.x < g.x ? e.x : g.x : f.x < g.x ? f.x : g.x, i = e.y < f.y ? e.y < g.y ? e.y : g.y : f.y < g.y ? f.y : g.y, j = e.x > f.x ? e.x > g.x ? e.x : g.x : f.x > g.x ? f.x : g.x, k = e.y > f.y ? e.y > g.y ? e.y : g.y : f.y > g.y ? f.y : g.y, l = PIXI.EarCut.zOrder(h, i, b, c, d), m = PIXI.EarCut.zOrder(j, k, b, c, d), n = a.nextZ; n && n.z <= m;) { if (n !== a.prev && n !== a.next && PIXI.EarCut.pointInTriangle(e.x, e.y, f.x, f.y, g.x, g.y, n.x, n.y) && PIXI.EarCut.area(n.prev, n, n.next) >= 0) return !1; n = n.nextZ } for (n = a.prevZ; n && n.z >= l;) { if (n !== a.prev && n !== a.next && PIXI.EarCut.pointInTriangle(e.x, e.y, f.x, f.y, g.x, g.y, n.x, n.y) && PIXI.EarCut.area(n.prev, n, n.next) >= 0) return !1; n = n.prevZ } return !0 }, PIXI.EarCut.cureLocalIntersections = function(a, b, c) { var d = a; do { var e = d.prev, f = d.next.next; PIXI.EarCut.intersects(e, d, d.next, f) && PIXI.EarCut.locallyInside(e, f) && PIXI.EarCut.locallyInside(f, e) && (b.push(e.i / c), b.push(d.i / c), b.push(f.i / c), PIXI.EarCut.removeNode(d), PIXI.EarCut.removeNode(d.next), d = a = f), d = d.next } while (d !== a); return d }, PIXI.EarCut.splitEarcut = function(a, b, c, d, e, f) { var g = a; do { for (var h = g.next.next; h !== g.prev;) { if (g.i !== h.i && PIXI.EarCut.isValidDiagonal(g, h)) { var i = PIXI.EarCut.splitPolygon(g, h); return g = PIXI.EarCut.filterPoints(g, g.next), i = PIXI.EarCut.filterPoints(i, i.next), PIXI.EarCut.earcutLinked(g, b, c, d, e, f), void PIXI.EarCut.earcutLinked(i, b, c, d, e, f) } h = h.next } g = g.next } while (g !== a) }, PIXI.EarCut.eliminateHoles = function(a, b, c, d) { var e, f, g, h, i, j = []; for (e = 0, f = b.length; e < f; e++) g = b[e] * d, h = e < f - 1 ? b[e + 1] * d : a.length, i = PIXI.EarCut.linkedList(a, g, h, d, !1), i === i.next && (i.steiner = !0), j.push(PIXI.EarCut.getLeftmost(i)); for (j.sort(compareX), e = 0; e < j.length; e++) PIXI.EarCut.eliminateHole(j[e], c), c = PIXI.EarCut.filterPoints(c, c.next); return c }, PIXI.EarCut.compareX = function(a, b) { return a.x - b.x }, PIXI.EarCut.eliminateHole = function(a, b) { if (b = PIXI.EarCut.findHoleBridge(a, b)) { var c = PIXI.EarCut.splitPolygon(b, a); PIXI.EarCut.filterPoints(c, c.next) } }, PIXI.EarCut.findHoleBridge = function(a, b) { var c, d = b, e = a.x, f = a.y, g = -1 / 0; do { if (f <= d.y && f >= d.next.y) { var h = d.x + (f - d.y) * (d.next.x - d.x) / (d.next.y - d.y); h <= e && h > g && (g = h, c = d.x < d.next.x ? d : d.next) } d = d.next } while (d !== b); if (!c) return null; if (a.x === c.x) return c.prev; var i, j = c, k = 1 / 0; for (d = c.next; d !== j;) e >= d.x && d.x >= c.x && PIXI.EarCut.pointInTriangle(f < c.y ? e : g, f, c.x, c.y, f < c.y ? g : e, f, d.x, d.y) && ((i = Math.abs(f - d.y) / (e - d.x)) < k || i === k && d.x > c.x) && PIXI.EarCut.locallyInside(d, a) && (c = d, k = i), d = d.next; return c }, PIXI.EarCut.indexCurve = function(a, b, c, d) { var e = a; do { null === e.z && (e.z = PIXI.EarCut.zOrder(e.x, e.y, b, c, d)), e.prevZ = e.prev, e.nextZ = e.next, e = e.next } while (e !== a); e.prevZ.nextZ = null, e.prevZ = null, PIXI.EarCut.sortLinked(e) }, PIXI.EarCut.sortLinked = function(a) { var b, c, d, e, f, g, h, i, j = 1; do { for (c = a, a = null, f = null, g = 0; c;) { for (g++, d = c, h = 0, b = 0; b < j && (h++, d = d.nextZ); b++); for (i = j; h > 0 || i > 0 && d;) 0 === h ? (e = d, d = d.nextZ, i--) : 0 !== i && d ? c.z <= d.z ? (e = c, c = c.nextZ, h--) : (e = d, d = d.nextZ, i--) : (e = c, c = c.nextZ, h--), f ? f.nextZ = e : a = e, e.prevZ = f, f = e; c = d } f.nextZ = null, j *= 2 } while (g > 1); return a }, PIXI.EarCut.zOrder = function(a, b, c, d, e) { return a = 32767 * (a - c) / e, b = 32767 * (b - d) / e, a = 16711935 & (a | a << 8), a = 252645135 & (a | a << 4), a = 858993459 & (a | a << 2), a = 1431655765 & (a | a << 1), b = 16711935 & (b | b << 8), b = 252645135 & (b | b << 4), b = 858993459 & (b | b << 2), b = 1431655765 & (b | b << 1), a | b << 1 }, PIXI.EarCut.getLeftmost = function(a) { var b = a, c = a; do { b.x < c.x && (c = b), b = b.next } while (b !== a); return c }, PIXI.EarCut.pointInTriangle = function(a, b, c, d, e, f, g, h) { return (e - g) * (b - h) - (a - g) * (f - h) >= 0 && (a - g) * (d - h) - (c - g) * (b - h) >= 0 && (c - g) * (f - h) - (e - g) * (d - h) >= 0 }, PIXI.EarCut.isValidDiagonal = function(a, b) { return PIXI.EarCut.equals(a, b) || a.next.i !== b.i && a.prev.i !== b.i && !PIXI.EarCut.intersectsPolygon(a, b) && PIXI.EarCut.locallyInside(a, b) && PIXI.EarCut.locallyInside(b, a) && PIXI.EarCut.middleInside(a, b) }, PIXI.EarCut.area = function(a, b, c) { return (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y) }, PIXI.EarCut.equals = function(a, b) { return a.x === b.x && a.y === b.y }, PIXI.EarCut.intersects = function(a, b, c, d) { return PIXI.EarCut.area(a, b, c) > 0 != PIXI.EarCut.area(a, b, d) > 0 && PIXI.EarCut.area(c, d, a) > 0 != PIXI.EarCut.area(c, d, b) > 0 }, PIXI.EarCut.intersectsPolygon = function(a, b) { var c = a; do { if (c.i !== a.i && c.next.i !== a.i && c.i !== b.i && c.next.i !== b.i && PIXI.EarCut.intersects(c, c.next, a, b)) return !0; c = c.next } while (c !== a); return !1 }, PIXI.EarCut.locallyInside = function(a, b) { return PIXI.EarCut.area(a.prev, a, a.next) < 0 ? PIXI.EarCut.area(a, b, a.next) >= 0 && PIXI.EarCut.area(a, a.prev, b) >= 0 : PIXI.EarCut.area(a, b, a.prev) < 0 || PIXI.EarCut.area(a, a.next, b) < 0 }, PIXI.EarCut.middleInside = function(a, b) { var c = a, d = !1, e = (a.x + b.x) / 2, f = (a.y + b.y) / 2; do { c.y > f != c.next.y > f && e < (c.next.x - c.x) * (f - c.y) / (c.next.y - c.y) + c.x && (d = !d), c = c.next } while (c !== a); return d }, PIXI.EarCut.splitPolygon = function(a, b) { var c = new PIXI.EarCut.Node(a.i, a.x, a.y), d = new PIXI.EarCut.Node(b.i, b.x, b.y), e = a.next, f = b.prev; return a.next = b, b.prev = a, c.next = e, e.prev = c, d.next = c, c.prev = d, f.next = d, d.prev = f, d }, PIXI.EarCut.insertNode = function(a, b, c, d) { var e = new PIXI.EarCut.Node(a, b, c); return d ? (e.next = d.next, e.prev = d, d.next.prev = e, d.next = e) : (e.prev = e, e.next = e), e }, PIXI.EarCut.removeNode = function(a) { a.next.prev = a.prev, a.prev.next = a.next, a.prevZ && (a.prevZ.nextZ = a.nextZ), a.nextZ && (a.nextZ.prevZ = a.prevZ) }, PIXI.EarCut.Node = function(a, b, c) { this.i = a, this.x = b, this.y = c, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = !1 }, PIXI.WebGLGraphics = function() {}, PIXI.WebGLGraphics.stencilBufferLimit = 6, PIXI.WebGLGraphics.renderGraphics = function(a, b) { var c, d = b.gl, e = b.projection, f = b.offset, g = b.shaderManager.primitiveShader; a.dirty && PIXI.WebGLGraphics.updateGraphics(a, d); for (var h = a._webGL[d.id], i = 0; i < h.data.length; i++) 1 === h.data[i].mode ? (c = h.data[i], b.stencilManager.pushStencil(a, c, b), d.drawElements(d.TRIANGLE_FAN, 4, d.UNSIGNED_SHORT, 2 * (c.indices.length - 4)), b.stencilManager.popStencil(a, c, b)) : (c = h.data[i], b.shaderManager.setShader(g), g = b.shaderManager.primitiveShader, d.uniformMatrix3fv(g.translationMatrix, !1, a.worldTransform.toArray(!0)), d.uniform1f(g.flipY, 1), d.uniform2f(g.projectionVector, e.x, -e.y), d.uniform2f(g.offsetVector, -f.x, -f.y), d.uniform3fv(g.tintColor, PIXI.hex2rgb(a.tint)), d.uniform1f(g.alpha, a.worldAlpha), d.bindBuffer(d.ARRAY_BUFFER, c.buffer), d.vertexAttribPointer(g.aVertexPosition, 2, d.FLOAT, !1, 24, 0), d.vertexAttribPointer(g.colorAttribute, 4, d.FLOAT, !1, 24, 8), d.bindBuffer(d.ELEMENT_ARRAY_BUFFER, c.indexBuffer), d.drawElements(d.TRIANGLE_STRIP, c.indices.length, d.UNSIGNED_SHORT, 0)) }, PIXI.WebGLGraphics.updateGraphics = function(a, b) { var c = a._webGL[b.id]; c || (c = a._webGL[b.id] = { lastIndex: 0, data: [], gl: b }), a.dirty = !1; var d; if (a.clearDirty) { for (a.clearDirty = !1, d = 0; d < c.data.length; d++) { var e = c.data[d]; e.reset(), PIXI.WebGLGraphics.graphicsDataPool.push(e) } c.data = [], c.lastIndex = 0 } var f; for (d = c.lastIndex; d < a.graphicsData.length; d++) { var g = a.graphicsData[d]; if (g.type === PIXI.Graphics.POLY) { if (g.points = g.shape.points.slice(), g.shape.closed && (g.points[0] === g.points[g.points.length - 2] && g.points[1] === g.points[g.points.length - 1] || g.points.push(g.points[0], g.points[1])), g.fill && g.points.length >= PIXI.WebGLGraphics.stencilBufferLimit) if (g.points.length < 2 * PIXI.WebGLGraphics.stencilBufferLimit) { f = PIXI.WebGLGraphics.switchMode(c, 0); var h = PIXI.WebGLGraphics.buildPoly(g, f); h || (f = PIXI.WebGLGraphics.switchMode(c, 1), PIXI.WebGLGraphics.buildComplexPoly(g, f)) } else f = PIXI.WebGLGraphics.switchMode(c, 1), PIXI.WebGLGraphics.buildComplexPoly(g, f); g.lineWidth > 0 && (f = PIXI.WebGLGraphics.switchMode(c, 0), PIXI.WebGLGraphics.buildLine(g, f)) } else f = PIXI.WebGLGraphics.switchMode(c, 0), g.type === PIXI.Graphics.RECT ? PIXI.WebGLGraphics.buildRectangle(g, f) : g.type === PIXI.Graphics.CIRC || g.type === PIXI.Graphics.ELIP ? PIXI.WebGLGraphics.buildCircle(g, f) : g.type === PIXI.Graphics.RREC && PIXI.WebGLGraphics.buildRoundedRectangle(g, f); c.lastIndex++ } for (d = 0; d < c.data.length; d++) f = c.data[d], f.dirty && f.upload() }, PIXI.WebGLGraphics.switchMode = function(a, b) { var c; return a.data.length ? (c = a.data[a.data.length - 1], c.mode === b && 1 !== b || (c = PIXI.WebGLGraphics.graphicsDataPool.pop() || new PIXI.WebGLGraphicsData(a.gl), c.mode = b, a.data.push(c))) : (c = PIXI.WebGLGraphics.graphicsDataPool.pop() || new PIXI.WebGLGraphicsData(a.gl), c.mode = b, a.data.push(c)), c.dirty = !0, c }, PIXI.WebGLGraphics.buildRectangle = function(a, b) { var c = a.shape, d = c.x, e = c.y, f = c.width, g = c.height; if (a.fill) { var h = PIXI.hex2rgb(a.fillColor), i = a.fillAlpha, j = h[0] * i, k = h[1] * i, l = h[2] * i, m = b.points, n = b.indices, o = m.length / 6; m.push(d, e), m.push(j, k, l, i), m.push(d + f, e), m.push(j, k, l, i), m.push(d, e + g), m.push(j, k, l, i), m.push(d + f, e + g), m.push(j, k, l, i), n.push(o, o, o + 1, o + 2, o + 3, o + 3) } if (a.lineWidth) { var p = a.points; a.points = [d, e, d + f, e, d + f, e + g, d, e + g, d, e], PIXI.WebGLGraphics.buildLine(a, b), a.points = p } }, PIXI.WebGLGraphics.buildRoundedRectangle = function(a, b) { var c = a.shape, d = c.x, e = c.y, f = c.width, g = c.height, h = c.radius, i = []; if (i.push(d, e + h), i = i.concat(PIXI.WebGLGraphics.quadraticBezierCurve(d, e + g - h, d, e + g, d + h, e + g)), i = i.concat(PIXI.WebGLGraphics.quadraticBezierCurve(d + f - h, e + g, d + f, e + g, d + f, e + g - h)), i = i.concat(PIXI.WebGLGraphics.quadraticBezierCurve(d + f, e + h, d + f, e, d + f - h, e)), i = i.concat(PIXI.WebGLGraphics.quadraticBezierCurve(d + h, e, d, e, d, e + h)), a.fill) { var j = PIXI.hex2rgb(a.fillColor), k = a.fillAlpha, l = j[0] * k, m = j[1] * k, n = j[2] * k, o = b.points, p = b.indices, q = o.length / 6, r = PIXI.EarCut.Triangulate(i, null, 2), s = 0; for (s = 0; s < r.length; s += 3) p.push(r[s] + q), p.push(r[s] + q), p.push(r[s + 1] + q), p.push(r[s + 2] + q), p.push(r[s + 2] + q); for (s = 0; s < i.length; s++) o.push(i[s], i[++s], l, m, n, k) } if (a.lineWidth) { var t = a.points; a.points = i, PIXI.WebGLGraphics.buildLine(a, b), a.points = t } }, PIXI.WebGLGraphics.quadraticBezierCurve = function(a, b, c, d, e, f) { function g(a, b, c) { return a + (b - a) * c } for (var h, i, j, k, l, m, n = [], o = 0, p = 0; p <= 20; p++) o = p / 20, h = g(a, c, o), i = g(b, d, o), j = g(c, e, o), k = g(d, f, o), l = g(h, j, o), m = g(i, k, o), n.push(l, m); return n }, PIXI.WebGLGraphics.buildCircle = function(a, b) { var c, d, e = a.shape, f = e.x, g = e.y; a.type === PIXI.Graphics.CIRC ? (c = e.radius, d = e.radius) : (c = e.width, d = e.height); var h = 2 * Math.PI / 40, i = 0; if (a.fill) { var j = PIXI.hex2rgb(a.fillColor), k = a.fillAlpha, l = j[0] * k, m = j[1] * k, n = j[2] * k, o = b.points, p = b.indices, q = o.length / 6; for (p.push(q), i = 0; i < 41; i++) o.push(f, g, l, m, n, k), o.push(f + Math.sin(h * i) * c, g + Math.cos(h * i) * d, l, m, n, k), p.push(q++, q++); p.push(q - 1) } if (a.lineWidth) { var r = a.points; for (a.points = [], i = 0; i < 41; i++) a.points.push(f + Math.sin(h * i) * c, g + Math.cos(h * i) * d); PIXI.WebGLGraphics.buildLine(a, b), a.points = r } }, PIXI.WebGLGraphics.buildLine = function(a, b) { var c = 0, d = a.points; if (0 !== d.length) { if (a.lineWidth % 2) for (c = 0; c < d.length; c++) d[c] += .5; var e = new PIXI.Point(d[0], d[1]), f = new PIXI.Point(d[d.length - 2], d[d.length - 1]); if (e.x === f.x && e.y === f.y) { d = d.slice(), d.pop(), d.pop(), f = new PIXI.Point(d[d.length - 2], d[d.length - 1]); var g = f.x + .5 * (e.x - f.x), h = f.y + .5 * (e.y - f.y); d.unshift(g, h), d.push(g, h) } var i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F = b.points, G = b.indices, H = d.length / 2, I = d.length, J = F.length / 6, K = a.lineWidth / 2, L = PIXI.hex2rgb(a.lineColor), M = a.lineAlpha, N = L[0] * M, O = L[1] * M, P = L[2] * M; for (k = d[0], l = d[1], m = d[2], n = d[3], q = -(l - n), r = k - m, E = Math.sqrt(q * q + r * r), q /= E, r /= E, q *= K, r *= K, F.push(k - q, l - r, N, O, P, M), F.push(k + q, l + r, N, O, P, M), c = 1; c < H - 1; c++) k = d[2 * (c - 1)], l = d[2 * (c - 1) + 1], m = d[2 * c], n = d[2 * c + 1], o = d[2 * (c + 1)], p = d[2 * (c + 1) + 1], q = -(l - n), r = k - m, E = Math.sqrt(q * q + r * r), q /= E, r /= E, q *= K, r *= K, s = -(n - p), t = m - o, E = Math.sqrt(s * s + t * t), s /= E, t /= E, s *= K, t *= K, w = -r + l - (-r + n), x = -q + m - (-q + k), y = (-q + k) * (-r + n) - (-q + m) * (-r + l), z = -t + p - (-t + n), A = -s + m - (-s + o), B = (-s + o) * (-t + n) - (-s + m) * (-t + p), C = w * A - z * x, Math.abs(C) < .1 ? (C += 10.1, F.push(m - q, n - r, N, O, P, M), F.push(m + q, n + r, N, O, P, M)) : (i = (x * B - A * y) / C, j = (z * y - w * B) / C, D = (i - m) * (i - m) + (j - n) + (j - n), D > 19600 ? (u = q - s, v = r - t, E = Math.sqrt(u * u + v * v), u /= E, v /= E, u *= K, v *= K, F.push(m - u, n - v), F.push(N, O, P, M), F.push(m + u, n + v), F.push(N, O, P, M), F.push(m - u, n - v), F.push(N, O, P, M), I++) : (F.push(i, j), F.push(N, O, P, M), F.push(m - (i - m), n - (j - n)), F.push(N, O, P, M))); for (k = d[2 * (H - 2)], l = d[2 * (H - 2) + 1], m = d[2 * (H - 1)], n = d[2 * (H - 1) + 1], q = -(l - n), r = k - m, E = Math.sqrt(q * q + r * r), q /= E, r /= E, q *= K, r *= K, F.push(m - q, n - r), F.push(N, O, P, M), F.push(m + q, n + r), F.push(N, O, P, M), G.push(J), c = 0; c < I; c++) G.push(J++); G.push(J - 1) } }, PIXI.WebGLGraphics.buildComplexPoly = function(a, b) { var c = a.points.slice(); if (!(c.length < 6)) { var d = b.indices; b.points = c, b.alpha = a.fillAlpha, b.color = PIXI.hex2rgb(a.fillColor); for (var e, f, g = 1 / 0, h = -1 / 0, i = 1 / 0, j = -1 / 0, k = 0; k < c.length; k += 2) e = c[k], f = c[k + 1], g = e < g ? e : g, h = e > h ? e : h, i = f < i ? f : i, j = f > j ? f : j; c.push(g, i, h, i, h, j, g, j); var l = c.length / 2; for (k = 0; k < l; k++) d.push(k) } }, PIXI.WebGLGraphics.buildPoly = function(a, b) { var c = a.points; if (!(c.length < 6)) { var d = b.points, e = b.indices, f = c.length / 2, g = PIXI.hex2rgb(a.fillColor), h = a.fillAlpha, i = g[0] * h, j = g[1] * h, k = g[2] * h, l = PIXI.EarCut.Triangulate(c, null, 2); if (!l) return !1; var m = d.length / 6, n = 0; for (n = 0; n < l.length; n += 3) e.push(l[n] + m), e.push(l[n] + m), e.push(l[n + 1] + m), e.push(l[n + 2] + m), e.push(l[n + 2] + m); for (n = 0; n < f; n++) d.push(c[2 * n], c[2 * n + 1], i, j, k, h); return !0 } }, PIXI.WebGLGraphics.graphicsDataPool = [], PIXI.WebGLGraphicsData = function(a) { this.gl = a, this.color = [0, 0, 0], this.points = [], this.indices = [], this.buffer = a.createBuffer(), this.indexBuffer = a.createBuffer(), this.mode = 1, this.alpha = 1, this.dirty = !0 }, PIXI.WebGLGraphicsData.prototype.reset = function() { this.points = [], this.indices = [] }, PIXI.WebGLGraphicsData.prototype.upload = function() { var a = this.gl; this.glPoints = new PIXI.Float32Array(this.points), a.bindBuffer(a.ARRAY_BUFFER, this.buffer), a.bufferData(a.ARRAY_BUFFER, this.glPoints, a.STATIC_DRAW), this.glIndicies = new PIXI.Uint16Array(this.indices), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer), a.bufferData(a.ELEMENT_ARRAY_BUFFER, this.glIndicies, a.STATIC_DRAW), this.dirty = !1 }, PIXI.CanvasGraphics = function() {}, PIXI.CanvasGraphics.renderGraphics = function(a, b) { var c = a.worldAlpha; a.dirty && (this.updateGraphicsTint(a), a.dirty = !1); for (var d = 0; d < a.graphicsData.length; d++) { var e = a.graphicsData[d], f = e.shape, g = e._fillTint, h = e._lineTint; if (b.lineWidth = e.lineWidth, e.type === PIXI.Graphics.POLY) { b.beginPath(); var i = f.points; b.moveTo(i[0], i[1]); for (var j = 1; j < i.length / 2; j++) b.lineTo(i[2 * j], i[2 * j + 1]); f.closed && b.lineTo(i[0], i[1]), i[0] === i[i.length - 2] && i[1] === i[i.length - 1] && b.closePath(), e.fill && (b.globalAlpha = e.fillAlpha * c, b.fillStyle = "#" + ("00000" + (0 | g).toString(16)).substr(-6), b.fill()), e.lineWidth && (b.globalAlpha = e.lineAlpha * c, b.strokeStyle = "#" + ("00000" + (0 | h).toString(16)).substr(-6), b.stroke()) } else if (e.type === PIXI.Graphics.RECT)(e.fillColor || 0 === e.fillColor) && (b.globalAlpha = e.fillAlpha * c, b.fillStyle = "#" + ("00000" + (0 | g).toString(16)).substr(-6), b.fillRect(f.x, f.y, f.width, f.height)), e.lineWidth && (b.globalAlpha = e.lineAlpha * c, b.strokeStyle = "#" + ("00000" + (0 | h).toString(16)).substr(-6), b.strokeRect(f.x, f.y, f.width, f.height)); else if (e.type === PIXI.Graphics.CIRC) b.beginPath(), b.arc(f.x, f.y, f.radius, 0, 2 * Math.PI), b.closePath(), e.fill && (b.globalAlpha = e.fillAlpha * c, b.fillStyle = "#" + ("00000" + (0 | g).toString(16)).substr(-6), b.fill()), e.lineWidth && (b.globalAlpha = e.lineAlpha * c, b.strokeStyle = "#" + ("00000" + (0 | h).toString(16)).substr(-6), b.stroke()); else if (e.type === PIXI.Graphics.ELIP) { var k = 2 * f.width, l = 2 * f.height, m = f.x - k / 2, n = f.y - l / 2; b.beginPath(); var o = k / 2 * .5522848, p = l / 2 * .5522848, q = m + k, r = n + l, s = m + k / 2, t = n + l / 2; b.moveTo(m, t), b.bezierCurveTo(m, t - p, s - o, n, s, n), b.bezierCurveTo(s + o, n, q, t - p, q, t), b.bezierCurveTo(q, t + p, s + o, r, s, r), b.bezierCurveTo(s - o, r, m, t + p, m, t), b.closePath(), e.fill && (b.globalAlpha = e.fillAlpha * c, b.fillStyle = "#" + ("00000" + (0 | g).toString(16)).substr(-6), b.fill()), e.lineWidth && (b.globalAlpha = e.lineAlpha * c, b.strokeStyle = "#" + ("00000" + (0 | h).toString(16)).substr(-6), b.stroke()) } else if (e.type === PIXI.Graphics.RREC) { var u = f.x, v = f.y, w = f.width, x = f.height, y = f.radius, z = Math.min(w, x) / 2 | 0; y = y > z ? z : y, b.beginPath(), b.moveTo(u, v + y), b.lineTo(u, v + x - y), b.quadraticCurveTo(u, v + x, u + y, v + x), b.lineTo(u + w - y, v + x), b.quadraticCurveTo(u + w, v + x, u + w, v + x - y), b.lineTo(u + w, v + y), b.quadraticCurveTo(u + w, v, u + w - y, v), b.lineTo(u + y, v), b.quadraticCurveTo(u, v, u, v + y), b.closePath(), (e.fillColor || 0 === e.fillColor) && (b.globalAlpha = e.fillAlpha * c, b.fillStyle = "#" + ("00000" + (0 | g).toString(16)).substr(-6), b.fill()), e.lineWidth && (b.globalAlpha = e.lineAlpha * c, b.strokeStyle = "#" + ("00000" + (0 | h).toString(16)).substr(-6), b.stroke()) } } }, PIXI.CanvasGraphics.renderGraphicsMask = function(a, b) { var c = a.graphicsData.length; if (0 !== c) { b.beginPath(); for (var d = 0; d < c; d++) { var e = a.graphicsData[d], f = e.shape; if (e.type === PIXI.Graphics.POLY) { var g = f.points; b.moveTo(g[0], g[1]); for (var h = 1; h < g.length / 2; h++) b.lineTo(g[2 * h], g[2 * h + 1]); g[0] === g[g.length - 2] && g[1] === g[g.length - 1] && b.closePath() } else if (e.type === PIXI.Graphics.RECT) b.rect(f.x, f.y, f.width, f.height), b.closePath(); else if (e.type === PIXI.Graphics.CIRC) b.arc(f.x, f.y, f.radius, 0, 2 * Math.PI), b.closePath(); else if (e.type === PIXI.Graphics.ELIP) { var i = 2 * f.width, j = 2 * f.height, k = f.x - i / 2, l = f.y - j / 2, m = i / 2 * .5522848, n = j / 2 * .5522848, o = k + i, p = l + j, q = k + i / 2, r = l + j / 2; b.moveTo(k, r), b.bezierCurveTo(k, r - n, q - m, l, q, l), b.bezierCurveTo(q + m, l, o, r - n, o, r), b.bezierCurveTo(o, r + n, q + m, p, q, p), b.bezierCurveTo(q - m, p, k, r + n, k, r), b.closePath() } else if (e.type === PIXI.Graphics.RREC) { var s = f.x, t = f.y, u = f.width, v = f.height, w = f.radius, x = Math.min(u, v) / 2 | 0; w = w > x ? x : w, b.moveTo(s, t + w), b.lineTo(s, t + v - w), b.quadraticCurveTo(s, t + v, s + w, t + v), b.lineTo(s + u - w, t + v), b.quadraticCurveTo(s + u, t + v, s + u, t + v - w), b.lineTo(s + u, t + w), b.quadraticCurveTo(s + u, t, s + u - w, t), b.lineTo(s + w, t), b.quadraticCurveTo(s, t, s, t + w), b.closePath() } } } }, PIXI.CanvasGraphics.updateGraphicsTint = function(a) { if (16777215 !== a.tint) for (var b = (a.tint >> 16 & 255) / 255, c = (a.tint >> 8 & 255) / 255, d = (255 & a.tint) / 255, e = 0; e < a.graphicsData.length; e++) { var f = a.graphicsData[e], g = 0 | f.fillColor, h = 0 | f.lineColor; f._fillTint = ((g >> 16 & 255) / 255 * b * 255 << 16) + ((g >> 8 & 255) / 255 * c * 255 << 8) + (255 & g) / 255 * d * 255, f._lineTint = ((h >> 16 & 255) / 255 * b * 255 << 16) + ((h >> 8 & 255) / 255 * c * 255 << 8) + (255 & h) / 255 * d * 255 } }, c.Graphics = function(a, b, d) { void 0 === b && (b = 0), void 0 === d && (d = 0), this.type = c.GRAPHICS, this.physicsType = c.SPRITE, this.anchor = new c.Point, PIXI.Graphics.call(this), c.Component.Core.init.call(this, a, b, d, "", null) }, c.Graphics.prototype = Object.create(PIXI.Graphics.prototype), c.Graphics.prototype.constructor = c.Graphics, c.Component.Core.install.call(c.Graphics.prototype, ["Angle", "AutoCull", "Bounds", "Destroy", "FixedToCamera", "InputEnabled", "InWorld", "LifeSpan", "PhysicsBody", "Reset"]), c.Graphics.prototype.preUpdatePhysics = c.Component.PhysicsBody.preUpdate, c.Graphics.prototype.preUpdateLifeSpan = c.Component.LifeSpan.preUpdate, c.Graphics.prototype.preUpdateInWorld = c.Component.InWorld.preUpdate, c.Graphics.prototype.preUpdateCore = c.Component.Core.preUpdate, c.Graphics.prototype.preUpdate = function() { return !!(this.preUpdatePhysics() && this.preUpdateLifeSpan() && this.preUpdateInWorld()) && this.preUpdateCore() }, c.Graphics.prototype.postUpdate = function() { c.Component.PhysicsBody.postUpdate.call(this), c.Component.FixedToCamera.postUpdate.call(this), this._boundsDirty && (this.updateLocalBounds(), this._boundsDirty = !1); for (var a = 0; a < this.children.length; a++) this.children[a].postUpdate() }, c.Graphics.prototype.destroy = function(a) { this.clear(), c.Component.Destroy.prototype.destroy.call(this, a) }, c.Graphics.prototype.drawTriangle = function(a, b) { void 0 === b && (b = !1); var d = new c.Polygon(a); if (b) { var e = new c.Point(this.game.camera.x - a[0].x, this.game.camera.y - a[0].y), f = new c.Point(a[1].x - a[0].x, a[1].y - a[0].y), g = new c.Point(a[1].x - a[2].x, a[1].y - a[2].y), h = g.cross(f); e.dot(h) > 0 && this.drawPolygon(d) } else this.drawPolygon(d) }, c.Graphics.prototype.drawTriangles = function(a, b, d) { void 0 === d && (d = !1); var e, f = new c.Point, g = new c.Point, h = new c.Point, i = []; if (b) if (a[0] instanceof c.Point) for (e = 0; e < b.length / 3; e++) i.push(a[b[3 * e]]), i.push(a[b[3 * e + 1]]), i.push(a[b[3 * e + 2]]), 3 === i.length && (this.drawTriangle(i, d), i = []); else for (e = 0; e < b.length; e++) f.x = a[2 * b[e]], f.y = a[2 * b[e] + 1], i.push(f.copyTo({})), 3 === i.length && (this.drawTriangle(i, d), i = []); else if (a[0] instanceof c.Point) for (e = 0; e < a.length / 3; e++) this.drawTriangle([a[3 * e], a[3 * e + 1], a[3 * e + 2]], d); else for (e = 0; e < a.length / 6; e++) f.x = a[6 * e + 0], f.y = a[6 * e + 1], g.x = a[6 * e + 2], g.y = a[6 * e + 3], h.x = a[6 * e + 4], h.y = a[6 * e + 5], this.drawTriangle([f, g, h], d) }, c.RenderTexture = function(a, b, d, e, f, g) { void 0 === e && (e = ""), void 0 === f && (f = c.scaleModes.DEFAULT), void 0 === g && (g = 1), this.game = a, this.key = e, this.type = c.RENDERTEXTURE, this._tempMatrix = new PIXI.Matrix, PIXI.RenderTexture.call(this, b, d, this.game.renderer, f, g), this.render = c.RenderTexture.prototype.render }, c.RenderTexture.prototype = Object.create(PIXI.RenderTexture.prototype), c.RenderTexture.prototype.constructor = c.RenderTexture, c.RenderTexture.prototype.renderXY = function(a, b, c, d) { a.updateTransform(), this._tempMatrix.copyFrom(a.worldTransform), this._tempMatrix.tx = b, this._tempMatrix.ty = c, this.renderer.type === PIXI.WEBGL_RENDERER ? this.renderWebGL(a, this._tempMatrix, d) : this.renderCanvas(a, this._tempMatrix, d) }, c.RenderTexture.prototype.renderRawXY = function(a, b, c, d) { this._tempMatrix.identity().translate(b, c), this.renderer.type === PIXI.WEBGL_RENDERER ? this.renderWebGL(a, this._tempMatrix, d) : this.renderCanvas(a, this._tempMatrix, d) }, c.RenderTexture.prototype.render = function(a, b, c) { void 0 === b || null === b ? this._tempMatrix.copyFrom(a.worldTransform) : this._tempMatrix.copyFrom(b), this.renderer.type === PIXI.WEBGL_RENDERER ? this.renderWebGL(a, this._tempMatrix, c) : this.renderCanvas(a, this._tempMatrix, c) }, c.Text = function(a, b, d, e, f) { b = b || 0, d = d || 0, e = void 0 === e || null === e ? "" : e.toString(), f = c.Utils.extend({}, f), this.type = c.TEXT, this.physicsType = c.SPRITE, this.padding = new c.Point, this.textBounds = null, this.canvas = PIXI.CanvasPool.create(this), this.context = this.canvas.getContext("2d"), this.colors = [], this.strokeColors = [], this.fontStyles = [], this.fontWeights = [], this.autoRound = !1, this.useAdvancedWrap = !1, this._res = a.renderer.resolution, this._text = e, this._fontComponents = null, this._lineSpacing = 0, this._charCount = 0, this._width = 0, this._height = 0, c.Sprite.call(this, a, b, d, PIXI.Texture.fromCanvas(this.canvas)), this.setStyle(f), "" !== e && this.updateText() }, c.Text.prototype = Object.create(c.Sprite.prototype), c.Text.prototype.constructor = c.Text, c.Text.prototype.preUpdate = function() { return !!(this.preUpdatePhysics() && this.preUpdateLifeSpan() && this.preUpdateInWorld()) && this.preUpdateCore() }, c.Text.prototype.update = function() {}, c.Text.prototype.destroy = function(a) { this.texture.destroy(!0), c.Component.Destroy.prototype.destroy.call(this, a) }, c.Text.prototype.setShadow = function(a, b, c, d, e, f) { return void 0 === a && (a = 0), void 0 === b && (b = 0), void 0 === c && (c = "rgba(0, 0, 0, 1)"), void 0 === d && (d = 0), void 0 === e && (e = !0), void 0 === f && (f = !0), this.style.shadowOffsetX = a, this.style.shadowOffsetY = b, this.style.shadowColor = c, this.style.shadowBlur = d, this.style.shadowStroke = e, this.style.shadowFill = f, this.dirty = !0, this }, c.Text.prototype.setStyle = function(a, b) { void 0 === b && (b = !1), a = a || {}, a.font = a.font || "bold 20pt Arial", a.backgroundColor = a.backgroundColor || null, a.fill = a.fill || "black", a.align = a.align || "left", a.boundsAlignH = a.boundsAlignH || "left", a.boundsAlignV = a.boundsAlignV || "top", a.stroke = a.stroke || "black", a.strokeThickness = a.strokeThickness || 0, a.wordWrap = a.wordWrap || !1, a.wordWrapWidth = a.wordWrapWidth || 100, a.maxLines = a.maxLines || 0, a.shadowOffsetX = a.shadowOffsetX || 0, a.shadowOffsetY = a.shadowOffsetY || 0, a.shadowColor = a.shadowColor || "rgba(0,0,0,0)", a.shadowBlur = a.shadowBlur || 0, a.tabs = a.tabs || 0; var c = this.fontToComponents(a.font); return a.fontStyle && (c.fontStyle = a.fontStyle), a.fontVariant && (c.fontVariant = a.fontVariant), a.fontWeight && (c.fontWeight = a.fontWeight), a.fontSize && ("number" == typeof a.fontSize && (a.fontSize = a.fontSize + "px"), c.fontSize = a.fontSize), this._fontComponents = c, a.font = this.componentsToFont(this._fontComponents), this.style = a, this.dirty = !0, b && this.updateText(), this }, c.Text.prototype.updateText = function() { this.texture.baseTexture.resolution = this._res, this.context.font = this.style.font; var a = this.text; this.style.wordWrap && (a = this.runWordWrap(this.text)); var b = a.split(/(?:\r\n|\r|\n)/), c = this.style.tabs, d = [], e = 0, f = this.determineFontProperties(this.style.font), g = b.length; this.style.maxLines > 0 && this.style.maxLines < b.length && (g = this.style.maxLines), this._charCount = 0; for (var h = 0; h < g; h++) { if (0 === c) { var i = this.style.strokeThickness + this.padding.x; this.colors.length > 0 || this.strokeColors.length > 0 || this.fontWeights.length > 0 || this.fontStyles.length > 0 ? i += this.measureLine(b[h]) : i += this.context.measureText(b[h]).width, this.style.wordWrap && (i -= this.context.measureText(" ").width) } else { var j = b[h].split(/(?:\t)/), i = this.padding.x + this.style.strokeThickness; if (Array.isArray(c)) for (var k = 0, l = 0; l < j.length; l++) { var m = 0; m = this.colors.length > 0 || this.strokeColors.length > 0 || this.fontWeights.length > 0 || this.fontStyles.length > 0 ? this.measureLine(j[l]) : Math.ceil(this.context.measureText(j[l]).width), l > 0 && (k += c[l - 1]), i = k + m } else for (var l = 0; l < j.length; l++) { this.colors.length > 0 || this.strokeColors.length > 0 || this.fontWeights.length > 0 || this.fontStyles.length > 0 ? i += this.measureLine(j[l]) : i += Math.ceil(this.context.measureText(j[l]).width); var n = this.game.math.snapToCeil(i, c) - i; i += n } } d[h] = Math.ceil(i), e = Math.max(e, d[h]) } this.canvas.width = e * this._res; var o = f.fontSize + this.style.strokeThickness + this.padding.y, p = o * g, q = this._lineSpacing; q < 0 && Math.abs(q) > o && (q = -o), 0 !== q && (p += q > 0 ? q * b.length : q * (b.length - 1)), this.canvas.height = p * this._res, this.context.scale(this._res, this._res), navigator.isCocoonJS && this.context.clearRect(0, 0, this.canvas.width, this.canvas.height), this.style.backgroundColor && (this.context.fillStyle = this.style.backgroundColor, this.context.fillRect(0, 0, this.canvas.width, this.canvas.height)), this.context.fillStyle = this.style.fill, this.context.font = this.style.font, this.context.strokeStyle = this.style.stroke, this.context.textBaseline = "alphabetic", this.context.lineWidth = this.style.strokeThickness, this.context.lineCap = "round", this.context.lineJoin = "round"; var r, s; for (this._charCount = 0, h = 0; h < g; h++) r = this.style.strokeThickness / 2, s = this.style.strokeThickness / 2 + h * o + f.ascent, h > 0 && (s += q * h), "right" === this.style.align ? r += e - d[h] : "center" === this.style.align && (r += (e - d[h]) / 2), this.autoRound && (r = Math.round(r), s = Math.round(s)), this.colors.length > 0 || this.strokeColors.length > 0 || this.fontWeights.length > 0 || this.fontStyles.length > 0 ? this.updateLine(b[h], r, s) : (this.style.stroke && this.style.strokeThickness && (this.updateShadow(this.style.shadowStroke), 0 === c ? this.context.strokeText(b[h], r, s) : this.renderTabLine(b[h], r, s, !1)), this.style.fill && (this.updateShadow(this.style.shadowFill), 0 === c ? this.context.fillText(b[h], r, s) : this.renderTabLine(b[h], r, s, !0))); this.updateTexture(), this.dirty = !1 }, c.Text.prototype.renderTabLine = function(a, b, c, d) { var e = a.split(/(?:\t)/), f = this.style.tabs, g = 0; if (Array.isArray(f)) for (var h = 0, i = 0; i < e.length; i++) i > 0 && (h += f[i - 1]), g = b + h, d ? this.context.fillText(e[i], g, c) : this.context.strokeText(e[i], g, c); else for (var i = 0; i < e.length; i++) { var j = Math.ceil(this.context.measureText(e[i]).width); g = this.game.math.snapToCeil(b, f), d ? this.context.fillText(e[i], g, c) : this.context.strokeText(e[i], g, c), b = g + j } }, c.Text.prototype.updateShadow = function(a) { a ? (this.context.shadowOffsetX = this.style.shadowOffsetX, this.context.shadowOffsetY = this.style.shadowOffsetY, this.context.shadowColor = this.style.shadowColor, this.context.shadowBlur = this.style.shadowBlur) : (this.context.shadowOffsetX = 0, this.context.shadowOffsetY = 0, this.context.shadowColor = 0, this.context.shadowBlur = 0) }, c.Text.prototype.measureLine = function(a) { for (var b = 0, c = 0; c < a.length; c++) { var d = a[c]; if (this.fontWeights.length > 0 || this.fontStyles.length > 0) { var e = this.fontToComponents(this.context.font); this.fontStyles[this._charCount] && (e.fontStyle = this.fontStyles[this._charCount]), this.fontWeights[this._charCount] && (e.fontWeight = this.fontWeights[this._charCount]), this.context.font = this.componentsToFont(e) } this.style.stroke && this.style.strokeThickness && (this.strokeColors[this._charCount] && (this.context.strokeStyle = this.strokeColors[this._charCount]), this.updateShadow(this.style.shadowStroke)), this.style.fill && (this.colors[this._charCount] && (this.context.fillStyle = this.colors[this._charCount]), this.updateShadow(this.style.shadowFill)), b += this.context.measureText(d).width, this._charCount++ } return Math.ceil(b) }, c.Text.prototype.updateLine = function(a, b, c) { for (var d = 0; d < a.length; d++) { var e = a[d]; if (this.fontWeights.length > 0 || this.fontStyles.length > 0) { var f = this.fontToComponents(this.context.font); this.fontStyles[this._charCount] && (f.fontStyle = this.fontStyles[this._charCount]), this.fontWeights[this._charCount] && (f.fontWeight = this.fontWeights[this._charCount]), this.context.font = this.componentsToFont(f) } this.style.stroke && this.style.strokeThickness && (this.strokeColors[this._charCount] && (this.context.strokeStyle = this.strokeColors[this._charCount]), this.updateShadow(this.style.shadowStroke), this.context.strokeText(e, b, c)), this.style.fill && (this.colors[this._charCount] && (this.context.fillStyle = this.colors[this._charCount]), this.updateShadow(this.style.shadowFill), this.context.fillText(e, b, c)), b += this.context.measureText(e).width, this._charCount++ } }, c.Text.prototype.clearColors = function() { return this.colors = [], this.strokeColors = [], this.dirty = !0, this }, c.Text.prototype.clearFontValues = function() { return this.fontStyles = [], this.fontWeights = [], this.dirty = !0, this }, c.Text.prototype.addColor = function(a, b) { return this.colors[b] = a, this.dirty = !0, this }, c.Text.prototype.addStrokeColor = function(a, b) { return this.strokeColors[b] = a, this.dirty = !0, this }, c.Text.prototype.addFontStyle = function(a, b) { return this.fontStyles[b] = a, this.dirty = !0, this }, c.Text.prototype.addFontWeight = function(a, b) { return this.fontWeights[b] = a, this.dirty = !0, this }, c.Text.prototype.precalculateWordWrap = function(a) { return this.texture.baseTexture.resolution = this._res, this.context.font = this.style.font, this.runWordWrap(a).split(/(?:\r\n|\r|\n)/) }, c.Text.prototype.runWordWrap = function(a) { return this.useAdvancedWrap ? this.advancedWordWrap(a) : this.basicWordWrap(a) }, c.Text.prototype.advancedWordWrap = function(a) { for (var b = this.context, c = this.style.wordWrapWidth, d = "", e = a.replace(/ +/gi, " ").split(/\r?\n/gi), f = e.length, g = 0; g < f; g++) { var h = e[g], i = ""; h = h.replace(/^ *|\s*$/gi, ""); if (b.measureText(h).width < c) d += h + "\n"; else { for (var j = c, k = h.split(" "), l = 0; l < k.length; l++) { var m = k[l], n = m + " ", o = b.measureText(n).width; if (o > j) { if (0 === l) { for (var p = n; p.length && (p = p.slice(0, -1), !((o = b.measureText(p).width) <= j));); if (!p.length) throw new Error("This text's wordWrapWidth setting is less than a single character!"); var q = m.substr(p.length); k[l] = q, i += p } var r = k[l].length ? l : l + 1, s = k.slice(r).join(" ").replace(/[ \n]*$/gi, ""); e[g + 1] = s + " " + (e[g + 1] || ""), f = e.length; break } i += n, j -= o } d += i.replace(/[ \n]*$/gi, "") + "\n" } } return d = d.replace(/[\s|\n]*$/gi, "") }, c.Text.prototype.basicWordWrap = function(a) { for (var b = "", c = a.split("\n"), d = 0; d < c.length; d++) { for (var e = this.style.wordWrapWidth, f = c[d].split(" "), g = 0; g < f.length; g++) { var h = this.context.measureText(f[g]).width, i = h + this.context.measureText(" ").width; i > e ? (g > 0 && (b += "\n"), b += f[g] + " ", e = this.style.wordWrapWidth - h) : (e -= i, b += f[g] + " ") } d < c.length - 1 && (b += "\n") } return b }, c.Text.prototype.updateFont = function(a) { var b = this.componentsToFont(a); this.style.font !== b && (this.style.font = b, this.dirty = !0, this.parent && this.updateTransform()) }, c.Text.prototype.fontToComponents = function(a) { var b = a.match(/^\s*(?:\b(normal|italic|oblique|inherit)?\b)\s*(?:\b(normal|small-caps|inherit)?\b)\s*(?:\b(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit)?\b)\s*(?:\b(xx-small|x-small|small|medium|large|x-large|xx-large|larger|smaller|0|\d*(?:[.]\d*)?(?:%|[a-z]{2,5}))?\b)\s*(.*)\s*$/); if (b) { var c = b[5].trim(); return /^(?:inherit|serif|sans-serif|cursive|fantasy|monospace)$/.exec(c) || /['",]/.exec(c) || (c = "'" + c + "'"), { font: a, fontStyle: b[1] || "normal", fontVariant: b[2] || "normal", fontWeight: b[3] || "normal", fontSize: b[4] || "medium", fontFamily: c } } return console.warn("Phaser.Text - unparsable CSS font: " + a), { font: a } }, c.Text.prototype.componentsToFont = function(a) { var b, c = []; return b = a.fontStyle, b && "normal" !== b && c.push(b), b = a.fontVariant, b && "normal" !== b && c.push(b), b = a.fontWeight, b && "normal" !== b && c.push(b), b = a.fontSize, b && "medium" !== b && c.push(b), b = a.fontFamily, b && c.push(b), c.length || c.push(a.font), c.join(" ") }, c.Text.prototype.setText = function(a, b) { return void 0 === b && (b = !1), this.text = a.toString() || "", b ? this.updateText() : this.dirty = !0, this }, c.Text.prototype.parseList = function(a) { if (!Array.isArray(a)) return this; for (var b = "", c = 0; c < a.length; c++) Array.isArray(a[c]) ? (b += a[c].join("\t"), c < a.length - 1 && (b += "\n")) : (b += a[c], c < a.length - 1 && (b += "\t")); return this.text = b, this.dirty = !0, this }, c.Text.prototype.setTextBounds = function(a, b, d, e) { return void 0 === a ? this.textBounds = null : (this.textBounds ? this.textBounds.setTo(a, b, d, e) : this.textBounds = new c.Rectangle(a, b, d, e), this.style.wordWrapWidth > d && (this.style.wordWrapWidth = d)), this.updateTexture(), this }, c.Text.prototype.updateTexture = function() { var a = this.texture.baseTexture, b = this.texture.crop, c = this.texture.frame, d = this.canvas.width, e = this.canvas.height; if (a.width = d, a.height = e, b.width = d, b.height = e, c.width = d, c.height = e, this.texture.width = d, this.texture.height = e, this._width = d, this._height = e, this.textBounds) { var f = this.textBounds.x, g = this.textBounds.y; "right" === this.style.boundsAlignH ? f += this.textBounds.width - this.canvas.width / this.resolution : "center" === this.style.boundsAlignH && (f += this.textBounds.halfWidth - this.canvas.width / this.resolution / 2), "bottom" === this.style.boundsAlignV ? g += this.textBounds.height - this.canvas.height / this.resolution : "middle" === this.style.boundsAlignV && (g += this.textBounds.halfHeight - this.canvas.height / this.resolution / 2), this.pivot.x = -f, this.pivot.y = -g } this.renderable = 0 !== d && 0 !== e, this.texture.requiresReTint = !0, this.texture.baseTexture.dirty() }, c.Text.prototype._renderWebGL = function(a) { this.dirty && (this.updateText(), this.dirty = !1), PIXI.Sprite.prototype._renderWebGL.call(this, a) }, c.Text.prototype._renderCanvas = function(a) { this.dirty && (this.updateText(), this.dirty = !1), PIXI.Sprite.prototype._renderCanvas.call(this, a) }, c.Text.prototype.determineFontProperties = function(a) { var b = c.Text.fontPropertiesCache[a]; if (!b) { b = {}; var d = c.Text.fontPropertiesCanvas, e = c.Text.fontPropertiesContext; e.font = a; var f = Math.ceil(e.measureText("|MÉq").width), g = Math.ceil(e.measureText("|MÉq").width), h = 2 * g; if (g = 1.4 * g | 0, d.width = f, d.height = h, e.fillStyle = "#f00", e.fillRect(0, 0, f, h), e.font = a, e.textBaseline = "alphabetic", e.fillStyle = "#000", e.fillText("|MÉq", 0, g), !e.getImageData(0, 0, f, h)) return b.ascent = g, b.descent = g + 6, b.fontSize = b.ascent + b.descent, c.Text.fontPropertiesCache[a] = b, b; var i, j, k = e.getImageData(0, 0, f, h).data, l = k.length, m = 4 * f, n = 0, o = !1; for (i = 0; i < g; i++) { for (j = 0; j < m; j += 4) if (255 !== k[n + j]) { o = !0; break } if (o) break; n += m } for (b.ascent = g - i, n = l - m, o = !1, i = h; i > g; i--) { for (j = 0; j < m; j += 4) if (255 !== k[n + j]) { o = !0; break } if (o) break; n -= m } b.descent = i - g, b.descent += 6, b.fontSize = b.ascent + b.descent, c.Text.fontPropertiesCache[a] = b } return b }, c.Text.prototype.getBounds = function(a) { return this.dirty && (this.updateText(), this.dirty = !1), PIXI.Sprite.prototype.getBounds.call(this, a) }, Object.defineProperty(c.Text.prototype, "text", { get: function() { return this._text }, set: function(a) { a !== this._text && (this._text = a.toString() || "", this.dirty = !0, this.parent && this.updateTransform()) } }), Object.defineProperty(c.Text.prototype, "cssFont", { get: function() { return this.componentsToFont(this._fontComponents) }, set: function(a) { a = a || "bold 20pt Arial", this._fontComponents = this.fontToComponents(a), this.updateFont(this._fontComponents) } }), Object.defineProperty(c.Text.prototype, "font", { get: function() { return this._fontComponents.fontFamily }, set: function(a) { a = a || "Arial", a = a.trim(), /^(?:inherit|serif|sans-serif|cursive|fantasy|monospace)$/.exec(a) || /['",]/.exec(a) || (a = "'" + a + "'"), this._fontComponents.fontFamily = a, this.updateFont(this._fontComponents) } }), Object.defineProperty(c.Text.prototype, "fontSize", { get: function() { var a = this._fontComponents.fontSize; return a && /(?:^0$|px$)/.exec(a) ? parseInt(a, 10) : a }, set: function(a) { a = a || "0", "number" == typeof a && (a += "px"), this._fontComponents.fontSize = a, this.updateFont(this._fontComponents) } }), Object.defineProperty(c.Text.prototype, "fontWeight", { get: function() { return this._fontComponents.fontWeight || "normal" }, set: function(a) { a = a || "normal", this._fontComponents.fontWeight = a, this.updateFont(this._fontComponents) } }), Object.defineProperty(c.Text.prototype, "fontStyle", { get: function() { return this._fontComponents.fontStyle || "normal" }, set: function(a) { a = a || "normal", this._fontComponents.fontStyle = a, this.updateFont(this._fontComponents) } }), Object.defineProperty(c.Text.prototype, "fontVariant", { get: function() { return this._fontComponents.fontVariant || "normal" }, set: function(a) { a = a || "normal", this._fontComponents.fontVariant = a, this.updateFont(this._fontComponents) } }), Object.defineProperty(c.Text.prototype, "fill", { get: function() { return this.style.fill }, set: function(a) { a !== this.style.fill && (this.style.fill = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "align", { get: function() { return this.style.align }, set: function(a) { a !== this.style.align && (this.style.align = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "resolution", { get: function() { return this._res }, set: function(a) { a !== this._res && (this._res = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "tabs", { get: function() { return this.style.tabs }, set: function(a) { a !== this.style.tabs && (this.style.tabs = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "boundsAlignH", { get: function() { return this.style.boundsAlignH }, set: function(a) { a !== this.style.boundsAlignH && (this.style.boundsAlignH = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "boundsAlignV", { get: function() { return this.style.boundsAlignV }, set: function(a) { a !== this.style.boundsAlignV && (this.style.boundsAlignV = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "stroke", { get: function() { return this.style.stroke }, set: function(a) { a !== this.style.stroke && (this.style.stroke = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "strokeThickness", { get: function() { return this.style.strokeThickness }, set: function(a) { a !== this.style.strokeThickness && (this.style.strokeThickness = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "wordWrap", { get: function() { return this.style.wordWrap }, set: function(a) { a !== this.style.wordWrap && (this.style.wordWrap = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "wordWrapWidth", { get: function() { return this.style.wordWrapWidth }, set: function(a) { a !== this.style.wordWrapWidth && (this.style.wordWrapWidth = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "lineSpacing", { get: function() { return this._lineSpacing }, set: function(a) { a !== this._lineSpacing && (this._lineSpacing = parseFloat(a), this.dirty = !0, this.parent && this.updateTransform()) } }), Object.defineProperty(c.Text.prototype, "shadowOffsetX", { get: function() { return this.style.shadowOffsetX }, set: function(a) { a !== this.style.shadowOffsetX && (this.style.shadowOffsetX = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "shadowOffsetY", { get: function() { return this.style.shadowOffsetY }, set: function(a) { a !== this.style.shadowOffsetY && (this.style.shadowOffsetY = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "shadowColor", { get: function() { return this.style.shadowColor }, set: function(a) { a !== this.style.shadowColor && (this.style.shadowColor = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "shadowBlur", { get: function() { return this.style.shadowBlur }, set: function(a) { a !== this.style.shadowBlur && (this.style.shadowBlur = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "shadowStroke", { get: function() { return this.style.shadowStroke }, set: function(a) { a !== this.style.shadowStroke && (this.style.shadowStroke = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "shadowFill", { get: function() { return this.style.shadowFill }, set: function(a) { a !== this.style.shadowFill && (this.style.shadowFill = a, this.dirty = !0) } }), Object.defineProperty(c.Text.prototype, "width", { get: function() { return this.dirty && (this.updateText(), this.dirty = !1), this.scale.x * this.texture.frame.width }, set: function(a) { this.scale.x = a / this.texture.frame.width, this._width = a } }), Object.defineProperty(c.Text.prototype, "height", { get: function() { return this.dirty && (this.updateText(), this.dirty = !1), this.scale.y * this.texture.frame.height }, set: function(a) { this.scale.y = a / this.texture.frame.height, this._height = a } }), c.Text.fontPropertiesCache = {}, c.Text.fontPropertiesCanvas = document.createElement("canvas"), c.Text.fontPropertiesContext = c.Text.fontPropertiesCanvas.getContext("2d"), c.BitmapText = function(a, b, d, e, f, g, h) { b = b || 0, d = d || 0, e = e || "", f = f || "", g = g || 32, h = h || "left", PIXI.DisplayObjectContainer.call(this), this.type = c.BITMAPTEXT, this.physicsType = c.SPRITE, this.textWidth = 0, this.textHeight = 0, this.anchor = new c.Point, this._prevAnchor = new c.Point, this._glyphs = [], this._maxWidth = 0, this._text = f.toString() || "", this._data = a.cache.getBitmapFont(e), this._font = e, this._fontSize = g, this._align = h, this._tint = 16777215, this.updateText(), this.dirty = !1, c.Component.Core.init.call(this, a, b, d, "", null) }, c.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype), c.BitmapText.prototype.constructor = c.BitmapText, c.Component.Core.install.call(c.BitmapText.prototype, ["Angle", "AutoCull", "Bounds", "Destroy", "FixedToCamera", "InputEnabled", "InWorld", "LifeSpan", "PhysicsBody", "Reset"]), c.BitmapText.prototype.preUpdatePhysics = c.Component.PhysicsBody.preUpdate, c.BitmapText.prototype.preUpdateLifeSpan = c.Component.LifeSpan.preUpdate, c.BitmapText.prototype.preUpdateInWorld = c.Component.InWorld.preUpdate, c.BitmapText.prototype.preUpdateCore = c.Component.Core.preUpdate, c.BitmapText.prototype.preUpdate = function() { return !!(this.preUpdatePhysics() && this.preUpdateLifeSpan() && this.preUpdateInWorld()) && this.preUpdateCore() }, c.BitmapText.prototype.postUpdate = function() { c.Component.PhysicsBody.postUpdate.call(this), c.Component.FixedToCamera.postUpdate.call(this), this.body && this.body.type === c.Physics.ARCADE && (this.textWidth === this.body.sourceWidth && this.textHeight === this.body.sourceHeight || this.body.setSize(this.textWidth, this.textHeight)) }, c.BitmapText.prototype.setText = function(a) { this.text = a }; c.BitmapText.prototype.scanLine = function(a, b, c) { for (var d = 0, e = 0, f = -1, g = 0, h = null, i = this._maxWidth > 0 ? this._maxWidth : null, j = [], k = 0; k < c.length; k++) { var l = k === c.length - 1; if (/(?:\r\n|\r|\n)/.test(c.charAt(k))) return { width: e, text: c.substr(0, k), end: l, chars: j }; var m = c.charCodeAt(k), n = a.chars[m], o = 0; void 0 === n && (m = 32, n = a.chars[m]); var p = h && n.kerning[h] ? n.kerning[h] : 0; if (/(\s)/.test(c.charAt(k)) && (f = k, g = e), o = (p + n.texture.width + n.xOffset) * b, i && e + o >= i && f > -1) return { width: g || e, text: c.substr(0, k - (k - f)), end: l, chars: j }; e += (n.xAdvance + p) * b, j.push(d + (n.xOffset + p) * b), d += (n.xAdvance + p) * b, h = m } return { width: e, text: c, end: l, chars: j } }, c.BitmapText.prototype.cleanText = function(a, b) { void 0 === b && (b = ""); var c = this._data.font; if (!c) return ""; for (var d = /\r\n|\n\r|\n|\r/g, e = a.replace(d, "\n").split("\n"), f = 0; f < e.length; f++) { for (var g = "", h = e[f], i = 0; i < h.length; i++) g = c.chars[h.charCodeAt(i)] ? g.concat(h[i]) : g.concat(b); e[f] = g } return e.join("\n") }, c.BitmapText.prototype.updateText = function() { var a = this._data.font; if (a) { var b = this.text, c = this._fontSize / a.size, d = [], e = 0; this.textWidth = 0; do { var f = this.scanLine(a, c, b); f.y = e, d.push(f), f.width > this.textWidth && (this.textWidth = f.width), e += a.lineHeight * c, b = b.substr(f.text.length + 1) } while (!1 === f.end); this.textHeight = e; for (var g = 0, h = 0, i = this.textWidth * this.anchor.x, j = this.textHeight * this.anchor.y, k = 0; k < d.length; k++) { var f = d[k]; "right" === this._align ? h = this.textWidth - f.width : "center" === this._align && (h = (this.textWidth - f.width) / 2); for (var l = 0; l < f.text.length; l++) { var m = f.text.charCodeAt(l), n = a.chars[m]; void 0 === n && (m = 32, n = a.chars[m]); var o = this._glyphs[g]; o ? o.texture = n.texture : (o = new PIXI.Sprite(n.texture), o.name = f.text[l], this._glyphs.push(o)), o.position.x = f.chars[l] + h - i, o.position.y = f.y + n.yOffset * c - j, o.scale.set(c), o.tint = this.tint, o.texture.requiresReTint = !0, o.parent || this.addChild(o), g++ } } for (k = g; k < this._glyphs.length; k++) this.removeChild(this._glyphs[k]) } }, c.BitmapText.prototype.purgeGlyphs = function() { for (var a = this._glyphs.length, b = [], c = 0; c < this._glyphs.length; c++) this._glyphs[c].parent !== this ? this._glyphs[c].destroy() : b.push(this._glyphs[c]); return this._glyphs = [], this._glyphs = b, this.updateText(), a - b.length }, c.BitmapText.prototype.updateTransform = function() {!this.dirty && this.anchor.equals(this._prevAnchor) || (this.updateText(), this.dirty = !1, this._prevAnchor.copyFrom(this.anchor)), PIXI.DisplayObjectContainer.prototype.updateTransform.call(this) }, Object.defineProperty(c.BitmapText.prototype, "align", { get: function() { return this._align }, set: function(a) { a === this._align || "left" !== a && "center" !== a && "right" !== a || (this._align = a, this.updateText()) } }), Object.defineProperty(c.BitmapText.prototype, "tint", { get: function() { return this._tint }, set: function(a) { a !== this._tint && (this._tint = a, this.updateText()) } }), Object.defineProperty(c.BitmapText.prototype, "font", { get: function() { return this._font }, set: function(a) { a !== this._font && (this._font = a.trim(), this._data = this.game.cache.getBitmapFont(this._font), this.updateText()) } }), Object.defineProperty(c.BitmapText.prototype, "fontSize", { get: function() { return this._fontSize }, set: function(a) { (a = parseInt(a, 10)) !== this._fontSize && a > 0 && (this._fontSize = a, this.updateText()) } }), Object.defineProperty(c.BitmapText.prototype, "text", { get: function() { return this._text }, set: function(a) { a !== this._text && (this._text = a.toString() || "", this.updateText()) } }), Object.defineProperty(c.BitmapText.prototype, "maxWidth", { get: function() { return this._maxWidth }, set: function(a) { a !== this._maxWidth && (this._maxWidth = a, this.updateText()) } }), Object.defineProperty(c.BitmapText.prototype, "smoothed", { get: function() { return !this._data.base.scaleMode }, set: function(a) { this._data.base.scaleMode = a ? 0 : 1 } }), c.RetroFont = function(a, b, d, e, f, g, h, i, j, k) { if (!a.cache.checkImageKey(b)) return !1; void 0 !== g && null !== g || (g = a.cache.getImage(b).width / d), this.characterWidth = d, this.characterHeight = e, this.characterSpacingX = h || 0, this.characterSpacingY = i || 0, this.characterPerRow = g, this.offsetX = j || 0, this.offsetY = k || 0, this.align = "left", this.multiLine = !1, this.autoUpperCase = !0, this.customSpacingX = 0, this.customSpacingY = 0, this.fixedWidth = 0, this.fontSet = a.cache.getImage(b), this._text = "", this.grabData = [], this.frameData = new c.FrameData; for (var l = this.offsetX, m = this.offsetY, n = 0, o = 0; o < f.length; o++) { var p = this.frameData.addFrame(new c.Frame(o, l, m, this.characterWidth, this.characterHeight)); this.grabData[f.charCodeAt(o)] = p.index, n++, n === this.characterPerRow ? (n = 0, l = this.offsetX, m += this.characterHeight + this.characterSpacingY) : l += this.characterWidth + this.characterSpacingX } a.cache.updateFrameData(b, this.frameData), this.stamp = new c.Image(a, 0, 0, b, 0), c.RenderTexture.call(this, a, 100, 100, "", c.scaleModes.NEAREST), this.type = c.RETROFONT }, c.RetroFont.prototype = Object.create(c.RenderTexture.prototype), c.RetroFont.prototype.constructor = c.RetroFont, c.RetroFont.ALIGN_LEFT = "left", c.RetroFont.ALIGN_RIGHT = "right", c.RetroFont.ALIGN_CENTER = "center", c.RetroFont.TEXT_SET1 = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", c.RetroFont.TEXT_SET2 = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ", c.RetroFont.TEXT_SET3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ", c.RetroFont.TEXT_SET4 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789", c.RetroFont.TEXT_SET5 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/() '!?-*:0123456789", c.RetroFont.TEXT_SET6 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!?:;0123456789\"(),-.' ", c.RetroFont.TEXT_SET7 = "AGMSY+:4BHNTZ!;5CIOU.?06DJPV,(17EKQW\")28FLRX-'39", c.RetroFont.TEXT_SET8 = "0123456789 .ABCDEFGHIJKLMNOPQRSTUVWXYZ", c.RetroFont.TEXT_SET9 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ()-0123456789.:,'\"?!", c.RetroFont.TEXT_SET10 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", c.RetroFont.TEXT_SET11 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,\"-+!?()':;0123456789", c.RetroFont.prototype.setFixedWidth = function(a, b) { void 0 === b && (b = "left"), this.fixedWidth = a, this.align = b }, c.RetroFont.prototype.setText = function(a, b, c, d, e, f) { this.multiLine = b || !1, this.customSpacingX = c || 0, this.customSpacingY = d || 0, this.align = e || "left", this.autoUpperCase = !f, a.length > 0 && (this.text = a) }, c.RetroFont.prototype.buildRetroFontText = function() { var a = 0, b = 0; if (this.clear(), this.multiLine) { var d = this._text.split("\n"); this.fixedWidth > 0 ? this.resize(this.fixedWidth, d.length * (this.characterHeight + this.customSpacingY) - this.customSpacingY, !0) : this.resize(this.getLongestLine() * (this.characterWidth + this.customSpacingX), d.length * (this.characterHeight + this.customSpacingY) - this.customSpacingY, !0); for (var e = 0; e < d.length; e++) a = 0, this.align === c.RetroFont.ALIGN_RIGHT ? a = this.width - d[e].length * (this.characterWidth + this.customSpacingX) : this.align === c.RetroFont.ALIGN_CENTER && (a = this.width / 2 - d[e].length * (this.characterWidth + this.customSpacingX) / 2, a += this.customSpacingX / 2), a < 0 && (a = 0), this.pasteLine(d[e], a, b, this.customSpacingX), b += this.characterHeight + this.customSpacingY } else this.fixedWidth > 0 ? this.resize(this.fixedWidth, this.characterHeight, !0) : this.resize(this._text.length * (this.characterWidth + this.customSpacingX), this.characterHeight, !0), a = 0, this.align === c.RetroFont.ALIGN_RIGHT ? a = this.width - this._text.length * (this.characterWidth + this.customSpacingX) : this.align === c.RetroFont.ALIGN_CENTER && (a = this.width / 2 - this._text.length * (this.characterWidth + this.customSpacingX) / 2, a += this.customSpacingX / 2), a < 0 && (a = 0), this.pasteLine(this._text, a, 0, this.customSpacingX); this.requiresReTint = !0 }, c.RetroFont.prototype.pasteLine = function(a, b, c, d) { for (var e = 0; e < a.length; e++) if (" " === a.charAt(e)) b += this.characterWidth + d; else if (this.grabData[a.charCodeAt(e)] >= 0 && (this.stamp.frame = this.grabData[a.charCodeAt(e)], this.renderXY(this.stamp, b, c, !1), (b += this.characterWidth + d) > this.width)) break }, c.RetroFont.prototype.getLongestLine = function() { var a = 0; if (this._text.length > 0) for (var b = this._text.split("\n"), c = 0; c < b.length; c++) b[c].length > a && (a = b[c].length); return a }, c.RetroFont.prototype.removeUnsupportedCharacters = function(a) { for (var b = "", c = 0; c < this._text.length; c++) { var d = this._text[c], e = d.charCodeAt(0); (this.grabData[e] >= 0 || !a && "\n" === d) && (b = b.concat(d)) } return b }, c.RetroFont.prototype.updateOffset = function(a, b) { if (this.offsetX !== a || this.offsetY !== b) { for (var c = a - this.offsetX, d = b - this.offsetY, e = this.game.cache.getFrameData(this.stamp.key).getFrames(), f = e.length; f--;) e[f].x += c, e[f].y += d; this.buildRetroFontText() } }, Object.defineProperty(c.RetroFont.prototype, "text", { get: function() { return this._text }, set: function(a) { var b; (b = this.autoUpperCase ? a.toUpperCase() : a) !== this._text && (this._text = b, this.removeUnsupportedCharacters(this.multiLine), this.buildRetroFontText()) } }), Object.defineProperty(c.RetroFont.prototype, "smoothed", { get: function() { return this.stamp.smoothed }, set: function(a) { this.stamp.smoothed = a, this.buildRetroFontText() } }), c.Rope = function(a, b, d, e, f, g) { this.points = [], this.points = g, this._hasUpdateAnimation = !1, this._updateAnimationCallback = null, b = b || 0, d = d || 0, e = e || null, f = f || null, this.type = c.ROPE, PIXI.Rope.call(this, c.Cache.DEFAULT, this.points), c.Component.Core.init.call(this, a, b, d, e, f) }, c.Rope.prototype = Object.create(PIXI.Rope.prototype), c.Rope.prototype.constructor = c.Rope, c.Component.Core.install.call(c.Rope.prototype, ["Angle", "Animation", "AutoCull", "Bounds", "BringToTop", "Crop", "Delta", "Destroy", "FixedToCamera", "InWorld", "LifeSpan", "LoadTexture", "Overlap", "PhysicsBody", "Reset", "ScaleMinMax", "Smoothed"]), c.Rope.prototype.preUpdatePhysics = c.Component.PhysicsBody.preUpdate, c.Rope.prototype.preUpdateLifeSpan = c.Component.LifeSpan.preUpdate, c.Rope.prototype.preUpdateInWorld = c.Component.InWorld.preUpdate, c.Rope.prototype.preUpdateCore = c.Component.Core.preUpdate, c.Rope.prototype.preUpdate = function() { return !!(this.preUpdatePhysics() && this.preUpdateLifeSpan() && this.preUpdateInWorld()) && this.preUpdateCore() }, c.Rope.prototype.update = function() { this._hasUpdateAnimation && this.updateAnimation.call(this) }, c.Rope.prototype.reset = function(a, b) { return c.Component.Reset.prototype.reset.call(this, a, b), this }, Object.defineProperty(c.Rope.prototype, "updateAnimation", { get: function() { return this._updateAnimation }, set: function(a) { a && "function" == typeof a ? (this._hasUpdateAnimation = !0, this._updateAnimation = a) : (this._hasUpdateAnimation = !1, this._updateAnimation = null) } }), Object.defineProperty(c.Rope.prototype, "segments", { get: function() { for (var a, b, d, e, f, g, h, i, j = [], k = 0; k < this.points.length; k++) a = 4 * k, b = this.vertices[a] * this.scale.x, d = this.vertices[a + 1] * this.scale.y, e = this.vertices[a + 4] * this.scale.x, f = this.vertices[a + 3] * this.scale.y, g = c.Math.difference(b, e), h = c.Math.difference(d, f), b += this.world.x, d += this.world.y, i = new c.Rectangle(b, d, g, h), j.push(i); return j } }), c.TileSprite = function(a, b, d, e, f, g, h) { b = b || 0, d = d || 0, e = e || 256, f = f || 256, g = g || null, h = h || null, this.type = c.TILESPRITE, this.physicsType = c.SPRITE, this._scroll = new c.Point; var i = a.cache.getImage("__default", !0); PIXI.TilingSprite.call(this, new PIXI.Texture(i.base), e, f), c.Component.Core.init.call(this, a, b, d, g, h) }, c.TileSprite.prototype = Object.create(PIXI.TilingSprite.prototype), c.TileSprite.prototype.constructor = c.TileSprite, c.Component.Core.install.call(c.TileSprite.prototype, ["Angle", "Animation", "AutoCull", "Bounds", "BringToTop", "Destroy", "FixedToCamera", "Health", "InCamera", "InputEnabled", "InWorld", "LifeSpan", "LoadTexture", "Overlap", "PhysicsBody", "Reset", "Smoothed"]), c.TileSprite.prototype.preUpdatePhysics = c.Component.PhysicsBody.preUpdate, c.TileSprite.prototype.preUpdateLifeSpan = c.Component.LifeSpan.preUpdate, c.TileSprite.prototype.preUpdateInWorld = c.Component.InWorld.preUpdate, c.TileSprite.prototype.preUpdateCore = c.Component.Core.preUpdate, c.TileSprite.prototype.preUpdate = function() { return 0 !== this._scroll.x && (this.tilePosition.x += this._scroll.x * this.game.time.physicsElapsed), 0 !== this._scroll.y && (this.tilePosition.y += this._scroll.y * this.game.time.physicsElapsed), !!(this.preUpdatePhysics() && this.preUpdateLifeSpan() && this.preUpdateInWorld()) && this.preUpdateCore() }, c.TileSprite.prototype.autoScroll = function(a, b) { this._scroll.set(a, b) }, c.TileSprite.prototype.stopScroll = function() { this._scroll.set(0, 0) }, c.TileSprite.prototype.destroy = function(a) { c.Component.Destroy.prototype.destroy.call(this, a), PIXI.TilingSprite.prototype.destroy.call(this) }, c.TileSprite.prototype.reset = function(a, b) { return c.Component.Reset.prototype.reset.call(this, a, b), this.tilePosition.x = 0, this.tilePosition.y = 0, this }, c.Device = function() { this.deviceReadyAt = 0, this.initialized = !1, this.desktop = !1, this.iOS = !1, this.iOSVersion = 0, this.cocoonJS = !1, this.cocoonJSApp = !1, this.wechatMinigame = !1, this.cordova = !1, this.node = !1, this.nodeWebkit = !1, this.electron = !1, this.ejecta = !1, this.crosswalk = !1, this.android = !1, this.chromeOS = !1, this.linux = !1, this.macOS = !1, this.windows = !1, this.windowsPhone = !1, this.canvas = !1, this.canvasBitBltShift = null, this.webGL = !1, this.file = !1, this.fileSystem = !1, this.localStorage = !1, this.worker = !1, this.css3D = !1, this.pointerLock = !1, this.typedArray = !1, this.vibration = !1, this.getUserMedia = !0, this.quirksMode = !1, this.touch = !1, this.mspointer = !1, this.wheelEvent = null, this.arora = !1, this.chrome = !1, this.chromeVersion = 0, this.epiphany = !1, this.firefox = !1, this.firefoxVersion = 0, this.ie = !1, this.ieVersion = 0, this.trident = !1, this.tridentVersion = 0, this.edge = !1, this.mobileSafari = !1, this.midori = !1, this.opera = !1, this.safari = !1, this.safariVersion = 0, this.webApp = !1, this.silk = !1, this.audioData = !1, this.webAudio = !1, this.ogg = !1, this.opus = !1, this.mp3 = !1, this.wav = !1, this.m4a = !1, this.webm = !1, this.dolby = !1, this.oggVideo = !1, this.h264Video = !1, this.mp4Video = !1, this.webmVideo = !1, this.vp9Video = !1, this.hlsVideo = !1, this.iPhone = !1, this.iPhone4 = !1, this.iPad = !1, this.pixelRatio = 0, this.littleEndian = !1, this.LITTLE_ENDIAN = !1, this.support32bit = !1, this.fullscreen = !1, this.requestFullscreen = "", this.cancelFullscreen = "", this.fullscreenKeyboard = !1 }, c.Device = new c.Device, c.Device.onInitialized = new c.Signal, c.Device.whenReady = function(a, b, c) { var d = this._readyCheck; if (this.deviceReadyAt || !d) a.call(b, this); else if (d._monitor || c) d._queue = d._queue || [], d._queue.push([a, b]); else { d._monitor = d.bind(this), d._queue = d._queue || [], d._queue.push([a, b]); var e = void 0 !== window.cordova, f = navigator.isCocoonJS; "complete" === document.readyState || "interactive" === document.readyState ? window.setTimeout(d._monitor, 0) : e && !f ? document.addEventListener("deviceready", d._monitor, !1) : (document.addEventListener("DOMContentLoaded", d._monitor, !1), window.addEventListener("load", d._monitor, !1)) } }, c.Device._readyCheck = function() { var a = this._readyCheck; if (document.body) { if (!this.deviceReadyAt) { this.deviceReadyAt = Date.now(), document.removeEventListener("deviceready", a._monitor), document.removeEventListener("DOMContentLoaded", a._monitor), window.removeEventListener("load", a._monitor), this._initialize(), this.initialized = !0, this.onInitialized.dispatch(this); for (var b; b = a._queue.shift();) { var c = b[0], d = b[1]; c.call(d, this) } this._readyCheck = null, this._initialize = null, this.onInitialized = null } } else window.setTimeout(a._monitor, 20) }, c.Device._initialize = function() { function a() { var a = new ArrayBuffer(4), b = new Uint8Array(a), c = new Uint32Array(a); return b[0] = 161, b[1] = 178, b[2] = 195, b[3] = 212, 3569595041 === c[0] || 2712847316 !== c[0] && null } function b() { if (void 0 === Uint8ClampedArray) return !1; var a = PIXI.CanvasPool.create(this, 1, 1), b = a.getContext("2d"); if (!b) return !1; var c = b.createImageData(1, 1); return PIXI.CanvasPool.remove(this), c.data instanceof Uint8ClampedArray } function c() { var a = -1 !== navigator.userAgent.toLowerCase().indexOf("ipad"); return !!(!a && navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2) || a } var d = this; ! function() { var a = navigator.userAgent; /Playstation Vita/.test(a) ? d.vita = !0 : /Kindle/.test(a) || /\bKF[A-Z][A-Z]+/.test(a) || /Silk.*Mobile Safari/.test(a) ? d.kindle = !0 : /Android/.test(a) ? d.android = !0 : /CrOS/.test(a) ? d.chromeOS = !0 : /iP[ao]d|iPhone/i.test(a) ? (d.iOS = !0, navigator.appVersion.match(/OS (\d+)/), d.iOSVersion = parseInt(RegExp.$1, 10)) : /Linux/.test(a) ? d.linux = !0 : /Mac OS/.test(a) ? d.macOS = !0 : /Windows/.test(a) && (d.windows = !0), (/Windows Phone/i.test(a) || /IEMobile/i.test(a)) && (d.android = !1, d.iOS = !1, d.macOS = !1, d.windows = !0, d.windowsPhone = !0); var b = /Silk/.test(a); (d.windows || d.macOS || d.linux && !b || d.chromeOS) && (d.desktop = !0), (d.windowsPhone || /Windows NT/i.test(a) && /Touch/i.test(a)) && (d.desktop = !1) }(), function() { var a = navigator.userAgent; if (/Arora/.test(a) ? d.arora = !0 : /Edge\/\d+/.test(a) ? d.edge = !0 : /Chrome\/(\d+)/.test(a) && !d.windowsPhone ? (d.chrome = !0, d.chromeVersion = parseInt(RegExp.$1, 10)) : /Epiphany/.test(a) ? d.epiphany = !0 : /Firefox\D+(\d+)/.test(a) ? (d.firefox = !0, d.firefoxVersion = parseInt(RegExp.$1, 10)) : /AppleWebKit/.test(a) && d.iOS ? d.mobileSafari = !0 : /MSIE (\d+\.\d+);/.test(a) ? (d.ie = !0, d.ieVersion = parseInt(RegExp.$1, 10)) : /Midori/.test(a) ? d.midori = !0 : /Opera/.test(a) ? d.opera = !0 : /Safari\/(\d+)/.test(a) && !d.windowsPhone ? (d.safari = !0, /Version\/(\d+)\./.test(a) && (d.safariVersion = parseInt(RegExp.$1, 10))) : /Trident\/(\d+\.\d+)(.*)rv:(\d+\.\d+)/.test(a) && (d.ie = !0, d.trident = !0, d.tridentVersion = parseInt(RegExp.$1, 10), d.ieVersion = parseInt(RegExp.$3, 10)), /Silk/.test(a) && (d.silk = !0), navigator.standalone && (d.webApp = !0), void 0 !== window.cordova && (d.cordova = !0), "undefined" != typeof process && "undefined" != typeof require && (d.node = !0), d.node && "object" == typeof process.versions && (d.nodeWebkit = !!process.versions["node-webkit"], d.electron = !!process.versions.electron), navigator.isCocoonJS && (d.cocoonJS = !0), void 0 !== window.wx && (d.wechatMinigame = !0), d.cocoonJS) try { d.cocoonJSApp = "undefined" != typeof CocoonJS } catch (a) { d.cocoonJSApp = !1 } void 0 !== window.ejecta && (d.ejecta = !0), /Crosswalk/.test(a) && (d.crosswalk = !0) }(), function() { d.audioData = !!window.Audio, d.webAudio = !(!window.AudioContext && !window.webkitAudioContext); var a = document.createElement("audio"); try { if (a.canPlayType && (a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, "") && (d.ogg = !0), (a.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, "") || a.canPlayType("audio/opus;").replace(/^no$/, "")) && (d.opus = !0), a.canPlayType("audio/mpeg;").replace(/^no$/, "") && (d.mp3 = !0), a.canPlayType('audio/wav; codecs="1"').replace(/^no$/, "") && (d.wav = !0), (a.canPlayType("audio/x-m4a;") || a.canPlayType("audio/aac;").replace(/^no$/, "")) && (d.m4a = !0), a.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, "") && (d.webm = !0), "" !== a.canPlayType('audio/mp4;codecs="ec-3"'))) if (d.edge) d.dolby = !0; else if (d.safari && d.safariVersion >= 9 && /Mac OS X (\d+)_(\d+)/.test(navigator.userAgent)) { var b = parseInt(RegExp.$1, 10), c = parseInt(RegExp.$2, 10); (10 === b && c >= 11 || b > 10) && (d.dolby = !0) } } catch (a) {} }(), function() { var a = document.createElement("video"); try {!!a.canPlayType && (a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/, "") && (d.oggVideo = !0), a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/, "") && (d.h264Video = !0, d.mp4Video = !0), a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/, "") && (d.webmVideo = !0), a.canPlayType('video/webm; codecs="vp9"').replace(/^no$/, "") && (d.vp9Video = !0), a.canPlayType('application/x-mpegURL; codecs="avc1.42E01E"').replace(/^no$/, "") && (d.hlsVideo = !0)) } catch (a) {} }(), function() { var a, b = document.createElement("p"), c = { webkitTransform: "-webkit-transform", OTransform: "-o-transform", msTransform: "-ms-transform", MozTransform: "-moz-transform", transform: "transform" }; document.body.insertBefore(b, null); for (var e in c) void 0 !== b.style[e] && (b.style[e] = "translate3d(1px,1px,1px)", a = window.getComputedStyle(b).getPropertyValue(c[e])); document.body.removeChild(b), d.css3D = void 0 !== a && a.length > 0 && "none" !== a }(), function() { d.pixelRatio = window.devicePixelRatio || 1, d.iPhone = -1 !== navigator.userAgent.toLowerCase().indexOf("iphone"), d.iPhone4 = 2 === d.pixelRatio && d.iPhone, d.iPad = c(), "undefined" != typeof Int8Array ? d.typedArray = !0 : d.typedArray = !1, "undefined" != typeof ArrayBuffer && "undefined" != typeof Uint8Array && "undefined" != typeof Uint32Array && (d.littleEndian = a(), d.LITTLE_ENDIAN = d.littleEndian), d.support32bit = "undefined" != typeof ArrayBuffer && "undefined" != typeof Uint8ClampedArray && "undefined" != typeof Int32Array && null !== d.littleEndian && b(), navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate, navigator.vibrate && (d.vibration = !0) }(), function() { d.canvas = !!window.CanvasRenderingContext2D || d.cocoonJS; try { d.localStorage = !!localStorage.getItem } catch (a) { d.localStorage = !1 } d.file = !!(window.File && window.FileReader && window.FileList && window.Blob), d.fileSystem = !!window.requestFileSystem; var a = { stencil: !0 }; d.webGL = function() { try { var b = document.createElement("canvas"); return b.screencanvas = !1, !!window.WebGLRenderingContext && (b.getContext("webgl", a) || b.getContext("experimental-webgl", a)) } catch (a) { return !1 } }(), d.webGL = !!d.webGL, d.worker = !!window.Worker, d.pointerLock = "pointerLockElement" in document || "mozPointerLockElement" in document || "webkitPointerLockElement" in document, d.quirksMode = "CSS1Compat" !== document.compatMode, navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia, window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL, d.getUserMedia = d.getUserMedia && !!navigator.getUserMedia && !!window.URL, d.firefox && d.firefoxVersion < 21 && (d.getUserMedia = !1), !d.iOS && (d.ie || d.firefox || d.chrome) && (d.canvasBitBltShift = !0), (d.safari || d.mobileSafari) && (d.canvasBitBltShift = !1) }(), function() { for (var a = ["requestFullscreen", "requestFullScreen", "webkitRequestFullscreen", "webkitRequestFullScreen", "msRequestFullscreen", "msRequestFullScreen", "mozRequestFullScreen", "mozRequestFullscreen"], b = document.createElement("div"), c = 0; c < a.length; c++) if (b[a[c]]) { d.fullscreen = !0, d.requestFullscreen = a[c]; break } var e = ["cancelFullScreen", "exitFullscreen", "webkitCancelFullScreen", "webkitExitFullscreen", "msCancelFullScreen", "msExitFullscreen", "mozCancelFullScreen", "mozExitFullscreen"]; if (d.fullscreen) for (var c = 0; c < e.length; c++) if (document[e[c]]) { d.cancelFullscreen = e[c]; break } window.Element && Element.ALLOW_KEYBOARD_INPUT && (d.fullscreenKeyboard = !0) }(), function() { ("ontouchstart" in document.documentElement || window.navigator.maxTouchPoints && window.navigator.maxTouchPoints >= 1) && (d.touch = !0), (window.PointerEvent || window.MSPointerEvent || window.navigator.msPointerEnabled || window.navigator.pointerEnabled) && (d.mspointer = !0), d.cocoonJS || ("onwheel" in window || d.ie && "WheelEvent" in window ? d.wheelEvent = "wheel" : "onmousewheel" in window ? d.wheelEvent = "mousewheel" : d.firefox && "MouseScrollEvent" in window && (d.wheelEvent = "DOMMouseScroll")) }() }, c.Device.canPlayAudio = function(a) { return !("mp3" !== a || !this.mp3) || (!("ogg" !== a || !this.ogg && !this.opus) || (!("m4a" !== a || !this.m4a) || (!("opus" !== a || !this.opus) || (!("wav" !== a || !this.wav) || (!("webm" !== a || !this.webm) || !("mp4" !== a || !this.dolby)))))) }, c.Device.canPlayVideo = function(a) { return !("webm" !== a || !this.webmVideo && !this.vp9Video) || (!("mp4" !== a || !this.mp4Video && !this.h264Video) || (!("ogg" !== a && "ogv" !== a || !this.oggVideo) || !("mpeg" !== a || !this.hlsVideo))) }, c.Device.isConsoleOpen = function() { return !(!window.console || !window.console.firebug) || !(!window.console || (console.profile(), console.profileEnd(), console.clear && console.clear(), !console.profiles)) && console.profiles.length > 0 }, c.Device.isAndroidStockBrowser = function() { var a = window.navigator.userAgent.match(/Android.*AppleWebKit\/([\d.]+)/); return a && a[1] < 537 }, c.Canvas = { create: function(a, b, c, d, e) { b = b || 256, c = c || 256; var f = e ? document.createElement("canvas") : PIXI.CanvasPool.create(a, b, c); return "string" == typeof d && "" !== d && (f.id = d), f.width = b, f.height = c, f.style.display = "block", f }, setBackgroundColor: function(a, b) { return b = b || "rgb(0,0,0)", a.style.backgroundColor = b, a }, setTouchAction: function(a, b) { return b = b || "none", a.style.msTouchAction = b, a.style["ms-touch-action"] = b, a.style["touch-action"] = b, a }, setUserSelect: function(a, b) { return b = b || "none", a.style["-webkit-touch-callout"] = b, a.style["-webkit-user-select"] = b, a.style["-khtml-user-select"] = b, a.style["-moz-user-select"] = b, a.style["-ms-user-select"] = b, a.style["user-select"] = b, a.style["-webkit-tap-highlight-color"] = "rgba(0, 0, 0, 0)", a }, addToDOM: function(a, b, c) { var d; return void 0 === c && (c = !0), b && ("string" == typeof b ? d = document.getElementById(b) : "object" == typeof b && 1 === b.nodeType && (d = b)), d || (d = document.body), c && d.style && (d.style.overflow = "hidden"), d.appendChild(a), a }, removeFromDOM: function(a) { a.parentNode && a.parentNode.removeChild(a) }, setTransform: function(a, b, c, d, e, f, g) { return a.setTransform(d, f, g, e, b, c), a }, setSmoothingEnabled: function(a, b) { var d = c.Canvas.getSmoothingPrefix(a); return d && (a[d] = b), a }, getSmoothingPrefix: function(a) { var b = ["i", "webkitI", "msI", "mozI", "oI"]; for (var c in b) { var d = b[c] + "mageSmoothingEnabled"; if (d in a) return d } return null }, getSmoothingEnabled: function(a) { var b = c.Canvas.getSmoothingPrefix(a); if (b) return a[b] }, setImageRenderingCrisp: function(a) { for (var b = ["optimizeSpeed", "crisp-edges", "-moz-crisp-edges", "-webkit-optimize-contrast", "optimize-contrast", "pixelated"], c = 0; c < b.length; c++) a.style["image-rendering"] = b[c]; return a.style.msInterpolationMode = "nearest-neighbor", a }, setImageRenderingBicubic: function(a) { return a.style["image-rendering"] = "auto", a.style.msInterpolationMode = "bicubic", a } }, c.RequestAnimationFrame = function(a, b) { void 0 === b && (b = !1), this.game = a, this.isRunning = !1, this.forceSetTimeOut = b; for (var c = ["ms", "moz", "webkit", "o"], d = 0; d < c.length && !window.requestAnimationFrame; d++) window.requestAnimationFrame = window[c[d] + "RequestAnimationFrame"], window.cancelAnimationFrame = window[c[d] + "CancelAnimationFrame"]; this._isSetTimeOut = !1, this._onLoop = null, this._timeOutID = null }, c.RequestAnimationFrame.prototype = { start: function() { this.isRunning = !0; var a = this;!window.requestAnimationFrame || this.forceSetTimeOut ? (this._isSetTimeOut = !0, this._onLoop = function() { return a.updateSetTimeout() }, this._timeOutID = window.setTimeout(this._onLoop, 0)) : (this._isSetTimeOut = !1, this._onLoop = function(b) { return a.updateRAF(b) }, this._timeOutID = window.requestAnimationFrame(this._onLoop)) }, updateRAF: function(a) { this.isRunning && (this.game.update(Math.floor(a)), this._timeOutID = window.requestAnimationFrame(this._onLoop)) }, updateSetTimeout: function() { this.isRunning && (this.game.update(Date.now()), this._timeOutID = window.setTimeout(this._onLoop, this.game.time.timeToCall)) }, stop: function() { this._isSetTimeOut ? clearTimeout(this._timeOutID) : window.cancelAnimationFrame(this._timeOutID), this.isRunning = !1 }, isSetTimeOut: function() { return this._isSetTimeOut }, isRAF: function() { return !1 === this._isSetTimeOut } }, c.RequestAnimationFrame.prototype.constructor = c.RequestAnimationFrame, c.Math = { PI2: 2 * Math.PI, between: function(a, b) { return Math.floor(Math.random() * (b - a + 1) + a) }, fuzzyEqual: function(a, b, c) { return void 0 === c && (c = 1e-4), Math.abs(a - b) < c }, fuzzyLessThan: function(a, b, c) { return void 0 === c && (c = 1e-4), a < b + c }, fuzzyGreaterThan: function(a, b, c) { return void 0 === c && (c = 1e-4), a > b - c }, fuzzyCeil: function(a, b) { return void 0 === b && (b = 1e-4), Math.ceil(a - b) }, fuzzyFloor: function(a, b) { return void 0 === b && (b = 1e-4), Math.floor(a + b) }, average: function() { for (var a = 0, b = arguments.length, c = 0; c < b; c++) a += +arguments[c]; return a / b }, shear: function(a) { return a % 1 }, snapTo: function(a, b, c) { return void 0 === c && (c = 0), 0 === b ? a : (a -= c, a = b * Math.round(a / b), c + a) }, snapToFloor: function(a, b, c) { return void 0 === c && (c = 0), 0 === b ? a : (a -= c, a = b * Math.floor(a / b), c + a) }, snapToCeil: function(a, b, c) { return void 0 === c && (c = 0), 0 === b ? a : (a -= c, a = b * Math.ceil(a / b), c + a) }, roundTo: function(a, b, c) { void 0 === b && (b = 0), void 0 === c && (c = 10); var d = Math.pow(c, -b); return Math.round(a * d) / d }, floorTo: function(a, b, c) { void 0 === b && (b = 0), void 0 === c && (c = 10); var d = Math.pow(c, -b); return Math.floor(a * d) / d }, ceilTo: function(a, b, c) { void 0 === b && (b = 0), void 0 === c && (c = 10); var d = Math.pow(c, -b); return Math.ceil(a * d) / d }, rotateToAngle: function(a, b, d) { return void 0 === d && (d = .05), a === b ? a : (Math.abs(b - a) <= d || Math.abs(b - a) >= c.Math.PI2 - d ? a = b : (Math.abs(b - a) > Math.PI && (b < a ? b += c.Math.PI2 : b -= c.Math.PI2), b > a ? a += d : b < a && (a -= d)), a) }, getShortestAngle: function(a, b) { var c = b - a; return 0 === c ? 0 : c - 360 * Math.floor((c - -180) / 360) }, angleBetween: function(a, b, c, d) { return Math.atan2(d - b, c - a) }, angleBetweenY: function(a, b, c, d) { return Math.atan2(c - a, d - b) }, angleBetweenPoints: function(a, b) { return Math.atan2(b.y - a.y, b.x - a.x) }, angleBetweenPointsY: function(a, b) { return Math.atan2(b.x - a.x, b.y - a.y) }, reverseAngle: function(a) { return this.normalizeAngle(a + Math.PI, !0) }, normalizeAngle: function(a) { return a %= 2 * Math.PI, a >= 0 ? a : a + 2 * Math.PI }, maxAdd: function(a, b, c) { return Math.min(a + b, c) }, minSub: function(a, b, c) { return Math.max(a - b, c) }, wrap: function(a, b, c) { var d = c - b; if (d <= 0) return 0; var e = (a - b) % d; return e < 0 && (e += d), e + b }, wrapValue: function(a, b, c) { return a = Math.abs(a), b = Math.abs(b), c = Math.abs(c), (a + b) % c }, isOdd: function(a) { return !!(1 & a) }, isEven: function(a) { return !(1 & a) }, min: function() { if (1 === arguments.length && "object" == typeof arguments[0]) var a = arguments[0]; else var a = arguments; for (var b = 1, c = 0, d = a.length; b < d; b++) a[b] < a[c] && (c = b); return a[c] }, max: function() { if (1 === arguments.length && "object" == typeof arguments[0]) var a = arguments[0]; else var a = arguments; for (var b = 1, c = 0, d = a.length; b < d; b++) a[b] > a[c] && (c = b); return a[c] }, minProperty: function(a) { if (2 === arguments.length && "object" == typeof arguments[1]) var b = arguments[1]; else var b = arguments.slice(1); for (var c = 1, d = 0, e = b.length; c < e; c++) b[c][a] < b[d][a] && (d = c); return b[d][a] }, maxProperty: function(a) { if (2 === arguments.length && "object" == typeof arguments[1]) var b = arguments[1]; else var b = arguments.slice(1); for (var c = 1, d = 0, e = b.length; c < e; c++) b[c][a] > b[d][a] && (d = c); return b[d][a] }, wrapAngle: function(a, b) { return b ? this.wrap(a, -Math.PI, Math.PI) : this.wrap(a, -180, 180) }, linearInterpolation: function(a, b) { var c = a.length - 1, d = c * b, e = Math.floor(d); return b < 0 ? this.linear(a[0], a[1], d) : b > 1 ? this.linear(a[c], a[c - 1], c - d) : this.linear(a[e], a[e + 1 > c ? c : e + 1], d - e) }, bezierInterpolation: function(a, b) { for (var c = 0, d = a.length - 1, e = 0; e <= d; e++) c += Math.pow(1 - b, d - e) * Math.pow(b, e) * a[e] * this.bernstein(d, e); return c }, catmullRomInterpolation: function(a, b) { var c = a.length - 1, d = c * b, e = Math.floor(d); return a[0] === a[c] ? (b < 0 && (e = Math.floor(d = c * (1 + b))), this.catmullRom(a[(e - 1 + c) % c], a[e], a[(e + 1) % c], a[(e + 2) % c], d - e)) : b < 0 ? a[0] - (this.catmullRom(a[0], a[0], a[1], a[1], -d) - a[0]) : b > 1 ? a[c] - (this.catmullRom(a[c], a[c], a[c - 1], a[c - 1], d - c) - a[c]) : this.catmullRom(a[e ? e - 1 : 0], a[e], a[c < e + 1 ? c : e + 1], a[c < e + 2 ? c : e + 2], d - e) }, linear: function(a, b, c) { return (b - a) * c + a }, bernstein: function(a, b) { return this.factorial(a) / this.factorial(b) / this.factorial(a - b) }, factorial: function(a) { if (0 === a) return 1; for (var b = a; --a;) b *= a; return b }, catmullRom: function(a, b, c, d, e) { var f = .5 * (c - a), g = .5 * (d - b), h = e * e; return (2 * b - 2 * c + f + g) * (e * h) + (-3 * b + 3 * c - 2 * f - g) * h + f * e + b }, difference: function(a, b) { return Math.abs(a - b) }, roundAwayFromZero: function(a) { return a > 0 ? Math.ceil(a) : Math.floor(a) }, sinCosGenerator: function(a, b, c, d) { void 0 === b && (b = 1), void 0 === c && (c = 1), void 0 === d && (d = 1); for (var e = b, f = c, g = d * Math.PI / a, h = [], i = [], j = 0; j < a; j++) f -= e * g, e += f * g, h[j] = f, i[j] = e; return { sin: i, cos: h, length: a } }, distance: function(a, b, c, d) { var e = a - c, f = b - d; return Math.sqrt(e * e + f * f) }, distanceSq: function(a, b, c, d) { var e = a - c, f = b - d; return e * e + f * f }, distancePow: function(a, b, c, d, e) { return void 0 === e && (e = 2), Math.sqrt(Math.pow(c - a, e) + Math.pow(d - b, e)) }, clamp: function(a, b, c) { return a < b ? b : c < a ? c : a }, clampBottom: function(a, b) { return a < b ? b : a }, within: function(a, b, c) { return Math.abs(a - b) <= c }, mapLinear: function(a, b, c, d, e) { return d + (a - b) * (e - d) / (c - b) }, smoothstep: function(a, b, c) { return (a = Math.max(0, Math.min(1, (a - b) / (c - b)))) * a * (3 - 2 * a) }, smootherstep: function(a, b, c) { return (a = Math.max(0, Math.min(1, (a - b) / (c - b)))) * a * a * (a * (6 * a - 15) + 10) }, sign: function(a) { return a < 0 ? -1 : a > 0 ? 1 : 0 }, percent: function(a, b, c) { return void 0 === c && (c = 0), a > b || c > b ? 1 : a < c || c > a ? 0 : (a - c) / b } }; var g = Math.PI / 180, h = 180 / Math.PI; return c.Math.degToRad = function(a) { return a * g }, c.Math.radToDeg = function(a) { return a * h }, c.RandomDataGenerator = function(a) { void 0 === a && (a = []), this.c = 1, this.s0 = 0, this.s1 = 0, this.s2 = 0, "string" == typeof a ? this.state(a) : this.sow(a) }, c.RandomDataGenerator.prototype = { rnd: function() { var a = 2091639 * this.s0 + 2.3283064365386963e-10 * this.c; return this.c = 0 | a, this.s0 = this.s1, this.s1 = this.s2, this.s2 = a - this.c, this.s2 }, sow: function(a) { if (this.s0 = this.hash(" "), this.s1 = this.hash(this.s0), this.s2 = this.hash(this.s1), this.c = 1, a) for (var b = 0; b < a.length && null != a[b]; b++) { var c = a[b]; this.s0 -= this.hash(c), this.s0 += ~~(this.s0 < 0), this.s1 -= this.hash(c), this.s1 += ~~(this.s1 < 0), this.s2 -= this.hash(c), this.s2 += ~~(this.s2 < 0) } }, hash: function(a) { var b, c, d; for (d = 4022871197, a = a.toString(), c = 0; c < a.length; c++) d += a.charCodeAt(c), b = .02519603282416938 * d, d = b >>> 0, b -= d, b *= d, d = b >>> 0, b -= d, d += 4294967296 * b; return 2.3283064365386963e-10 * (d >>> 0) }, integer: function() { return 4294967296 * this.rnd.apply(this) }, frac: function() { return this.rnd.apply(this) + 1.1102230246251565e-16 * (2097152 * this.rnd.apply(this) | 0) }, real: function() { return this.integer() + this.frac() }, integerInRange: function(a, b) { return Math.floor(this.realInRange(0, b - a + 1) + a) }, between: function(a, b) { return this.integerInRange(a, b) }, realInRange: function(a, b) { return this.frac() * (b - a) + a }, normal: function() { return 1 - 2 * this.frac() }, uuid: function() { var a = "", b = ""; for (b = a = ""; a++<< 36; b += ~a % 5 | 3 * a & 4 ? (15 ^ a ? 8 ^ this.frac() * (20 ^ a ? 16 : 4) : 4).toString(16) : "-"); return b }, pick: function(a) { return a[this.integerInRange(0, a.length - 1)] }, sign: function() { return this.pick([-1, 1]) }, weightedPick: function(a) { return a[~~(Math.pow(this.frac(), 2) * (a.length - 1) + .5)] }, timestamp: function(a, b) { return this.realInRange(a || 9466848e5, b || 1577862e6) }, angle: function() { return this.integerInRange(-180, 180) }, state: function(a) { return "string" == typeof a && a.match(/^!rnd/) && (a = a.split(","), this.c = parseFloat(a[1]), this.s0 = parseFloat(a[2]), this.s1 = parseFloat(a[3]), this.s2 = parseFloat(a[4])), ["!rnd", this.c, this.s0, this.s1, this.s2].join(",") } }, c.RandomDataGenerator.prototype.constructor = c.RandomDataGenerator, c.QuadTree = function(a, b, c, d, e, f, g) { this.maxObjects = 10, this.maxLevels = 4, this.level = 0, this.bounds = {}, this.objects = [], this.nodes = [], this._empty = [], this.reset(a, b, c, d, e, f, g) }, c.QuadTree.prototype = { reset: function(a, b, c, d, e, f, g) { this.maxObjects = e || 10, this.maxLevels = f || 4, this.level = g || 0, this.bounds = { x: Math.round(a), y: Math.round(b), width: c, height: d, subWidth: Math.floor(c / 2), subHeight: Math.floor(d / 2), right: Math.round(a) + Math.floor(c / 2), bottom: Math.round(b) + Math.floor(d / 2) }, this.objects.length = 0, this.nodes.length = 0 }, populate: function(a) { a.forEach(this.populateHandler, this, !0) }, populateHandler: function(a) { a.body && a.exists && this.insert(a.body) }, split: function() { this.nodes[0] = new c.QuadTree(this.bounds.right, this.bounds.y, this.bounds.subWidth, this.bounds.subHeight, this.maxObjects, this.maxLevels, this.level + 1), this.nodes[1] = new c.QuadTree(this.bounds.x, this.bounds.y, this.bounds.subWidth, this.bounds.subHeight, this.maxObjects, this.maxLevels, this.level + 1), this.nodes[2] = new c.QuadTree(this.bounds.x, this.bounds.bottom, this.bounds.subWidth, this.bounds.subHeight, this.maxObjects, this.maxLevels, this.level + 1), this.nodes[3] = new c.QuadTree(this.bounds.right, this.bounds.bottom, this.bounds.subWidth, this.bounds.subHeight, this.maxObjects, this.maxLevels, this.level + 1) }, insert: function(a) { var b, c = 0; if (null != this.nodes[0] && -1 !== (b = this.getIndex(a))) return void this.nodes[b].insert(a); if (this.objects.push(a), this.objects.length > this.maxObjects && this.level < this.maxLevels) for (null == this.nodes[0] && this.split(); c < this.objects.length;) b = this.getIndex(this.objects[c]), -1 !== b ? this.nodes[b].insert(this.objects.splice(c, 1)[0]) : c++ }, getIndex: function(a) { var b = -1; return a.x < this.bounds.right && a.right < this.bounds.right ? a.y < this.bounds.bottom && a.bottom < this.bounds.bottom ? b = 1 : a.y > this.bounds.bottom && (b = 2) : a.x > this.bounds.right && (a.y < this.bounds.bottom && a.bottom < this.bounds.bottom ? b = 0 : a.y > this.bounds.bottom && (b = 3)), b }, retrieve: function(a) { if (a instanceof c.Rectangle) var b = this.objects, d = this.getIndex(a); else { if (!a.body) return this._empty; var b = this.objects, d = this.getIndex(a.body) } return this.nodes[0] && (-1 !== d ? b = b.concat(this.nodes[d].retrieve(a)) : (b = b.concat(this.nodes[0].retrieve(a)), b = b.concat(this.nodes[1].retrieve(a)), b = b.concat(this.nodes[2].retrieve(a)), b = b.concat(this.nodes[3].retrieve(a)))), b }, clear: function() { this.objects.length = 0; for (var a = this.nodes.length; a--;) this.nodes[a].clear(), this.nodes.splice(a, 1); this.nodes.length = 0 } }, c.QuadTree.prototype.constructor = c.QuadTree, c.Net = function(a) { this.game = a }, c.Net.prototype = { getHostName: function() { return window.location && window.location.hostname ? window.location.hostname : null }, checkDomainName: function(a) { return -1 !== window.location.hostname.indexOf(a) }, updateQueryString: function(a, b, c, d) { void 0 === c && (c = !1), void 0 !== d && "" !== d || (d = window.location.href); var e = "", f = new RegExp("([?|&])" + a + "=.*?(&|#|$)(.*)", "gi"); if (f.test(d)) e = void 0 !== b && null !== b ? d.replace(f, "$1" + a + "=" + b + "$2$3") : d.replace(f, "$1$3").replace(/(&|\?)$/, ""); else if (void 0 !== b && null !== b) { var g = -1 !== d.indexOf("?") ? "&" : "?", h = d.split("#"); d = h[0] + g + a + "=" + b, h[1] && (d += "#" + h[1]), e = d } else e = d; if (!c) return e; window.location.href = e }, getQueryString: function(a) { void 0 === a && (a = ""); var b = {}, c = location.search.substring(1).split("&"); for (var d in c) { var e = c[d].split("="); if (e.length > 1) { if (a && a === this.decodeURI(e[0])) return this.decodeURI(e[1]); b[this.decodeURI(e[0])] = this.decodeURI(e[1]) } } return b }, decodeURI: function(a) { return decodeURIComponent(a.replace(/\+/g, " ")) } }, c.Net.prototype.constructor = c.Net, c.TweenManager = function(a) { this.game = a, this.frameBased = !1, this._tweens = [], this._add = [], this.easeMap = { Power0: c.Easing.Power0, Power1: c.Easing.Power1, Power2: c.Easing.Power2, Power3: c.Easing.Power3, Power4: c.Easing.Power4, Linear: c.Easing.Linear.None, Quad: c.Easing.Quadratic.Out, Cubic: c.Easing.Cubic.Out, Quart: c.Easing.Quartic.Out, Quint: c.Easing.Quintic.Out, Sine: c.Easing.Sinusoidal.Out, Expo: c.Easing.Exponential.Out, Circ: c.Easing.Circular.Out, Elastic: c.Easing.Elastic.Out, Back: c.Easing.Back.Out, Bounce: c.Easing.Bounce.Out, "Quad.easeIn": c.Easing.Quadratic.In, "Cubic.easeIn": c.Easing.Cubic.In, "Quart.easeIn": c.Easing.Quartic.In, "Quint.easeIn": c.Easing.Quintic.In, "Sine.easeIn": c.Easing.Sinusoidal.In, "Expo.easeIn": c.Easing.Exponential.In, "Circ.easeIn": c.Easing.Circular.In, "Elastic.easeIn": c.Easing.Elastic.In, "Back.easeIn": c.Easing.Back.In, "Bounce.easeIn": c.Easing.Bounce.In, "Quad.easeOut": c.Easing.Quadratic.Out, "Cubic.easeOut": c.Easing.Cubic.Out, "Quart.easeOut": c.Easing.Quartic.Out, "Quint.easeOut": c.Easing.Quintic.Out, "Sine.easeOut": c.Easing.Sinusoidal.Out, "Expo.easeOut": c.Easing.Exponential.Out, "Circ.easeOut": c.Easing.Circular.Out, "Elastic.easeOut": c.Easing.Elastic.Out, "Back.easeOut": c.Easing.Back.Out, "Bounce.easeOut": c.Easing.Bounce.Out, "Quad.easeInOut": c.Easing.Quadratic.InOut, "Cubic.easeInOut": c.Easing.Cubic.InOut, "Quart.easeInOut": c.Easing.Quartic.InOut, "Quint.easeInOut": c.Easing.Quintic.InOut, "Sine.easeInOut": c.Easing.Sinusoidal.InOut, "Expo.easeInOut": c.Easing.Exponential.InOut, "Circ.easeInOut": c.Easing.Circular.InOut, "Elastic.easeInOut": c.Easing.Elastic.InOut, "Back.easeInOut": c.Easing.Back.InOut, "Bounce.easeInOut": c.Easing.Bounce.InOut }, this.game.onPause.add(this._pauseAll, this), this.game.onResume.add(this._resumeAll, this) }, c.TweenManager.prototype = { getAll: function() { return this._tweens }, removeAll: function() { for (var a = 0; a < this._tweens.length; a++) this._tweens[a].pendingDelete = !0; this._add = [] }, removeFrom: function(a, b) { void 0 === b && (b = !0); var d, e; if (Array.isArray(a)) for (d = 0, e = a.length; d < e; d++) this.removeFrom(a[d]); else if (a.type === c.GROUP && b) for (var d = 0, e = a.children.length; d < e; d++) this.removeFrom(a.children[d]); else { for (d = 0, e = this._tweens.length; d < e; d++) a === this._tweens[d].target && this.remove(this._tweens[d]); for (d = 0, e = this._add.length; d < e; d++) a === this._add[d].target && this.remove(this._add[d]) } }, add: function(a) { a._manager = this, this._add.push(a) }, create: function(a) { return new c.Tween(a, this.game, this) }, remove: function(a) { var b = this._tweens.indexOf(a); - 1 !== b ? this._tweens[b].pendingDelete = !0 : -1 !== (b = this._add.indexOf(a)) && (this._add[b].pendingDelete = !0) }, update: function() { var a = this._add.length, b = this._tweens.length; if (0 === b && 0 === a) return !1; for (var c = 0; c < b;) this._tweens[c].update(this.game.time.time) ? c++ : (this._tweens.splice(c, 1), b--); return a > 0 && (this._tweens = this._tweens.concat(this._add), this._add.length = 0), !0 }, isTweening: function(a) { return this._tweens.some(function(b) { return b.target === a }) }, _pauseAll: function() { for (var a = this._tweens.length - 1; a >= 0; a--) this._tweens[a]._pause() }, _resumeAll: function() { for (var a = this._tweens.length - 1; a >= 0; a--) this._tweens[a]._resume() }, pauseAll: function() { for (var a = this._tweens.length - 1; a >= 0; a--) this._tweens[a].pause() }, resumeAll: function() { for (var a = this._tweens.length - 1; a >= 0; a--) this._tweens[a].resume(!0) } }, c.TweenManager.prototype.constructor = c.TweenManager, c.Tween = function(a, b, d) { this.game = b, this.target = a, this.manager = d, this.timeline = [], this.reverse = !1, this.timeScale = 1, this.repeatCounter = 0, this.pendingDelete = !1, this.onStart = new c.Signal, this.onLoop = new c.Signal, this.onRepeat = new c.Signal, this.onChildComplete = new c.Signal, this.onComplete = new c.Signal, this.isRunning = !1, this.current = 0, this.properties = {}, this.chainedTween = null, this.isPaused = !1, this.frameBased = d.frameBased, this._onUpdateCallback = null, this._onUpdateCallbackContext = null, this._pausedTime = 0, this._codePaused = !1, this._hasStarted = !1 }, c.Tween.prototype = { to: function(a, b, d, e, f, g, h) { return (void 0 === b || b <= 0) && (b = 1e3), void 0 !== d && null !== d || (d = c.Easing.Default), void 0 === e && (e = !1), void 0 === f && (f = 0), void 0 === g && (g = 0), void 0 === h && (h = !1), "string" == typeof d && this.manager.easeMap[d] && (d = this.manager.easeMap[d]), this.isRunning ? (console.warn("Phaser.Tween.to cannot be called after Tween.start"), this) : (this.timeline.push(new c.TweenData(this).to(a, b, d, f, g, h)), e && this.start(), this) }, from: function(a, b, d, e, f, g, h) { return void 0 === b && (b = 1e3), void 0 !== d && null !== d || (d = c.Easing.Default), void 0 === e && (e = !1), void 0 === f && (f = 0), void 0 === g && (g = 0), void 0 === h && (h = !1), "string" == typeof d && this.manager.easeMap[d] && (d = this.manager.easeMap[d]), this.isRunning ? (console.warn("Phaser.Tween.from cannot be called after Tween.start"), this) : (this.timeline.push(new c.TweenData(this).from(a, b, d, f, g, h)), e && this.start(), this) }, start: function(a) { if (void 0 === a && (a = 0), null === this.game || null === this.target || 0 === this.timeline.length || this.isRunning) return this; for (var b = 0; b < this.timeline.length; b++) for (var c in this.timeline[b].vEnd) this.properties[c] = this.target[c] || 0, Array.isArray(this.properties[c]) || (this.properties[c] *= 1); for (var b = 0; b < this.timeline.length; b++) this.timeline[b].loadValues(); return this.manager.add(this), this.isRunning = !0, (a < 0 || a > this.timeline.length - 1) && (a = 0), this.current = a, this.timeline[this.current].start(), this }, stop: function(a) { return void 0 === a && (a = !1), this.isRunning = !1, this._onUpdateCallback = null, this._onUpdateCallbackContext = null, a && (this.onComplete.dispatch(this.target, this), this._hasStarted = !1, this.chainedTween && this.chainedTween.start()), this.manager.remove(this), this }, updateTweenData: function(a, b, c) { if (0 === this.timeline.length) return this; if (void 0 === c && (c = 0), -1 === c) for (var d = 0; d < this.timeline.length; d++) this.timeline[d][a] = b; else this.timeline[c][a] = b; return this }, delay: function(a, b) { return this.updateTweenData("delay", a, b) }, repeat: function(a, b, c) { return void 0 === b && (b = 0), this.updateTweenData("repeatCounter", a, c), this.updateTweenData("repeatDelay", b, c) }, repeatDelay: function(a, b) { return this.updateTweenData("repeatDelay", a, b) }, yoyo: function(a, b, c) { return void 0 === b && (b = 0), this.updateTweenData("yoyo", a, c), this.updateTweenData("yoyoDelay", b, c) }, yoyoDelay: function(a, b) { return this.updateTweenData("yoyoDelay", a, b) }, easing: function(a, b) { return "string" == typeof a && this.manager.easeMap[a] && (a = this.manager.easeMap[a]), this.updateTweenData("easingFunction", a, b) }, interpolation: function(a, b, d) { return void 0 === b && (b = c.Math), this.updateTweenData("interpolationFunction", a, d), this.updateTweenData("interpolationContext", b, d) }, repeatAll: function(a) { return void 0 === a && (a = 0), this.repeatCounter = a, this }, chain: function() { for (var a = arguments.length; a--;) a > 0 ? arguments[a - 1].chainedTween = arguments[a] : this.chainedTween = arguments[a]; return this }, loop: function(a) { return void 0 === a && (a = !0), this.repeatCounter = a ? -1 : 0, this }, onUpdateCallback: function(a, b) { return this._onUpdateCallback = a, this._onUpdateCallbackContext = b, this }, pause: function() { this.isPaused = !0, this._codePaused = !0, this._pausedTime = this.game.time.time }, _pause: function() { this._codePaused || (this.isPaused = !0, this._pausedTime = this.game.time.time) }, resume: function() { if (this.isPaused) { this.isPaused = !1, this._codePaused = !1; for (var a = 0; a < this.timeline.length; a++) this.timeline[a].isRunning || (this.timeline[a].startTime += this.game.time.time - this._pausedTime) } }, _resume: function() { this._codePaused || this.resume() }, update: function(a) { if (this.pendingDelete || !this.target) return !1; if (this.isPaused) return !0; var b = this.timeline[this.current].update(a); if (b === c.TweenData.PENDING) return !0; if (b === c.TweenData.RUNNING) return this._hasStarted || (this.onStart.dispatch(this.target, this), this._hasStarted = !0), null !== this._onUpdateCallback && this._onUpdateCallback.call(this._onUpdateCallbackContext, this, this.timeline[this.current].value, this.timeline[this.current]), this.isRunning; if (b === c.TweenData.LOOPED) return -1 === this.timeline[this.current].repeatCounter ? this.onLoop.dispatch(this.target, this) : this.onRepeat.dispatch(this.target, this), !0; if (b === c.TweenData.COMPLETE) { var d = !1; return this.reverse ? --this.current < 0 && (this.current = this.timeline.length - 1, d = !0) : ++this.current === this.timeline.length && (this.current = 0, d = !0), d ? -1 === this.repeatCounter ? (this.timeline[this.current].start(), this.onLoop.dispatch(this.target, this), !0) : this.repeatCounter > 0 ? (this.repeatCounter--, this.timeline[this.current].start(), this.onRepeat.dispatch(this.target, this), !0) : (this.isRunning = !1, this.onComplete.dispatch(this.target, this), this._hasStarted = !1, this.chainedTween && this.chainedTween.start(), !1) : (this.onChildComplete.dispatch(this.target, this), this.timeline[this.current].start(), !0) } }, generateData: function(a, b) { if (null === this.game || null === this.target) return null; void 0 === a && (a = 60), void 0 === b && (b = []); for (var c = 0; c < this.timeline.length; c++) for (var d in this.timeline[c].vEnd) this.properties[d] = this.target[d] || 0, Array.isArray(this.properties[d]) || (this.properties[d] *= 1); for (var c = 0; c < this.timeline.length; c++) this.timeline[c].loadValues(); for (var c = 0; c < this.timeline.length; c++) b = b.concat(this.timeline[c].generateData(a)); return b } }, Object.defineProperty(c.Tween.prototype, "totalDuration", { get: function() { for (var a = 0, b = 0; b < this.timeline.length; b++) a += this.timeline[b].duration; return a } }), c.Tween.prototype.constructor = c.Tween, c.TweenData = function(a) { this.parent = a, this.game = a.game, this.vStart = {}, this.vStartCache = {}, this.vEnd = {}, this.vEndCache = {}, this.duration = 1e3, this.percent = 0, this.value = 0, this.repeatCounter = 0, this.repeatDelay = 0, this.repeatTotal = 0, this.interpolate = !1, this.yoyo = !1, this.yoyoDelay = 0, this.inReverse = !1, this.delay = 0, this.dt = 0, this.startTime = null, this.easingFunction = c.Easing.Default, this.interpolationFunction = c.Math.linearInterpolation, this.interpolationContext = c.Math, this.isRunning = !1, this.isFrom = !1 }, c.TweenData.PENDING = 0, c.TweenData.RUNNING = 1, c.TweenData.LOOPED = 2, c.TweenData.COMPLETE = 3, c.TweenData.prototype = { to: function(a, b, c, d, e, f) { return this.vEnd = a, this.duration = b, this.easingFunction = c, this.delay = d, this.repeatTotal = e, this.yoyo = f, this.isFrom = !1, this }, from: function(a, b, c, d, e, f) { return this.vEnd = a, this.duration = b, this.easingFunction = c, this.delay = d, this.repeatTotal = e, this.yoyo = f, this.isFrom = !0, this }, start: function() { if (this.startTime = this.game.time.time + this.delay, this.parent.reverse ? this.dt = this.duration : this.dt = 0, this.delay > 0 ? this.isRunning = !1 : this.isRunning = !0, this.isFrom) for (var a in this.vStartCache) this.vStart[a] = this.vEndCache[a], this.vEnd[a] = this.vStartCache[a], this.parent.target[a] = this.vStart[a]; return this.value = 0, this.yoyoCounter = 0, this.repeatCounter = this.repeatTotal, this }, loadValues: function() { for (var a in this.parent.properties) { if (this.vStart[a] = this.parent.properties[a], Array.isArray(this.vEnd[a])) { if (0 === this.vEnd[a].length) continue; 0 === this.percent && (this.vEnd[a] = [this.vStart[a]].concat(this.vEnd[a])) } void 0 !== this.vEnd[a] ? ("string" == typeof this.vEnd[a] && (this.vEnd[a] = this.vStart[a] + parseFloat(this.vEnd[a], 10)), this.parent.properties[a] = this.vEnd[a]) : this.vEnd[a] = this.vStart[a], this.vStartCache[a] = this.vStart[a], this.vEndCache[a] = this.vEnd[a] } return this }, update: function(a) { if (this.isRunning) { if (a < this.startTime) return c.TweenData.RUNNING } else { if (!(a >= this.startTime)) return c.TweenData.PENDING; this.isRunning = !0 } var b = this.parent.frameBased ? this.game.time.physicsElapsedMS : this.game.time.elapsedMS; this.parent.reverse ? (this.dt -= b * this.parent.timeScale, this.dt = Math.max(this.dt, 0)) : (this.dt += b * this.parent.timeScale, this.dt = Math.min(this.dt, this.duration)), this.percent = this.dt / this.duration, this.value = this.easingFunction(this.percent); for (var d in this.vEnd) { var e = this.vStart[d], f = this.vEnd[d]; Array.isArray(f) ? this.parent.target[d] = this.interpolationFunction.call(this.interpolationContext, f, this.value) : this.parent.target[d] = e + (f - e) * this.value } return !this.parent.reverse && 1 === this.percent || this.parent.reverse && 0 === this.percent ? this.repeat() : c.TweenData.RUNNING }, generateData: function(a) { this.parent.reverse ? this.dt = this.duration : this.dt = 0; var b = [], c = !1, d = 1 / a * 1e3; do { this.parent.reverse ? (this.dt -= d, this.dt = Math.max(this.dt, 0)) : (this.dt += d, this.dt = Math.min(this.dt, this.duration)), this.percent = this.dt / this.duration, this.value = this.easingFunction(this.percent); var e = {}; for (var f in this.vEnd) { var g = this.vStart[f], h = this.vEnd[f]; Array.isArray(h) ? e[f] = this.interpolationFunction(h, this.value) : e[f] = g + (h - g) * this.value } b.push(e), (!this.parent.reverse && 1 === this.percent || this.parent.reverse && 0 === this.percent) && (c = !0) } while (!c); if (this.yoyo) { var i = b.slice(); i.reverse(), b = b.concat(i) } return b }, repeat: function() { if (this.yoyo) { if (this.inReverse && 0 === this.repeatCounter) { for (var a in this.vStartCache) this.vStart[a] = this.vStartCache[a], this.vEnd[a] = this.vEndCache[a]; return this.inReverse = !1, c.TweenData.COMPLETE } this.inReverse = !this.inReverse } else if (0 === this.repeatCounter) return c.TweenData.COMPLETE; if (this.inReverse) for (var a in this.vStartCache) this.vStart[a] = this.vEndCache[a], this.vEnd[a] = this.vStartCache[a]; else { for (var a in this.vStartCache) this.vStart[a] = this.vStartCache[a], this.vEnd[a] = this.vEndCache[a]; this.repeatCounter > 0 && this.repeatCounter-- } return this.startTime = this.game.time.time, this.yoyo && this.inReverse ? this.startTime += this.yoyoDelay : this.inReverse || (this.startTime += this.repeatDelay), this.parent.reverse ? this.dt = this.duration : this.dt = 0, c.TweenData.LOOPED } }, c.TweenData.prototype.constructor = c.TweenData, c.Easing = { Linear: { None: function(a) { return a } }, Quadratic: { In: function(a) { return a * a }, Out: function(a) { return a * (2 - a) }, InOut: function(a) { return (a *= 2) < 1 ? .5 * a * a : -.5 * (--a * (a - 2) - 1) } }, Cubic: { In: function(a) { return a * a * a }, Out: function(a) { return --a * a * a + 1 }, InOut: function(a) { return (a *= 2) < 1 ? .5 * a * a * a : .5 * ((a -= 2) * a * a + 2) } }, Quartic: { In: function(a) { return a * a * a * a }, Out: function(a) { return 1 - --a * a * a * a }, InOut: function(a) { return (a *= 2) < 1 ? .5 * a * a * a * a : -.5 * ((a -= 2) * a * a * a - 2) } }, Quintic: { In: function(a) { return a * a * a * a * a }, Out: function(a) { return --a * a * a * a * a + 1 }, InOut: function(a) { return (a *= 2) < 1 ? .5 * a * a * a * a * a : .5 * ((a -= 2) * a * a * a * a + 2) } }, Sinusoidal: { In: function(a) { return 0 === a ? 0 : 1 === a ? 1 : 1 - Math.cos(a * Math.PI / 2) }, Out: function(a) { return 0 === a ? 0 : 1 === a ? 1 : Math.sin(a * Math.PI / 2) }, InOut: function(a) { return 0 === a ? 0 : 1 === a ? 1 : .5 * (1 - Math.cos(Math.PI * a)) } }, Exponential: { In: function(a) { return 0 === a ? 0 : Math.pow(1024, a - 1) }, Out: function(a) { return 1 === a ? 1 : 1 - Math.pow(2, -10 * a) }, InOut: function(a) { return 0 === a ? 0 : 1 === a ? 1 : (a *= 2) < 1 ? .5 * Math.pow(1024, a - 1) : .5 * (2 - Math.pow(2, -10 * (a - 1))) } }, Circular: { In: function(a) { return 1 - Math.sqrt(1 - a * a) }, Out: function(a) { return Math.sqrt(1 - --a * a) }, InOut: function(a) { return (a *= 2) < 1 ? -.5 * (Math.sqrt(1 - a * a) - 1) : .5 * (Math.sqrt(1 - (a -= 2) * a) + 1) } }, Elastic: { In: function(a) { var b, c = .1; return 0 === a ? 0 : 1 === a ? 1 : (!c || c < 1 ? (c = 1, b = .1) : b = .4 * Math.asin(1 / c) / (2 * Math.PI), -c * Math.pow(2, 10 * (a -= 1)) * Math.sin((a - b) * (2 * Math.PI) / .4)) }, Out: function(a) { var b, c = .1; return 0 === a ? 0 : 1 === a ? 1 : (!c || c < 1 ? (c = 1, b = .1) : b = .4 * Math.asin(1 / c) / (2 * Math.PI), c * Math.pow(2, -10 * a) * Math.sin((a - b) * (2 * Math.PI) / .4) + 1) }, InOut: function(a) { var b, c = .1; return 0 === a ? 0 : 1 === a ? 1 : (!c || c < 1 ? (c = 1, b = .1) : b = .4 * Math.asin(1 / c) / (2 * Math.PI), (a *= 2) < 1 ? c * Math.pow(2, 10 * (a -= 1)) * Math.sin((a - b) * (2 * Math.PI) / .4) * -.5 : c * Math.pow(2, -10 * (a -= 1)) * Math.sin((a - b) * (2 * Math.PI) / .4) * .5 + 1) } }, Back: { In: function(a) { var b = 1.70158; return a * a * ((b + 1) * a - b) }, Out: function(a) { var b = 1.70158; return --a * a * ((b + 1) * a + b) + 1 }, InOut: function(a) { var b = 2.5949095; return (a *= 2) < 1 ? a * a * ((b + 1) * a - b) * .5 : .5 * ((a -= 2) * a * ((b + 1) * a + b) + 2) } }, Bounce: { In: function(a) { return 1 - c.Easing.Bounce.Out(1 - a) }, Out: function(a) { return a < 1 / 2.75 ? 7.5625 * a * a : a < 2 / 2.75 ? 7.5625 * (a -= 1.5 / 2.75) * a + .75 : a < 2.5 / 2.75 ? 7.5625 * (a -= 2.25 / 2.75) * a + .9375 : 7.5625 * (a -= 2.625 / 2.75) * a + .984375 }, InOut: function(a) { return a < .5 ? .5 * c.Easing.Bounce.In(2 * a) : .5 * c.Easing.Bounce.Out(2 * a - 1) + .5 } } }, c.Easing.Default = c.Easing.Linear.None, c.Easing.Power0 = c.Easing.Linear.None, c.Easing.Power1 = c.Easing.Quadratic.Out, c.Easing.Power2 = c.Easing.Cubic.Out, c.Easing.Power3 = c.Easing.Quartic.Out, c.Easing.Power4 = c.Easing.Quintic.Out, c.Time = function(a) { this.game = a, this.time = 0, this.prevTime = 0, this.now = 0, this.elapsed = 0, this.elapsedMS = 0, this.physicsElapsed = 1 / 60, this.physicsElapsedMS = 1 / 60 * 1e3, this.desiredFpsMult = 1 / 60, this._desiredFps = 60, this.suggestedFps = this.desiredFps, this.slowMotion = 1, this.advancedTiming = !1, this.frames = 0, this.fps = 0, this.fpsMin = 1e3, this.fpsMax = 0, this.msMin = 1e3, this.msMax = 0, this.pauseDuration = 0, this.timeToCall = 0, this.timeExpected = 0, this.events = new c.Timer(this.game, !1), this._frameCount = 0, this._elapsedAccumulator = 0, this._started = 0, this._timeLastSecond = 0, this._pauseStarted = 0, this._justResumed = !1, this._timers = [] }, c.Time.prototype = { boot: function() { this._started = Date.now(), this.time = Date.now(), this.events.start(), this.timeExpected = this.time }, add: function(a) { return this._timers.push(a), a }, create: function(a) { void 0 === a && (a = !0); var b = new c.Timer(this.game, a); return this._timers.push(b), b }, removeAll: function() { for (var a = 0; a < this._timers.length; a++) this._timers[a].destroy(); this._timers = [], this.events.removeAll() }, refresh: function() { var a = this.time; this.time = Date.now(), this.elapsedMS = this.time - a }, update: function(a) { var b = this.time; this.time = Date.now(), this.elapsedMS = this.time - b, this.prevTime = this.now, this.now = a, this.elapsed = this.now - this.prevTime, this.game.raf._isSetTimeOut && (this.timeToCall = Math.floor(Math.max(0, 1e3 / this._desiredFps - (this.timeExpected - a))), this.timeExpected = a + this.timeToCall), this.advancedTiming && this.updateAdvancedTiming(), this.game.paused || (this.events.update(this.time), this._timers.length && this.updateTimers()) }, updateTimers: function() { for (var a = 0, b = this._timers.length; a < b;) this._timers[a].update(this.time) ? a++ : (this._timers.splice(a, 1), b--) }, updateAdvancedTiming: function() { this._frameCount++, this._elapsedAccumulator += this.elapsed, this._frameCount >= 2 * this._desiredFps && (this.suggestedFps = 5 * Math.floor(200 / (this._elapsedAccumulator / this._frameCount)), this._frameCount = 0, this._elapsedAccumulator = 0), this.msMin = Math.min(this.msMin, this.elapsed), this.msMax = Math.max(this.msMax, this.elapsed), this.frames++, this.now > this._timeLastSecond + 1e3 && (this.fps = Math.round(1e3 * this.frames / (this.now - this._timeLastSecond)), this.fpsMin = Math.min(this.fpsMin, this.fps), this.fpsMax = Math.max(this.fpsMax, this.fps), this._timeLastSecond = this.now, this.frames = 0) }, gamePaused: function() { this._pauseStarted = Date.now(), this.events.pause(); for (var a = this._timers.length; a--;) this._timers[a]._pause() }, gameResumed: function() { this.time = Date.now(), this.pauseDuration = this.time - this._pauseStarted, this.events.resume(); for (var a = this._timers.length; a--;) this._timers[a]._resume() }, totalElapsedSeconds: function() { return .001 * (this.time - this._started) }, elapsedSince: function(a) { return this.time - a }, elapsedSecondsSince: function(a) { return .001 * (this.time - a) }, reset: function() { this._started = this.time, this.removeAll() } }, Object.defineProperty(c.Time.prototype, "desiredFps", { get: function() { return this._desiredFps }, set: function(a) { this._desiredFps = a, this.physicsElapsed = 1 / a, this.physicsElapsedMS = 1e3 * this.physicsElapsed, this.desiredFpsMult = 1 / a } }), c.Time.prototype.constructor = c.Time, c.Timer = function(a, b) { void 0 === b && (b = !0), this.game = a, this.running = !1, this.autoDestroy = b, this.expired = !1, this.elapsed = 0, this.events = [], this.onComplete = new c.Signal, this.nextTick = 0, this.timeCap = 1e3, this.paused = !1, this._codePaused = !1, this._started = 0, this._pauseStarted = 0, this._pauseTotal = 0, this._now = Date.now(), this._len = 0, this._marked = 0, this._i = 0, this._diff = 0, this._newTick = 0 }, c.Timer.MINUTE = 6e4, c.Timer.SECOND = 1e3, c.Timer.HALF = 500, c.Timer.QUARTER = 250, c.Timer.prototype = { create: function(a, b, d, e, f, g) { a = Math.round(a); var h = a; 0 === this._now ? h += this.game.time.time : h += this._now; var i = new c.TimerEvent(this, a, h, d, b, e, f, g); return this.events.push(i), this.order(), this.expired = !1, i }, add: function(a, b, c) { return this.create(a, !1, 0, b, c, Array.prototype.slice.call(arguments, 3)) }, repeat: function(a, b, c, d) { return this.create(a, !1, b, c, d, Array.prototype.slice.call(arguments, 4)) }, loop: function(a, b, c) { return this.create(a, !0, 0, b, c, Array.prototype.slice.call(arguments, 3)) }, start: function(a) { if (!this.running) { this._started = this.game.time.time + (a || 0), this.running = !0; for (var b = 0; b < this.events.length; b++) this.events[b].tick = this.events[b].delay + this._started } }, stop: function(a) { this.running = !1, void 0 === a && (a = !0), a && (this.events.length = 0) }, remove: function(a) { for (var b = 0; b < this.events.length; b++) if (this.events[b] === a) return this.events[b].pendingDelete = !0, !0; return !1 }, order: function() { this.events.length > 0 && (this.events.sort(this.sortHandler), this.nextTick = this.events[0].tick) }, sortHandler: function(a, b) { return a.tick < b.tick ? -1 : a.tick > b.tick ? 1 : 0 }, clearPendingEvents: function() { for (this._i = this.events.length; this._i--;) this.events[this._i].pendingDelete && this.events.splice(this._i, 1); this._len = this.events.length, this._i = 0 }, update: function(a) { if (this.paused) return !0; if (this.elapsed = a - this._now, this._now = a, this.elapsed > this.timeCap && this.adjustEvents(a - this.elapsed), this._marked = 0, this.clearPendingEvents(), this.running && this._now >= this.nextTick && this._len > 0) { for (; this._i < this._len && this.running && this._now >= this.events[this._i].tick && !this.events[this._i].pendingDelete;) this._newTick = this._now + this.events[this._i].delay - (this._now - this.events[this._i].tick), this._newTick < 0 && (this._newTick = this._now + this.events[this._i].delay), !0 === this.events[this._i].loop ? (this.events[this._i].tick = this._newTick, this.events[this._i].callback.apply(this.events[this._i].callbackContext, this.events[this._i].args)) : this.events[this._i].repeatCount > 0 ? (this.events[this._i].repeatCount--, this.events[this._i].tick = this._newTick, this.events[this._i].callback.apply(this.events[this._i].callbackContext, this.events[this._i].args)) : (this._marked++, this.events[this._i].pendingDelete = !0, this.events[this._i].callback.apply(this.events[this._i].callbackContext, this.events[this._i].args)), this._i++; this.events.length > this._marked ? this.order() : (this.expired = !0, this.onComplete.dispatch(this)) } return !this.expired || !this.autoDestroy }, pause: function() { this.running && (this._codePaused = !0, this.paused || (this._pauseStarted = this.game.time.time, this.paused = !0)) }, _pause: function() {!this.paused && this.running && (this._pauseStarted = this.game.time.time, this.paused = !0) }, adjustEvents: function(a) { for (var b = 0; b < this.events.length; b++) if (!this.events[b].pendingDelete) { var c = this.events[b].tick - a; c < 0 && (c = 0), this.events[b].tick = this._now + c } var d = this.nextTick - a; this.nextTick = d < 0 ? this._now : this._now + d }, resume: function() { if (this.paused) { var a = this.game.time.time; this._pauseTotal += a - this._now, this._now = a, this.adjustEvents(this._pauseStarted), this.paused = !1, this._codePaused = !1 } }, _resume: function() { this._codePaused || this.resume() }, removeAll: function() { this.onComplete.removeAll(), this.events.length = 0, this._len = 0, this._i = 0 }, destroy: function() { this.onComplete.removeAll(), this.running = !1, this.events = [], this._len = 0, this._i = 0 } }, Object.defineProperty(c.Timer.prototype, "next", { get: function() { return this.nextTick } }), Object.defineProperty(c.Timer.prototype, "duration", { get: function() { return this.running && this.nextTick > this._now ? this.nextTick - this._now : 0 } }), Object.defineProperty(c.Timer.prototype, "length", { get: function() { return this.events.length } }), Object.defineProperty(c.Timer.prototype, "ms", { get: function() { return this.running ? this._now - this._started - this._pauseTotal : 0 } }), Object.defineProperty(c.Timer.prototype, "seconds", { get: function() { return this.running ? .001 * this.ms : 0 } }), c.Timer.prototype.constructor = c.Timer, c.TimerEvent = function(a, b, c, d, e, f, g, h) { this.timer = a, this.delay = b, this.tick = c, this.repeatCount = d - 1, this.loop = e, this.callback = f, this.callbackContext = g, this.args = h, this.pendingDelete = !1 }, c.TimerEvent.prototype.constructor = c.TimerEvent, c.AnimationManager = function(a) { this.sprite = a, this.game = a.game, this.currentFrame = null, this.currentAnim = null, this.updateIfVisible = !0, this.isLoaded = !1, this._frameData = null, this._anims = {}, this._outputFrames = [] }, c.AnimationManager.prototype = { loadFrameData: function(a, b) { if (void 0 === a) return !1; if (this.isLoaded) for (var c in this._anims) this._anims[c].updateFrameData(a); return this._frameData = a, void 0 === b || null === b ? this.frame = 0 : "string" == typeof b ? this.frameName = b : this.frame = b, this.isLoaded = !0, !0 }, copyFrameData: function(a, b) { if (this._frameData = a.clone(), this.isLoaded) for (var c in this._anims) this._anims[c].updateFrameData(this._frameData); return void 0 === b || null === b ? this.frame = 0 : "string" == typeof b ? this.frameName = b : this.frame = b, this.isLoaded = !0, !0 }, add: function(a, b, d, e, f) { return b = b || [], d = d || 60, void 0 === e && (e = !1), void 0 === f && (f = !(!b || "number" != typeof b[0])), this._outputFrames = [], this._frameData.getFrameIndexes(b, f, this._outputFrames), this._anims[a] = new c.Animation(this.game, this.sprite, a, this._frameData, this._outputFrames, d, e), this.currentAnim = this._anims[a], this.sprite.tilingTexture && (this.sprite.refreshTexture = !0), this._anims[a] }, validateFrames: function(a, b) { void 0 === b && (b = !0); for (var c = 0; c < a.length; c++) if (!0 === b) { if (a[c] > this._frameData.total) return !1 } else if (!1 === this._frameData.checkFrameName(a[c])) return !1; return !0 }, play: function(a, b, c, d) { if (this._anims[a]) return this.currentAnim === this._anims[a] ? !1 === this.currentAnim.isPlaying ? (this.currentAnim.paused = !1, this.currentAnim.play(b, c, d)) : this.currentAnim : (this.currentAnim && this.currentAnim.isPlaying && this.currentAnim.stop(), this.currentAnim = this._anims[a], this.currentAnim.paused = !1, this.currentFrame = this.currentAnim.currentFrame, this.currentAnim.play(b, c, d)) }, stop: function(a, b) { void 0 === b && (b = !1), !this.currentAnim || "string" == typeof a && a !== this.currentAnim.name || this.currentAnim.stop(b) }, update: function() { return !(this.updateIfVisible && !this.sprite.visible) && (!(!this.currentAnim || !this.currentAnim.update()) && (this.currentFrame = this.currentAnim.currentFrame, !0)) }, next: function(a) { this.currentAnim && (this.currentAnim.next(a), this.currentFrame = this.currentAnim.currentFrame) }, previous: function(a) { this.currentAnim && (this.currentAnim.previous(a), this.currentFrame = this.currentAnim.currentFrame) }, getAnimation: function(a) { return "string" == typeof a && this._anims[a] ? this._anims[a] : null }, refreshFrame: function() {}, destroy: function() { var a = null; for (var a in this._anims) this._anims.hasOwnProperty(a) && this._anims[a].destroy(); this._anims = {}, this._outputFrames = [], this._frameData = null, this.currentAnim = null, this.currentFrame = null, this.sprite = null, this.game = null } }, c.AnimationManager.prototype.constructor = c.AnimationManager, Object.defineProperty(c.AnimationManager.prototype, "frameData", { get: function() { return this._frameData } }), Object.defineProperty(c.AnimationManager.prototype, "frameTotal", { get: function() { return this._frameData.total } }), Object.defineProperty(c.AnimationManager.prototype, "paused", { get: function() { return this.currentAnim.isPaused }, set: function(a) { this.currentAnim.paused = a } }), Object.defineProperty(c.AnimationManager.prototype, "name", { get: function() { if (this.currentAnim) return this.currentAnim.name } }), Object.defineProperty(c.AnimationManager.prototype, "frame", { get: function() { if (this.currentFrame) return this.currentFrame.index }, set: function(a) { "number" == typeof a && this._frameData && null !== this._frameData.getFrame(a) && (this.currentFrame = this._frameData.getFrame(a), this.currentFrame && this.sprite.setFrame(this.currentFrame)) } }), Object.defineProperty(c.AnimationManager.prototype, "frameName", { get: function() { if (this.currentFrame) return this.currentFrame.name }, set: function(a) { "string" == typeof a && this._frameData && null !== this._frameData.getFrameByName(a) ? (this.currentFrame = this._frameData.getFrameByName(a), this.currentFrame && (this._frameIndex = this.currentFrame.index, this.sprite.setFrame(this.currentFrame))) : console.warn("Cannot set frameName: " + a) } }), c.Animation = function(a, b, d, e, f, g, h) { void 0 === h && (h = !1), this.game = a, this._parent = b, this._frameData = e, this.name = d, this._frames = [], this._frames = this._frames.concat(f), this.delay = 1e3 / g, this.loop = h, this.loopCount = 0, this.killOnComplete = !1, this.isFinished = !1, this.isPlaying = !1, this.isPaused = !1, this._pauseStartTime = 0, this._frameIndex = 0, this._frameDiff = 0, this._frameSkip = 1, this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]), this.onStart = new c.Signal, this.onUpdate = null, this.onComplete = new c.Signal, this.onLoop = new c.Signal, this.isReversed = !1, this.game.onPause.add(this.onPause, this), this.game.onResume.add(this.onResume, this) }, c.Animation.prototype = { play: function(a, b, c) { return "number" == typeof a && (this.delay = 1e3 / a), "boolean" == typeof b && (this.loop = b), void 0 !== c && (this.killOnComplete = c), this.isPlaying = !0, this.isFinished = !1, this.paused = !1, this.loopCount = 0, this._timeLastFrame = this.game.time.time, this._timeNextFrame = this.game.time.time + this.delay, this._frameIndex = this.isReversed ? this._frames.length - 1 : 0, this.updateCurrentFrame(!1, !0), this._parent.events.onAnimationStart$dispatch(this._parent, this), this.onStart.dispatch(this._parent, this), this._parent.animations.currentAnim = this, this._parent.animations.currentFrame = this.currentFrame, this }, restart: function() { this.isPlaying = !0, this.isFinished = !1, this.paused = !1, this.loopCount = 0, this._timeLastFrame = this.game.time.time, this._timeNextFrame = this.game.time.time + this.delay, this._frameIndex = 0, this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]), this._parent.setFrame(this.currentFrame), this._parent.animations.currentAnim = this, this._parent.animations.currentFrame = this.currentFrame, this.onStart.dispatch(this._parent, this) }, reverse: function() { return this.reversed = !this.reversed, this }, reverseOnce: function() { return this.onComplete.addOnce(this.reverse, this), this.reverse() }, setFrame: function(a, b) { var c; if (void 0 === b && (b = !1), "string" == typeof a) for (var d = 0; d < this._frames.length; d++) this._frameData.getFrame(this._frames[d]).name === a && (c = d); else if ("number" == typeof a) if (b) c = a; else for (var d = 0; d < this._frames.length; d++) this._frames[d] === a && (c = d); c && (this._frameIndex = c - 1, this._timeNextFrame = this.game.time.time, this.update()) }, stop: function(a, b) { void 0 === a && (a = !1), void 0 === b && (b = !1), this.isPlaying = !1, this.isFinished = !0, this.paused = !1, a && (this.currentFrame = this._frameData.getFrame(this._frames[0]), this._parent.setFrame(this.currentFrame)), b && (this._parent.events.onAnimationComplete$dispatch(this._parent, this), this.onComplete.dispatch(this._parent, this)) }, onPause: function() { this.isPlaying && (this._frameDiff = this._timeNextFrame - this.game.time.time) }, onResume: function() { this.isPlaying && (this._timeNextFrame = this.game.time.time + this._frameDiff) }, update: function() { return !this.isPaused && (!!(this.isPlaying && this.game.time.time >= this._timeNextFrame) && (this._frameSkip = 1, this._frameDiff = this.game.time.time - this._timeNextFrame, this._timeLastFrame = this.game.time.time, this._frameDiff > this.delay && (this._frameSkip = Math.floor(this._frameDiff / this.delay), this._frameDiff -= this._frameSkip * this.delay), this._timeNextFrame = this.game.time.time + (this.delay - this._frameDiff), this.isReversed ? this._frameIndex -= this._frameSkip : this._frameIndex += this._frameSkip, !this.isReversed && this._frameIndex >= this._frames.length || this.isReversed && this._frameIndex <= -1 ? this.loop ? (this._frameIndex = Math.abs(this._frameIndex) % this._frames.length, this.isReversed && (this._frameIndex = this._frames.length - 1 - this._frameIndex), this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]), this.currentFrame && this._parent.setFrame(this.currentFrame), this.loopCount++, this._parent.events.onAnimationLoop$dispatch(this._parent, this), this.onLoop.dispatch(this._parent, this), !this.onUpdate || (this.onUpdate.dispatch(this, this.currentFrame), !!this._frameData)) : (this.complete(), !1) : this.updateCurrentFrame(!0))) }, updateCurrentFrame: function(a, b) { if (void 0 === b && (b = !1), !this._frameData) return !1; var c = this.currentFrame.index; return this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]), this.currentFrame && (b || !b && c !== this.currentFrame.index) && this._parent.setFrame(this.currentFrame), !this.onUpdate || !a || (this.onUpdate.dispatch(this, this.currentFrame), !!this._frameData) }, next: function(a) { void 0 === a && (a = 1); var b = this._frameIndex + a; b >= this._frames.length && (this.loop ? b %= this._frames.length : b = this._frames.length - 1), b !== this._frameIndex && (this._frameIndex = b, this.updateCurrentFrame(!0)) }, previous: function(a) { void 0 === a && (a = 1); var b = this._frameIndex - a; b < 0 && (this.loop ? b = this._frames.length + b : b++), b !== this._frameIndex && (this._frameIndex = b, this.updateCurrentFrame(!0)) }, updateFrameData: function(a) { this._frameData = a, this.currentFrame = this._frameData ? this._frameData.getFrame(this._frames[this._frameIndex % this._frames.length]) : null }, destroy: function() { this._frameData && (this.game.onPause.remove(this.onPause, this), this.game.onResume.remove(this.onResume, this), this.game = null, this._parent = null, this._frames = null, this._frameData = null, this.currentFrame = null, this.isPlaying = !1, this.onStart.dispose(), this.onLoop.dispose(), this.onComplete.dispose(), this.onUpdate && this.onUpdate.dispose()) }, complete: function() { this._frameIndex = this._frames.length - 1, this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]), this.isPlaying = !1, this.isFinished = !0, this.paused = !1, this._parent.events.onAnimationComplete$dispatch(this._parent, this), this.onComplete.dispatch(this._parent, this), this.killOnComplete && this._parent.kill() } }, c.Animation.prototype.constructor = c.Animation, Object.defineProperty(c.Animation.prototype, "paused", { get: function() { return this.isPaused }, set: function(a) { this.isPaused = a, a ? this._pauseStartTime = this.game.time.time : this.isPlaying && (this._timeNextFrame = this.game.time.time + this.delay) } }), Object.defineProperty(c.Animation.prototype, "reversed", { get: function() { return this.isReversed }, set: function(a) { this.isReversed = a } }), Object.defineProperty(c.Animation.prototype, "frameTotal", { get: function() { return this._frames.length } }), Object.defineProperty(c.Animation.prototype, "frame", { get: function() { return null !== this.currentFrame ? this.currentFrame.index : this._frameIndex }, set: function(a) { this.currentFrame = this._frameData.getFrame(this._frames[a]), null !== this.currentFrame && (this._frameIndex = a, this._parent.setFrame(this.currentFrame), this.onUpdate && this.onUpdate.dispatch(this, this.currentFrame)) } }), Object.defineProperty(c.Animation.prototype, "speed", { get: function() { return 1e3 / this.delay }, set: function(a) { a > 0 && (this.delay = 1e3 / a) } }), Object.defineProperty(c.Animation.prototype, "enableUpdate", { get: function() { return null !== this.onUpdate }, set: function(a) { a && null === this.onUpdate ? this.onUpdate = new c.Signal : a || null === this.onUpdate || (this.onUpdate.dispose(), this.onUpdate = null) } }), c.Animation.generateFrameNames = function(a, b, d, e, f) { void 0 === e && (e = ""); var g = [], h = ""; if (b < d) for (var i = b; i <= d; i++) h = "number" == typeof f ? c.Utils.pad(i.toString(), f, "0", 1) : i.toString(), h = a + h + e, g.push(h); else for (var i = b; i >= d; i--) h = "number" == typeof f ? c.Utils.pad(i.toString(), f, "0", 1) : i.toString(), h = a + h + e, g.push(h); return g }, c.Frame = function(a, b, d, e, f, g) { this.index = a, this.x = b, this.y = d, this.width = e, this.height = f, this.name = g, this.centerX = Math.floor(e / 2), this.centerY = Math.floor(f / 2), this.distance = c.Math.distance(0, 0, e, f), this.rotated = !1, this.rotationDirection = "cw", this.trimmed = !1, this.sourceSizeW = e, this.sourceSizeH = f, this.spriteSourceSizeX = 0, this.spriteSourceSizeY = 0, this.spriteSourceSizeW = 0, this.spriteSourceSizeH = 0, this.right = this.x + this.width, this.bottom = this.y + this.height }, c.Frame.prototype = { resize: function(a, b) { this.width = a, this.height = b, this.centerX = Math.floor(a / 2), this.centerY = Math.floor(b / 2), this.distance = c.Math.distance(0, 0, a, b), this.sourceSizeW = a, this.sourceSizeH = b, this.right = this.x + a, this.bottom = this.y + b }, setTrim: function(a, b, c, d, e, f, g) { this.trimmed = a, a && (this.sourceSizeW = b, this.sourceSizeH = c, this.centerX = Math.floor(b / 2), this.centerY = Math.floor(c / 2), this.spriteSourceSizeX = d, this.spriteSourceSizeY = e, this.spriteSourceSizeW = f, this.spriteSourceSizeH = g) }, clone: function() { var a = new c.Frame(this.index, this.x, this.y, this.width, this.height, this.name); for (var b in this) this.hasOwnProperty(b) && (a[b] = this[b]); return a }, getRect: function(a) { return void 0 === a ? a = new c.Rectangle(this.x, this.y, this.width, this.height) : a.setTo(this.x, this.y, this.width, this.height), a } }, c.Frame.prototype.constructor = c.Frame, c.FrameData = function() { this._frames = [], this._frameNames = [] }, c.FrameData.prototype = { addFrame: function(a) { return a.index = this._frames.length, this._frames.push(a), "" !== a.name && (this._frameNames[a.name] = a.index), a }, getFrame: function(a) { return a >= this._frames.length && (a = 0), this._frames[a] }, getFrameByName: function(a) { return "number" == typeof this._frameNames[a] ? this._frames[this._frameNames[a]] : null }, checkFrameName: function(a) { return null != this._frameNames[a] }, clone: function() { for (var a = new c.FrameData, b = 0; b < this._frames.length; b++) a._frames.push(this._frames[b].clone()); for (var d in this._frameNames) this._frameNames.hasOwnProperty(d) && a._frameNames.push(this._frameNames[d]); return a }, getFrameRange: function(a, b, c) { void 0 === c && (c = []); for (var d = a; d <= b; d++) c.push(this._frames[d]); return c }, getFrames: function(a, b, c) { if (void 0 === b && (b = !0), void 0 === c && (c = []), void 0 === a || 0 === a.length) for (var d = 0; d < this._frames.length; d++) c.push(this._frames[d]); else for (var d = 0; d < a.length; d++) b ? c.push(this.getFrame(a[d])) : c.push(this.getFrameByName(a[d])); return c }, getFrameIndexes: function(a, b, c) { if (void 0 === b && (b = !0), void 0 === c && (c = []), void 0 === a || 0 === a.length) for (var d = 0; d < this._frames.length; d++) c.push(this._frames[d].index); else for (var d = 0; d < a.length; d++) b && this._frames[a[d]] ? c.push(this._frames[a[d]].index) : this.getFrameByName(a[d]) && c.push(this.getFrameByName(a[d]).index); return c }, destroy: function() { this._frames = null, this._frameNames = null } }, c.FrameData.prototype.constructor = c.FrameData, Object.defineProperty(c.FrameData.prototype, "total", { get: function() { return this._frames.length } }), c.AnimationParser = { spriteSheet: function(a, b, d, e, f, g, h) { var i = b; if ("string" == typeof b && (i = a.cache.getImage(b)), null === i) return null; var j = i.width, k = i.height; d <= 0 && (d = Math.floor(-j / Math.min(-1, d))), e <= 0 && (e = Math.floor(-k / Math.min(-1, e))); var l = Math.floor((j - g) / (d + h)), m = Math.floor((k - g) / (e + h)), n = l * m; if (-1 !== f && (n = f), 0 === j || 0 === k || j < d || k < e || 0 === n) return console.warn("Phaser.AnimationParser.spriteSheet: '" + b + "'s width/height zero or width/height < given frameWidth/frameHeight"), null; for (var o = new c.FrameData, p = g, q = g, r = 0; r < n; r++) o.addFrame(new c.Frame(r, p, q, d, e, "")), (p += d + h) + d > j && (p = g, q += e + h); return o }, JSONData: function(a, b) { if (!b.frames) return console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"), void console.log(b); for (var d, e = new c.FrameData, f = b.frames, g = 0; g < f.length; g++) d = e.addFrame(new c.Frame(g, f[g].frame.x, f[g].frame.y, f[g].frame.w, f[g].frame.h, f[g].filename)), f[g].trimmed && d.setTrim(f[g].trimmed, f[g].sourceSize.w, f[g].sourceSize.h, f[g].spriteSourceSize.x, f[g].spriteSourceSize.y, f[g].spriteSourceSize.w, f[g].spriteSourceSize.h); return e }, JSONDataPyxel: function(a, b) { if (["layers", "tilewidth", "tileheight", "tileswide", "tileshigh"].forEach(function(a) { if (!b[a]) return console.warn('Phaser.AnimationParser.JSONDataPyxel: Invalid Pyxel Tilemap JSON given, missing "' + a + '" key.'), void console.log(b) }), 1 !== b.layers.length) return console.warn("Phaser.AnimationParser.JSONDataPyxel: Too many layers, this parser only supports flat Tilemaps."), void console.log(b); for (var d, e = new c.FrameData, f = b.tileheight, g = b.tilewidth, h = b.layers[0].tiles, i = 0; i < h.length; i++) d = e.addFrame(new c.Frame(i, h[i].x, h[i].y, g, f, "frame_" + i)), d.setTrim(!1); return e }, JSONDataHash: function(a, b) { if (!b.frames) return console.warn("Phaser.AnimationParser.JSONDataHash: Invalid Texture Atlas JSON given, missing 'frames' object"), void console.log(b); var d, e = new c.FrameData, f = b.frames, g = 0; for (var h in f) d = e.addFrame(new c.Frame(g, f[h].frame.x, f[h].frame.y, f[h].frame.w, f[h].frame.h, h)), f[h].trimmed && d.setTrim(f[h].trimmed, f[h].sourceSize.w, f[h].sourceSize.h, f[h].spriteSourceSize.x, f[h].spriteSourceSize.y, f[h].spriteSourceSize.w, f[h].spriteSourceSize.h), g++; return e }, XMLData: function(a, b) { if (!b.getElementsByTagName("TextureAtlas")) return void console.warn("Phaser.AnimationParser.XMLData: Invalid Texture Atlas XML given, missing <TextureAtlas> tag"); for (var d, e, f, g, h, i, j, k, l, m, n, o = new c.FrameData, p = b.getElementsByTagName("SubTexture"), q = 0; q < p.length; q++) f = p[q].attributes, e = f.name.value, g = parseInt(f.x.value, 10), h = parseInt(f.y.value, 10), i = parseInt(f.width.value, 10), j = parseInt(f.height.value, 10), k = null, l = null, f.frameX && (k = Math.abs(parseInt(f.frameX.value, 10)), l = Math.abs(parseInt(f.frameY.value, 10)), m = parseInt(f.frameWidth.value, 10), n = parseInt(f.frameHeight.value, 10)), d = o.addFrame(new c.Frame(q, g, h, i, j, e)), null === k && null === l || d.setTrim(!0, i, j, k, l, m, n); return o } }, c.Cache = function(a) { this.game = a, this.autoResolveURL = !1, this._cache = { canvas: {}, image: {}, texture: {}, sound: {}, video: {}, text: {}, json: {}, xml: {}, physics: {}, tilemap: {}, binary: {}, bitmapData: {}, bitmapFont: {}, shader: {}, renderTexture: {} }, this._urlMap = {}, this._urlResolver = new Image, this._urlTemp = null, this.onSoundUnlock = new c.Signal, this._cacheMap = [], this._cacheMap[c.Cache.CANVAS] = this._cache.canvas, this._cacheMap[c.Cache.IMAGE] = this._cache.image, this._cacheMap[c.Cache.TEXTURE] = this._cache.texture, this._cacheMap[c.Cache.SOUND] = this._cache.sound, this._cacheMap[c.Cache.TEXT] = this._cache.text, this._cacheMap[c.Cache.PHYSICS] = this._cache.physics, this._cacheMap[c.Cache.TILEMAP] = this._cache.tilemap, this._cacheMap[c.Cache.BINARY] = this._cache.binary, this._cacheMap[c.Cache.BITMAPDATA] = this._cache.bitmapData, this._cacheMap[c.Cache.BITMAPFONT] = this._cache.bitmapFont, this._cacheMap[c.Cache.JSON] = this._cache.json, this._cacheMap[c.Cache.XML] = this._cache.xml, this._cacheMap[c.Cache.VIDEO] = this._cache.video, this._cacheMap[c.Cache.SHADER] = this._cache.shader, this._cacheMap[c.Cache.RENDER_TEXTURE] = this._cache.renderTexture, this.addDefaultImage(), this.addMissingImage() }, c.Cache.CANVAS = 1, c.Cache.IMAGE = 2, c.Cache.TEXTURE = 3, c.Cache.SOUND = 4, c.Cache.TEXT = 5, c.Cache.PHYSICS = 6, c.Cache.TILEMAP = 7, c.Cache.BINARY = 8, c.Cache.BITMAPDATA = 9, c.Cache.BITMAPFONT = 10, c.Cache.JSON = 11, c.Cache.XML = 12, c.Cache.VIDEO = 13, c.Cache.SHADER = 14, c.Cache.RENDER_TEXTURE = 15, c.Cache.DEFAULT = null, c.Cache.MISSING = null, c.Cache.prototype = { addCanvas: function(a, b, c) { void 0 === c && (c = b.getContext("2d")), this._cache.canvas[a] = { canvas: b, context: c } }, addImage: function(a, b, d) { this.checkImageKey(a) && this.removeImage(a); var e = { key: a, url: b, data: d, base: new PIXI.BaseTexture(d), frame: new c.Frame(0, 0, 0, d.width, d.height, a), frameData: new c.FrameData }; return e.frameData.addFrame(new c.Frame(0, 0, 0, d.width, d.height, b)), this._cache.image[a] = e, this._resolveURL(b, e), "__default" === a ? c.Cache.DEFAULT = new PIXI.Texture(e.base) : "__missing" === a && (c.Cache.MISSING = new PIXI.Texture(e.base)), e }, addDefaultImage: function() { var a = new Image; a.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAQMAAABJtOi3AAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABVJREFUeF7NwIEAAAAAgKD9qdeocAMAoAABm3DkcAAAAABJRU5ErkJggg=="; var b = this.addImage("__default", null, a); b.base.skipRender = !0, c.Cache.DEFAULT = new PIXI.Texture(b.base) }, addMissingImage: function() { var a = new Image; a.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUeNq01ssOwyAMRFG46v//Mt1ESmgh+DFmE2GPOBARKb2NVjo+17PXLD8a1+pl5+A+wSgFygymWYHBb0FtsKhJDdZlncG2IzJ4ayoMDv20wTmSMzClEgbWYNTAkQ0Z+OJ+A/eWnAaR9+oxCF4Os0H8htsMUp+pwcgBBiMNnAwF8GqIgL2hAzaGFFgZauDPKABmowZ4GL369/0rwACp2yA/ttmvsQAAAABJRU5ErkJggg=="; var b = this.addImage("__missing", null, a); c.Cache.MISSING = new PIXI.Texture(b.base) }, addSound: function(a, b, c, d, e) { void 0 === d && (d = !0, e = !1), void 0 === e && (d = !1, e = !0); var f = !1; e && (f = !0), this._cache.sound[a] = { url: b, data: c, isDecoding: !1, decoded: f, webAudio: d, audioTag: e, locked: this.game.sound.touchLocked }, this._resolveURL(b, this._cache.sound[a]) }, addText: function(a, b, c) { this._cache.text[a] = { url: b, data: c }, this._resolveURL(b, this._cache.text[a]) }, addPhysicsData: function(a, b, c, d) { this._cache.physics[a] = { url: b, data: c, format: d }, this._resolveURL(b, this._cache.physics[a]) }, addTilemap: function(a, b, c, d) { this._cache.tilemap[a] = { url: b, data: c, format: d }, this._resolveURL(b, this._cache.tilemap[a]) }, addBinary: function(a, b) { this._cache.binary[a] = b }, addBitmapData: function(a, b, d) { return b.key = a, void 0 === d && (d = new c.FrameData, d.addFrame(b.textureFrame)), this._cache.bitmapData[a] = { data: b, frameData: d }, b }, addBitmapFont: function(a, b, d, e, f, g, h) { var i = { url: b, data: d, font: null, base: new PIXI.BaseTexture(d) }; void 0 === g && (g = 0), void 0 === h && (h = 0), i.font = "json" === f ? c.LoaderParser.jsonBitmapFont(e, i.base, g, h) : c.LoaderParser.xmlBitmapFont(e, i.base, g, h), this._cache.bitmapFont[a] = i, this._resolveURL(b, i) }, addJSON: function(a, b, c) { this._cache.json[a] = { url: b, data: c }, this._resolveURL(b, this._cache.json[a]) }, addXML: function(a, b, c) { this._cache.xml[a] = { url: b, data: c }, this._resolveURL(b, this._cache.xml[a]) }, addVideo: function(a, b, c, d) { this._cache.video[a] = { url: b, data: c, isBlob: d, locked: !0 }, this._resolveURL(b, this._cache.video[a]) }, addShader: function(a, b, c) { this._cache.shader[a] = { url: b, data: c }, this._resolveURL(b, this._cache.shader[a]) }, addRenderTexture: function(a, b) { this._cache.renderTexture[a] = { texture: b, frame: new c.Frame(0, 0, 0, b.width, b.height, "", "") } }, addSpriteSheet: function(a, b, d, e, f, g, h, i) { void 0 === g && (g = -1), void 0 === h && (h = 0), void 0 === i && (i = 0); var j = { key: a, url: b, data: d, frameWidth: e, frameHeight: f, margin: h, spacing: i, base: new PIXI.BaseTexture(d), frameData: c.AnimationParser.spriteSheet(this.game, d, e, f, g, h, i) }; this._cache.image[a] = j, this._resolveURL(b, j) }, addTextureAtlas: function(a, b, d, e, f) { var g = { key: a, url: b, data: d, base: new PIXI.BaseTexture(d) }; f === c.Loader.TEXTURE_ATLAS_XML_STARLING ? g.frameData = c.AnimationParser.XMLData(this.game, e, a) : f === c.Loader.TEXTURE_ATLAS_JSON_PYXEL ? g.frameData = c.AnimationParser.JSONDataPyxel(this.game, e, a) : Array.isArray(e.frames) ? g.frameData = c.AnimationParser.JSONData(this.game, e, a) : g.frameData = c.AnimationParser.JSONDataHash(this.game, e, a), this._cache.image[a] = g, this._resolveURL(b, g) }, reloadSound: function(a) { var b = this, c = this.getSound(a); c && (c.data.src = c.url, c.data.addEventListener("canplaythrough", function() { return b.reloadSoundComplete(a) }, !1), c.data.load()) }, reloadSoundComplete: function(a) { var b = this.getSound(a); b && (b.locked = !1, this.onSoundUnlock.dispatch(a)) }, updateSound: function(a, b, c) { var d = this.getSound(a); d && (d[b] = c) }, decodedSound: function(a, b) { var c = this.getSound(a); c.data = b, c.decoded = !0, c.isDecoding = !1 }, isSoundDecoded: function(a) { var b = this.getItem(a, c.Cache.SOUND, "isSoundDecoded"); if (b) return b.decoded }, isSoundReady: function(a) { var b = this.getItem(a, c.Cache.SOUND, "isSoundDecoded"); if (b) return b.decoded && !this.game.sound.touchLocked }, checkKey: function(a, b) { return !!this._cacheMap[a][b] }, checkURL: function(a) { return !!this._urlMap[this._resolveURL(a)] }, checkCanvasKey: function(a) { return this.checkKey(c.Cache.CANVAS, a) }, checkImageKey: function(a) { return this.checkKey(c.Cache.IMAGE, a) }, checkTextureKey: function(a) { return this.checkKey(c.Cache.TEXTURE, a) }, checkSoundKey: function(a) { return this.checkKey(c.Cache.SOUND, a) }, checkTextKey: function(a) { return this.checkKey(c.Cache.TEXT, a) }, checkPhysicsKey: function(a) { return this.checkKey(c.Cache.PHYSICS, a) }, checkTilemapKey: function(a) { return this.checkKey(c.Cache.TILEMAP, a) }, checkBinaryKey: function(a) { return this.checkKey(c.Cache.BINARY, a) }, checkBitmapDataKey: function(a) { return this.checkKey(c.Cache.BITMAPDATA, a) }, checkBitmapFontKey: function(a) { return this.checkKey(c.Cache.BITMAPFONT, a) }, checkJSONKey: function(a) { return this.checkKey(c.Cache.JSON, a) }, checkXMLKey: function(a) { return this.checkKey(c.Cache.XML, a) }, checkVideoKey: function(a) { return this.checkKey(c.Cache.VIDEO, a) }, checkShaderKey: function(a) { return this.checkKey(c.Cache.SHADER, a) }, checkRenderTextureKey: function(a) { return this.checkKey(c.Cache.RENDER_TEXTURE, a) }, getItem: function(a, b, c, d) { return this.checkKey(b, a) ? void 0 === d ? this._cacheMap[b][a] : this._cacheMap[b][a][d] : (c && console.warn("Phaser.Cache." + c + ': Key "' + a + '" not found in Cache.'), null) }, getCanvas: function(a) { return this.getItem(a, c.Cache.CANVAS, "getCanvas", "canvas") }, getImage: function(a, b) { void 0 !== a && null !== a || (a = "__default"), void 0 === b && (b = !1); var d = this.getItem(a, c.Cache.IMAGE, "getImage"); return null === d && (d = this.getItem("__missing", c.Cache.IMAGE, "getImage")), b ? d : d.data }, getTextureFrame: function(a) { return this.getItem(a, c.Cache.TEXTURE, "getTextureFrame", "frame") }, getSound: function(a) { return this.getItem(a, c.Cache.SOUND, "getSound") }, getSoundData: function(a) { return this.getItem(a, c.Cache.SOUND, "getSoundData", "data") }, getText: function(a) { return this.getItem(a, c.Cache.TEXT, "getText", "data") }, getPhysicsData: function(a, b, d) { var e = this.getItem(a, c.Cache.PHYSICS, "getPhysicsData", "data"); if (null === e || void 0 === b || null === b) return e; if (e[b]) { var f = e[b]; if (!f || !d) return f; for (var g in f) if (g = f[g], g.fixtureKey === d) return g; console.warn('Phaser.Cache.getPhysicsData: Could not find given fixtureKey: "' + d + " in " + a + '"') } else console.warn('Phaser.Cache.getPhysicsData: Invalid key/object: "' + a + " / " + b + '"'); return null }, getTilemapData: function(a) { return this.getItem(a, c.Cache.TILEMAP, "getTilemapData") }, getBinary: function(a) { return this.getItem(a, c.Cache.BINARY, "getBinary") }, getBitmapData: function(a) { return this.getItem(a, c.Cache.BITMAPDATA, "getBitmapData", "data") }, getBitmapFont: function(a) { return this.getItem(a, c.Cache.BITMAPFONT, "getBitmapFont") }, getJSON: function(a, b) { var d = this.getItem(a, c.Cache.JSON, "getJSON", "data"); return d ? b ? c.Utils.extend(!0, Array.isArray(d) ? [] : {}, d) : d : null }, getXML: function(a) { return this.getItem(a, c.Cache.XML, "getXML", "data") }, getVideo: function(a) { return this.getItem(a, c.Cache.VIDEO, "getVideo") }, getShader: function(a) { return this.getItem(a, c.Cache.SHADER, "getShader", "data") }, getRenderTexture: function(a) { return this.getItem(a, c.Cache.RENDER_TEXTURE, "getRenderTexture") }, getBaseTexture: function(a, b) { return void 0 === b && (b = c.Cache.IMAGE), this.getItem(a, b, "getBaseTexture", "base") }, getFrame: function(a, b) { return void 0 === b && (b = c.Cache.IMAGE), this.getItem(a, b, "getFrame", "frame") }, getFrameCount: function(a, b) { var c = this.getFrameData(a, b); return c ? c.total : 0 }, getFrameData: function(a, b) { return void 0 === b && (b = c.Cache.IMAGE), this.getItem(a, b, "getFrameData", "frameData") }, hasFrameData: function(a, b) { return void 0 === b && (b = c.Cache.IMAGE), null !== this.getItem(a, b, "", "frameData") }, updateFrameData: function(a, b, d) { void 0 === d && (d = c.Cache.IMAGE), this._cacheMap[d][a] && (this._cacheMap[d][a].frameData = b) }, getFrameByIndex: function(a, b, c) { var d = this.getFrameData(a, c); return d ? d.getFrame(b) : null }, getFrameByName: function(a, b, c) { var d = this.getFrameData(a, c); return d ? d.getFrameByName(b) : null }, getURL: function(a) { var a = this._resolveURL(a); return a ? this._urlMap[a] : (console.warn('Phaser.Cache.getUrl: Invalid url: "' + a + '" or Cache.autoResolveURL was false'), null) }, getKeys: function(a) { void 0 === a && (a = c.Cache.IMAGE); var b = []; if (this._cacheMap[a]) for (var d in this._cacheMap[a]) "__default" !== d && "__missing" !== d && b.push(d); return b }, removeCanvas: function(a) { delete this._cache.canvas[a] }, removeImage: function(a, b) { void 0 === b && (b = !0); var c = this.getImage(a, !0); b && c.base && c.base.destroy(), delete this._cache.image[a] }, removeSound: function(a) { delete this._cache.sound[a] }, removeText: function(a) { delete this._cache.text[a] }, removePhysics: function(a) { delete this._cache.physics[a] }, removeTilemap: function(a) { delete this._cache.tilemap[a] }, removeBinary: function(a) { delete this._cache.binary[a] }, removeBitmapData: function(a) { delete this._cache.bitmapData[a] }, removeBitmapFont: function(a) { delete this._cache.bitmapFont[a] }, removeJSON: function(a) { delete this._cache.json[a] }, removeXML: function(a) { delete this._cache.xml[a] }, removeVideo: function(a) { delete this._cache.video[a] }, removeShader: function(a) { delete this._cache.shader[a] }, removeRenderTexture: function(a) { delete this._cache.renderTexture[a] }, removeSpriteSheet: function(a) { delete this._cache.spriteSheet[a] }, removeTextureAtlas: function(a) { delete this._cache.atlas[a] }, clearGLTextures: function() { for (var a in this._cache.image) this._cache.image[a].base._glTextures = [] }, _resolveURL: function(a, b) { return this.autoResolveURL ? (this._urlResolver.src = this.game.load.baseURL + a, this._urlTemp = this._urlResolver.src, this._urlResolver.src = "", b && (this._urlMap[this._urlTemp] = b), this._urlTemp) : null }, destroy: function() { for (var a = 0; a < this._cacheMap.length; a++) { var b = this._cacheMap[a]; for (var c in b) "__default" !== c && "__missing" !== c && (b[c].destroy && b[c].destroy(), delete b[c]) } this._urlMap = null, this._urlResolver = null, this._urlTemp = null } }, c.Cache.prototype.constructor = c.Cache, c.Loader = function(a) { this.game = a, this.cache = a.cache, this.resetLocked = !1, this.isLoading = !1, this.hasLoaded = !1, this.preloadSprite = null, this.crossOrigin = !1, this.baseURL = "", this.path = "", this.headers = { requestedWith: !1, json: "application/json", xml: "application/xml" }, this.onLoadStart = new c.Signal, this.onLoadComplete = new c.Signal, this.onPackComplete = new c.Signal, this.onFileStart = new c.Signal, this.onFileComplete = new c.Signal, this.onFileError = new c.Signal, this.useXDomainRequest = !1, this._warnedAboutXDomainRequest = !1, this.enableParallel = !0, this.maxParallelDownloads = 4, this._withSyncPointDepth = 0, this._fileList = [], this._flightQueue = [], this._processingHead = 0, this._fileLoadStarted = !1, this._totalPackCount = 0, this._totalFileCount = 0, this._loadedPackCount = 0, this._loadedFileCount = 0 }, c.Loader.TEXTURE_ATLAS_JSON_ARRAY = 0, c.Loader.TEXTURE_ATLAS_JSON_HASH = 1, c.Loader.TEXTURE_ATLAS_XML_STARLING = 2, c.Loader.PHYSICS_LIME_CORONA_JSON = 3, c.Loader.PHYSICS_PHASER_JSON = 4, c.Loader.TEXTURE_ATLAS_JSON_PYXEL = 5, c.Loader.prototype = { setPreloadSprite: function(a, b) { b = b || 0, this.preloadSprite = { sprite: a, direction: b, width: a.width, height: a.height, rect: null }, this.preloadSprite.rect = 0 === b ? new c.Rectangle(0, 0, 1, a.height) : new c.Rectangle(0, 0, a.width, 1), a.crop(this.preloadSprite.rect), a.visible = !0 }, resize: function() { this.preloadSprite && this.preloadSprite.height !== this.preloadSprite.sprite.height && (this.preloadSprite.rect.height = this.preloadSprite.sprite.height) }, checkKeyExists: function(a, b) { return this.getAssetIndex(a, b) > -1 }, getAssetIndex: function(a, b) { for (var c = -1, d = 0; d < this._fileList.length; d++) { var e = this._fileList[d]; if (e.type === a && e.key === b && (c = d, !e.loaded && !e.loading)) break } return c }, getAsset: function(a, b) { var c = this.getAssetIndex(a, b); return c > -1 && { index: c, file: this._fileList[c] } }, reset: function(a, b) { void 0 === b && (b = !1), this.resetLocked || (a && (this.preloadSprite = null), this.isLoading = !1, this._processingHead = 0, this._fileList.length = 0, this._flightQueue.length = 0, this._fileLoadStarted = !1, this._totalFileCount = 0, this._totalPackCount = 0, this._loadedPackCount = 0, this._loadedFileCount = 0, b && (this.onLoadStart.removeAll(), this.onLoadComplete.removeAll(), this.onPackComplete.removeAll(), this.onFileStart.removeAll(), this.onFileComplete.removeAll(), this.onFileError.removeAll())) }, addToFileList: function(a, b, c, d, e, f) { if (void 0 === e && (e = !1), void 0 === b || "" === b) return console.warn("Phaser.Loader: Invalid or no key given of type " + a), this; if (void 0 === c || null === c) { if (!f) return console.warn("Phaser.Loader: No URL given for file type: " + a + " key: " + b), this; c = b + f } var g = { type: a, key: b, path: this.path, url: c, syncPoint: this._withSyncPointDepth > 0, data: null, loading: !1, loaded: !1, error: !1 }; if (d) for (var h in d) g[h] = d[h]; var i = this.getAssetIndex(a, b); if (e && i > -1) { var j = this._fileList[i]; j.loading || j.loaded ? (this._fileList.push(g), this._totalFileCount++) : this._fileList[i] = g } else -1 === i && (this._fileList.push(g), this._totalFileCount++); return this }, replaceInFileList: function(a, b, c, d) { return this.addToFileList(a, b, c, d, !0) }, pack: function(a, b, c, d) { if (void 0 === b && (b = null), void 0 === c && (c = null), void 0 === d && (d = null), !b && !c) return console.warn("Phaser.Loader.pack - Both url and data are null. One must be set."), this; var e = { type: "packfile", key: a, url: b, path: this.path, syncPoint: !0, data: null, loading: !1, loaded: !1, error: !1, callbackContext: d }; c && ("string" == typeof c && (c = JSON.parse(c)), e.data = c || {}, e.loaded = !0); for (var f = 0; f < this._fileList.length + 1; f++) { var g = this._fileList[f]; if (!g || !g.loaded && !g.loading && "packfile" !== g.type) { this._fileList.splice(f, 0, e), this._totalPackCount++; break } } return this }, image: function(a, b, c) { return this.addToFileList("image", a, b, void 0, c, ".png") }, images: function(a, b) { if (Array.isArray(b)) for (var c = 0; c < a.length; c++) this.image(a[c], b[c]); else for (var c = 0; c < a.length; c++) this.image(a[c]); return this }, text: function(a, b, c) { return this.addToFileList("text", a, b, void 0, c, ".txt") }, json: function(a, b, c) { return this.addToFileList("json", a, b, void 0, c, ".json") }, shader: function(a, b, c) { return this.addToFileList("shader", a, b, void 0, c, ".frag") }, xml: function(a, b, c) { return this.addToFileList("xml", a, b, void 0, c, ".xml") }, script: function(a, b, c, d) { return void 0 === c && (c = !1), !1 !== c && void 0 === d && (d = this), this.addToFileList("script", a, b, { syncPoint: !0, callback: c, callbackContext: d }, !1, ".js") }, binary: function(a, b, c, d) { return void 0 === c && (c = !1), !1 !== c && void 0 === d && (d = c), this.addToFileList("binary", a, b, { callback: c, callbackContext: d }, !1, ".bin") }, spritesheet: function(a, b, c, d, e, f, g) { return void 0 === e && (e = -1), void 0 === f && (f = 0), void 0 === g && (g = 0), this.addToFileList("spritesheet", a, b, { frameWidth: c, frameHeight: d, frameMax: e, margin: f, spacing: g }, !1, ".png") }, audio: function(a, b, c) { return this.game.sound.noAudio ? this : (void 0 === c && (c = !0), "string" == typeof b && (b = [b]), this.addToFileList("audio", a, b, { buffer: null, autoDecode: c })) }, audioSprite: function(a, b, c, d, e) { return this.game.sound.noAudio ? this : (void 0 === c && (c = null), void 0 === d && (d = null), void 0 === e && (e = !0), this.audio(a, b, e), c ? this.json(a + "-audioatlas", c) : d ? ("string" == typeof d && (d = JSON.parse(d)), this.cache.addJSON(a + "-audioatlas", "", d)) : console.warn("Phaser.Loader.audiosprite - You must specify either a jsonURL or provide a jsonData object"), this) }, audiosprite: function(a, b, c, d, e) { return this.audioSprite(a, b, c, d, e) }, video: function(a, b, c, d) { return void 0 === c && (c = this.game.device.firefox ? "loadeddata" : "canplaythrough"), void 0 === d && (d = !1), "string" == typeof b && (b = [b]), this.addToFileList("video", a, b, { buffer: null, asBlob: d, loadEvent: c }) }, tilemap: function(a, b, d, e) { if (void 0 === b && (b = null), void 0 === d && (d = null), void 0 === e && (e = c.Tilemap.CSV), b || d || (b = e === c.Tilemap.CSV ? a + ".csv" : a + ".json"), d) { switch (e) { case c.Tilemap.CSV: break; case c.Tilemap.TILED_JSON: "string" == typeof d && (d = JSON.parse(d)) } this.cache.addTilemap(a, null, d, e) } else this.addToFileList("tilemap", a, b, { format: e }); return this }, physics: function(a, b, d, e) { return void 0 === b && (b = null), void 0 === d && (d = null), void 0 === e && (e = c.Physics.LIME_CORONA_JSON), b || d || (b = a + ".json"), d ? ("string" == typeof d && (d = JSON.parse(d)), this.cache.addPhysicsData(a, null, d, e)) : this.addToFileList("physics", a, b, { format: e }), this }, bitmapFont: function(a, b, c, d, e, f) { if (void 0 !== b && null !== b || (b = a + ".png"), void 0 === c && (c = null), void 0 === d && (d = null), null === c && null === d && (c = a + ".xml"), void 0 === e && (e = 0), void 0 === f && (f = 0), c) this.addToFileList("bitmapfont", a, b, { atlasURL: c, xSpacing: e, ySpacing: f }); else if ("string" == typeof d) { var g, h; try { g = JSON.parse(d) } catch (a) { h = this.parseXml(d) } if (!h && !g) throw new Error("Phaser.Loader. Invalid Bitmap Font atlas given"); this.addToFileList("bitmapfont", a, b, { atlasURL: null, atlasData: g || h, atlasType: g ? "json" : "xml", xSpacing: e, ySpacing: f }) } return this }, atlasJSONArray: function(a, b, d, e) { return this.atlas(a, b, d, e, c.Loader.TEXTURE_ATLAS_JSON_ARRAY) }, atlasJSONHash: function(a, b, d, e) { return this.atlas(a, b, d, e, c.Loader.TEXTURE_ATLAS_JSON_HASH) }, atlasXML: function(a, b, d, e) { return void 0 === d && (d = null), void 0 === e && (e = null), d || e || (d = a + ".xml"), this.atlas(a, b, d, e, c.Loader.TEXTURE_ATLAS_XML_STARLING) }, atlas: function(a, b, d, e, f) { if (void 0 !== b && null !== b || (b = a + ".png"), void 0 === d && (d = null), void 0 === e && (e = null), void 0 === f && (f = c.Loader.TEXTURE_ATLAS_JSON_ARRAY), d || e || (d = f === c.Loader.TEXTURE_ATLAS_XML_STARLING ? a + ".xml" : a + ".json"), d) this.addToFileList("textureatlas", a, b, { atlasURL: d, format: f }); else { switch (f) { case c.Loader.TEXTURE_ATLAS_JSON_ARRAY: "string" == typeof e && (e = JSON.parse(e)); break; case c.Loader.TEXTURE_ATLAS_XML_STARLING: if ("string" == typeof e) { var g = this.parseXml(e); if (!g) throw new Error("Phaser.Loader. Invalid Texture Atlas XML given"); e = g } } this.addToFileList("textureatlas", a, b, { atlasURL: null, atlasData: e, format: f }) } return this }, withSyncPoint: function(a, b) { this._withSyncPointDepth++; try { a.call(b || this, this) } finally { this._withSyncPointDepth-- } return this }, addSyncPoint: function(a, b) { var c = this.getAsset(a, b); return c && (c.file.syncPoint = !0), this }, removeFile: function(a, b) { var c = this.getAsset(a, b); c && (c.loaded || c.loading || this._fileList.splice(c.index, 1)) }, removeAll: function() { this._fileList.length = 0, this._flightQueue.length = 0 }, start: function() { this.isLoading || (this.hasLoaded = !1, this.isLoading = !0, this.updateProgress(), this.processLoadQueue()) }, processLoadQueue: function() { if (!this.isLoading) return console.warn("Phaser.Loader - active loading canceled / reset"), void this.finishedLoading(!0); for (var a = 0; a < this._flightQueue.length; a++) { var b = this._flightQueue[a]; (b.loaded || b.error) && (this._flightQueue.splice(a, 1), a--, b.loading = !1, b.requestUrl = null, b.requestObject = null, b.error && this.onFileError.dispatch(b.key, b), "packfile" !== b.type ? (this._loadedFileCount++, this.onFileComplete.dispatch(this.progress, b.key, !b.error, this._loadedFileCount, this._totalFileCount)) : "packfile" === b.type && b.error && (this._loadedPackCount++, this.onPackComplete.dispatch(b.key, !b.error, this._loadedPackCount, this._totalPackCount))) } for (var d = !1, e = this.enableParallel ? c.Math.clamp(this.maxParallelDownloads, 1, 12) : 1, a = this._processingHead; a < this._fileList.length; a++) { var b = this._fileList[a]; if ("packfile" === b.type && !b.error && b.loaded && a === this._processingHead && (this.processPack(b), this._loadedPackCount++, this.onPackComplete.dispatch(b.key, !b.error, this._loadedPackCount, this._totalPackCount)), b.loaded || b.error ? a === this._processingHead && (this._processingHead = a + 1) : !b.loading && this._flightQueue.length < e && ("packfile" !== b.type || b.data ? d || (this._fileLoadStarted || (this._fileLoadStarted = !0, this.onLoadStart.dispatch()), this._flightQueue.push(b), b.loading = !0, this.onFileStart.dispatch(this.progress, b.key, b.url), this.loadFile(b)) : (this._flightQueue.push(b), b.loading = !0, this.loadFile(b))), !b.loaded && b.syncPoint && (d = !0), this._flightQueue.length >= e || d && this._loadedPackCount === this._totalPackCount) break } if (this.updateProgress(), this._processingHead >= this._fileList.length) this.finishedLoading(); else if (!this._flightQueue.length) { console.warn("Phaser.Loader - aborting: processing queue empty, loading may have stalled"); var f = this; setTimeout(function() { f.finishedLoading(!0) }, 2e3) } }, finishedLoading: function(a) { this.hasLoaded || (this.hasLoaded = !0, this.isLoading = !1, a || this._fileLoadStarted || (this._fileLoadStarted = !0, this.onLoadStart.dispatch()), this.onLoadComplete.dispatch(), this.game.state.loadComplete(), this.reset()) }, asyncComplete: function(a, b) { void 0 === b && (b = ""), a.loaded = !0, a.error = !!b, b && (a.errorMessage = b, console.warn("Phaser.Loader - " + a.type + "[" + a.key + "]: " + b)), this.processLoadQueue() }, processPack: function(a) { var b = a.data[a.key]; if (!b) return void console.warn("Phaser.Loader - " + a.key + ": pack has data, but not for pack key"); for (var d = 0; d < b.length; d++) { var e = b[d]; switch (e.type) { case "image": this.image(e.key, e.url, e.overwrite); break; case "text": this.text(e.key, e.url, e.overwrite); break; case "json": this.json(e.key, e.url, e.overwrite); break; case "xml": this.xml(e.key, e.url, e.overwrite); break; case "script": this.script(e.key, e.url, e.callback, a.callbackContext || this); break; case "binary": this.binary(e.key, e.url, e.callback, a.callbackContext || this); break; case "spritesheet": this.spritesheet(e.key, e.url, e.frameWidth, e.frameHeight, e.frameMax, e.margin, e.spacing); break; case "video": this.video(e.key, e.urls); break; case "audio": this.audio(e.key, e.urls, e.autoDecode); break; case "audiosprite": this.audiosprite(e.key, e.urls, e.jsonURL, e.jsonData, e.autoDecode); break; case "tilemap": this.tilemap(e.key, e.url, e.data, c.Tilemap[e.format]); break; case "physics": this.physics(e.key, e.url, e.data, c.Loader[e.format]); break; case "bitmapFont": this.bitmapFont(e.key, e.textureURL, e.atlasURL, e.atlasData, e.xSpacing, e.ySpacing); break; case "atlasJSONArray": this.atlasJSONArray(e.key, e.textureURL, e.atlasURL, e.atlasData); break; case "atlasJSONHash": this.atlasJSONHash(e.key, e.textureURL, e.atlasURL, e.atlasData); break; case "atlasXML": this.atlasXML(e.key, e.textureURL, e.atlasURL, e.atlasData); break; case "atlas": this.atlas(e.key, e.textureURL, e.atlasURL, e.atlasData, c.Loader[e.format]); break; case "shader": this.shader(e.key, e.url, e.overwrite) } } }, transformUrl: function(a, b) { return !!a && (a.match(/^(?:blob:|data:|http:\/\/|https:\/\/|\/\/)/) ? a : this.baseURL + b.path + a) }, loadFile: function(a) { switch (a.type) { case "packfile": this.xhrLoad(a, this.transformUrl(a.url, a), "text", this.fileComplete); break; case "image": case "spritesheet": case "textureatlas": case "bitmapfont": this.loadImageTag(a); break; case "audio": a.url = this.getAudioURL(a.url), a.url ? this.game.sound.usingWebAudio ? this.xhrLoad(a, this.transformUrl(a.url, a), "arraybuffer", this.fileComplete) : this.game.sound.usingAudioTag && this.loadAudioTag(a) : this.fileError(a, null, "No supported audio URL specified or device does not have audio playback support"); break; case "video": a.url = this.getVideoURL(a.url), a.url ? a.asBlob ? this.xhrLoad(a, this.transformUrl(a.url, a), "blob", this.fileComplete) : this.loadVideoTag(a) : this.fileError(a, null, "No supported video URL specified or device does not have video playback support"); break; case "json": this.xhrLoad(a, this.transformUrl(a.url, a), "text", this.jsonLoadComplete); break; case "xml": this.xhrLoad(a, this.transformUrl(a.url, a), "text", this.xmlLoadComplete); break; case "tilemap": a.format === c.Tilemap.TILED_JSON ? this.xhrLoad(a, this.transformUrl(a.url, a), "text", this.jsonLoadComplete) : a.format === c.Tilemap.CSV ? this.xhrLoad(a, this.transformUrl(a.url, a), "text", this.csvLoadComplete) : this.asyncComplete(a, "invalid Tilemap format: " + a.format); break; case "text": case "script": case "shader": case "physics": this.xhrLoad(a, this.transformUrl(a.url, a), "text", this.fileComplete); break; case "binary": this.xhrLoad(a, this.transformUrl(a.url, a), "arraybuffer", this.fileComplete) } }, loadImageTag: function(a) { var b = this; a.data = new Image, a.data.name = a.key, this.crossOrigin && (a.data.crossOrigin = this.crossOrigin), a.data.onload = function() { a.data.onload && (a.data.onload = null, a.data.onerror = null, b.fileComplete(a)) }, a.data.onerror = function() { a.data.onload && (a.data.onload = null, a.data.onerror = null, b.fileError(a)) }, a.data.src = this.transformUrl(a.url, a), a.data.complete && a.data.width && a.data.height && (a.data.onload = null, a.data.onerror = null, this.fileComplete(a)) }, loadVideoTag: function(a) { var b = this; a.data = document.createElement("video"), a.data.name = a.key, a.data.controls = !1, a.data.autoplay = !1; var d = function() { a.data.removeEventListener(a.loadEvent, d, !1), a.data.onerror = null, a.data.canplay = !0, c.GAMES[b.game.id].load.fileComplete(a) }; a.data.onerror = function() { a.data.removeEventListener(a.loadEvent, d, !1), a.data.onerror = null, a.data.canplay = !1, b.fileError(a) }, a.data.addEventListener(a.loadEvent, d, !1), a.data.src = this.transformUrl(a.url, a), a.data.load() }, loadAudioTag: function(a) { var b = this; if (this.game.sound.touchLocked) a.data = new Audio, a.data.name = a.key, a.data.preload = "auto", a.data.src = this.transformUrl(a.url, a), this.fileComplete(a); else { a.data = new Audio, a.data.name = a.key; var c = function() { a.data.removeEventListener("canplaythrough", c, !1), a.data.onerror = null, b.fileComplete(a) }; a.data.onerror = function() { a.data.removeEventListener("canplaythrough", c, !1), a.data.onerror = null, b.fileError(a) }, a.data.preload = "auto", a.data.src = this.transformUrl(a.url, a), a.data.addEventListener("canplaythrough", c, !1), a.data.load() } }, xhrLoad: function(a, b, c, d, e) { if (this.useXDomainRequest && window.XDomainRequest) return void this.xhrLoadWithXDR(a, b, c, d, e); var f = new XMLHttpRequest; f.open("GET", b, !0), f.responseType = c, !1 !== this.headers.requestedWith && f.setRequestHeader("X-Requested-With", this.headers.requestedWith), this.headers[a.type] && f.setRequestHeader("Accept", this.headers[a.type]), e = e || this.fileError; var g = this; f.onload = function() { try { return 4 === f.readyState && f.status >= 400 && f.status <= 599 ? e.call(g, a, f) : d.call(g, a, f) } catch (b) { g.hasLoaded ? window.console && console.error(b) : g.asyncComplete(a, b.message || "Exception") } }, f.onerror = function() { try { return e.call(g, a, f) } catch (b) { g.hasLoaded ? window.console && console.error(b) : g.asyncComplete(a, b.message || "Exception") } }, a.requestObject = f, a.requestUrl = b, f.send() }, xhrLoadWithXDR: function(a, b, c, d, e) { this._warnedAboutXDomainRequest || this.game.device.ie && !(this.game.device.ieVersion >= 10) || (this._warnedAboutXDomainRequest = !0, console.warn("Phaser.Loader - using XDomainRequest outside of IE 9")); var f = new window.XDomainRequest; f.open("GET", b, !0), f.responseType = c, f.timeout = 3e3, e = e || this.fileError; var g = this; f.onerror = function() { try { return e.call(g, a, f) } catch (b) { g.asyncComplete(a, b.message || "Exception") } }, f.ontimeout = function() { try { return e.call(g, a, f) } catch (b) { g.asyncComplete(a, b.message || "Exception") } }, f.onprogress = function() {}, f.onload = function() { try { return 4 === f.readyState && f.status >= 400 && f.status <= 599 ? e.call(g, a, f) : d.call(g, a, f) } catch (b) { g.asyncComplete(a, b.message || "Exception") } }, a.requestObject = f, a.requestUrl = b, setTimeout(function() { f.send() }, 0) }, getVideoURL: function(a) { for (var b = 0; b < a.length; b++) { var c, d = a[b]; if (d.uri) { if (c = d.type, d = d.uri, this.game.device.canPlayVideo(c)) return d } else { if (0 === d.indexOf("blob:") || 0 === d.indexOf("data:")) return d; d.indexOf("?") >= 0 && (d = d.substr(0, d.indexOf("?"))); if (c = d.substr((Math.max(0, d.lastIndexOf(".")) || 1 / 0) + 1).toLowerCase(), this.game.device.canPlayVideo(c)) return a[b] } } return null }, getAudioURL: function(a) { if (this.game.sound.noAudio) return null; for (var b = 0; b < a.length; b++) { var c, d = a[b]; if (d.uri) { if (c = d.type, d = d.uri, this.game.device.canPlayAudio(c)) return d } else { if (0 === d.indexOf("blob:") || 0 === d.indexOf("data:")) return d; d.indexOf("?") >= 0 && (d = d.substr(0, d.indexOf("?"))); if (c = d.substr((Math.max(0, d.lastIndexOf(".")) || 1 / 0) + 1).toLowerCase(), this.game.device.canPlayAudio(c)) return a[b] } } return null }, fileError: function(a, b, c) { var d = a.requestUrl || this.transformUrl(a.url, a), e = "error loading asset from URL " + d;!c && b && (c = b.status), c && (e = e + " (" + c + ")"), this.asyncComplete(a, e) }, fileComplete: function(a, b) { var d = !0; switch (a.type) { case "packfile": var e = JSON.parse(b.responseText); a.data = e || {}; break; case "image": this.cache.addImage(a.key, a.url, a.data); break; case "spritesheet": this.cache.addSpriteSheet(a.key, a.url, a.data, a.frameWidth, a.frameHeight, a.frameMax, a.margin, a.spacing); break; case "textureatlas": if (null == a.atlasURL) this.cache.addTextureAtlas(a.key, a.url, a.data, a.atlasData, a.format); else if (d = !1, a.format === c.Loader.TEXTURE_ATLAS_JSON_ARRAY || a.format === c.Loader.TEXTURE_ATLAS_JSON_HASH || a.format === c.Loader.TEXTURE_ATLAS_JSON_PYXEL) this.xhrLoad(a, this.transformUrl(a.atlasURL, a), "text", this.jsonLoadComplete); else { if (a.format !== c.Loader.TEXTURE_ATLAS_XML_STARLING) throw new Error("Phaser.Loader. Invalid Texture Atlas format: " + a.format); this.xhrLoad(a, this.transformUrl(a.atlasURL, a), "text", this.xmlLoadComplete) } break; case "bitmapfont": a.atlasURL ? (d = !1, this.xhrLoad(a, this.transformUrl(a.atlasURL, a), "text", function(a, b) { var c; try { c = JSON.parse(b.responseText) } catch (a) {} c ? (a.atlasType = "json", this.jsonLoadComplete(a, b)) : (a.atlasType = "xml", this.xmlLoadComplete(a, b)) })) : this.cache.addBitmapFont(a.key, a.url, a.data, a.atlasData, a.atlasType, a.xSpacing, a.ySpacing); break; case "video": if (a.asBlob) try { a.data = b.response } catch (b) { throw new Error("Phaser.Loader. Unable to parse video file as Blob: " + a.key) } this.cache.addVideo(a.key, a.url, a.data, a.asBlob); break; case "audio": this.game.sound.usingWebAudio ? (a.data = b.response, this.cache.addSound(a.key, a.url, a.data, !0, !1), a.autoDecode && this.game.sound.decode(a.key)) : this.cache.addSound(a.key, a.url, a.data, !1, !0); break; case "text": a.data = b.responseText, this.cache.addText(a.key, a.url, a.data); break; case "shader": a.data = b.responseText, this.cache.addShader(a.key, a.url, a.data); break; case "physics": var e = JSON.parse(b.responseText); this.cache.addPhysicsData(a.key, a.url, e, a.format); break; case "script": a.data = document.createElement("script"), a.data.language = "javascript", a.data.type = "text/javascript", a.data.defer = !1, a.data.text = b.responseText, document.head.appendChild(a.data), a.callback && (a.data = a.callback.call(a.callbackContext, a.key, b.responseText)); break; case "binary": a.callback ? a.data = a.callback.call(a.callbackContext, a.key, b.response) : a.data = b.response, this.cache.addBinary(a.key, a.data) } d && this.asyncComplete(a) }, jsonLoadComplete: function(a, b) { var c = JSON.parse(b.responseText); "tilemap" === a.type ? this.cache.addTilemap(a.key, a.url, c, a.format) : "bitmapfont" === a.type ? this.cache.addBitmapFont(a.key, a.url, a.data, c, a.atlasType, a.xSpacing, a.ySpacing) : "json" === a.type ? this.cache.addJSON(a.key, a.url, c) : this.cache.addTextureAtlas(a.key, a.url, a.data, c, a.format), this.asyncComplete(a) }, csvLoadComplete: function(a, b) { var c = b.responseText; this.cache.addTilemap(a.key, a.url, c, a.format), this.asyncComplete(a) }, xmlLoadComplete: function(a, b) { var c = b.responseText, d = this.parseXml(c); if (!d) { var e = b.responseType || b.contentType; return console.warn("Phaser.Loader - " + a.key + ": invalid XML (" + e + ")"), void this.asyncComplete(a, "invalid XML") } "bitmapfont" === a.type ? this.cache.addBitmapFont(a.key, a.url, a.data, d, a.atlasType, a.xSpacing, a.ySpacing) : "textureatlas" === a.type ? this.cache.addTextureAtlas(a.key, a.url, a.data, d, a.format) : "xml" === a.type && this.cache.addXML(a.key, a.url, d), this.asyncComplete(a) }, parseXml: function(a) { var b; try { if (window.DOMParser) { var c = new DOMParser; b = c.parseFromString(a, "text/xml") } else b = new ActiveXObject("Microsoft.XMLDOM"), b.async = "false", b.loadXML(a) } catch (a) { b = null } return b && b.documentElement && !b.getElementsByTagName("parsererror").length ? b : null }, updateProgress: function() { this.preloadSprite && (0 === this.preloadSprite.direction ? this.preloadSprite.rect.width = Math.floor(this.preloadSprite.width / 100 * this.progress) : this.preloadSprite.rect.height = Math.floor(this.preloadSprite.height / 100 * this.progress), this.preloadSprite.sprite ? this.preloadSprite.sprite.updateCrop() : this.preloadSprite = null) }, totalLoadedFiles: function() { return this._loadedFileCount }, totalQueuedFiles: function() { return this._totalFileCount - this._loadedFileCount }, totalLoadedPacks: function() { return this._totalPackCount }, totalQueuedPacks: function() { return this._totalPackCount - this._loadedPackCount } }, Object.defineProperty(c.Loader.prototype, "progressFloat", { get: function() { var a = this._loadedFileCount / this._totalFileCount * 100; return c.Math.clamp(a || 0, 0, 100) } }), Object.defineProperty(c.Loader.prototype, "progress", { get: function() { return Math.round(this.progressFloat) } }), c.Loader.prototype.constructor = c.Loader, c.LoaderParser = { bitmapFont: function(a, b, c, d) { return this.xmlBitmapFont(a, b, c, d) }, xmlBitmapFont: function(a, b, c, d) { var e = {}, f = a.getElementsByTagName("info")[0], g = a.getElementsByTagName("common")[0]; e.font = f.getAttribute("face"), e.size = parseInt(f.getAttribute("size"), 10), e.lineHeight = parseInt(g.getAttribute("lineHeight"), 10) + d, e.chars = {}; for (var h = a.getElementsByTagName("char"), i = 0; i < h.length; i++) { var j = parseInt(h[i].getAttribute("id"), 10); e.chars[j] = { x: parseInt(h[i].getAttribute("x"), 10), y: parseInt(h[i].getAttribute("y"), 10), width: parseInt(h[i].getAttribute("width"), 10), height: parseInt(h[i].getAttribute("height"), 10), xOffset: parseInt(h[i].getAttribute("xoffset"), 10), yOffset: parseInt(h[i].getAttribute("yoffset"), 10), xAdvance: parseInt(h[i].getAttribute("xadvance"), 10) + c, kerning: {} } } var k = a.getElementsByTagName("kerning"); for (i = 0; i < k.length; i++) { var l = parseInt(k[i].getAttribute("first"), 10), m = parseInt(k[i].getAttribute("second"), 10), n = parseInt(k[i].getAttribute("amount"), 10); e.chars[m].kerning[l] = n } return this.finalizeBitmapFont(b, e) }, jsonBitmapFont: function(a, b, c, d) { var e = { font: a.font.info._face, size: parseInt(a.font.info._size, 10), lineHeight: parseInt(a.font.common._lineHeight, 10) + d, chars: {} }; return a.font.chars.char.forEach(function(a) { var b = parseInt(a._id, 10); e.chars[b] = { x: parseInt(a._x, 10), y: parseInt(a._y, 10), width: parseInt(a._width, 10), height: parseInt(a._height, 10), xOffset: parseInt(a._xoffset, 10), yOffset: parseInt(a._yoffset, 10), xAdvance: parseInt(a._xadvance, 10) + c, kerning: {} } }), a.font.kernings && a.font.kernings.kerning && a.font.kernings.kerning.forEach(function(a) { e.chars[a._second].kerning[a._first] = parseInt(a._amount, 10) }), this.finalizeBitmapFont(b, e) }, finalizeBitmapFont: function(a, b) { return Object.keys(b.chars).forEach(function(d) { var e = b.chars[d]; e.texture = new PIXI.Texture(a, new c.Rectangle(e.x, e.y, e.width, e.height)) }), b } }, c.AudioSprite = function(a, b) { this.game = a, this.key = b, this.config = this.game.cache.getJSON(b + "-audioatlas"), this.autoplayKey = null, this.autoplay = !1, this.sounds = {}; for (var c in this.config.spritemap) { var d = this.config.spritemap[c], e = this.game.add.sound(this.key); e.addMarker(c, d.start, d.end - d.start, null, d.loop), this.sounds[c] = e } this.config.autoplay && (this.autoplayKey = this.config.autoplay, this.play(this.autoplayKey), this.autoplay = this.sounds[this.autoplayKey]) }, c.AudioSprite.prototype = { play: function(a, b) { return void 0 === b && (b = 1), this.sounds[a].play(a, null, b) }, stop: function(a) { if (a) this.sounds[a].stop(); else for (var b in this.sounds) this.sounds[b].stop() }, get: function(a) { return this.sounds[a] } }, c.AudioSprite.prototype.constructor = c.AudioSprite, c.Sound = function(a, b, d, e, f) { void 0 === d && (d = 1), void 0 === e && (e = !1), void 0 === f && (f = a.sound.connectToMaster), this.game = a, this.name = b, this.key = b, this.loop = e, this.markers = {}, this.context = null, this.autoplay = !1, this.totalDuration = 0, this.startTime = 0, this.currentTime = 0, this.duration = 0, this.durationMS = 0, this.position = 0, this.stopTime = 0, this.paused = !1, this.pausedPosition = 0, this.pausedTime = 0, this.isPlaying = !1, this.currentMarker = "", this.fadeTween = null, this.pendingPlayback = !1, this.override = !1, this.allowMultiple = !1, this.usingWebAudio = this.game.sound.usingWebAudio, this.usingAudioTag = this.game.sound.usingAudioTag, this.externalNode = null, this.masterGainNode = null, this.gainNode = null, this._sound = null, this.usingWebAudio ? (this.context = this.game.sound.context, this.masterGainNode = this.game.sound.masterGain, void 0 === this.context.createGain ? this.gainNode = this.context.createGainNode() : this.gainNode = this.context.createGain(), this.gainNode.gain.value = d * this.game.sound.volume, f && this.gainNode.connect(this.masterGainNode)) : this.usingAudioTag && (this.game.cache.getSound(b) && this.game.cache.isSoundReady(b) ? (this._sound = this.game.cache.getSoundData(b), this.totalDuration = 0, this._sound.duration && (this.totalDuration = this._sound.duration)) : this.game.cache.onSoundUnlock.add(this.soundHasUnlocked, this)), this.onDecoded = new c.Signal, this.onPlay = new c.Signal, this.onPause = new c.Signal, this.onResume = new c.Signal, this.onLoop = new c.Signal, this.onStop = new c.Signal, this.onMute = new c.Signal, this.onMarkerComplete = new c.Signal, this.onFadeComplete = new c.Signal, this._volume = d, this._buffer = null, this._muted = !1, this._tempMarker = 0, this._tempPosition = 0, this._tempVolume = 0, this._tempPause = 0, this._muteVolume = 0, this._tempLoop = 0, this._paused = !1, this._onDecodedEventDispatched = !1 }, c.Sound.prototype = { soundHasUnlocked: function(a) { a === this.key && (this._sound = this.game.cache.getSoundData(this.key), this.totalDuration = this._sound.duration) }, addMarker: function(a, b, c, d, e) { void 0 !== c && null !== c || (c = 1), void 0 !== d && null !== d || (d = 1), void 0 === e && (e = !1), this.markers[a] = { name: a, start: b, stop: b + c, volume: d, duration: c, durationMS: 1e3 * c, loop: e } }, removeMarker: function(a) { delete this.markers[a] }, onEndedHandler: function() { this._sound.onended = null, this.isPlaying = !1, this.currentTime = this.durationMS, this.stop() }, update: function() { if (!this.game.cache.checkSoundKey(this.key)) return void this.destroy(); this.isDecoded && !this._onDecodedEventDispatched && (this.onDecoded.dispatch(this), this._onDecodedEventDispatched = !0), this.pendingPlayback && this.game.cache.isSoundReady(this.key) && (this.pendingPlayback = !1, this.play(this._tempMarker, this._tempPosition, this._tempVolume, this._tempLoop)), this.isPlaying && (this.currentTime = this.game.time.time - this.startTime, this.currentTime >= this.durationMS && (this.usingWebAudio ? this.loop ? (this.onLoop.dispatch(this), this.isPlaying = !1, "" === this.currentMarker ? (this.currentTime = 0, this.startTime = this.game.time.time, this.isPlaying = !0) : (this.onMarkerComplete.dispatch(this.currentMarker, this), this.play(this.currentMarker, 0, this.volume, !0, !0))) : "" !== this.currentMarker && this.stop() : this.loop ? (this.onLoop.dispatch(this), "" === this.currentMarker && (this.currentTime = 0, this.startTime = this.game.time.time), this.isPlaying = !1, this.play(this.currentMarker, 0, this.volume, !0, !0)) : this.stop())) }, loopFull: function(a) { return this.play(null, 0, a, !0) }, play: function(a, b, c, d, e) { if (void 0 !== a && !1 !== a && null !== a || (a = ""), void 0 === e && (e = !0), this.isPlaying && !this.allowMultiple && !e && !this.override) return this; if (this._sound && this.isPlaying && !this.allowMultiple && (this.override || e)) { if (this.usingWebAudio) { if (void 0 === this._sound.stop) this._sound.noteOff(0); else try { this._sound.stop(0) } catch (a) {} this.externalNode ? this._sound.disconnect(this.externalNode) : this.gainNode && this._sound.disconnect(this.gainNode) } else this.usingAudioTag && (this._sound.pause(), this._sound.currentTime = 0); this.isPlaying = !1 } var f = Object.keys(this.markers); if ("" === a && 1 === f.length && (a = f[0]), "" === a && f.length > 0) return this; if ("" !== a) { if (!this.markers[a]) return console.warn("Phaser.Sound.play: audio marker " + a + " doesn't exist"), this; this.currentMarker = a, this.position = this.markers[a].start, this.volume = this.markers[a].volume, this.loop = this.markers[a].loop, this.duration = this.markers[a].duration, this.durationMS = this.markers[a].durationMS, void 0 !== c && (this.volume = c), void 0 !== d && (this.loop = d), this._tempMarker = a, this._tempPosition = this.position, this._tempVolume = this.volume, this._tempLoop = this.loop } else b = b || 0, void 0 === c && (c = this._volume), void 0 === d && (d = this.loop), this.position = Math.max(0, b), this.volume = c, this.loop = d, this.duration = 0, this.durationMS = 0, this._tempMarker = a, this._tempPosition = b, this._tempVolume = c, this._tempLoop = d; return this.usingWebAudio ? this.game.cache.isSoundDecoded(this.key) ? (this._sound = this.context.createBufferSource(), this.externalNode ? this._sound.connect(this.externalNode) : this._sound.connect(this.gainNode), this._buffer = this.game.cache.getSoundData(this.key), this._sound.buffer = this._buffer, this.loop && "" === a && (this._sound.loop = !0), this.loop || "" !== a || (this._sound.onended = this.onEndedHandler.bind(this)), this.totalDuration = this._sound.buffer.duration, 0 === this.duration && (this.duration = this.totalDuration, this.durationMS = Math.ceil(1e3 * this.totalDuration)), void 0 === this._sound.start ? this._sound.noteGrainOn(0, this.position, this.duration) : this.loop && "" === a ? this._sound.start(0, 0) : this._sound.start(0, this.position, this.duration), this.isPlaying = !0, this.startTime = this.game.time.time, this.currentTime = 0, this.stopTime = this.startTime + this.durationMS, this.onPlay.dispatch(this)) : (this.pendingPlayback = !0, this.game.cache.getSound(this.key) && !1 === this.game.cache.getSound(this.key).isDecoding && this.game.sound.decode(this.key, this)) : this.game.cache.getSound(this.key) && this.game.cache.getSound(this.key).locked ? (this.game.cache.reloadSound(this.key), this.pendingPlayback = !0) : this._sound && (this.game.device.wechatMinigame || this.game.device.cocoonJS || 4 === this._sound.readyState) ? (this.loop && (this._sound.loop = !0), !this.loop && "" === a && this.game.device.wechatMinigame && this._sound.addEventListener("ended", this.onEndedHandler.bind(this)), this._sound.play(), this.totalDuration = this._sound.duration, 0 === this.duration && (this.duration = this.totalDuration, this.durationMS = 1e3 * this.totalDuration), this._sound.currentTime = this.position, this._sound.muted = this._muted, this._muted || this.game.sound.mute ? this._sound.volume = 0 : this._sound.volume = this._volume, this.isPlaying = !0, this.startTime = this.game.time.time, this.currentTime = 0, this.stopTime = this.startTime + this.durationMS, this.onPlay.dispatch(this)) : this.pendingPlayback = !0, this }, restart: function(a, b, c, d) { a = a || "", b = b || 0, c = c || 1, void 0 === d && (d = !1), this.play(a, b, c, d, !0) }, pause: function() { this.isPlaying && this._sound && (this.paused = !0, this.pausedPosition = this.currentTime, this.pausedTime = this.game.time.time, this._tempPause = this._sound.currentTime, this.onPause.dispatch(this), this.stop()) }, resume: function() { if (this.paused && this._sound) { if (this.usingWebAudio) { var a = Math.max(0, this.position + this.pausedPosition / 1e3); this._sound = this.context.createBufferSource(), this._sound.buffer = this._buffer, this.externalNode ? this._sound.connect(this.externalNode) : this._sound.connect(this.gainNode), this.loop && (this._sound.loop = !0), this.loop || "" !== this.currentMarker || (this._sound.onended = this.onEndedHandler.bind(this)); var b = this.duration - this.pausedPosition / 1e3; void 0 === this._sound.start ? this._sound.noteGrainOn(0, a, b) : this.loop && this.game.device.chrome ? 42 === this.game.device.chromeVersion ? this._sound.start(0) : this._sound.start(0, a) : this._sound.start(0, a, b) } else this._sound.currentTime = this._tempPause, this._sound.play(); this.isPlaying = !0, this.paused = !1, this.startTime += this.game.time.time - this.pausedTime, this.onResume.dispatch(this) } }, stop: function() { if (this.isPlaying && this._sound) if (this.usingWebAudio) { if (void 0 === this._sound.stop) this._sound.noteOff(0); else try { this._sound.stop(0) } catch (a) {} this.externalNode ? this._sound.disconnect(this.externalNode) : this.gainNode && this._sound.disconnect(this.gainNode) } else this.usingAudioTag && (this._sound.pause(), this._sound.currentTime = 0); if (this.pendingPlayback = !1, this.isPlaying = !1, !this.paused) { var a = this.currentMarker; "" !== this.currentMarker && this.onMarkerComplete.dispatch(this.currentMarker, this), this.currentMarker = "", null !== this.fadeTween && this.fadeTween.stop(), this.onStop.dispatch(this, a) } }, fadeIn: function(a, b, c) { void 0 === b && (b = !1), void 0 === c && (c = this.currentMarker), this.paused || (this.play(c, 0, 0, b), this.fadeTo(a, 1)) }, fadeOut: function(a) { this.fadeTo(a, 0) }, fadeTo: function(a, b) { if (this.isPlaying && !this.paused && b !== this.volume) { if (void 0 === a && (a = 1e3), void 0 === b) return void console.warn("Phaser.Sound.fadeTo: No Volume Specified."); this.fadeTween = this.game.add.tween(this).to({ volume: b }, a, c.Easing.Linear.None, !0), this.fadeTween.onComplete.add(this.fadeComplete, this) } }, fadeComplete: function() { this.onFadeComplete.dispatch(this, this.volume), 0 === this.volume && this.stop() }, updateGlobalVolume: function(a) { this.usingAudioTag && this._sound && (this._sound.volume = a * this._volume) }, destroy: function(a) { void 0 === a && (a = !0), this.stop(), a ? this.game.sound.remove(this) : (this.markers = {}, this.context = null, this._buffer = null, this.externalNode = null, this.onDecoded.dispose(), this.onPlay.dispose(), this.onPause.dispose(), this.onResume.dispose(), this.onLoop.dispose(), this.onStop.dispose(), this.onMute.dispose(), this.onMarkerComplete.dispose()) } }, c.Sound.prototype.constructor = c.Sound, Object.defineProperty(c.Sound.prototype, "isDecoding", { get: function() { return this.game.cache.getSound(this.key).isDecoding } }), Object.defineProperty(c.Sound.prototype, "isDecoded", { get: function() { return this.game.cache.isSoundDecoded(this.key) } }), Object.defineProperty(c.Sound.prototype, "mute", { get: function() { return this._muted || this.game.sound.mute }, set: function(a) { (a = a || !1) !== this._muted && (a ? (this._muted = !0, this._muteVolume = this._tempVolume, this.game.device.wechatMinigame ? this._sound.pause() : this.usingWebAudio ? this.gainNode.gain.value = 0 : this.usingAudioTag && this._sound && (this._sound.volume = 0)) : (this._muted = !1, this.game.device.wechatMinigame && this.isPlaying ? this._sound.play() : this.usingWebAudio ? this.gainNode.gain.value = this._muteVolume : this.usingAudioTag && this._sound && (this._sound.volume = this._muteVolume)), this.onMute.dispatch(this)) } }), Object.defineProperty(c.Sound.prototype, "volume", { get: function() { return this._volume }, set: function(a) { if (this.game.device.firefox && this.usingAudioTag && (a = this.game.math.clamp(a, 0, 1)), this._muted) return void(this._muteVolume = a); this._tempVolume = a, this._volume = a, this.usingWebAudio ? this.gainNode.gain.value = a : this.usingAudioTag && this._sound && (this._sound.volume = a) } }), c.SoundManager = function(a) { this.game = a, this.onSoundDecode = new c.Signal, this.onVolumeChange = new c.Signal, this.onMute = new c.Signal, this.onUnMute = new c.Signal, this.context = null, this.usingWebAudio = !1, this.usingAudioTag = !1, this.noAudio = !1, this.connectToMaster = !0, this.touchLocked = !1, this.channels = 32, this.muteOnPause = !0, this._codeMuted = !1, this._muted = !1, this._unlockSource = null, this._volume = 1, this._sounds = [], this._watchList = new c.ArraySet, this._watching = !1, this._watchCallback = null, this._watchContext = null }, c.SoundManager.prototype = { boot: function() { if (this.game.device.iOS && !1 === this.game.device.webAudio && (this.channels = 1), window.PhaserGlobal) { if (!0 === window.PhaserGlobal.disableAudio) return this.noAudio = !0, void(this.touchLocked = !1); if (!0 === window.PhaserGlobal.disableWebAudio) return this.usingAudioTag = !0, void(this.touchLocked = !1) } if (window.PhaserGlobal && window.PhaserGlobal.audioContext) this.context = window.PhaserGlobal.audioContext; else if (window.AudioContext) try { this.context = new window.AudioContext } catch (a) { this.context = null, this.usingWebAudio = !1, this.touchLocked = !1 } else if (window.webkitAudioContext) try { this.context = new window.webkitAudioContext } catch (a) { this.context = null, this.usingWebAudio = !1, this.touchLocked = !1 } if (null === this.context) { if (void 0 === window.Audio) return void(this.noAudio = !0); this.usingAudioTag = !0 } else this.usingWebAudio = !0, void 0 === this.context.createGain ? this.masterGain = this.context.createGainNode() : this.masterGain = this.context.createGain(), this.masterGain.gain.value = 1, this.masterGain.connect(this.context.destination); this.noAudio || !this.game.device.cocoonJS && (this.game.device.chrome || this.game.device.iOS || window.PhaserGlobal && window.PhaserGlobal.fakeiOSTouchLock) && this.setTouchLock() }, setTouchLock: function() { this.noAudio || window.PhaserGlobal && !0 === window.PhaserGlobal.disableAudio || (this.game.device.iOSVersion > 8 || this.game.device.chromeVersion >= 55 ? this.game.input.touch.addTouchLockCallback(this.unlock, this, !0) : this.game.input.touch.addTouchLockCallback(this.unlock, this), this.touchLocked = !0) }, unlock: function() { if (this.noAudio || !this.touchLocked || null !== this._unlockSource) return !0; if (this.usingAudioTag) this.touchLocked = !1, this._unlockSource = null; else if (this.usingWebAudio) { var a = this.context.createBuffer(1, 1, 22050); this._unlockSource = this.context.createBufferSource(), this._unlockSource.buffer = a, this._unlockSource.connect(this.context.destination), void 0 === this._unlockSource.start ? this._unlockSource.noteOn(0) : this._unlockSource.start(0), "suspended" === this._unlockSource.context.state && this._unlockSource.context.resume() } return !0 }, stopAll: function() { if (!this.noAudio) for (var a = 0; a < this._sounds.length; a++) this._sounds[a] && this._sounds[a].stop() }, pauseAll: function() { if (!this.noAudio) for (var a = 0; a < this._sounds.length; a++) this._sounds[a] && this._sounds[a].pause() }, resumeAll: function() { if (!this.noAudio) for (var a = 0; a < this._sounds.length; a++) this._sounds[a] && this._sounds[a].resume() }, decode: function(a, b) { b = b || null; var c = this.game.cache.getSoundData(a); if (c && !1 === this.game.cache.isSoundDecoded(a)) { this.game.cache.updateSound(a, "isDecoding", !0); var d = this; try { this.context.decodeAudioData(c, function(c) { c && (d.game.cache.decodedSound(a, c), d.onSoundDecode.dispatch(a, b)) }) } catch (a) {} } }, setDecodedCallback: function(a, b, d) { "string" == typeof a && (a = [a]), this._watchList.reset(); for (var e = 0; e < a.length; e++) a[e] instanceof c.Sound ? this.game.cache.isSoundDecoded(a[e].key) || this._watchList.add(a[e].key) : this.game.cache.isSoundDecoded(a[e]) || this._watchList.add(a[e]); 0 === this._watchList.total ? (this._watching = !1, b.call(d)) : (this._watching = !0, this._watchCallback = b, this._watchContext = d) }, update: function() { if (!this.noAudio) {!this.touchLocked || null === this._unlockSource || this._unlockSource.playbackState !== this._unlockSource.PLAYING_STATE && this._unlockSource.playbackState !== this._unlockSource.FINISHED_STATE || (this.touchLocked = !1, this._unlockSource = null); for (var a = 0; a < this._sounds.length; a++) this._sounds[a].update(); if (this._watching) { for (var b = this._watchList.first; b;) this.game.cache.isSoundDecoded(b) && this._watchList.remove(b), b = this._watchList.next; 0 === this._watchList.total && (this._watching = !1, this._watchCallback.call(this._watchContext)) } } }, add: function(a, b, d, e) { void 0 === b && (b = 1), void 0 === d && (d = !1), void 0 === e && (e = this.connectToMaster); var f = new c.Sound(this.game, a, b, d, e); return this._sounds.push(f), f }, addSprite: function(a) { return new c.AudioSprite(this.game, a) }, remove: function(a) { for (var b = this._sounds.length; b--;) if (this._sounds[b] === a) return this._sounds[b].destroy(!1), this._sounds.splice(b, 1), !0; return !1 }, removeByKey: function(a) { for (var b = this._sounds.length, c = 0; b--;) this._sounds[b].key === a && (this._sounds[b].destroy(!1), this._sounds.splice(b, 1), c++); return c }, play: function(a, b, c) { if (!this.noAudio) { var d = this.add(a, b, c); return d.play(), d } }, setMute: function() { if (!this._muted) { this._muted = !0, this.usingWebAudio && (this._muteVolume = this.masterGain.gain.value, this.masterGain.gain.value = 0); for (var a = 0; a < this._sounds.length; a++) this._sounds[a].usingAudioTag && (this._sounds[a].mute = !0); this.onMute.dispatch() } }, unsetMute: function() { if (this._muted && !this._codeMuted) { this._muted = !1, this.usingWebAudio && (this.masterGain.gain.value = this._muteVolume); for (var a = 0; a < this._sounds.length; a++) this._sounds[a].usingAudioTag && (this._sounds[a].mute = !1); this.onUnMute.dispatch() } }, destroy: function() { this.stopAll(); for (var a = 0; a < this._sounds.length; a++) this._sounds[a] && this._sounds[a].destroy(); this._sounds = [], this.onSoundDecode.dispose(), this.context && (window.PhaserGlobal ? window.PhaserGlobal.audioContext = this.context : this.context.close && this.context.close()) } }, c.SoundManager.prototype.constructor = c.SoundManager, Object.defineProperty(c.SoundManager.prototype, "mute", { get: function() { return this._muted }, set: function(a) { if (a = a || !1) { if (this._muted) return; this._codeMuted = !0, this.setMute() } else { if (!this._muted) return; this._codeMuted = !1, this.unsetMute() } } }), Object.defineProperty(c.SoundManager.prototype, "volume", { get: function() { return this._volume }, set: function(a) { if (a < 0 ? a = 0 : a > 1 && (a = 1), this._volume !== a) { if (this._volume = a, this.usingWebAudio) this.masterGain.gain.value = a; else for (var b = 0; b < this._sounds.length; b++) this._sounds[b].usingAudioTag && this._sounds[b].updateGlobalVolume(a); this.onVolumeChange.dispatch(a) } } }), c.ScaleManager = function(a, b, d) { this.game = a, this.dom = c.DOM, this.grid = null, this.width = 0, this.height = 0, this.minWidth = null, this.maxWidth = null, this.minHeight = null, this.maxHeight = null, this.offset = new c.Point, this.forceLandscape = !1, this.forcePortrait = !1, this.incorrectOrientation = !1, this._pageAlignHorizontally = !1, this._pageAlignVertically = !1, this.onOrientationChange = new c.Signal, this.enterIncorrectOrientation = new c.Signal, this.leaveIncorrectOrientation = new c.Signal, this.hasPhaserSetFullScreen = !1, this.fullScreenTarget = null, this._createdFullScreenTarget = null, this.onFullScreenInit = new c.Signal, this.onFullScreenChange = new c.Signal, this.onFullScreenError = new c.Signal, this.screenOrientation = this.dom.getScreenOrientation(), this.scaleFactor = new c.Point(1, 1), this.scaleFactorInversed = new c.Point(1, 1), this.margin = { left: 0, top: 0, right: 0, bottom: 0, x: 0, y: 0 }, this.bounds = new c.Rectangle, this.aspectRatio = 0, this.sourceAspectRatio = 0, this.event = null, this.windowConstraints = { right: "layout", bottom: "" }, this.compatibility = { supportsFullScreen: !1, orientationFallback: null, noMargins: !1, scrollTo: null, forceMinimumDocumentHeight: !1, canExpandParent: !0, clickTrampoline: "" }, this._scaleMode = c.ScaleManager.NO_SCALE, this._fullScreenScaleMode = c.ScaleManager.NO_SCALE, this.parentIsWindow = !1, this.parentNode = null, this.parentScaleFactor = new c.Point(1, 1), this.trackParentInterval = 2e3, this.onSizeChange = new c.Signal, this.onResize = null, this.onResizeContext = null, this._pendingScaleMode = null, this._fullScreenRestore = null, this._gameSize = new c.Rectangle, this._userScaleFactor = new c.Point(1, 1), this._userScaleTrim = new c.Point(0, 0), this._lastUpdate = 0, this._updateThrottle = 0, this._updateThrottleReset = 100, this._parentBounds = new c.Rectangle, this._tempBounds = new c.Rectangle, this._lastReportedCanvasSize = new c.Rectangle, this._lastReportedGameSize = new c.Rectangle, this._booted = !1, a.config && this.parseConfig(a.config), this.setupScale(b, d) }, c.ScaleManager.EXACT_FIT = 0, c.ScaleManager.NO_SCALE = 1, c.ScaleManager.SHOW_ALL = 2, c.ScaleManager.RESIZE = 3, c.ScaleManager.USER_SCALE = 4, c.ScaleManager.prototype = { boot: function() { var a = this.compatibility; a.supportsFullScreen = this.game.device.fullscreen && !this.game.device.cocoonJS, this.game.device.iPad || this.game.device.webApp || this.game.device.desktop || (this.game.device.android && !this.game.device.chrome ? a.scrollTo = new c.Point(0, 1) : a.scrollTo = new c.Point(0, 0)), this.game.device.desktop ? (a.orientationFallback = "screen", a.clickTrampoline = "when-not-mouse") : (a.orientationFallback = "", a.clickTrampoline = ""); var b = this; this._orientationChange = function(a) { return b.orientationChange(a) }, this._windowResize = function(a) { return b.windowResize(a) }, window.addEventListener("orientationchange", this._orientationChange, !1), window.addEventListener("resize", this._windowResize, !1), this.compatibility.supportsFullScreen && (this._fullScreenChange = function(a) { return b.fullScreenChange(a) }, this._fullScreenError = function(a) { return b.fullScreenError(a) }, document.addEventListener("webkitfullscreenchange", this._fullScreenChange, !1), document.addEventListener("mozfullscreenchange", this._fullScreenChange, !1), document.addEventListener("MSFullscreenChange", this._fullScreenChange, !1), document.addEventListener("fullscreenchange", this._fullScreenChange, !1), document.addEventListener("webkitfullscreenerror", this._fullScreenError, !1), document.addEventListener("mozfullscreenerror", this._fullScreenError, !1), document.addEventListener("MSFullscreenError", this._fullScreenError, !1), document.addEventListener("fullscreenerror", this._fullScreenError, !1)), this.game.onResume.add(this._gameResumed, this), this.dom.getOffset(this.game.canvas, this.offset), this.bounds.setTo(this.offset.x, this.offset.y, this.width, this.height), this.setGameSize(this.game.width, this.game.height), this.screenOrientation = this.dom.getScreenOrientation(this.compatibility.orientationFallback), c.FlexGrid && (this.grid = new c.FlexGrid(this, this.width, this.height)), this._booted = !0, null !== this._pendingScaleMode && (this.scaleMode = this._pendingScaleMode, this._pendingScaleMode = null) }, parseConfig: function(a) { void 0 !== a.scaleMode && (this._booted ? this.scaleMode = a.scaleMode : this._pendingScaleMode = a.scaleMode), void 0 !== a.fullScreenScaleMode && (this.fullScreenScaleMode = a.fullScreenScaleMode), a.fullScreenTarget && (this.fullScreenTarget = a.fullScreenTarget) }, setupScale: function(a, b) { var d, e = new c.Rectangle; "" !== this.game.parent && ("string" == typeof this.game.parent ? d = document.getElementById(this.game.parent) : this.game.parent && 1 === this.game.parent.nodeType && (d = this.game.parent)), d ? (this.parentNode = d, this.parentIsWindow = !1, this.getParentBounds(this._parentBounds), e.width = this._parentBounds.width, e.height = this._parentBounds.height, this.offset.set(this._parentBounds.x, this._parentBounds.y)) : (this.parentNode = null, this.parentIsWindow = !0, e.width = this.dom.visualBounds.width, e.height = this.dom.visualBounds.height, this.offset.set(0, 0)); var f = 0, g = 0; "number" == typeof a ? f = a : (this.parentScaleFactor.x = parseInt(a, 10) / 100, f = e.width * this.parentScaleFactor.x), "number" == typeof b ? g = b : (this.parentScaleFactor.y = parseInt(b, 10) / 100, g = e.height * this.parentScaleFactor.y), f = Math.floor(f), g = Math.floor(g), this._gameSize.setTo(0, 0, f, g), this.updateDimensions(f, g, !1) }, _gameResumed: function() { this.queueUpdate(!0) }, setGameSize: function(a, b) { this._gameSize.setTo(0, 0, a, b), this.currentScaleMode !== c.ScaleManager.RESIZE && this.updateDimensions(a, b, !0), this.queueUpdate(!0) }, setUserScale: function(a, b, c, d) { this._userScaleFactor.setTo(a, b), this._userScaleTrim.setTo(0 | c, 0 | d), this.queueUpdate(!0) }, setResizeCallback: function(a, b) { this.onResize = a, this.onResizeContext = b }, signalSizeChange: function() { if (!c.Rectangle.sameDimensions(this, this._lastReportedCanvasSize) || !c.Rectangle.sameDimensions(this.game, this._lastReportedGameSize)) { var a = this.width, b = this.height; this._lastReportedCanvasSize.setTo(0, 0, a, b), this._lastReportedGameSize.setTo(0, 0, this.game.width, this.game.height), this.grid && this.grid.onResize(a, b), this.onSizeChange.dispatch(this, a, b), this.currentScaleMode === c.ScaleManager.RESIZE && (this.game.state.resize(a, b), this.game.load.resize(a, b)) } }, setMinMax: function(a, b, c, d) { this.minWidth = a, this.minHeight = b, void 0 !== c && (this.maxWidth = c), void 0 !== d && (this.maxHeight = d) }, preUpdate: function() { if (!(this.game.time.time < this._lastUpdate + this._updateThrottle)) { var a = this._updateThrottle; this._updateThrottleReset = a >= 400 ? 0 : 100, this.dom.getOffset(this.game.canvas, this.offset); var b = this._parentBounds.width, d = this._parentBounds.height, e = this.getParentBounds(this._parentBounds), f = e.width !== b || e.height !== d, g = this.updateOrientationState(); (f || g) && (this.onResize && this.onResize.call(this.onResizeContext, this, e), this.updateLayout(), this.signalSizeChange()); var h = 2 * this._updateThrottle; this._updateThrottle < a && (h = Math.min(a, this._updateThrottleReset)), this._updateThrottle = c.Math.clamp(h, 25, this.trackParentInterval), this._lastUpdate = this.game.time.time } }, pauseUpdate: function() { this.preUpdate(), this._updateThrottle = this.trackParentInterval }, updateDimensions: function(a, b, c) { this.width = a * this.parentScaleFactor.x, this.height = b * this.parentScaleFactor.y, this.game.width = this.width, this.game.height = this.height, this.sourceAspectRatio = this.width / this.height, this.updateScalingAndBounds(), c && (this.game.renderer.resize(this.width, this.height), this.game.camera.setSize(this.width, this.height), this.game.world.resize(this.width, this.height)) }, updateScalingAndBounds: function() { this.scaleFactor.x = this.game.width / this.width, this.scaleFactor.y = this.game.height / this.height, this.scaleFactorInversed.x = this.width / this.game.width, this.scaleFactorInversed.y = this.height / this.game.height, this.aspectRatio = this.width / this.height, this.game.canvas && this.dom.getOffset(this.game.canvas, this.offset), this.bounds.setTo(this.offset.x, this.offset.y, this.width, this.height), this.game.input && this.game.input.scale && this.game.input.scale.setTo(this.scaleFactor.x, this.scaleFactor.y) }, forceOrientation: function(a, b) { void 0 === b && (b = !1), this.forceLandscape = a, this.forcePortrait = b, this.queueUpdate(!0) }, classifyOrientation: function(a) { return "portrait-primary" === a || "portrait-secondary" === a ? "portrait" : "landscape-primary" === a || "landscape-secondary" === a ? "landscape" : null }, updateOrientationState: function() { var a = this.screenOrientation, b = this.incorrectOrientation; this.screenOrientation = this.dom.getScreenOrientation(this.compatibility.orientationFallback), this.incorrectOrientation = this.forceLandscape && !this.isLandscape || this.forcePortrait && !this.isPortrait; var c = a !== this.screenOrientation, d = b !== this.incorrectOrientation; return d && (this.incorrectOrientation ? this.enterIncorrectOrientation.dispatch() : this.leaveIncorrectOrientation.dispatch()), (c || d) && this.onOrientationChange.dispatch(this, a, b), c || d }, orientationChange: function(a) { this.event = a, this.queueUpdate(!0) }, windowResize: function(a) { this.event = a, this.queueUpdate(!0) }, scrollTop: function() { var a = this.compatibility.scrollTo; a && window.scrollTo(a.x, a.y) }, refresh: function() { this.scrollTop(), this.queueUpdate(!0) }, updateLayout: function() { var a = this.currentScaleMode; if (a === c.ScaleManager.RESIZE) return void this.reflowGame(); if (this.scrollTop(), this.compatibility.forceMinimumDocumentHeight && (document.documentElement.style.minHeight = window.innerHeight + "px"), this.incorrectOrientation ? this.setMaximum() : a === c.ScaleManager.EXACT_FIT ? this.setExactFit() : a === c.ScaleManager.SHOW_ALL ? (this.setShowAll(!0), this.resetCanvas(), this.setShowAll()) : a === c.ScaleManager.NO_SCALE ? (this.width = this.game.width, this.height = this.game.height) : a === c.ScaleManager.USER_SCALE && (this.width = this.game.width * this._userScaleFactor.x - this._userScaleTrim.x, this.height = this.game.height * this._userScaleFactor.y - this._userScaleTrim.y), !this.compatibility.canExpandParent && (a === c.ScaleManager.SHOW_ALL || a === c.ScaleManager.USER_SCALE)) { var b = this.getParentBounds(this._tempBounds); this.width = Math.min(this.width, b.width), this.height = Math.min(this.height, b.height) } this.width = 0 | this.width, this.height = 0 | this.height, this.reflowCanvas() }, getParentBounds: function(a) { var b = a || new c.Rectangle, d = this.boundingParent, e = this.dom.visualBounds, f = this.dom.layoutBounds; if (d) { var g = d.getBoundingClientRect(), h = d.offsetParent ? d.offsetParent.getBoundingClientRect() : d.getBoundingClientRect(); b.setTo(g.left - h.left, g.top - h.top, g.width, g.height); var i = this.windowConstraints; if (i.right) { var j = "layout" === i.right ? f : e; b.right = Math.min(b.right, j.width) } if (i.bottom) { var j = "layout" === i.bottom ? f : e; b.bottom = Math.min(b.bottom, j.height) } } else b.setTo(0, 0, e.width, e.height); return b.setTo(Math.round(b.x), Math.round(b.y), Math.round(b.width), Math.round(b.height)), b }, alignCanvas: function(a, b) { var c = this.getParentBounds(this._tempBounds), d = this.game.canvas, e = this.margin; if (a) { e.left = e.right = 0; var f = d.getBoundingClientRect(); if (this.width < c.width && !this.incorrectOrientation) { var g = f.left - c.x, h = c.width / 2 - this.width / 2; h = Math.max(h, 0); var i = h - g; e.left = Math.round(i) } d.style.marginLeft = e.left + "px", 0 !== e.left && (e.right = -(c.width - f.width - e.left), d.style.marginRight = e.right + "px") } if (b) { e.top = e.bottom = 0; var f = d.getBoundingClientRect(); if (this.height < c.height && !this.incorrectOrientation) { var g = f.top - c.y, h = c.height / 2 - this.height / 2; h = Math.max(h, 0); var i = h - g; e.top = Math.round(i) } d.style.marginTop = e.top + "px", 0 !== e.top && (e.bottom = -(c.height - f.height - e.top), d.style.marginBottom = e.bottom + "px") } e.x = e.left, e.y = e.top }, reflowGame: function() { this.resetCanvas("", ""); var a = this.getParentBounds(this._tempBounds); this.updateDimensions(a.width, a.height, !0) }, reflowCanvas: function() { this.incorrectOrientation || (this.width = c.Math.clamp(this.width, this.minWidth || 0, this.maxWidth || this.width), this.height = c.Math.clamp(this.height, this.minHeight || 0, this.maxHeight || this.height)), this.resetCanvas(), this.compatibility.noMargins || (this.isFullScreen && this._createdFullScreenTarget ? this.alignCanvas(!0, !0) : this.alignCanvas(this.pageAlignHorizontally, this.pageAlignVertically)), this.updateScalingAndBounds() }, resetCanvas: function(a, b) { void 0 === a && (a = this.width + "px"), void 0 === b && (b = this.height + "px"); var c = this.game.canvas; this.compatibility.noMargins || (c.style.marginLeft = "", c.style.marginTop = "", c.style.marginRight = "", c.style.marginBottom = ""), c.style.width = a, c.style.height = b }, queueUpdate: function(a) { a && (this._parentBounds.width = 0, this._parentBounds.height = 0), this._updateThrottle = this._updateThrottleReset }, reset: function(a) { a && this.grid && this.grid.reset() }, setMaximum: function() { this.width = this.dom.visualBounds.width, this.height = this.dom.visualBounds.height }, setShowAll: function(a) { var b, c = this.getParentBounds(this._tempBounds), d = c.width, e = c.height; b = a ? Math.max(e / this.game.height, d / this.game.width) : Math.min(e / this.game.height, d / this.game.width), this.width = Math.round(this.game.width * b), this.height = Math.round(this.game.height * b) }, setExactFit: function() { var a = this.getParentBounds(this._tempBounds); this.width = a.width, this.height = a.height, this.isFullScreen || (this.maxWidth && (this.width = Math.min(this.width, this.maxWidth)), this.maxHeight && (this.height = Math.min(this.height, this.maxHeight))) }, createFullScreenTarget: function() { var a = document.createElement("div"); return a.style.margin = "0", a.style.padding = "0", a.style.background = "#000", a }, startFullScreen: function(a, b) { if (this.isFullScreen) return !1; if (!this.compatibility.supportsFullScreen) { var d = this; return void setTimeout(function() { d.fullScreenError() }, 10) } if ("when-not-mouse" === this.compatibility.clickTrampoline) { var e = this.game.input; if (e.activePointer && e.activePointer !== e.mousePointer && (b || !1 !== b)) return void e.activePointer.addClickTrampoline("startFullScreen", this.startFullScreen, this, [a, !1]) } void 0 !== a && this.game.renderType === c.CANVAS && (this.game.stage.smoothed = a); var f = this.fullScreenTarget; f || (this.cleanupCreatedTarget(), this._createdFullScreenTarget = this.createFullScreenTarget(), f = this._createdFullScreenTarget); var g = { targetElement: f }; if (this.hasPhaserSetFullScreen = !0, this.onFullScreenInit.dispatch(this, g), this._createdFullScreenTarget) { var h = this.game.canvas; h.parentNode.insertBefore(f, h), f.appendChild(h) } return this.game.device.fullscreenKeyboard ? f[this.game.device.requestFullscreen](Element.ALLOW_KEYBOARD_INPUT) : f[this.game.device.requestFullscreen](), !0 }, stopFullScreen: function() { return !(!this.isFullScreen || !this.compatibility.supportsFullScreen) && (this.hasPhaserSetFullScreen = !1, document[this.game.device.cancelFullscreen](), !0) }, cleanupCreatedTarget: function() { var a = this._createdFullScreenTarget; if (a && a.parentNode) { var b = a.parentNode; b.insertBefore(this.game.canvas, a), b.removeChild(a) } this._createdFullScreenTarget = null }, prepScreenMode: function(a) { var b = !!this._createdFullScreenTarget, d = this._createdFullScreenTarget || this.fullScreenTarget; a ? (b || this.fullScreenScaleMode === c.ScaleManager.EXACT_FIT) && d !== this.game.canvas && (this._fullScreenRestore = { targetWidth: d.style.width, targetHeight: d.style.height }, d.style.width = "100%", d.style.height = "100%") : (this._fullScreenRestore && (d.style.width = this._fullScreenRestore.targetWidth, d.style.height = this._fullScreenRestore.targetHeight, this._fullScreenRestore = null), this.updateDimensions(this._gameSize.width, this._gameSize.height, !0), this.resetCanvas()) }, fullScreenChange: function(a) { this.event = a, this.isFullScreen ? (this.prepScreenMode(!0), this.updateLayout(), this.queueUpdate(!0)) : (this.prepScreenMode(!1), this.cleanupCreatedTarget(), this.updateLayout(), this.queueUpdate(!0)), this.onFullScreenChange.dispatch(this, this.width, this.height) }, fullScreenError: function(a) { this.event = a, this.cleanupCreatedTarget(), console.warn("Phaser.ScaleManager: requestFullscreen failed or device does not support the Fullscreen API"), this.onFullScreenError.dispatch(this) }, scaleSprite: function(a, b, c, d) { if (void 0 === b && (b = this.width), void 0 === c && (c = this.height), void 0 === d && (d = !1), !a || !a.scale) return a; if (a.scale.x = 1, a.scale.y = 1, a.width <= 0 || a.height <= 0 || b <= 0 || c <= 0) return a; var e = b, f = a.height * b / a.width, g = a.width * c / a.height, h = c, i = g > b; return i = i ? d : !d, i ? (a.width = Math.floor(e), a.height = Math.floor(f)) : (a.width = Math.floor(g), a.height = Math.floor(h)), a }, destroy: function() { this.game.onResume.remove(this._gameResumed, this), window.removeEventListener("orientationchange", this._orientationChange, !1), window.removeEventListener("resize", this._windowResize, !1), this.compatibility.supportsFullScreen && (document.removeEventListener("webkitfullscreenchange", this._fullScreenChange, !1), document.removeEventListener("mozfullscreenchange", this._fullScreenChange, !1), document.removeEventListener("MSFullscreenChange", this._fullScreenChange, !1), document.removeEventListener("fullscreenchange", this._fullScreenChange, !1), document.removeEventListener("webkitfullscreenerror", this._fullScreenError, !1), document.removeEventListener("mozfullscreenerror", this._fullScreenError, !1), document.removeEventListener("MSFullscreenError", this._fullScreenError, !1), document.removeEventListener("fullscreenerror", this._fullScreenError, !1)) } }, c.ScaleManager.prototype.constructor = c.ScaleManager, Object.defineProperty(c.ScaleManager.prototype, "boundingParent", { get: function() { return this.parentIsWindow || this.isFullScreen && this.hasPhaserSetFullScreen && !this._createdFullScreenTarget ? null : this.game.canvas && this.game.canvas.parentNode || null } }), Object.defineProperty(c.ScaleManager.prototype, "scaleMode", { get: function() { return this._scaleMode }, set: function(a) { return a !== this._scaleMode && (this.isFullScreen || (this.updateDimensions(this._gameSize.width, this._gameSize.height, !0), this.queueUpdate(!0)), this._scaleMode = a), this._scaleMode } }), Object.defineProperty(c.ScaleManager.prototype, "fullScreenScaleMode", { get: function() { return this._fullScreenScaleMode }, set: function(a) { return a !== this._fullScreenScaleMode && (this.isFullScreen ? (this.prepScreenMode(!1), this._fullScreenScaleMode = a, this.prepScreenMode(!0), this.queueUpdate(!0)) : this._fullScreenScaleMode = a), this._fullScreenScaleMode } }), Object.defineProperty(c.ScaleManager.prototype, "currentScaleMode", { get: function() { return this.isFullScreen ? this._fullScreenScaleMode : this._scaleMode } }), Object.defineProperty(c.ScaleManager.prototype, "pageAlignHorizontally", { get: function() { return this._pageAlignHorizontally }, set: function(a) { a !== this._pageAlignHorizontally && (this._pageAlignHorizontally = a, this.queueUpdate(!0)) } }), Object.defineProperty(c.ScaleManager.prototype, "pageAlignVertically", { get: function() { return this._pageAlignVertically }, set: function(a) { a !== this._pageAlignVertically && (this._pageAlignVertically = a, this.queueUpdate(!0)) } }), Object.defineProperty(c.ScaleManager.prototype, "isFullScreen", { get: function() { return !!(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement) } }), Object.defineProperty(c.ScaleManager.prototype, "isPortrait", { get: function() { return "portrait" === this.classifyOrientation(this.screenOrientation) } }), Object.defineProperty(c.ScaleManager.prototype, "isLandscape", { get: function() { return "landscape" === this.classifyOrientation(this.screenOrientation) } }), Object.defineProperty(c.ScaleManager.prototype, "isGamePortrait", { get: function() { return this.height > this.width } }), Object.defineProperty(c.ScaleManager.prototype, "isGameLandscape", { get: function() { return this.width > this.height } }), c.Utils.Debug = function(a) { this.game = a, this.sprite = null, this.bmd = null, this.canvas = null, this.context = null, this.font = "14px Courier", this.columnWidth = 100, this.lineHeight = 16, this.renderShadow = !0, this.currentX = 0, this.currentY = 0, this.currentAlpha = 1, this.dirty = !1 }, c.Utils.Debug.prototype = { boot: function() { this.game.renderType === c.CANVAS ? this.context = this.game.context : (this.bmd = new c.BitmapData(this.game, "__DEBUG", this.game.width, this.game.height, !0), this.sprite = this.game.make.image(0, 0, this.bmd), this.game.stage.addChild(this.sprite), this.game.scale.onSizeChange.add(this.resize, this), this.canvas = PIXI.CanvasPool.create(this, this.game.width, this.game.height), this.context = this.canvas.getContext("2d")) }, resize: function(a, b, c) { this.bmd.resize(b, c), this.canvas.width = b, this.canvas.height = c }, preUpdate: function() { this.dirty && this.sprite && (this.bmd.clear(), this.bmd.draw(this.canvas, 0, 0), this.context.clearRect(0, 0, this.game.width, this.game.height), this.dirty = !1) }, reset: function() { this.context && this.context.clearRect(0, 0, this.game.width, this.game.height), this.sprite && this.bmd.clear() }, start: function(a, b, c, d) { "number" != typeof a && (a = 0), "number" != typeof b && (b = 0), c = c || "rgb(255,255,255)", void 0 === d && (d = 0), this.currentX = a, this.currentY = b, this.currentColor = c, this.columnWidth = d, this.dirty = !0, this.context.save(), this.context.setTransform(1, 0, 0, 1, 0, 0), this.context.strokeStyle = c, this.context.fillStyle = c, this.context.font = this.font, this.context.globalAlpha = this.currentAlpha }, stop: function() { this.context.restore() }, line: function() { for (var a = this.currentX, b = 0; b < arguments.length; b++) this.renderShadow && (this.context.fillStyle = "rgb(0,0,0)", this.context.fillText(arguments[b], a + 1, this.currentY + 1), this.context.fillStyle = this.currentColor), this.context.fillText(arguments[b], a, this.currentY), a += this.columnWidth; this.currentY += this.lineHeight }, soundInfo: function(a, b, c, d) { this.start(b, c, d), this.line("Sound: " + a.key + " Locked: " + a.game.sound.touchLocked), this.line("Is Ready?: " + this.game.cache.isSoundReady(a.key) + " Pending Playback: " + a.pendingPlayback), this.line("Decoded: " + a.isDecoded + " Decoding: " + a.isDecoding), this.line("Total Duration: " + a.totalDuration + " Playing: " + a.isPlaying), this.line("Time: " + a.currentTime), this.line("Volume: " + a.volume + " Muted: " + a.mute), this.line("WebAudio: " + a.usingWebAudio + " Audio: " + a.usingAudioTag), "" !== a.currentMarker && (this.line("Marker: " + a.currentMarker + " Duration: " + a.duration + " (ms: " + a.durationMS + ")"), this.line("Start: " + a.markers[a.currentMarker].start + " Stop: " + a.markers[a.currentMarker].stop), this.line("Position: " + a.position)), this.stop() }, cameraInfo: function(a, b, c, d) { this.start(b, c, d), this.line("Camera (" + a.width + " x " + a.height + ")"), this.line("X: " + a.x + " Y: " + a.y), a.bounds && this.line("Bounds x: " + a.bounds.x + " Y: " + a.bounds.y + " w: " + a.bounds.width + " h: " + a.bounds.height), this.line("View x: " + a.view.x + " Y: " + a.view.y + " w: " + a.view.width + " h: " + a.view.height), this.line("Total in view: " + a.totalInView), this.stop() }, timer: function(a, b, c, d) { this.start(b, c, d), this.line("Timer (running: " + a.running + " expired: " + a.expired + ")"), this.line("Next Tick: " + a.next + " Duration: " + a.duration), this.line("Paused: " + a.paused + " Length: " + a.length), this.stop() }, pointer: function(a, b, c, d, e) { null != a && (void 0 === b && (b = !1), c = c || "rgba(0,255,0,0.5)", d = d || "rgba(255,0,0,0.5)", !0 === b && !0 === a.isUp || (this.start(a.x, a.y - 100, e), this.context.beginPath(), this.context.arc(a.x, a.y, a.circle.radius, 0, 2 * Math.PI), a.active ? this.context.fillStyle = c : this.context.fillStyle = d, this.context.fill(), this.context.closePath(), this.context.beginPath(), this.context.moveTo(a.positionDown.x, a.positionDown.y), this.context.lineTo(a.position.x, a.position.y), this.context.lineWidth = 2, this.context.stroke(), this.context.closePath(), this.line("ID: " + a.id + " Active: " + a.active), this.line("World X: " + a.worldX + " World Y: " + a.worldY), this.line("Screen X: " + a.x + " Screen Y: " + a.y + " In: " + a.withinGame), this.line("Duration: " + a.duration + " ms"), this.line("is Down: " + a.isDown + " is Up: " + a.isUp), this.stop())) }, spriteInputInfo: function(a, b, c, d) { this.start(b, c, d), this.line("Sprite Input: (" + a.width + " x " + a.height + ")"), this.line("x: " + a.input.pointerX().toFixed(1) + " y: " + a.input.pointerY().toFixed(1)), this.line("over: " + a.input.pointerOver() + " duration: " + a.input.overDuration().toFixed(0)), this.line("down: " + a.input.pointerDown() + " duration: " + a.input.downDuration().toFixed(0)), this.line("just over: " + a.input.justOver() + " just out: " + a.input.justOut()), this.stop() }, key: function(a, b, c, d) { this.start(b, c, d, 150), this.line("Key:", a.keyCode, "isDown:", a.isDown), this.line("justDown:", a.justDown, "justUp:", a.justUp), this.line("Time Down:", a.timeDown.toFixed(0), "duration:", a.duration.toFixed(0)), this.stop() }, inputInfo: function(a, b, c) { this.start(a, b, c), this.line("Input"), this.line("X: " + this.game.input.x + " Y: " + this.game.input.y), this.line("World X: " + this.game.input.worldX + " World Y: " + this.game.input.worldY), this.line("Scale X: " + this.game.input.scale.x.toFixed(1) + " Scale Y: " + this.game.input.scale.x.toFixed(1)), this.line("Screen X: " + this.game.input.activePointer.screenX + " Screen Y: " + this.game.input.activePointer.screenY), this.stop() }, spriteBounds: function(a, b, c) { var d = a.getBounds(); d.x += this.game.camera.x, d.y += this.game.camera.y, this.rectangle(d, b, c) }, ropeSegments: function(a, b, c) { var d = this; a.segments.forEach(function(a) { d.rectangle(a, b, c) }, this) }, spriteInfo: function(a, b, c, d) { this.start(b, c, d), this.line("Sprite: (" + a.width + " x " + a.height + ") anchor: " + a.anchor.x + " x " + a.anchor.y), this.line("x: " + a.x.toFixed(1) + " y: " + a.y.toFixed(1)), this.line("angle: " + a.angle.toFixed(1) + " rotation: " + a.rotation.toFixed(1)), this.line("visible: " + a.visible + " in camera: " + a.inCamera), this.line("bounds x: " + a._bounds.x.toFixed(1) + " y: " + a._bounds.y.toFixed(1) + " w: " + a._bounds.width.toFixed(1) + " h: " + a._bounds.height.toFixed(1)), this.stop() }, spriteCoords: function(a, b, c, d) { this.start(b, c, d, 100), a.name && this.line(a.name), this.line("x:", a.x.toFixed(2), "y:", a.y.toFixed(2)), this.line("pos x:", a.position.x.toFixed(2), "pos y:", a.position.y.toFixed(2)), this.line("world x:", a.world.x.toFixed(2), "world y:", a.world.y.toFixed(2)), this.stop() }, lineInfo: function(a, b, c, d) { this.start(b, c, d, 80), this.line("start.x:", a.start.x.toFixed(2), "start.y:", a.start.y.toFixed(2)), this.line("end.x:", a.end.x.toFixed(2), "end.y:", a.end.y.toFixed(2)), this.line("length:", a.length.toFixed(2), "angle:", a.angle), this.stop() }, pixel: function(a, b, c, d) { d = d || 2, this.start(), this.context.fillStyle = c, this.context.fillRect(a, b, d, d), this.stop() }, geom: function(a, b, d, e) { void 0 === d && (d = !0), void 0 === e && (e = 0), b = b || "rgba(0,255,0,0.4)", this.start(), this.context.fillStyle = b, this.context.strokeStyle = b, a instanceof c.Rectangle || 1 === e ? d ? this.context.fillRect(a.x - this.game.camera.x, a.y - this.game.camera.y, a.width, a.height) : this.context.strokeRect(a.x - this.game.camera.x, a.y - this.game.camera.y, a.width, a.height) : a instanceof c.Circle || 2 === e ? (this.context.beginPath(), this.context.arc(a.x - this.game.camera.x, a.y - this.game.camera.y, a.radius, 0, 2 * Math.PI, !1), this.context.closePath(), d ? this.context.fill() : this.context.stroke()) : a instanceof c.Point || 3 === e ? this.context.fillRect(a.x - this.game.camera.x, a.y - this.game.camera.y, 4, 4) : (a instanceof c.Line || 4 === e) && (this.context.lineWidth = 1, this.context.beginPath(), this.context.moveTo(a.start.x + .5 - this.game.camera.x, a.start.y + .5 - this.game.camera.y), this.context.lineTo(a.end.x + .5 - this.game.camera.x, a.end.y + .5 - this.game.camera.y), this.context.closePath(), this.context.stroke()), this.stop() }, rectangle: function(a, b, c) { void 0 === c && (c = !0), b = b || "rgba(0, 255, 0, 0.4)", this.start(), c ? (this.context.fillStyle = b, this.context.fillRect(a.x - this.game.camera.x, a.y - this.game.camera.y, a.width, a.height)) : (this.context.strokeStyle = b, this.context.strokeRect(a.x - this.game.camera.x, a.y - this.game.camera.y, a.width, a.height)), this.stop() }, text: function(a, b, c, d, e) { d = d || "rgb(255,255,255)", e = e || "16px Courier", this.start(), this.context.font = e, this.renderShadow && (this.context.fillStyle = "rgb(0,0,0)", this.context.fillText(a, b + 1, c + 1)), this.context.fillStyle = d, this.context.fillText(a, b, c), this.stop() }, quadTree: function(a, b) { b = b || "rgba(255,0,0,0.3)", this.start(); var c = a.bounds; if (0 === a.nodes.length) { this.context.strokeStyle = b, this.context.strokeRect(c.x, c.y, c.width, c.height), this.text("size: " + a.objects.length, c.x + 4, c.y + 16, "rgb(0,200,0)", "12px Courier"), this.context.strokeStyle = "rgb(0,255,0)"; for (var d = 0; d < a.objects.length; d++) this.context.strokeRect(a.objects[d].x, a.objects[d].y, a.objects[d].width, a.objects[d].height) } else for (var d = 0; d < a.nodes.length; d++) this.quadTree(a.nodes[d]); this.stop() }, body: function(a, b, d) { a.body && (this.start(), a.body.type === c.Physics.ARCADE ? c.Physics.Arcade.Body.render(this.context, a.body, b, d) : a.body.type === c.Physics.NINJA ? c.Physics.Ninja.Body.render(this.context, a.body, b, d) : a.body.type === c.Physics.BOX2D && c.Physics.Box2D.renderBody(this.context, a.body, b), this.stop()) }, bodyInfo: function(a, b, d, e) { a.body && (this.start(b, d, e, 210), a.body.type === c.Physics.ARCADE ? c.Physics.Arcade.Body.renderBodyInfo(this, a.body) : a.body.type === c.Physics.BOX2D && this.game.physics.box2d.renderBodyInfo(this, a.body), this.stop()) }, box2dWorld: function() { this.start(), this.context.translate(-this.game.camera.view.x, -this.game.camera.view.y, 0), this.game.physics.box2d.renderDebugDraw(this.context), this.stop() }, box2dBody: function(a, b) { this.start(), c.Physics.Box2D.renderBody(this.context, a, b), this.stop() }, displayList: function(a) { if (void 0 === a && (a = this.game.world), a.hasOwnProperty("renderOrderID") ? console.log("[" + a.renderOrderID + "]", a) : console.log("[]", a), a.children && a.children.length > 0) for (var b = 0; b < a.children.length; b++) this.game.debug.displayList(a.children[b]) }, destroy: function() { PIXI.CanvasPool.remove(this) } }, c.Utils.Debug.prototype.constructor = c.Utils.Debug, c.DOM = { getOffset: function(a, b) { b = b || new c.Point; var d = a.getBoundingClientRect(), e = c.DOM.scrollY, f = c.DOM.scrollX, g = document.documentElement.clientTop, h = document.documentElement.clientLeft; return b.x = d.left + f - h, b.y = d.top + e - g, b }, getBounds: function(a, b) { return void 0 === b && (b = 0), !(!(a = a && !a.nodeType ? a[0] : a) || 1 !== a.nodeType) && this.calibrate(a.getBoundingClientRect(), b) }, calibrate: function(a, b) { b = +b || 0; var c = { width: 0, height: 0, left: 0, right: 0, top: 0, bottom: 0 }; return c.width = (c.right = a.right + b) - (c.left = a.left - b), c.height = (c.bottom = a.bottom + b) - (c.top = a.top - b), c }, getAspectRatio: function(a) { a = null == a ? this.visualBounds : 1 === a.nodeType ? this.getBounds(a) : a; var b = a.width, c = a.height; return "function" == typeof b && (b = b.call(a)), "function" == typeof c && (c = c.call(a)), b / c }, inLayoutViewport: function(a, b) { var c = this.getBounds(a, b); return !!c && c.bottom >= 0 && c.right >= 0 && c.top <= this.layoutBounds.width && c.left <= this.layoutBounds.height }, getScreenOrientation: function(a) { var b = window.screen, c = b.orientation || b.mozOrientation || b.msOrientation; if (c && "string" == typeof c.type) return c.type; if ("string" == typeof c) return c; var d = "portrait-primary", e = "landscape-primary"; if ("screen" === a) return b.height > b.width ? d : e; if ("viewport" === a) return this.visualBounds.height > this.visualBounds.width ? d : e; if ("window.orientation" === a && "number" == typeof window.orientation) return 0 === window.orientation || 180 === window.orientation ? d : e; if (window.matchMedia) { if (window.matchMedia("(orientation: portrait)").matches) return d; if (window.matchMedia("(orientation: landscape)").matches) return e } return this.visualBounds.height > this.visualBounds.width ? d : e }, visualBounds: new c.Rectangle, layoutBounds: new c.Rectangle, documentBounds: new c.Rectangle }, c.Device.whenReady(function(a) { var b = window && "pageXOffset" in window ? function() { return window.pageXOffset } : function() { return document.documentElement.scrollLeft }, d = window && "pageYOffset" in window ? function() { return window.pageYOffset } : function() { return document.documentElement.scrollTop }; if (Object.defineProperty(c.DOM, "scrollX", { get: b }), Object.defineProperty(c.DOM, "scrollY", { get: d }), Object.defineProperty(c.DOM.visualBounds, "x", { get: b }), Object.defineProperty(c.DOM.visualBounds, "y", { get: d }), Object.defineProperty(c.DOM.layoutBounds, "x", { value: 0 }), Object.defineProperty(c.DOM.layoutBounds, "y", { value: 0 }), a.desktop && document.documentElement.clientWidth <= window.innerWidth && document.documentElement.clientHeight <= window.innerHeight) { var e = function() { return Math.max(window.innerWidth, document.documentElement.clientWidth) }, f = function() { return Math.max(window.innerHeight, document.documentElement.clientHeight) }; Object.defineProperty(c.DOM.visualBounds, "width", { get: e }), Object.defineProperty(c.DOM.visualBounds, "height", { get: f }), Object.defineProperty(c.DOM.layoutBounds, "width", { get: e }), Object.defineProperty(c.DOM.layoutBounds, "height", { get: f }) } else Object.defineProperty(c.DOM.visualBounds, "width", { get: function() { return window.innerWidth } }), Object.defineProperty(c.DOM.visualBounds, "height", { get: function() { return window.innerHeight } }), Object.defineProperty(c.DOM.layoutBounds, "width", { get: function() { var a = document.documentElement.clientWidth, b = window.innerWidth; return a < b ? b : a } }), Object.defineProperty(c.DOM.layoutBounds, "height", { get: function() { var a = document.documentElement.clientHeight, b = window.innerHeight; return a < b ? b : a } }); Object.defineProperty(c.DOM.documentBounds, "x", { value: 0 }), Object.defineProperty(c.DOM.documentBounds, "y", { value: 0 }), Object.defineProperty(c.DOM.documentBounds, "width", { get: function() { var a = document.documentElement; return Math.max(a.clientWidth, a.offsetWidth, a.scrollWidth) } }), Object.defineProperty(c.DOM.documentBounds, "height", { get: function() { var a = document.documentElement; return Math.max(a.clientHeight, a.offsetHeight, a.scrollHeight) } }) }, null, !0), c.ArraySet = function(a) { this.position = 0, this.list = a || [] }, c.ArraySet.prototype = { add: function(a) { return this.exists(a) || this.list.push(a), a }, getIndex: function(a) { return this.list.indexOf(a) }, getByKey: function(a, b) { for (var c = this.list.length; c--;) if (this.list[c][a] === b) return this.list[c]; return null }, exists: function(a) { return this.list.indexOf(a) > -1 }, reset: function() { this.list.length = 0 }, remove: function(a) { var b = this.list.indexOf(a); if (b > -1) return this.list.splice(b, 1), a }, setAll: function(a, b) { for (var c = this.list.length; c--;) this.list[c] && (this.list[c][a] = b) }, callAll: function(a) { for (var b = Array.prototype.slice.call(arguments, 1), c = this.list.length; c--;) this.list[c] && this.list[c][a] && this.list[c][a].apply(this.list[c], b) }, removeAll: function(a) { void 0 === a && (a = !1); for (var b = this.list.length; b--;) if (this.list[b]) { var c = this.remove(this.list[b]); a && c.destroy() } this.position = 0, this.list = [] } }, Object.defineProperty(c.ArraySet.prototype, "total", { get: function() { return this.list.length } }), Object.defineProperty(c.ArraySet.prototype, "first", { get: function() { return this.position = 0, this.list.length > 0 ? this.list[0] : null } }), Object.defineProperty(c.ArraySet.prototype, "next", { get: function() { return this.position < this.list.length ? (this.position++, this.list[this.position]) : null } }), c.ArraySet.prototype.constructor = c.ArraySet, c.ArrayUtils = { getRandomItem: function(a, b, c) { if (null === a) return null; void 0 === b && (b = 0), void 0 === c && (c = a.length); var d = b + Math.floor(Math.random() * c); return void 0 === a[d] ? null : a[d] }, removeRandomItem: function(a, b, c) { if (null == a) return null; void 0 === b && (b = 0), void 0 === c && (c = a.length); var d = b + Math.floor(Math.random() * c); if (d < a.length) { var e = a.splice(d, 1); return void 0 === e[0] ? null : e[0] } return null }, shuffle: function(a) { for (var b = a.length - 1; b > 0; b--) { var c = Math.floor(Math.random() * (b + 1)), d = a[b]; a[b] = a[c], a[c] = d } return a }, transposeMatrix: function(a) { for (var b = a.length, c = a[0].length, d = new Array(c), e = 0; e < c; e++) { d[e] = new Array(b); for (var f = b - 1; f > -1; f--) d[e][f] = a[f][e] } return d }, rotateMatrix: function(a, b) { if ("string" != typeof b && (b = (b % 360 + 360) % 360), 90 === b || -270 === b || "rotateLeft" === b) a = c.ArrayUtils.transposeMatrix(a), a = a.reverse(); else if (-90 === b || 270 === b || "rotateRight" === b) a = a.reverse(), a = c.ArrayUtils.transposeMatrix(a); else if (180 === Math.abs(b) || "rotate180" === b) { for (var d = 0; d < a.length; d++) a[d].reverse(); a = a.reverse() } return a }, findClosest: function(a, b) { if (!b.length) return NaN; if (1 === b.length || a < b[0]) return b[0]; for (var c = 1; b[c] < a;) c++; var d = b[c - 1], e = c < b.length ? b[c] : Number.POSITIVE_INFINITY; return e - a <= a - d ? e : d }, rotateRight: function(a) { var b = a.pop(); return a.unshift(b), b }, rotateLeft: function(a) { var b = a.shift(); return a.push(b), b }, rotate: function(a) { var b = a.shift(); return a.push(b), b }, numberArray: function(a, b) { for (var c = [], d = a; d <= b; d++) c.push(d); return c }, numberArrayStep: function(a, b, d) { void 0 !== a && null !== a || (a = 0), void 0 !== b && null !== b || (b = a, a = 0), void 0 === d && (d = 1); for (var e = [], f = Math.max(c.Math.roundAwayFromZero((b - a) / (d || 1)), 0), g = 0; g < f; g++) e.push(a), a += d; return e } }, c.LinkedList = function() { this.next = null, this.prev = null, this.first = null, this.last = null, this.total = 0 }, c.LinkedList.prototype = { add: function(a) { return 0 === this.total && null === this.first && null === this.last ? (this.first = a, this.last = a, this.next = a, a.prev = this, this.total++, a) : (this.last.next = a, a.prev = this.last, this.last = a, this.total++, a) }, reset: function() { this.first = null, this.last = null, this.next = null, this.prev = null, this.total = 0 }, remove: function(a) { if (1 === this.total) return this.reset(), void(a.next = a.prev = null); a === this.first ? this.first = this.first.next : a === this.last && (this.last = this.last.prev), a.prev && (a.prev.next = a.next), a.next && (a.next.prev = a.prev), a.next = a.prev = null, null === this.first && (this.last = null), this.total-- }, callAll: function(a) { if (this.first && this.last) { var b = this.first; do { b && b[a] && b[a].call(b), b = b.next } while (b !== this.last.next) } } }, c.LinkedList.prototype.constructor = c.LinkedList, c.Create = function(a) { this.game = a, this.bmd = null, this.canvas = null, this.ctx = null, this.palettes = [{ 0: "#000", 1: "#9D9D9D", 2: "#FFF", 3: "#BE2633", 4: "#E06F8B", 5: "#493C2B", 6: "#A46422", 7: "#EB8931", 8: "#F7E26B", 9: "#2F484E", A: "#44891A", B: "#A3CE27", C: "#1B2632", D: "#005784", E: "#31A2F2", F: "#B2DCEF" }, { 0: "#000", 1: "#191028", 2: "#46af45", 3: "#a1d685", 4: "#453e78", 5: "#7664fe", 6: "#833129", 7: "#9ec2e8", 8: "#dc534b", 9: "#e18d79", A: "#d6b97b", B: "#e9d8a1", C: "#216c4b", D: "#d365c8", E: "#afaab9", F: "#f5f4eb" }, { 0: "#000", 1: "#2234d1", 2: "#0c7e45", 3: "#44aacc", 4: "#8a3622", 5: "#5c2e78", 6: "#aa5c3d", 7: "#b5b5b5", 8: "#5e606e", 9: "#4c81fb", A: "#6cd947", B: "#7be2f9", C: "#eb8a60", D: "#e23d69", E: "#ffd93f", F: "#fff" }, { 0: "#000", 1: "#fff", 2: "#8b4131", 3: "#7bbdc5", 4: "#8b41ac", 5: "#6aac41", 6: "#3931a4", 7: "#d5de73", 8: "#945a20", 9: "#5a4100", A: "#bd736a", B: "#525252", C: "#838383", D: "#acee8b", E: "#7b73de", F: "#acacac" }, { 0: "#000", 1: "#191028", 2: "#46af45", 3: "#a1d685", 4: "#453e78", 5: "#7664fe", 6: "#833129", 7: "#9ec2e8", 8: "#dc534b", 9: "#e18d79", A: "#d6b97b", B: "#e9d8a1", C: "#216c4b", D: "#d365c8", E: "#afaab9", F: "#fff" }] }, c.Create.PALETTE_ARNE = 0, c.Create.PALETTE_JMP = 1, c.Create.PALETTE_CGA = 2, c.Create.PALETTE_C64 = 3, c.Create.PALETTE_JAPANESE_MACHINE = 4, c.Create.prototype = { texture: function(a, b, c, d, e) { void 0 === c && (c = 8), void 0 === d && (d = c), void 0 === e && (e = 0); var f = b[0].length * c, g = b.length * d; null === this.bmd && (this.bmd = this.game.make.bitmapData(), this.canvas = this.bmd.canvas, this.ctx = this.bmd.context), this.bmd.resize(f, g), this.bmd.clear(); for (var h = 0; h < b.length; h++) for (var i = b[h], j = 0; j < i.length; j++) { var k = i[j]; "." !== k && " " !== k && (this.ctx.fillStyle = this.palettes[e][k], this.ctx.fillRect(j * c, h * d, c, d)) } return this.bmd.generateTexture(a) }, grid: function(a, b, c, d, e, f) { null === this.bmd && (this.bmd = this.game.make.bitmapData(), this.canvas = this.bmd.canvas, this.ctx = this.bmd.context), this.bmd.resize(b, c), this.ctx.fillStyle = f; for (var g = 0; g < c; g += e) this.ctx.fillRect(0, g, b, 1); for (var h = 0; h < b; h += d) this.ctx.fillRect(h, 0, 1, c); return this.bmd.generateTexture(a) } }, c.Create.prototype.constructor = c.Create, c.FlexGrid = function(a, b, d) { this.game = a.game, this.manager = a, this.width = b, this.height = d, this.boundsCustom = new c.Rectangle(0, 0, b, d), this.boundsFluid = new c.Rectangle(0, 0, b, d), this.boundsFull = new c.Rectangle(0, 0, b, d), this.boundsNone = new c.Rectangle(0, 0, b, d), this.positionCustom = new c.Point(0, 0), this.positionFluid = new c.Point(0, 0), this.positionFull = new c.Point(0, 0), this.positionNone = new c.Point(0, 0), this.scaleCustom = new c.Point(1, 1), this.scaleFluid = new c.Point(1, 1), this.scaleFluidInversed = new c.Point(1, 1), this.scaleFull = new c.Point(1, 1), this.scaleNone = new c.Point(1, 1), this.customWidth = 0, this.customHeight = 0, this.customOffsetX = 0, this.customOffsetY = 0, this.ratioH = b / d, this.ratioV = d / b, this.multiplier = 0, this.layers = [] }, c.FlexGrid.prototype = { setSize: function(a, b) { this.width = a, this.height = b, this.ratioH = a / b, this.ratioV = b / a, this.scaleNone = new c.Point(1, 1), this.boundsNone.width = this.width, this.boundsNone.height = this.height, this.refresh() }, createCustomLayer: function(a, b, d, e) { void 0 === e && (e = !0), this.customWidth = a, this.customHeight = b, this.boundsCustom.width = a, this.boundsCustom.height = b; var f = new c.FlexLayer(this, this.positionCustom, this.boundsCustom, this.scaleCustom); return e && this.game.world.add(f), this.layers.push(f), void 0 !== d && null !== typeof d && f.addMultiple(d), f }, createFluidLayer: function(a, b) { void 0 === b && (b = !0); var d = new c.FlexLayer(this, this.positionFluid, this.boundsFluid, this.scaleFluid); return b && this.game.world.add(d), this.layers.push(d), void 0 !== a && null !== typeof a && d.addMultiple(a), d }, createFullLayer: function(a) { var b = new c.FlexLayer(this, this.positionFull, this.boundsFull, this.scaleFluid); return this.game.world.add(b), this.layers.push(b), void 0 !== a && b.addMultiple(a), b }, createFixedLayer: function(a) { var b = new c.FlexLayer(this, this.positionNone, this.boundsNone, this.scaleNone); return this.game.world.add(b), this.layers.push(b), void 0 !== a && b.addMultiple(a), b }, reset: function() { for (var a = this.layers.length; a--;) this.layers[a].persist || (this.layers[a].position = null, this.layers[a].scale = null, this.layers.slice(a, 1)) }, onResize: function(a, b) { this.ratioH = a / b, this.ratioV = b / a, this.refresh(a, b) }, refresh: function() { this.multiplier = Math.min(this.manager.height / this.height, this.manager.width / this.width), this.boundsFluid.width = Math.round(this.width * this.multiplier), this.boundsFluid.height = Math.round(this.height * this.multiplier), this.scaleFluid.set(this.boundsFluid.width / this.width, this.boundsFluid.height / this.height), this.scaleFluidInversed.set(this.width / this.boundsFluid.width, this.height / this.boundsFluid.height), this.scaleFull.set(this.boundsFull.width / this.width, this.boundsFull.height / this.height), this.boundsFull.width = Math.round(this.manager.width * this.scaleFluidInversed.x), this.boundsFull.height = Math.round(this.manager.height * this.scaleFluidInversed.y), this.boundsFluid.centerOn(this.manager.bounds.centerX, this.manager.bounds.centerY), this.boundsNone.centerOn(this.manager.bounds.centerX, this.manager.bounds.centerY), this.positionFluid.set(this.boundsFluid.x, this.boundsFluid.y), this.positionNone.set(this.boundsNone.x, this.boundsNone.y) }, fitSprite: function(a) { this.manager.scaleSprite(a), a.x = this.manager.bounds.centerX, a.y = this.manager.bounds.centerY }, debug: function() { this.game.debug.text(this.boundsFluid.width + " x " + this.boundsFluid.height, this.boundsFluid.x + 4, this.boundsFluid.y + 16), this.game.debug.geom(this.boundsFluid, "rgba(255,0,0,0.9", !1) } }, c.FlexGrid.prototype.constructor = c.FlexGrid, c.FlexLayer = function(a, b, d, e) { c.Group.call(this, a.game, null, "__flexLayer" + a.game.rnd.uuid(), !1), this.manager = a.manager, this.grid = a, this.persist = !1, this.position = b, this.bounds = d, this.scale = e, this.topLeft = d.topLeft, this.topMiddle = new c.Point(d.halfWidth, 0), this.topRight = d.topRight, this.bottomLeft = d.bottomLeft, this.bottomMiddle = new c.Point(d.halfWidth, d.bottom), this.bottomRight = d.bottomRight }, c.FlexLayer.prototype = Object.create(c.Group.prototype), c.FlexLayer.prototype.constructor = c.FlexLayer, c.FlexLayer.prototype.resize = function() {}, c.FlexLayer.prototype.debug = function() { this.game.debug.text(this.bounds.width + " x " + this.bounds.height, this.bounds.x + 4, this.bounds.y + 16), this.game.debug.geom(this.bounds, "rgba(0,0,255,0.9", !1), this.game.debug.geom(this.topLeft, "rgba(255,255,255,0.9"), this.game.debug.geom(this.topMiddle, "rgba(255,255,255,0.9"), this.game.debug.geom(this.topRight, "rgba(255,255,255,0.9") }, c.Color = { packPixel: function(a, b, d, e) { return c.Device.LITTLE_ENDIAN ? (e << 24 | d << 16 | b << 8 | a) >>> 0 : (a << 24 | b << 16 | d << 8 | e) >>> 0 }, unpackPixel: function(a, b, d, e) { return void 0 !== b && null !== b || (b = c.Color.createColor()), void 0 !== d && null !== d || (d = !1), void 0 !== e && null !== e || (e = !1), c.Device.LITTLE_ENDIAN ? (b.a = (4278190080 & a) >>> 24, b.b = (16711680 & a) >>> 16, b.g = (65280 & a) >>> 8, b.r = 255 & a) : (b.r = (4278190080 & a) >>> 24, b.g = (16711680 & a) >>> 16, b.b = (65280 & a) >>> 8, b.a = 255 & a), b.color = a, b.rgba = "rgba(" + b.r + "," + b.g + "," + b.b + "," + b.a / 255 + ")", d && c.Color.RGBtoHSL(b.r, b.g, b.b, b), e && c.Color.RGBtoHSV(b.r, b.g, b.b, b), b }, fromRGBA: function(a, b) { return b || (b = c.Color.createColor()), b.r = (4278190080 & a) >>> 24, b.g = (16711680 & a) >>> 16, b.b = (65280 & a) >>> 8, b.a = 255 & a, b.rgba = "rgba(" + b.r + "," + b.g + "," + b.b + "," + b.a + ")", b }, toRGBA: function(a, b, c, d) { return a << 24 | b << 16 | c << 8 | d }, toABGR: function(a, b, c, d) { return (d << 24 | c << 16 | b << 8 | a) >>> 0 }, RGBtoHSL: function(a, b, d, e) { e || (e = c.Color.createColor(a, b, d, 1)), a /= 255, b /= 255, d /= 255; var f = Math.min(a, b, d), g = Math.max(a, b, d); if (e.h = 0, e.s = 0, e.l = (g + f) / 2, g !== f) { var h = g - f; e.s = e.l > .5 ? h / (2 - g - f) : h / (g + f), g === a ? e.h = (b - d) / h + (b < d ? 6 : 0) : g === b ? e.h = (d - a) / h + 2 : g === d && (e.h = (a - b) / h + 4), e.h /= 6 } return e }, HSLtoRGB: function(a, b, d, e) { if (e ? (e.r = d, e.g = d, e.b = d) : e = c.Color.createColor(d, d, d), 0 !== b) { var f = d < .5 ? d * (1 + b) : d + b - d * b, g = 2 * d - f; e.r = c.Color.hueToColor(g, f, a + 1 / 3), e.g = c.Color.hueToColor(g, f, a), e.b = c.Color.hueToColor(g, f, a - 1 / 3) } return e.r = Math.floor(255 * e.r | 0), e.g = Math.floor(255 * e.g | 0), e.b = Math.floor(255 * e.b | 0), c.Color.updateColor(e), e }, RGBtoHSV: function(a, b, d, e) { e || (e = c.Color.createColor(a, b, d, 255)), a /= 255, b /= 255, d /= 255; var f = Math.min(a, b, d), g = Math.max(a, b, d), h = g - f; return e.h = 0, e.s = 0 === g ? 0 : h / g, e.v = g, g !== f && (g === a ? e.h = (b - d) / h + (b < d ? 6 : 0) : g === b ? e.h = (d - a) / h + 2 : g === d && (e.h = (a - b) / h + 4), e.h /= 6), e }, HSVtoRGB: function(a, b, d, e) { void 0 === e && (e = c.Color.createColor(0, 0, 0, 1, a, b, 0, d)); var f, g, h, i = Math.floor(6 * a), j = 6 * a - i, k = d * (1 - b), l = d * (1 - j * b), m = d * (1 - (1 - j) * b); switch (i % 6) { case 0: f = d, g = m, h = k; break; case 1: f = l, g = d, h = k; break; case 2: f = k, g = d, h = m; break; case 3: f = k, g = l, h = d; break; case 4: f = m, g = k, h = d; break; case 5: f = d, g = k, h = l } return e.r = Math.floor(255 * f), e.g = Math.floor(255 * g), e.b = Math.floor(255 * h), c.Color.updateColor(e), e }, hueToColor: function(a, b, c) { return c < 0 && (c += 1), c > 1 && (c -= 1), c < 1 / 6 ? a + 6 * (b - a) * c : c < .5 ? b : c < 2 / 3 ? a + (b - a) * (2 / 3 - c) * 6 : a }, createColor: function(a, b, d, e, f, g, h, i) { var j = { r: a || 0, g: b || 0, b: d || 0, a: e || 1, h: f || 0, s: g || 0, l: h || 0, v: i || 0, color: 0, color32: 0, rgba: "" }; return c.Color.updateColor(j) }, updateColor: function(a) { return a.rgba = "rgba(" + a.r.toString() + "," + a.g.toString() + "," + a.b.toString() + "," + a.a.toString() + ")", a.color = c.Color.getColor(a.r, a.g, a.b), a.color32 = c.Color.getColor32(255 * a.a, a.r, a.g, a.b), a }, getColor32: function(a, b, c, d) { return a << 24 | b << 16 | c << 8 | d }, getColor: function(a, b, c) { return a << 16 | b << 8 | c }, RGBtoString: function(a, b, d, e, f) { return void 0 === e && (e = 255), void 0 === f && (f = "#"), "#" === f ? "#" + ((1 << 24) + (a << 16) + (b << 8) + d).toString(16).slice(1) : "0x" + c.Color.componentToHex(e) + c.Color.componentToHex(a) + c.Color.componentToHex(b) + c.Color.componentToHex(d) }, hexToRGB: function(a) { var b = c.Color.hexToColor(a); if (b) return c.Color.getColor32(b.a, b.r, b.g, b.b) }, hexToColor: function(a, b) { a = a.replace(/^(?:#|0x)?([a-f\d])([a-f\d])([a-f\d])$/i, function(a, b, c, d) { return b + b + c + c + d + d }); var d = /^(?:#|0x)?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a); if (d) { var e = parseInt(d[1], 16), f = parseInt(d[2], 16), g = parseInt(d[3], 16); b ? (b.r = e, b.g = f, b.b = g) : b = c.Color.createColor(e, f, g) } return b }, webToColor: function(a, b) { b || (b = c.Color.createColor()); var d = /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d+(?:\.\d+)?))?\s*\)$/.exec(a); return d && (b.r = parseInt(d[1], 10), b.g = parseInt(d[2], 10), b.b = parseInt(d[3], 10), b.a = void 0 !== d[4] ? parseFloat(d[4]) : 1, c.Color.updateColor(b)), b }, valueToColor: function(a, b) { if (b || (b = c.Color.createColor()), "string" == typeof a) return 0 === a.indexOf("rgb") ? c.Color.webToColor(a, b) : (b.a = 1, c.Color.hexToColor(a, b)); if ("number" == typeof a) { var d = c.Color.getRGB(a); return b.r = d.r, b.g = d.g, b.b = d.b, b.a = d.a / 255, b } return b }, componentToHex: function(a) { var b = a.toString(16); return 1 === b.length ? "0" + b : b }, HSVColorWheel: function(a, b) { void 0 === a && (a = 1), void 0 === b && (b = 1); for (var d = [], e = 0; e <= 359; e++) d.push(c.Color.HSVtoRGB(e / 359, a, b)); return d }, HSLColorWheel: function(a, b) { void 0 === a && (a = .5), void 0 === b && (b = .5); for (var d = [], e = 0; e <= 359; e++) d.push(c.Color.HSLtoRGB(e / 359, a, b)); return d }, interpolateColor: function(a, b, d, e, f) { void 0 === f && (f = 255); var g = c.Color.getRGB(a), h = c.Color.getRGB(b), i = (h.red - g.red) * e / d + g.red, j = (h.green - g.green) * e / d + g.green, k = (h.blue - g.blue) * e / d + g.blue; return c.Color.getColor32(f, i, j, k) }, interpolateColorWithRGB: function(a, b, d, e, f, g) { var h = c.Color.getRGB(a), i = (b - h.red) * g / f + h.red, j = (d - h.green) * g / f + h.green, k = (e - h.blue) * g / f + h.blue; return c.Color.getColor(i, j, k) }, interpolateRGB: function(a, b, d, e, f, g, h, i) { var j = (e - a) * i / h + a, k = (f - b) * i / h + b, l = (g - d) * i / h + d; return c.Color.getColor(j, k, l) }, getRandomColor: function(a, b, d) { if (void 0 === a && (a = 0), void 0 === b && (b = 255), void 0 === d && (d = 255), b > 255 || a > b) return c.Color.getColor(255, 255, 255); var e = a + Math.round(Math.random() * (b - a)), f = a + Math.round(Math.random() * (b - a)), g = a + Math.round(Math.random() * (b - a)); return c.Color.getColor32(d, e, f, g) }, getRGB: function(a) { return a > 16777215 ? { alpha: a >>> 24, red: a >> 16 & 255, green: a >> 8 & 255, blue: 255 & a, a: a >>> 24, r: a >> 16 & 255, g: a >> 8 & 255, b: 255 & a } : { alpha: 255, red: a >> 16 & 255, green: a >> 8 & 255, blue: 255 & a, a: 255, r: a >> 16 & 255, g: a >> 8 & 255, b: 255 & a } }, getWebRGB: function(a) { if ("object" == typeof a) return "rgba(" + a.r.toString() + "," + a.g.toString() + "," + a.b.toString() + "," + (a.a / 255).toString() + ")"; var b = c.Color.getRGB(a); return "rgba(" + b.r.toString() + "," + b.g.toString() + "," + b.b.toString() + "," + (b.a / 255).toString() + ")" }, getAlpha: function(a) { return a >>> 24 }, getAlphaFloat: function(a) { return (a >>> 24) / 255 }, getRed: function(a) { return a >> 16 & 255 }, getGreen: function(a) { return a >> 8 & 255 }, getBlue: function(a) { return 255 & a }, blendNormal: function(a) { return a }, blendLighten: function(a, b) { return b > a ? b : a }, blendDarken: function(a, b) { return b > a ? a : b }, blendMultiply: function(a, b) { return a * b / 255 }, blendAverage: function(a, b) { return (a + b) / 2 }, blendAdd: function(a, b) { return Math.min(255, a + b) }, blendSubtract: function(a, b) { return Math.max(0, a + b - 255) }, blendDifference: function(a, b) { return Math.abs(a - b) }, blendNegation: function(a, b) { return 255 - Math.abs(255 - a - b) }, blendScreen: function(a, b) { return 255 - ((255 - a) * (255 - b) >> 8) }, blendExclusion: function(a, b) { return a + b - 2 * a * b / 255 }, blendOverlay: function(a, b) { return b < 128 ? 2 * a * b / 255 : 255 - 2 * (255 - a) * (255 - b) / 255 }, blendSoftLight: function(a, b) { return b < 128 ? 2 * (64 + (a >> 1)) * (b / 255) : 255 - 2 * (255 - (64 + (a >> 1))) * (255 - b) / 255 }, blendHardLight: function(a, b) { return c.Color.blendOverlay(b, a) }, blendColorDodge: function(a, b) { return 255 === b ? b : Math.min(255, (a << 8) / (255 - b)) }, blendColorBurn: function(a, b) { return 0 === b ? b : Math.max(0, 255 - (255 - a << 8) / b) }, blendLinearDodge: function(a, b) { return c.Color.blendAdd(a, b) }, blendLinearBurn: function(a, b) { return c.Color.blendSubtract(a, b) }, blendLinearLight: function(a, b) { return b < 128 ? c.Color.blendLinearBurn(a, 2 * b) : c.Color.blendLinearDodge(a, 2 * (b - 128)) }, blendVividLight: function(a, b) { return b < 128 ? c.Color.blendColorBurn(a, 2 * b) : c.Color.blendColorDodge(a, 2 * (b - 128)) }, blendPinLight: function(a, b) { return b < 128 ? c.Color.blendDarken(a, 2 * b) : c.Color.blendLighten(a, 2 * (b - 128)) }, blendHardMix: function(a, b) { return c.Color.blendVividLight(a, b) < 128 ? 0 : 255 }, blendReflect: function(a, b) { return 255 === b ? b : Math.min(255, a * a / (255 - b)) }, blendGlow: function(a, b) { return c.Color.blendReflect(b, a) }, blendPhoenix: function(a, b) { return Math.min(a, b) - Math.max(a, b) + 255 } }, c.Physics = function(a, b) { b = b || {}, this.game = a, this.config = b, this.arcade = null, this.p2 = null, this.ninja = null, this.box2d = null, this.chipmunk = null, this.matter = null, this.parseConfig() }, c.Physics.ARCADE = 0, c.Physics.P2JS = 1, c.Physics.NINJA = 2, c.Physics.BOX2D = 3, c.Physics.CHIPMUNK = 4, c.Physics.MATTERJS = 5, c.Physics.prototype = { parseConfig: function() { this.config.hasOwnProperty("arcade") && !0 !== this.config.arcade || !c.Physics.hasOwnProperty("Arcade") || (this.arcade = new c.Physics.Arcade(this.game)), this.config.hasOwnProperty("ninja") && !0 === this.config.ninja && c.Physics.hasOwnProperty("Ninja") && (this.ninja = new c.Physics.Ninja(this.game)), this.config.hasOwnProperty("p2") && !0 === this.config.p2 && c.Physics.hasOwnProperty("P2") && (this.p2 = new c.Physics.P2(this.game, this.config)), this.config.hasOwnProperty("box2d") && !0 === this.config.box2d && c.Physics.hasOwnProperty("BOX2D") && (this.box2d = new c.Physics.BOX2D(this.game, this.config)), this.config.hasOwnProperty("matter") && !0 === this.config.matter && c.Physics.hasOwnProperty("Matter") && (this.matter = new c.Physics.Matter(this.game, this.config)) }, startSystem: function(a) { a === c.Physics.ARCADE ? this.arcade = new c.Physics.Arcade(this.game) : a === c.Physics.P2JS ? null === this.p2 ? this.p2 = new c.Physics.P2(this.game, this.config) : this.p2.reset() : a === c.Physics.NINJA ? this.ninja = new c.Physics.Ninja(this.game) : a === c.Physics.BOX2D ? null === this.box2d ? this.box2d = new c.Physics.Box2D(this.game, this.config) : this.box2d.reset() : a === c.Physics.MATTERJS && (null === this.matter ? this.matter = new c.Physics.Matter(this.game, this.config) : this.matter.reset()) }, enable: function(a, b, d) { void 0 === b && (b = c.Physics.ARCADE), void 0 === d && (d = !1), b === c.Physics.ARCADE ? this.arcade.enable(a) : b === c.Physics.P2JS && this.p2 ? this.p2.enable(a, d) : b === c.Physics.NINJA && this.ninja ? this.ninja.enableAABB(a) : b === c.Physics.BOX2D && this.box2d ? this.box2d.enable(a) : b === c.Physics.MATTERJS && this.matter ? this.matter.enable(a) : console.warn(a.key + " is attempting to enable a physics body using an unknown physics system.") }, preUpdate: function() { this.p2 && this.p2.preUpdate(), this.box2d && this.box2d.preUpdate(), this.matter && this.matter.preUpdate() }, update: function() { this.p2 && this.p2.update(), this.box2d && this.box2d.update(), this.matter && this.matter.update() }, setBoundsToWorld: function() { this.arcade && this.arcade.setBoundsToWorld(), this.ninja && this.ninja.setBoundsToWorld(), this.p2 && this.p2.setBoundsToWorld(), this.box2d && this.box2d.setBoundsToWorld(), this.matter && this.matter.setBoundsToWorld() }, clear: function() { this.p2 && this.p2.clear(), this.box2d && this.box2d.clear(), this.matter && this.matter.clear() }, reset: function() { this.p2 && this.p2.reset(), this.box2d && this.box2d.reset(), this.matter && this.matter.reset() }, destroy: function() { this.p2 && this.p2.destroy(), this.box2d && this.box2d.destroy(), this.matter && this.matter.destroy(), this.arcade = null, this.ninja = null, this.p2 = null, this.box2d = null, this.matter = null } }, c.Physics.prototype.constructor = c.Physics, c.Physics.Arcade = function(a) { this.game = a, this.gravity = new c.Point, this.bounds = new c.Rectangle(0, 0, a.world.width, a.world.height), this.checkCollision = { up: !0, down: !0, left: !0, right: !0 }, this.maxObjects = 10, this.maxLevels = 4, this.OVERLAP_BIAS = 4, this.forceX = !1, this.sortDirection = c.Physics.Arcade.LEFT_RIGHT, this.skipQuadTree = !0, this.isPaused = !1, this.quadTree = new c.QuadTree(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height, this.maxObjects, this.maxLevels), this._total = 0, this.setBoundsToWorld() }, c.Physics.Arcade.prototype.constructor = c.Physics.Arcade, c.Physics.Arcade.SORT_NONE = 0, c.Physics.Arcade.LEFT_RIGHT = 1, c.Physics.Arcade.RIGHT_LEFT = 2, c.Physics.Arcade.TOP_BOTTOM = 3, c.Physics.Arcade.BOTTOM_TOP = 4, c.Physics.Arcade.prototype = { setBounds: function(a, b, c, d) { this.bounds.setTo(a, b, c, d) }, setBoundsToWorld: function() { this.bounds.copyFrom(this.game.world.bounds) }, enable: function(a, b) { void 0 === b && (b = !0); var d = 1; if (Array.isArray(a)) for (d = a.length; d--;) a[d] instanceof c.Group ? this.enable(a[d].children, b) : (this.enableBody(a[d]), b && a[d].hasOwnProperty("children") && a[d].children.length > 0 && this.enable(a[d], !0)); else a instanceof c.Group ? this.enable(a.children, b) : (this.enableBody(a), b && a.hasOwnProperty("children") && a.children.length > 0 && this.enable(a.children, !0)) }, enableBody: function(a) { a.hasOwnProperty("body") && null === a.body && (a.body = new c.Physics.Arcade.Body(a), a.parent && a.parent instanceof c.Group && a.parent.addToHash(a)) }, updateMotion: function(a) { var b = this.computeVelocity(0, a, a.angularVelocity, a.angularAcceleration, a.angularDrag, a.maxAngular) - a.angularVelocity; a.angularVelocity += b, a.rotation += a.angularVelocity * this.game.time.physicsElapsed, a.velocity.x = this.computeVelocity(1, a, a.velocity.x, a.acceleration.x, a.drag.x, a.maxVelocity.x), a.velocity.y = this.computeVelocity(2, a, a.velocity.y, a.acceleration.y, a.drag.y, a.maxVelocity.y) }, computeVelocity: function(a, b, c, d, e, f) { return void 0 === f && (f = 1e4), 1 === a && b.allowGravity ? c += (this.gravity.x + b.gravity.x) * this.game.time.physicsElapsed : 2 === a && b.allowGravity && (c += (this.gravity.y + b.gravity.y) * this.game.time.physicsElapsed), d ? c += d * this.game.time.physicsElapsed : e && (e *= this.game.time.physicsElapsed, c - e > 0 ? c -= e : c + e < 0 ? c += e : c = 0), c > f ? c = f : c < -f && (c = -f), c }, overlap: function(a, b, c, d, e) { if (c = c || null, d = d || null, e = e || c, this._total = 0, !Array.isArray(a) && Array.isArray(b)) for (var f = 0; f < b.length; f++) this.collideHandler(a, b[f], c, d, e, !0); else if (Array.isArray(a) && !Array.isArray(b)) for (var f = 0; f < a.length; f++) this.collideHandler(a[f], b, c, d, e, !0); else if (Array.isArray(a) && Array.isArray(b)) for (var f = 0; f < a.length; f++) for (var g = 0; g < b.length; g++) this.collideHandler(a[f], b[g], c, d, e, !0); else this.collideHandler(a, b, c, d, e, !0); return this._total > 0 }, collide: function(a, b, c, d, e) { if (c = c || null, d = d || null, e = e || c, this._total = 0, !Array.isArray(a) && Array.isArray(b)) for (var f = 0; f < b.length; f++) this.collideHandler(a, b[f], c, d, e, !1); else if (Array.isArray(a) && !Array.isArray(b)) for (var f = 0; f < a.length; f++) this.collideHandler(a[f], b, c, d, e, !1); else if (Array.isArray(a) && Array.isArray(b)) for (var f = 0; f < a.length; f++) for (var g = 0; g < b.length; g++) this.collideHandler(a[f], b[g], c, d, e, !1); else this.collideHandler(a, b, c, d, e, !1); return this._total > 0 }, sortLeftRight: function(a, b) { return a.body && b.body ? a.body.x - b.body.x : 0 }, sortRightLeft: function(a, b) { return a.body && b.body ? b.body.x - a.body.x : 0 }, sortTopBottom: function(a, b) { return a.body && b.body ? a.body.y - b.body.y : 0 }, sortBottomTop: function(a, b) { return a.body && b.body ? b.body.y - a.body.y : 0 }, sort: function(a, b) { null !== a.physicsSortDirection ? b = a.physicsSortDirection : void 0 === b && (b = this.sortDirection), b === c.Physics.Arcade.LEFT_RIGHT ? a.hash.sort(this.sortLeftRight) : b === c.Physics.Arcade.RIGHT_LEFT ? a.hash.sort(this.sortRightLeft) : b === c.Physics.Arcade.TOP_BOTTOM ? a.hash.sort(this.sortTopBottom) : b === c.Physics.Arcade.BOTTOM_TOP && a.hash.sort(this.sortBottomTop) }, collideHandler: function(a, b, d, e, f, g) { if (void 0 === b && a.physicsType === c.GROUP) return this.sort(a), void this.collideGroupVsSelf(a, d, e, f, g); a && b && a.exists && b.exists && (this.sortDirection !== c.Physics.Arcade.SORT_NONE && (a.physicsType === c.GROUP && this.sort(a), b.physicsType === c.GROUP && this.sort(b)), a.physicsType === c.SPRITE ? b.physicsType === c.SPRITE ? this.collideSpriteVsSprite(a, b, d, e, f, g) : b.physicsType === c.GROUP ? this.collideSpriteVsGroup(a, b, d, e, f, g) : b.physicsType === c.TILEMAPLAYER && this.collideSpriteVsTilemapLayer(a, b, d, e, f, g) : a.physicsType === c.GROUP ? b.physicsType === c.SPRITE ? this.collideSpriteVsGroup(b, a, d, e, f, g) : b.physicsType === c.GROUP ? this.collideGroupVsGroup(a, b, d, e, f, g) : b.physicsType === c.TILEMAPLAYER && this.collideGroupVsTilemapLayer(a, b, d, e, f, g) : a.physicsType === c.TILEMAPLAYER && (b.physicsType === c.SPRITE ? this.collideSpriteVsTilemapLayer(b, a, d, e, f, g) : b.physicsType === c.GROUP && this.collideGroupVsTilemapLayer(b, a, d, e, f, g))) }, collideSpriteVsSprite: function(a, b, c, d, e, f) { return !(!a.body || !b.body) && (this.separate(a.body, b.body, d, e, f) && (c && c.call(e, a, b), this._total++), !0) }, collideSpriteVsGroup: function(a, b, d, e, f, g) { if (0 !== b.length && a.body) if (this.skipQuadTree || a.body.skipQuadTree) for (var h = {}, i = 0; i < b.hash.length; i++) { var j = b.hash[i]; if (j && j.exists && j.body) { if (h = j.body.getBounds(h), this.sortDirection === c.Physics.Arcade.LEFT_RIGHT) { if (a.body.right < h.x) break; if (h.right < a.body.x) continue } else if (this.sortDirection === c.Physics.Arcade.RIGHT_LEFT) { if (a.body.x > h.right) break; if (h.x > a.body.right) continue } else if (this.sortDirection === c.Physics.Arcade.TOP_BOTTOM) { if (a.body.bottom < h.y) break; if (h.bottom < a.body.y) continue } else if (this.sortDirection === c.Physics.Arcade.BOTTOM_TOP) { if (a.body.y > h.bottom) break; if (h.y > a.body.bottom) continue } this.collideSpriteVsSprite(a, j, d, e, f, g) } } else { this.quadTree.clear(), this.quadTree.reset(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height, this.maxObjects, this.maxLevels), this.quadTree.populate(b); for (var k = this.quadTree.retrieve(a), i = 0; i < k.length; i++) this.separate(a.body, k[i], e, f, g) && (d && d.call(f, a, k[i].sprite), this._total++) } }, collideGroupVsSelf: function(a, b, d, e, f) { if (0 !== a.length) for (var g = 0; g < a.hash.length; g++) { var h = {}, i = a.hash[g]; if (i && i.exists && i.body) { h = i.body.getBounds(h); for (var j = g + 1; j < a.hash.length; j++) { var k = {}, l = a.hash[j]; if (l && l.exists && l.body) { if (k = l.body.getBounds(k), this.sortDirection === c.Physics.Arcade.LEFT_RIGHT) { if (h.right < k.x) break; if (k.right < h.x) continue } else if (this.sortDirection === c.Physics.Arcade.RIGHT_LEFT) { if (h.x > k.right) continue; if (k.x > h.right) break } else if (this.sortDirection === c.Physics.Arcade.TOP_BOTTOM) { if (h.bottom < k.y) continue; if (k.bottom < h.y) break } else if (this.sortDirection === c.Physics.Arcade.BOTTOM_TOP) { if (h.y > k.bottom) continue; if (k.y > i.body.bottom) break } this.collideSpriteVsSprite(i, l, b, d, e, f) } } } } }, collideGroupVsGroup: function(a, b, d, e, f, g) { if (0 !== a.length && 0 !== b.length) for (var h = 0; h < a.children.length; h++) a.children[h].exists && (a.children[h].physicsType === c.GROUP ? this.collideGroupVsGroup(a.children[h], b, d, e, f, g) : this.collideSpriteVsGroup(a.children[h], b, d, e, f, g)) }, separate: function(a, b, c, d, e) { if (!a.enable || !b.enable || a.checkCollision.none || b.checkCollision.none || !this.intersects(a, b)) return !1; if (c && !1 === c.call(d, a.sprite, b.sprite)) return !1; if (a.isCircle && b.isCircle) return this.separateCircle(a, b, e); if (a.isCircle !== b.isCircle) { var f = a.isCircle ? b : a, g = a.isCircle ? a : b, h = { x: f.x, y: f.y, right: f.right, bottom: f.bottom }, i = { x: g.x + g.radius, y: g.y + g.radius }; if ((i.y < h.y || i.y > h.bottom) && (i.x < h.x || i.x > h.right)) return this.separateCircle(a, b, e) } var j = !1, k = !1; this.forceX || Math.abs(this.gravity.y + a.gravity.y) < Math.abs(this.gravity.x + a.gravity.x) ? (j = this.separateX(a, b, e), this.intersects(a, b) && (k = this.separateY(a, b, e))) : (k = this.separateY(a, b, e), this.intersects(a, b) && (j = this.separateX(a, b, e))); var l = j || k; return l && (e ? (a.onOverlap && a.onOverlap.dispatch(a.sprite, b.sprite), b.onOverlap && b.onOverlap.dispatch(b.sprite, a.sprite)) : (a.onCollide && a.onCollide.dispatch(a.sprite, b.sprite), b.onCollide && b.onCollide.dispatch(b.sprite, a.sprite))), l }, intersects: function(a, b) { return a !== b && (a.isCircle ? b.isCircle ? c.Math.distance(a.center.x, a.center.y, b.center.x, b.center.y) <= a.radius + b.radius : this.circleBodyIntersects(a, b) : b.isCircle ? this.circleBodyIntersects(b, a) : !(a.right <= b.position.x) && (!(a.bottom <= b.position.y) && (!(a.position.x >= b.right) && !(a.position.y >= b.bottom)))) }, circleBodyIntersects: function(a, b) { var d = c.Math.clamp(a.center.x, b.left, b.right), e = c.Math.clamp(a.center.y, b.top, b.bottom); return (a.center.x - d) * (a.center.x - d) + (a.center.y - e) * (a.center.y - e) <= a.radius * a.radius }, separateCircle: function(a, b, d) { this.getOverlapX(a, b), this.getOverlapY(a, b); var e = b.center.x - a.center.x, f = b.center.y - a.center.y, g = Math.atan2(f, e), h = 0; if (a.isCircle !== b.isCircle) { var i = { x: b.isCircle ? a.position.x : b.position.x, y: b.isCircle ? a.position.y : b.position.y, right: b.isCircle ? a.right : b.right, bottom: b.isCircle ? a.bottom : b.bottom }, j = { x: a.isCircle ? a.position.x + a.radius : b.position.x + b.radius, y: a.isCircle ? a.position.y + a.radius : b.position.y + b.radius, radius: a.isCircle ? a.radius : b.radius }; j.y < i.y ? j.x < i.x ? h = c.Math.distance(j.x, j.y, i.x, i.y) - j.radius : j.x > i.right && (h = c.Math.distance(j.x, j.y, i.right, i.y) - j.radius) : j.y > i.bottom && (j.x < i.x ? h = c.Math.distance(j.x, j.y, i.x, i.bottom) - j.radius : j.x > i.right && (h = c.Math.distance(j.x, j.y, i.right, i.bottom) - j.radius)), h *= -1 } else h = a.radius + b.radius - c.Math.distance(a.center.x, a.center.y, b.center.x, b.center.y); if (d || 0 === h || a.immovable && b.immovable || a.customSeparateX || b.customSeparateX) return 0 !== h && (a.onOverlap && a.onOverlap.dispatch(a.sprite, b.sprite), b.onOverlap && b.onOverlap.dispatch(b.sprite, a.sprite)), 0 !== h; var k = { x: a.velocity.x * Math.cos(g) + a.velocity.y * Math.sin(g), y: a.velocity.x * Math.sin(g) - a.velocity.y * Math.cos(g) }, l = { x: b.velocity.x * Math.cos(g) + b.velocity.y * Math.sin(g), y: b.velocity.x * Math.sin(g) - b.velocity.y * Math.cos(g) }, m = ((a.mass - b.mass) * k.x + 2 * b.mass * l.x) / (a.mass + b.mass), n = (2 * a.mass * k.x + (b.mass - a.mass) * l.x) / (a.mass + b.mass); return a.immovable || (a.velocity.x = (m * Math.cos(g) - k.y * Math.sin(g)) * a.bounce.x, a.velocity.y = (k.y * Math.cos(g) + m * Math.sin(g)) * a.bounce.y), b.immovable || (b.velocity.x = (n * Math.cos(g) - l.y * Math.sin(g)) * b.bounce.x, b.velocity.y = (l.y * Math.cos(g) + n * Math.sin(g)) * b.bounce.y), Math.abs(g) < Math.PI / 2 ? a.velocity.x > 0 && !a.immovable && b.velocity.x > a.velocity.x ? a.velocity.x *= -1 : b.velocity.x < 0 && !b.immovable && a.velocity.x < b.velocity.x ? b.velocity.x *= -1 : a.velocity.y > 0 && !a.immovable && b.velocity.y > a.velocity.y ? a.velocity.y *= -1 : b.velocity.y < 0 && !b.immovable && a.velocity.y < b.velocity.y && (b.velocity.y *= -1) : Math.abs(g) > Math.PI / 2 && (a.velocity.x < 0 && !a.immovable && b.velocity.x < a.velocity.x ? a.velocity.x *= -1 : b.velocity.x > 0 && !b.immovable && a.velocity.x > b.velocity.x ? b.velocity.x *= -1 : a.velocity.y < 0 && !a.immovable && b.velocity.y < a.velocity.y ? a.velocity.y *= -1 : b.velocity.y > 0 && !b.immovable && a.velocity.x > b.velocity.y && (b.velocity.y *= -1)), a.immovable || (a.x += a.velocity.x * this.game.time.physicsElapsed - h * Math.cos(g), a.y += a.velocity.y * this.game.time.physicsElapsed - h * Math.sin(g)), b.immovable || (b.x += b.velocity.x * this.game.time.physicsElapsed + h * Math.cos(g), b.y += b.velocity.y * this.game.time.physicsElapsed + h * Math.sin(g)), a.onCollide && a.onCollide.dispatch(a.sprite, b.sprite), b.onCollide && b.onCollide.dispatch(b.sprite, a.sprite), !0 }, getOverlapX: function(a, b, c) { var d = 0, e = a.deltaAbsX() + b.deltaAbsX() + this.OVERLAP_BIAS; return 0 === a.deltaX() && 0 === b.deltaX() ? (a.embedded = !0, b.embedded = !0) : a.deltaX() > b.deltaX() ? (d = a.right - b.x, d > e && !c || !1 === a.checkCollision.right || !1 === b.checkCollision.left ? d = 0 : (a.touching.none = !1, a.touching.right = !0, b.touching.none = !1, b.touching.left = !0)) : a.deltaX() < b.deltaX() && (d = a.x - b.width - b.x, -d > e && !c || !1 === a.checkCollision.left || !1 === b.checkCollision.right ? d = 0 : (a.touching.none = !1, a.touching.left = !0, b.touching.none = !1, b.touching.right = !0)), a.overlapX = d, b.overlapX = d, d }, getOverlapY: function(a, b, c) { var d = 0, e = a.deltaAbsY() + b.deltaAbsY() + this.OVERLAP_BIAS; return 0 === a.deltaY() && 0 === b.deltaY() ? (a.embedded = !0, b.embedded = !0) : a.deltaY() > b.deltaY() ? (d = a.bottom - b.y, d > e && !c || !1 === a.checkCollision.down || !1 === b.checkCollision.up ? d = 0 : (a.touching.none = !1, a.touching.down = !0, b.touching.none = !1, b.touching.up = !0)) : a.deltaY() < b.deltaY() && (d = a.y - b.bottom, -d > e && !c || !1 === a.checkCollision.up || !1 === b.checkCollision.down ? d = 0 : (a.touching.none = !1, a.touching.up = !0, b.touching.none = !1, b.touching.down = !0)), a.overlapY = d, b.overlapY = d, d }, separateX: function(a, b, c) { var d = this.getOverlapX(a, b, c); if (c || 0 === d || a.immovable && b.immovable || a.customSeparateX || b.customSeparateX) return 0 !== d || a.embedded && b.embedded; var e = a.velocity.x, f = b.velocity.x; if (a.immovable || b.immovable) a.immovable ? (b.x += d, b.velocity.x = e - f * b.bounce.x, a.moves && (b.y += (a.y - a.prev.y) * a.friction.y)) : (a.x -= d, a.velocity.x = f - e * a.bounce.x, b.moves && (a.y += (b.y - b.prev.y) * b.friction.y)); else { d *= .5, a.x -= d, b.x += d; var g = Math.sqrt(f * f * b.mass / a.mass) * (f > 0 ? 1 : -1), h = Math.sqrt(e * e * a.mass / b.mass) * (e > 0 ? 1 : -1), i = .5 * (g + h); g -= i, h -= i, a.velocity.x = i + g * a.bounce.x, b.velocity.x = i + h * b.bounce.x } return !0 }, separateY: function(a, b, c) { var d = this.getOverlapY(a, b, c); if (c || 0 === d || a.immovable && b.immovable || a.customSeparateY || b.customSeparateY) return 0 !== d || a.embedded && b.embedded; var e = a.velocity.y, f = b.velocity.y; if (a.immovable || b.immovable) a.immovable ? (b.y += d, b.velocity.y = e - f * b.bounce.y, a.moves && (b.x += (a.x - a.prev.x) * a.friction.x)) : (a.y -= d, a.velocity.y = f - e * a.bounce.y, b.moves && (a.x += (b.x - b.prev.x) * b.friction.x)); else { d *= .5, a.y -= d, b.y += d; var g = Math.sqrt(f * f * b.mass / a.mass) * (f > 0 ? 1 : -1), h = Math.sqrt(e * e * a.mass / b.mass) * (e > 0 ? 1 : -1), i = .5 * (g + h); g -= i, h -= i, a.velocity.y = i + g * a.bounce.y, b.velocity.y = i + h * b.bounce.y } return !0 }, getObjectsUnderPointer: function(a, b, c, d) { if (0 !== b.length && a.exists) return this.getObjectsAtLocation(a.x, a.y, b, c, d, a) }, getObjectsAtLocation: function(a, b, d, e, f, g) { this.quadTree.clear(), this.quadTree.reset(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height, this.maxObjects, this.maxLevels), this.quadTree.populate(d); for (var h = new c.Rectangle(a, b, 1, 1), i = [], j = this.quadTree.retrieve(h), k = 0; k < j.length; k++) j[k].hitTest(a, b) && (e && e.call(f, g, j[k].sprite), i.push(j[k].sprite)); return i }, moveToObject: function(a, b, c, d) { void 0 === c && (c = 60), void 0 === d && (d = 0); var e = Math.atan2(b.y - a.y, b.x - a.x); return d > 0 && (c = this.distanceBetween(a, b) / (d / 1e3)), a.body.velocity.x = Math.cos(e) * c, a.body.velocity.y = Math.sin(e) * c, e }, moveToPointer: function(a, b, c, d) { void 0 === b && (b = 60), c = c || this.game.input.activePointer, void 0 === d && (d = 0); var e = this.angleToPointer(a, c); return d > 0 && (b = this.distanceToPointer(a, c) / (d / 1e3)), a.body.velocity.x = Math.cos(e) * b, a.body.velocity.y = Math.sin(e) * b, e }, moveToXY: function(a, b, c, d, e) { void 0 === d && (d = 60), void 0 === e && (e = 0); var f = Math.atan2(c - a.y, b - a.x); return e > 0 && (d = this.distanceToXY(a, b, c) / (e / 1e3)), a.body.velocity.x = Math.cos(f) * d, a.body.velocity.y = Math.sin(f) * d, f }, velocityFromAngle: function(a, b, d) { return void 0 === b && (b = 60), d = d || new c.Point, d.setTo(Math.cos(this.game.math.degToRad(a)) * b, Math.sin(this.game.math.degToRad(a)) * b) }, velocityFromRotation: function(a, b, d) { return void 0 === b && (b = 60), d = d || new c.Point, d.setTo(Math.cos(a) * b, Math.sin(a) * b) }, accelerationFromRotation: function(a, b, d) { return void 0 === b && (b = 60), d = d || new c.Point, d.setTo(Math.cos(a) * b, Math.sin(a) * b) }, accelerateToObject: function(a, b, c, d, e) { void 0 === c && (c = 60), void 0 === d && (d = 1e3), void 0 === e && (e = 1e3); var f = this.angleBetween(a, b); return a.body.acceleration.setTo(Math.cos(f) * c, Math.sin(f) * c), a.body.maxVelocity.setTo(d, e), f }, accelerateToPointer: function(a, b, c, d, e) { void 0 === c && (c = 60), void 0 === b && (b = this.game.input.activePointer), void 0 === d && (d = 1e3), void 0 === e && (e = 1e3); var f = this.angleToPointer(a, b); return a.body.acceleration.setTo(Math.cos(f) * c, Math.sin(f) * c), a.body.maxVelocity.setTo(d, e), f }, accelerateToXY: function(a, b, c, d, e, f) { void 0 === d && (d = 60), void 0 === e && (e = 1e3), void 0 === f && (f = 1e3); var g = this.angleToXY(a, b, c); return a.body.acceleration.setTo(Math.cos(g) * d, Math.sin(g) * d), a.body.maxVelocity.setTo(e, f), g }, distanceBetween: function(a, b, c) { void 0 === c && (c = !1); var d = c ? a.world.x - b.world.x : a.x - b.x, e = c ? a.world.y - b.world.y : a.y - b.y; return Math.sqrt(d * d + e * e) }, distanceToXY: function(a, b, c, d) { void 0 === d && (d = !1); var e = d ? a.world.x - b : a.x - b, f = d ? a.world.y - c : a.y - c; return Math.sqrt(e * e + f * f) }, distanceToPointer: function(a, b, c) { void 0 === b && (b = this.game.input.activePointer), void 0 === c && (c = !1); var d = c ? a.world.x - b.worldX : a.x - b.worldX, e = c ? a.world.y - b.worldY : a.y - b.worldY; return Math.sqrt(d * d + e * e) }, angleBetween: function(a, b, c) { return void 0 === c && (c = !1), c ? Math.atan2(b.world.y - a.world.y, b.world.x - a.world.x) : Math.atan2(b.y - a.y, b.x - a.x) }, angleBetweenCenters: function(a, b) { var c = b.centerX - a.centerX, d = b.centerY - a.centerY; return Math.atan2(d, c) }, angleToXY: function(a, b, c, d) { return void 0 === d && (d = !1), d ? Math.atan2(c - a.world.y, b - a.world.x) : Math.atan2(c - a.y, b - a.x) }, angleToPointer: function(a, b, c) { return void 0 === b && (b = this.game.input.activePointer), void 0 === c && (c = !1), c ? Math.atan2(b.worldY - a.world.y, b.worldX - a.world.x) : Math.atan2(b.worldY - a.y, b.worldX - a.x) }, worldAngleToPointer: function(a, b) { return this.angleToPointer(a, b, !0) } }, c.Physics.Arcade.Body = function(a) { this.sprite = a, this.game = a.game, this.type = c.Physics.ARCADE, this.enable = !0, this.isCircle = !1, this.radius = 0, this.offset = new c.Point, this.position = new c.Point(a.x, a.y), this.prev = new c.Point(this.position.x, this.position.y), this.allowRotation = !0, this.rotation = a.angle, this.preRotation = a.angle, this.width = a.width, this.height = a.height, this.sourceWidth = a.width, this.sourceHeight = a.height, a.texture && (this.sourceWidth = a.texture.frame.width, this.sourceHeight = a.texture.frame.height), this.halfWidth = Math.abs(a.width / 2), this.halfHeight = Math.abs(a.height / 2), this.center = new c.Point(a.x + this.halfWidth, a.y + this.halfHeight), this.velocity = new c.Point, this.newVelocity = new c.Point, this.deltaMax = new c.Point, this.acceleration = new c.Point, this.drag = new c.Point, this.allowGravity = !0, this.gravity = new c.Point, this.bounce = new c.Point, this.worldBounce = null, this.onWorldBounds = null, this.onCollide = null, this.onOverlap = null, this.maxVelocity = new c.Point(1e4, 1e4), this.friction = new c.Point(1, 0), this.angularVelocity = 0, this.angularAcceleration = 0, this.angularDrag = 0, this.maxAngular = 1e3, this.mass = 1, this.angle = 0, this.speed = 0, this.facing = c.NONE, this.immovable = !1, this.moves = !0, this.customSeparateX = !1, this.customSeparateY = !1, this.overlapX = 0, this.overlapY = 0, this.overlapR = 0, this.embedded = !1, this.collideWorldBounds = !1, this.checkCollision = { none: !1, any: !0, up: !0, down: !0, left: !0, right: !0 }, this.touching = { none: !0, up: !1, down: !1, left: !1, right: !1 }, this.wasTouching = { none: !0, up: !1, down: !1, left: !1, right: !1 }, this.blocked = { up: !1, down: !1, left: !1, right: !1 }, this.tilePadding = new c.Point, this.dirty = !1, this.skipQuadTree = !1, this.syncBounds = !1, this.isMoving = !1, this.stopVelocityOnCollide = !0, this.moveTimer = 0, this.moveDistance = 0, this.moveDuration = 0, this.moveTarget = null, this.moveEnd = null, this.onMoveComplete = new c.Signal, this.movementCallback = null, this.movementCallbackContext = null, this._reset = !0, this._sx = a.scale.x, this._sy = a.scale.y, this._dx = 0, this._dy = 0 }, c.Physics.Arcade.Body.prototype = { updateBounds: function() { if (this.syncBounds) { var a = this.sprite.getBounds(); a.ceilAll(), a.width === this.width && a.height === this.height || (this.width = a.width, this.height = a.height, this._reset = !0) } else { var b = Math.abs(this.sprite.scale.x), c = Math.abs(this.sprite.scale.y); b === this._sx && c === this._sy || (this.width = this.sourceWidth * b, this.height = this.sourceHeight * c, this._sx = b, this._sy = c, this._reset = !0) } this._reset && (this.halfWidth = Math.floor(this.width / 2), this.halfHeight = Math.floor(this.height / 2), this.center.setTo(this.position.x + this.halfWidth, this.position.y + this.halfHeight)) }, preUpdate: function() { this.enable && !this.game.physics.arcade.isPaused && (this.dirty = !0, this.wasTouching.none = this.touching.none, this.wasTouching.up = this.touching.up, this.wasTouching.down = this.touching.down, this.wasTouching.left = this.touching.left, this.wasTouching.right = this.touching.right, this.touching.none = !0, this.touching.up = !1, this.touching.down = !1, this.touching.left = !1, this.touching.right = !1, this.blocked.up = !1, this.blocked.down = !1, this.blocked.left = !1, this.blocked.right = !1, this.embedded = !1, this.updateBounds(), this.position.x = this.sprite.world.x - this.sprite.anchor.x * this.sprite.width + this.sprite.scale.x * this.offset.x, this.position.x -= this.sprite.scale.x < 0 ? this.width : 0, this.position.y = this.sprite.world.y - this.sprite.anchor.y * this.sprite.height + this.sprite.scale.y * this.offset.y, this.position.y -= this.sprite.scale.y < 0 ? this.height : 0, this.rotation = this.sprite.angle, this.preRotation = this.rotation, (this._reset || this.sprite.fresh) && (this.prev.x = this.position.x, this.prev.y = this.position.y), this.moves && (this.game.physics.arcade.updateMotion(this), this.newVelocity.set(this.velocity.x * this.game.time.physicsElapsed, this.velocity.y * this.game.time.physicsElapsed), this.position.x += this.newVelocity.x, this.position.y += this.newVelocity.y, this.position.x === this.prev.x && this.position.y === this.prev.y || (this.angle = Math.atan2(this.velocity.y, this.velocity.x)), this.speed = Math.sqrt(this.velocity.x * this.velocity.x + this.velocity.y * this.velocity.y), this.collideWorldBounds && this.checkWorldBounds() && this.onWorldBounds && this.onWorldBounds.dispatch(this.sprite, this.blocked.up, this.blocked.down, this.blocked.left, this.blocked.right)), this._dx = this.deltaX(), this._dy = this.deltaY(), this._reset = !1) }, updateMovement: function() { var a = 0, b = 0 !== this.overlapX || 0 !== this.overlapY; if (this.moveDuration > 0 ? (this.moveTimer += this.game.time.elapsedMS, a = this.moveTimer / this.moveDuration) : (this.moveTarget.end.set(this.position.x, this.position.y), a = this.moveTarget.length / this.moveDistance), this.movementCallback) var c = this.movementCallback.call(this.movementCallbackContext, this, this.velocity, a); return !(b || a >= 1 || void 0 !== c && !0 !== c) || (this.stopMovement(a >= 1 || this.stopVelocityOnCollide && b), !1) }, stopMovement: function(a) { this.isMoving && (this.isMoving = !1, a && this.velocity.set(0), this.onMoveComplete.dispatch(this.sprite, 0 !== this.overlapX || 0 !== this.overlapY)) }, postUpdate: function() { this.enable && this.dirty && (this.isMoving && this.updateMovement(), this.dirty = !1, this.deltaX() < 0 ? this.facing = c.LEFT : this.deltaX() > 0 && (this.facing = c.RIGHT), this.deltaY() < 0 ? this.facing = c.UP : this.deltaY() > 0 && (this.facing = c.DOWN), this.moves && (this._dx = this.deltaX(), this._dy = this.deltaY(), 0 !== this.deltaMax.x && 0 !== this._dx && (this._dx < 0 && this._dx < -this.deltaMax.x ? this._dx = -this.deltaMax.x : this._dx > 0 && this._dx > this.deltaMax.x && (this._dx = this.deltaMax.x)), 0 !== this.deltaMax.y && 0 !== this._dy && (this._dy < 0 && this._dy < -this.deltaMax.y ? this._dy = -this.deltaMax.y : this._dy > 0 && this._dy > this.deltaMax.y && (this._dy = this.deltaMax.y)), this.sprite.position.x += this._dx, this.sprite.position.y += this._dy, this._reset = !0), this.center.setTo(this.position.x + this.halfWidth, this.position.y + this.halfHeight), this.allowRotation && (this.sprite.angle += this.deltaZ()), this.prev.x = this.position.x, this.prev.y = this.position.y) }, checkWorldBounds: function() { var a = this.position, b = this.game.physics.arcade.bounds, c = this.game.physics.arcade.checkCollision, d = this.worldBounce ? -this.worldBounce.x : -this.bounce.x, e = this.worldBounce ? -this.worldBounce.y : -this.bounce.y; if (this.isCircle) { var f = { x: this.center.x - this.radius, y: this.center.y - this.radius, right: this.center.x + this.radius, bottom: this.center.y + this.radius }; f.x < b.x && c.left ? (a.x = b.x - this.halfWidth + this.radius, this.velocity.x *= d, this.blocked.left = !0) : f.right > b.right && c.right && (a.x = b.right - this.halfWidth - this.radius, this.velocity.x *= d, this.blocked.right = !0), f.y < b.y && c.up ? (a.y = b.y - this.halfHeight + this.radius, this.velocity.y *= e, this.blocked.up = !0) : f.bottom > b.bottom && c.down && (a.y = b.bottom - this.halfHeight - this.radius, this.velocity.y *= e, this.blocked.down = !0) } else a.x < b.x && c.left ? (a.x = b.x, this.velocity.x *= d, this.blocked.left = !0) : this.right > b.right && c.right && (a.x = b.right - this.width, this.velocity.x *= d, this.blocked.right = !0), a.y < b.y && c.up ? (a.y = b.y, this.velocity.y *= e, this.blocked.up = !0) : this.bottom > b.bottom && c.down && (a.y = b.bottom - this.height, this.velocity.y *= e, this.blocked.down = !0); return this.blocked.up || this.blocked.down || this.blocked.left || this.blocked.right }, moveFrom: function(a, b, c) { if (void 0 === b && (b = this.speed), 0 === b) return !1; var d; return void 0 === c ? (d = this.angle, c = this.game.math.radToDeg(d)) : d = this.game.math.degToRad(c), this.moveTimer = 0, this.moveDuration = a, 0 === c || 180 === c ? this.velocity.set(Math.cos(d) * b, 0) : 90 === c || 270 === c ? this.velocity.set(0, Math.sin(d) * b) : this.velocity.set(Math.cos(d) * b, Math.sin(d) * b), this.isMoving = !0, !0 }, moveTo: function(a, b, d) { var e = b / (a / 1e3); if (0 === e) return !1; var f; return void 0 === d ? (f = this.angle, d = this.game.math.radToDeg(f)) : f = this.game.math.degToRad(d), b = Math.abs(b), this.moveDuration = 0, this.moveDistance = b, null === this.moveTarget && (this.moveTarget = new c.Line, this.moveEnd = new c.Point), this.moveTarget.fromAngle(this.x, this.y, f, b), this.moveEnd.set(this.moveTarget.end.x, this.moveTarget.end.y), this.moveTarget.setTo(this.x, this.y, this.x, this.y), 0 === d || 180 === d ? this.velocity.set(Math.cos(f) * e, 0) : 90 === d || 270 === d ? this.velocity.set(0, Math.sin(f) * e) : this.velocity.set(Math.cos(f) * e, Math.sin(f) * e), this.isMoving = !0, !0 }, setSize: function(a, b, c, d) { void 0 === c && (c = this.offset.x), void 0 === d && (d = this.offset.y), this.sourceWidth = a, this.sourceHeight = b, this.width = this.sourceWidth * this._sx, this.height = this.sourceHeight * this._sy, this.halfWidth = Math.floor(this.width / 2), this.halfHeight = Math.floor(this.height / 2), this.offset.setTo(c, d), this.center.setTo(this.position.x + this.halfWidth, this.position.y + this.halfHeight), this.isCircle = !1, this.radius = 0 }, setCircle: function(a, b, c) { void 0 === b && (b = this.offset.x), void 0 === c && (c = this.offset.y), a > 0 ? (this.isCircle = !0, this.radius = a, this.sourceWidth = 2 * a, this.sourceHeight = 2 * a, this.width = this.sourceWidth * this._sx, this.height = this.sourceHeight * this._sy, this.halfWidth = Math.floor(this.width / 2), this.halfHeight = Math.floor(this.height / 2), this.offset.setTo(b, c), this.center.setTo(this.position.x + this.halfWidth, this.position.y + this.halfHeight)) : this.isCircle = !1 }, reset: function(a, b) { this.velocity.set(0), this.acceleration.set(0), this.speed = 0, this.angularVelocity = 0, this.angularAcceleration = 0, this.position.x = a - this.sprite.anchor.x * this.sprite.width + this.sprite.scale.x * this.offset.x, this.position.x -= this.sprite.scale.x < 0 ? this.width : 0, this.position.y = b - this.sprite.anchor.y * this.sprite.height + this.sprite.scale.y * this.offset.y, this.position.y -= this.sprite.scale.y < 0 ? this.height : 0, this.prev.x = this.position.x, this.prev.y = this.position.y, this.rotation = this.sprite.angle, this.preRotation = this.rotation, this._sx = this.sprite.scale.x, this._sy = this.sprite.scale.y, this.center.setTo(this.position.x + this.halfWidth, this.position.y + this.halfHeight) }, getBounds: function(a) { return this.isCircle ? (a.x = this.center.x - this.radius, a.y = this.center.y - this.radius, a.right = this.center.x + this.radius, a.bottom = this.center.y + this.radius) : (a.x = this.x, a.y = this.y, a.right = this.right, a.bottom = this.bottom), a }, hitTest: function(a, b) { return this.isCircle ? c.Circle.contains(this, a, b) : c.Rectangle.contains(this, a, b) }, onFloor: function() { return this.blocked.down }, onCeiling: function() { return this.blocked.up }, onWall: function() { return this.blocked.left || this.blocked.right }, deltaAbsX: function() { return this.deltaX() > 0 ? this.deltaX() : -this.deltaX() }, deltaAbsY: function() { return this.deltaY() > 0 ? this.deltaY() : -this.deltaY() }, deltaX: function() { return this.position.x - this.prev.x }, deltaY: function() { return this.position.y - this.prev.y }, deltaZ: function() { return this.rotation - this.preRotation }, destroy: function() { this.sprite.parent && this.sprite.parent instanceof c.Group && this.sprite.parent.removeFromHash(this.sprite), this.sprite.body = null, this.sprite = null } }, Object.defineProperty(c.Physics.Arcade.Body.prototype, "left", { get: function() { return this.position.x } }), Object.defineProperty(c.Physics.Arcade.Body.prototype, "right", { get: function() { return this.position.x + this.width } }), Object.defineProperty(c.Physics.Arcade.Body.prototype, "top", { get: function() { return this.position.y } }), Object.defineProperty(c.Physics.Arcade.Body.prototype, "bottom", { get: function() { return this.position.y + this.height } }), Object.defineProperty(c.Physics.Arcade.Body.prototype, "x", { get: function() { return this.position.x }, set: function(a) { this.position.x = a } }), Object.defineProperty(c.Physics.Arcade.Body.prototype, "y", { get: function() { return this.position.y }, set: function(a) { this.position.y = a } }), c.Physics.Arcade.Body.render = function(a, b, c, d) { void 0 === d && (d = !0), c = c || "rgba(0,255,0,0.4)", a.fillStyle = c, a.strokeStyle = c, b.isCircle ? (a.beginPath(), a.arc(b.center.x - b.game.camera.x, b.center.y - b.game.camera.y, b.radius, 0, 2 * Math.PI), d ? a.fill() : a.stroke()) : d ? a.fillRect(b.position.x - b.game.camera.x, b.position.y - b.game.camera.y, b.width, b.height) : a.strokeRect(b.position.x - b.game.camera.x, b.position.y - b.game.camera.y, b.width, b.height) }, c.Physics.Arcade.Body.renderBodyInfo = function(a, b) { a.line("x: " + b.x.toFixed(2), "y: " + b.y.toFixed(2), "width: " + b.width, "height: " + b.height), a.line("velocity x: " + b.velocity.x.toFixed(2), "y: " + b.velocity.y.toFixed(2), "deltaX: " + b._dx.toFixed(2), "deltaY: " + b._dy.toFixed(2)), a.line("acceleration x: " + b.acceleration.x.toFixed(2), "y: " + b.acceleration.y.toFixed(2), "speed: " + b.speed.toFixed(2), "angle: " + b.angle.toFixed(2)), a.line("gravity x: " + b.gravity.x, "y: " + b.gravity.y, "bounce x: " + b.bounce.x.toFixed(2), "y: " + b.bounce.y.toFixed(2)), a.line("touching left: " + b.touching.left, "right: " + b.touching.right, "up: " + b.touching.up, "down: " + b.touching.down), a.line("blocked left: " + b.blocked.left, "right: " + b.blocked.right, "up: " + b.blocked.up, "down: " + b.blocked.down) }, c.Physics.Arcade.Body.prototype.constructor = c.Physics.Arcade.Body, c.Physics.Arcade.TilemapCollision = function() {}, c.Physics.Arcade.TilemapCollision.prototype = { TILE_BIAS: 16, collideSpriteVsTilemapLayer: function(a, b, c, d, e, f) { if (a.body) { var g = b.getTiles(a.body.position.x - a.body.tilePadding.x, a.body.position.y - a.body.tilePadding.y, a.body.width + a.body.tilePadding.x, a.body.height + a.body.tilePadding.y, !1, !1); if (0 !== g.length) for (var h = 0; h < g.length; h++) d ? d.call(e, a, g[h]) && this.separateTile(h, a.body, g[h], b, f) && (this._total++, c && c.call(e, a, g[h])) : this.separateTile(h, a.body, g[h], b, f) && (this._total++, c && c.call(e, a, g[h])) } }, collideGroupVsTilemapLayer: function(a, b, c, d, e, f) { if (0 !== a.length) for (var g = 0; g < a.children.length; g++) a.children[g].exists && this.collideSpriteVsTilemapLayer(a.children[g], b, c, d, e, f) }, separateTile: function(a, b, c, d, e) { if (!b.enable) return !1; var f = d.fixedToCamera ? 0 : d.position.x, g = d.fixedToCamera ? 0 : d.position.y; if (!c.intersects(b.position.x - f, b.position.y - g, b.right - f, b.bottom - g)) return !1; if (e) return !0; if (c.collisionCallback && !c.collisionCallback.call(c.collisionCallbackContext, b.sprite, c)) return !1; if (void 0 !== c.layer.callbacks && c.layer.callbacks[c.index] && !c.layer.callbacks[c.index].callback.call(c.layer.callbacks[c.index].callbackContext, b.sprite, c)) return !1; if (!(c.faceLeft || c.faceRight || c.faceTop || c.faceBottom)) return !1; var h = 0, i = 0, j = 0, k = 1; if (b.deltaAbsX() > b.deltaAbsY() ? j = -1 : b.deltaAbsX() < b.deltaAbsY() && (k = -1), 0 !== b.deltaX() && 0 !== b.deltaY() && (c.faceLeft || c.faceRight) && (c.faceTop || c.faceBottom) && (j = Math.min(Math.abs(b.position.x - f - c.right), Math.abs(b.right - f - c.left)), k = Math.min(Math.abs(b.position.y - g - c.bottom), Math.abs(b.bottom - g - c.top))), j < k) { if ((c.faceLeft || c.faceRight) && 0 !== (h = this.tileCheckX(b, c, d)) && !c.intersects(b.position.x - f, b.position.y - g, b.right - f, b.bottom - g)) return !0; (c.faceTop || c.faceBottom) && (i = this.tileCheckY(b, c, d)) } else { if ((c.faceTop || c.faceBottom) && 0 !== (i = this.tileCheckY(b, c, d)) && !c.intersects(b.position.x - f, b.position.y - g, b.right - f, b.bottom - g)) return !0; (c.faceLeft || c.faceRight) && (h = this.tileCheckX(b, c, d)) } return 0 !== h || 0 !== i }, tileCheckX: function(a, b, c) { var d = 0, e = c.fixedToCamera ? 0 : c.position.x; return a.deltaX() < 0 && !a.blocked.left && b.collideRight && a.checkCollision.left ? b.faceRight && a.x - e < b.right && (d = a.x - e - b.right) < -this.TILE_BIAS && (d = 0) : a.deltaX() > 0 && !a.blocked.right && b.collideLeft && a.checkCollision.right && b.faceLeft && a.right - e > b.left && (d = a.right - e - b.left) > this.TILE_BIAS && (d = 0), 0 !== d && (a.customSeparateX ? a.overlapX = d : this.processTileSeparationX(a, d)), d }, tileCheckY: function(a, b, c) { var d = 0, e = c.fixedToCamera ? 0 : c.position.y; return a.deltaY() < 0 && !a.blocked.up && b.collideDown && a.checkCollision.up ? b.faceBottom && a.y - e < b.bottom && (d = a.y - e - b.bottom) < -this.TILE_BIAS && (d = 0) : a.deltaY() > 0 && !a.blocked.down && b.collideUp && a.checkCollision.down && b.faceTop && a.bottom - e > b.top && (d = a.bottom - e - b.top) > this.TILE_BIAS && (d = 0), 0 !== d && (a.customSeparateY ? a.overlapY = d : this.processTileSeparationY(a, d)), d }, processTileSeparationX: function(a, b) { b < 0 ? a.blocked.left = !0 : b > 0 && (a.blocked.right = !0), a.position.x -= b, 0 === a.bounce.x ? a.velocity.x = 0 : a.velocity.x = -a.velocity.x * a.bounce.x }, processTileSeparationY: function(a, b) { b < 0 ? a.blocked.up = !0 : b > 0 && (a.blocked.down = !0), a.position.y -= b, 0 === a.bounce.y ? a.velocity.y = 0 : a.velocity.y = -a.velocity.y * a.bounce.y } }, c.Utils.mixinPrototype(c.Physics.Arcade.prototype, c.Physics.Arcade.TilemapCollision.prototype), p2.Body.prototype.parent = null, p2.Spring.prototype.parent = null, c.Physics.P2 = function(a, b) { this.game = a, void 0 === b ? b = { gravity: [0, 0], broadphase: new p2.SAPBroadphase } : (b.hasOwnProperty("gravity") || (b.gravity = [0, 0]), b.hasOwnProperty("broadphase") || (b.broadphase = new p2.SAPBroadphase)), this.config = b, this.world = new p2.World(this.config), this.frameRate = 1 / 60, this.useElapsedTime = !1, this.paused = !1, this.materials = [], this.gravity = new c.Physics.P2.InversePointProxy(this, this.world.gravity), this.walls = { left: null, right: null, top: null, bottom: null }, this.onBodyAdded = new c.Signal, this.onBodyRemoved = new c.Signal, this.onSpringAdded = new c.Signal, this.onSpringRemoved = new c.Signal, this.onConstraintAdded = new c.Signal, this.onConstraintRemoved = new c.Signal, this.onContactMaterialAdded = new c.Signal, this.onContactMaterialRemoved = new c.Signal, this.postBroadphaseCallback = null, this.callbackContext = null, this.onBeginContact = new c.Signal, this.onEndContact = new c.Signal, b.hasOwnProperty("mpx") && b.hasOwnProperty("pxm") && b.hasOwnProperty("mpxi") && b.hasOwnProperty("pxmi") && (this.mpx = b.mpx, this.mpxi = b.mpxi, this.pxm = b.pxm, this.pxmi = b.pxmi), this.world.on("beginContact", this.beginContactHandler, this), this.world.on("endContact", this.endContactHandler, this), this.collisionGroups = [], this.nothingCollisionGroup = new c.Physics.P2.CollisionGroup(1), this.boundsCollisionGroup = new c.Physics.P2.CollisionGroup(2), this.everythingCollisionGroup = new c.Physics.P2.CollisionGroup(2147483648), this.boundsCollidesWith = [], this._toRemove = [], this._collisionGroupID = 2, this._boundsLeft = !0, this._boundsRight = !0, this._boundsTop = !0, this._boundsBottom = !0, this._boundsOwnGroup = !1, this.setBoundsToWorld(!0, !0, !0, !0, !1) }, c.Physics.P2.prototype = { removeBodyNextStep: function(a) { this._toRemove.push(a) }, preUpdate: function() { for (var a = this._toRemove.length; a--;) this.removeBody(this._toRemove[a]); this._toRemove.length = 0 }, enable: function(a, b, d) { void 0 === b && (b = !1), void 0 === d && (d = !0); var e = 1; if (Array.isArray(a)) for (e = a.length; e--;) a[e] instanceof c.Group ? this.enable(a[e].children, b, d) : (this.enableBody(a[e], b), d && a[e].hasOwnProperty("children") && a[e].children.length > 0 && this.enable(a[e], b, !0)); else a instanceof c.Group ? this.enable(a.children, b, d) : (this.enableBody(a, b), d && a.hasOwnProperty("children") && a.children.length > 0 && this.enable(a.children, b, !0)) }, enableBody: function(a, b) { a.hasOwnProperty("body") && null === a.body && (a.body = new c.Physics.P2.Body(this.game, a, a.x, a.y, 1), a.body.debug = b, void 0 !== a.anchor && a.anchor.set(.5)) }, setImpactEvents: function(a) { a ? this.world.on("impact", this.impactHandler, this) : this.world.off("impact", this.impactHandler, this) }, setPostBroadphaseCallback: function(a, b) { this.postBroadphaseCallback = a, this.callbackContext = b, null !== a ? this.world.on("postBroadphase", this.postBroadphaseHandler, this) : this.world.off("postBroadphase", this.postBroadphaseHandler, this) }, postBroadphaseHandler: function(a) { if (this.postBroadphaseCallback && 0 !== a.pairs.length) for (var b = a.pairs.length - 2; b >= 0; b -= 2) a.pairs[b].parent && a.pairs[b + 1].parent && !this.postBroadphaseCallback.call(this.callbackContext, a.pairs[b].parent, a.pairs[b + 1].parent) && a.pairs.splice(b, 2) }, impactHandler: function(a) { if (a.bodyA.parent && a.bodyB.parent) { var b = a.bodyA.parent, c = a.bodyB.parent; b._bodyCallbacks[a.bodyB.id] && b._bodyCallbacks[a.bodyB.id].call(b._bodyCallbackContext[a.bodyB.id], b, c, a.shapeA, a.shapeB), c._bodyCallbacks[a.bodyA.id] && c._bodyCallbacks[a.bodyA.id].call(c._bodyCallbackContext[a.bodyA.id], c, b, a.shapeB, a.shapeA), b._groupCallbacks[a.shapeB.collisionGroup] && b._groupCallbacks[a.shapeB.collisionGroup].call(b._groupCallbackContext[a.shapeB.collisionGroup], b, c, a.shapeA, a.shapeB), c._groupCallbacks[a.shapeA.collisionGroup] && c._groupCallbacks[a.shapeA.collisionGroup].call(c._groupCallbackContext[a.shapeA.collisionGroup], c, b, a.shapeB, a.shapeA) } }, beginContactHandler: function(a) { a.bodyA && a.bodyB && (this.onBeginContact.dispatch(a.bodyA, a.bodyB, a.shapeA, a.shapeB, a.contactEquations), a.bodyA.parent && a.bodyA.parent.onBeginContact.dispatch(a.bodyB.parent, a.bodyB, a.shapeA, a.shapeB, a.contactEquations), a.bodyB.parent && a.bodyB.parent.onBeginContact.dispatch(a.bodyA.parent, a.bodyA, a.shapeB, a.shapeA, a.contactEquations)) }, endContactHandler: function(a) { a.bodyA && a.bodyB && (this.onEndContact.dispatch(a.bodyA, a.bodyB, a.shapeA, a.shapeB), a.bodyA.parent && a.bodyA.parent.onEndContact.dispatch(a.bodyB.parent, a.bodyB, a.shapeA, a.shapeB), a.bodyB.parent && a.bodyB.parent.onEndContact.dispatch(a.bodyA.parent, a.bodyA, a.shapeB, a.shapeA)) }, setBoundsToWorld: function(a, b, c, d, e) { this.setBounds(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height, a, b, c, d, e) }, setWorldMaterial: function(a, b, c, d, e) { void 0 === b && (b = !0), void 0 === c && (c = !0), void 0 === d && (d = !0), void 0 === e && (e = !0), b && this.walls.left && (this.walls.left.shapes[0].material = a), c && this.walls.right && (this.walls.right.shapes[0].material = a), d && this.walls.top && (this.walls.top.shapes[0].material = a), e && this.walls.bottom && (this.walls.bottom.shapes[0].material = a) }, updateBoundsCollisionGroup: function(a) { void 0 === a && (a = !0); var b = a ? this.boundsCollisionGroup.mask : this.everythingCollisionGroup.mask; this.walls.left && (this.walls.left.shapes[0].collisionGroup = b), this.walls.right && (this.walls.right.shapes[0].collisionGroup = b), this.walls.top && (this.walls.top.shapes[0].collisionGroup = b), this.walls.bottom && (this.walls.bottom.shapes[0].collisionGroup = b), this._boundsOwnGroup = a }, setBounds: function(a, b, c, d, e, f, g, h, i) { void 0 === e && (e = this._boundsLeft), void 0 === f && (f = this._boundsRight), void 0 === g && (g = this._boundsTop), void 0 === h && (h = this._boundsBottom), void 0 === i && (i = this._boundsOwnGroup), this.setupWall(e, "left", a, b, 1.5707963267948966, i), this.setupWall(f, "right", a + c, b, -1.5707963267948966, i), this.setupWall(g, "top", a, b, -3.141592653589793, i), this.setupWall(h, "bottom", a, b + d, 0, i), this._boundsLeft = e, this._boundsRight = f, this._boundsTop = g, this._boundsBottom = h, this._boundsOwnGroup = i }, setupWall: function(a, b, c, d, e, f) { a ? (this.walls[b] ? this.walls[b].position = [this.pxmi(c), this.pxmi(d)] : (this.walls[b] = new p2.Body({ mass: 0, position: [this.pxmi(c), this.pxmi(d)], angle: e }), this.walls[b].addShape(new p2.Plane), this.world.addBody(this.walls[b])), f && (this.walls[b].shapes[0].collisionGroup = this.boundsCollisionGroup.mask)) : this.walls[b] && (this.world.removeBody(this.walls[b]), this.walls[b] = null) }, pause: function() { this.paused = !0 }, resume: function() { this.paused = !1 }, update: function() { this.paused || (this.useElapsedTime ? this.world.step(this.game.time.physicsElapsed) : this.world.step(this.frameRate)) }, reset: function() { this.world.on("beginContact", this.beginContactHandler, this), this.world.on("endContact", this.endContactHandler, this), this.nothingCollisionGroup = new c.Physics.P2.CollisionGroup(1), this.boundsCollisionGroup = new c.Physics.P2.CollisionGroup(2), this.everythingCollisionGroup = new c.Physics.P2.CollisionGroup(2147483648), this._collisionGroupID = 2, this.setBoundsToWorld(!0, !0, !0, !0, !1) }, clear: function() { this.world.time = 0, this.world.fixedStepTime = 0, this.world.solver && this.world.solver.equations.length && this.world.solver.removeAllEquations(); for (var a = this.world.constraints, b = a.length - 1; b >= 0; b--) this.world.removeConstraint(a[b]); for (var c = this.world.bodies, b = c.length - 1; b >= 0; b--) this.world.removeBody(c[b]); for (var d = this.world.springs, b = d.length - 1; b >= 0; b--) this.world.removeSpring(d[b]); for (var e = this.world.contactMaterials, b = e.length - 1; b >= 0; b--) this.world.removeContactMaterial(e[b]); this.world.off("beginContact", this.beginContactHandler, this), this.world.off("endContact", this.endContactHandler, this), this.postBroadphaseCallback = null, this.callbackContext = null, this.impactCallback = null, this.collisionGroups = [], this._toRemove = [], this.boundsCollidesWith = [], this.walls = { left: null, right: null, top: null, bottom: null } }, destroy: function() { this.clear(), this.game = null }, addBody: function(a) { return !a.data.world && (this.world.addBody(a.data), this.onBodyAdded.dispatch(a), !0) }, removeBody: function(a) { return a.data.world === this.world && (this.world.removeBody(a.data), this.onBodyRemoved.dispatch(a)), a }, addSpring: function(a) { return a instanceof c.Physics.P2.Spring || a instanceof c.Physics.P2.RotationalSpring ? this.world.addSpring(a.data) : this.world.addSpring(a), this.onSpringAdded.dispatch(a), a }, removeSpring: function(a) { return a instanceof c.Physics.P2.Spring || a instanceof c.Physics.P2.RotationalSpring ? this.world.removeSpring(a.data) : this.world.removeSpring(a), this.onSpringRemoved.dispatch(a), a }, createDistanceConstraint: function(a, b, d, e, f, g) { if (a = this.getBody(a), b = this.getBody(b), a && b) return this.addConstraint(new c.Physics.P2.DistanceConstraint(this, a, b, d, e, f, g)); console.warn("Cannot create Constraint, invalid body objects given") }, createGearConstraint: function(a, b, d, e) { if (a = this.getBody(a), b = this.getBody(b), a && b) return this.addConstraint(new c.Physics.P2.GearConstraint(this, a, b, d, e)); console.warn("Cannot create Constraint, invalid body objects given") }, createRevoluteConstraint: function(a, b, d, e, f, g) { if (a = this.getBody(a), d = this.getBody(d), a && d) return this.addConstraint(new c.Physics.P2.RevoluteConstraint(this, a, b, d, e, f, g)); console.warn("Cannot create Constraint, invalid body objects given") }, createLockConstraint: function(a, b, d, e, f) { if (a = this.getBody(a), b = this.getBody(b), a && b) return this.addConstraint(new c.Physics.P2.LockConstraint(this, a, b, d, e, f)); console.warn("Cannot create Constraint, invalid body objects given") }, createPrismaticConstraint: function(a, b, d, e, f, g, h) { if (a = this.getBody(a), b = this.getBody(b), a && b) return this.addConstraint(new c.Physics.P2.PrismaticConstraint(this, a, b, d, e, f, g, h)); console.warn("Cannot create Constraint, invalid body objects given") }, addConstraint: function(a) { return this.world.addConstraint(a), this.onConstraintAdded.dispatch(a), a }, removeConstraint: function(a) { return this.world.removeConstraint(a), this.onConstraintRemoved.dispatch(a), a }, addContactMaterial: function(a) { return this.world.addContactMaterial(a), this.onContactMaterialAdded.dispatch(a), a }, removeContactMaterial: function(a) { return this.world.removeContactMaterial(a), this.onContactMaterialRemoved.dispatch(a), a }, getContactMaterial: function(a, b) { return this.world.getContactMaterial(a, b) }, setMaterial: function(a, b) { for (var c = b.length; c--;) b[c].setMaterial(a) }, createMaterial: function(a, b) { a = a || ""; var d = new c.Physics.P2.Material(a); return this.materials.push(d), void 0 !== b && b.setMaterial(d), d }, createContactMaterial: function(a, b, d) { void 0 === a && (a = this.createMaterial()), void 0 === b && (b = this.createMaterial()); var e = new c.Physics.P2.ContactMaterial(a, b, d); return this.addContactMaterial(e) }, getBodies: function() { for (var a = [], b = this.world.bodies.length; b--;) a.push(this.world.bodies[b].parent); return a }, getBody: function(a) { return a instanceof p2.Body ? a : a instanceof c.Physics.P2.Body ? a.data : a.body && a.body.type === c.Physics.P2JS ? a.body.data : null }, getSprings: function() { for (var a = [], b = this.world.springs.length; b--;) a.push(this.world.springs[b].parent); return a }, getConstraints: function() { for (var a = [], b = this.world.constraints.length; b--;) a.push(this.world.constraints[b]); return a }, hitTest: function(a, b, d, e) { void 0 === b && (b = this.world.bodies), void 0 === d && (d = 5), void 0 === e && (e = !1); for (var f = [this.pxmi(a.x), this.pxmi(a.y)], g = [], h = b.length; h--;) b[h] instanceof c.Physics.P2.Body && (!e || b[h].data.type !== p2.Body.STATIC) ? g.push(b[h].data) : b[h] instanceof p2.Body && b[h].parent && (!e || b[h].type !== p2.Body.STATIC) ? g.push(b[h]) : b[h] instanceof c.Sprite && b[h].hasOwnProperty("body") && (!e || b[h].body.data.type !== p2.Body.STATIC) && g.push(b[h].body.data); return this.world.hitTest(f, g, d) }, toJSON: function() { return this.world.toJSON() }, createCollisionGroup: function(a) { var b = Math.pow(2, this._collisionGroupID); this.walls.left && (this.walls.left.shapes[0].collisionMask = this.walls.left.shapes[0].collisionMask | b), this.walls.right && (this.walls.right.shapes[0].collisionMask = this.walls.right.shapes[0].collisionMask | b), this.walls.top && (this.walls.top.shapes[0].collisionMask = this.walls.top.shapes[0].collisionMask | b), this.walls.bottom && (this.walls.bottom.shapes[0].collisionMask = this.walls.bottom.shapes[0].collisionMask | b), this._collisionGroupID++; var d = new c.Physics.P2.CollisionGroup(b); return this.collisionGroups.push(d), a && this.setCollisionGroup(a, d), d }, setCollisionGroup: function(a, b) { if (a instanceof c.Group) for (var d = 0; d < a.total; d++) a.children[d].body && a.children[d].body.type === c.Physics.P2JS && a.children[d].body.setCollisionGroup(b); else a.body.setCollisionGroup(b) }, createSpring: function(a, b, d, e, f, g, h, i, j) { if (a = this.getBody(a), b = this.getBody(b), a && b) return this.addSpring(new c.Physics.P2.Spring(this, a, b, d, e, f, g, h, i, j)); console.warn("Cannot create Spring, invalid body objects given") }, createRotationalSpring: function(a, b, d, e, f) { if (a = this.getBody(a), b = this.getBody(b), a && b) return this.addSpring(new c.Physics.P2.RotationalSpring(this, a, b, d, e, f)); console.warn("Cannot create Rotational Spring, invalid body objects given") }, createBody: function(a, b, d, e, f, g) { void 0 === e && (e = !1); var h = new c.Physics.P2.Body(this.game, null, a, b, d); if (g) { if (!h.addPolygon(f, g)) return !1 } return e && this.world.addBody(h.data), h }, createParticle: function(a, b, d, e, f, g) { void 0 === e && (e = !1); var h = new c.Physics.P2.Body(this.game, null, a, b, d); if (g) { if (!h.addPolygon(f, g)) return !1 } return e && this.world.addBody(h.data), h }, convertCollisionObjects: function(a, b, c) { void 0 === c && (c = !0); for (var d = [], e = 0, f = a.collision[b].length; e < f; e++) { var g = a.collision[b][e], h = this.createBody(g.x, g.y, 0, c, {}, g.polyline); h && d.push(h) } return d }, clearTilemapLayerBodies: function(a, b) { b = a.getLayer(b); for (var c = a.layers[b].bodies.length; c--;) a.layers[b].bodies[c].destroy(); a.layers[b].bodies.length = 0 }, convertTilemap: function(a, b, c, d) { b = a.getLayer(b), void 0 === c && (c = !0), void 0 === d && (d = !0), this.clearTilemapLayerBodies(a, b); for (var e = 0, f = 0, g = 0, h = 0, i = a.layers[b].height; h < i; h++) { e = 0; for (var j = 0, k = a.layers[b].width; j < k; j++) { var l = a.layers[b].data[h][j]; if (l && l.index > -1 && l.collides) if (d) { var m = a.getTileRight(b, j, h); if (0 === e && (f = l.x * l.width, g = l.y * l.height, e = l.width), m && m.collides) e += l.width; else { var n = this.createBody(f, g, 0, !1); n.addRectangle(e, l.height, e / 2, l.height / 2, 0), c && this.addBody(n), a.layers[b].bodies.push(n), e = 0 } } else { var n = this.createBody(l.x * l.width, l.y * l.height, 0, !1); n.addRectangle(l.width, l.height, l.width / 2, l.height / 2, 0), c && this.addBody(n), a.layers[b].bodies.push(n) } } } return a.layers[b].bodies }, mpx: function(a) { return a *= 20 }, pxm: function(a) { return .05 * a }, mpxi: function(a) { return a *= -20 }, pxmi: function(a) { return -.05 * a } }, Object.defineProperty(c.Physics.P2.prototype, "friction", { get: function() { return this.world.defaultContactMaterial.friction }, set: function(a) { this.world.defaultContactMaterial.friction = a } }), Object.defineProperty(c.Physics.P2.prototype, "restitution", { get: function() { return this.world.defaultContactMaterial.restitution }, set: function(a) { this.world.defaultContactMaterial.restitution = a } }), Object.defineProperty(c.Physics.P2.prototype, "contactMaterial", { get: function() { return this.world.defaultContactMaterial }, set: function(a) { this.world.defaultContactMaterial = a } }), Object.defineProperty(c.Physics.P2.prototype, "applySpringForces", { get: function() { return this.world.applySpringForces }, set: function(a) { this.world.applySpringForces = a } }), Object.defineProperty(c.Physics.P2.prototype, "applyDamping", { get: function() { return this.world.applyDamping }, set: function(a) { this.world.applyDamping = a } }), Object.defineProperty(c.Physics.P2.prototype, "applyGravity", { get: function() { return this.world.applyGravity }, set: function(a) { this.world.applyGravity = a } }), Object.defineProperty(c.Physics.P2.prototype, "solveConstraints", { get: function() { return this.world.solveConstraints }, set: function(a) { this.world.solveConstraints = a } }), Object.defineProperty(c.Physics.P2.prototype, "time", { get: function() { return this.world.time } }), Object.defineProperty(c.Physics.P2.prototype, "emitImpactEvent", { get: function() { return this.world.emitImpactEvent }, set: function(a) { this.world.emitImpactEvent = a } }), Object.defineProperty(c.Physics.P2.prototype, "sleepMode", { get: function() { return this.world.sleepMode }, set: function(a) { this.world.sleepMode = a } }), Object.defineProperty(c.Physics.P2.prototype, "total", { get: function() { return this.world.bodies.length } }), c.Physics.P2.FixtureList = function(a) { Array.isArray(a) || (a = [a]), this.rawList = a, this.init(), this.parse(this.rawList) }, c.Physics.P2.FixtureList.prototype = { init: function() { this.namedFixtures = {}, this.groupedFixtures = [], this.allFixtures = [] }, setCategory: function(a, b) { var c = function(b) { b.collisionGroup = a }; this.getFixtures(b).forEach(c) }, setMask: function(a, b) { var c = function(b) { b.collisionMask = a }; this.getFixtures(b).forEach(c) }, setSensor: function(a, b) { var c = function(b) { b.sensor = a }; this.getFixtures(b).forEach(c) }, setMaterial: function(a, b) { var c = function(b) { b.material = a }; this.getFixtures(b).forEach(c) }, getFixtures: function(a) { var b = []; if (a) { a instanceof Array || (a = [a]); var c = this; return a.forEach(function(a) { c.namedFixtures[a] && b.push(c.namedFixtures[a]) }), this.flatten(b) } return this.allFixtures }, getFixtureByKey: function(a) { return this.namedFixtures[a] }, getGroup: function(a) { return this.groupedFixtures[a] }, parse: function() { var a, b, c, d; c = this.rawList, d = []; for (a in c) b = c[a], isNaN(a - 0) ? this.namedFixtures[a] = this.flatten(b) : (this.groupedFixtures[a] = this.groupedFixtures[a] || [], this.groupedFixtures[a] = this.groupedFixtures[a].concat(b)), d.push(this.allFixtures = this.flatten(this.groupedFixtures)) }, flatten: function(a) { var b, c; return b = [], c = arguments.callee, a.forEach(function(a) { return Array.prototype.push.apply(b, Array.isArray(a) ? c(a) : [a]) }), b } }, c.Physics.P2.PointProxy = function(a, b) { this.world = a, this.destination = b }, c.Physics.P2.PointProxy.prototype.constructor = c.Physics.P2.PointProxy, Object.defineProperty(c.Physics.P2.PointProxy.prototype, "x", { get: function() { return this.world.mpx(this.destination[0]) }, set: function(a) { this.destination[0] = this.world.pxm(a) } }), Object.defineProperty(c.Physics.P2.PointProxy.prototype, "y", { get: function() { return this.world.mpx(this.destination[1]) }, set: function(a) { this.destination[1] = this.world.pxm(a) } }), Object.defineProperty(c.Physics.P2.PointProxy.prototype, "mx", { get: function() { return this.destination[0] }, set: function(a) { this.destination[0] = a } }), Object.defineProperty(c.Physics.P2.PointProxy.prototype, "my", { get: function() { return this.destination[1] }, set: function(a) { this.destination[1] = a } }), c.Physics.P2.InversePointProxy = function(a, b) { this.world = a, this.destination = b }, c.Physics.P2.InversePointProxy.prototype.constructor = c.Physics.P2.InversePointProxy, Object.defineProperty(c.Physics.P2.InversePointProxy.prototype, "x", { get: function() { return this.world.mpxi(this.destination[0]) }, set: function(a) { this.destination[0] = this.world.pxmi(a) } }), Object.defineProperty(c.Physics.P2.InversePointProxy.prototype, "y", { get: function() { return this.world.mpxi(this.destination[1]) }, set: function(a) { this.destination[1] = this.world.pxmi(a) } }), Object.defineProperty(c.Physics.P2.InversePointProxy.prototype, "mx", { get: function() { return this.destination[0] }, set: function(a) { this.destination[0] = -a } }), Object.defineProperty(c.Physics.P2.InversePointProxy.prototype, "my", { get: function() { return this.destination[1] }, set: function(a) { this.destination[1] = -a } }), c.Physics.P2.Body = function(a, b, d, e, f) { b = b || null, d = d || 0, e = e || 0, void 0 === f && (f = 1), this.game = a, this.world = a.physics.p2, this.sprite = b, this.type = c.Physics.P2JS, this.offset = new c.Point, this.data = new p2.Body({ position: [this.world.pxmi(d), this.world.pxmi(e)], mass: f }), this.data.parent = this, this.velocity = new c.Physics.P2.InversePointProxy(this.world, this.data.velocity), this.force = new c.Physics.P2.InversePointProxy(this.world, this.data.force), this.gravity = new c.Point, this.onBeginContact = new c.Signal, this.onEndContact = new c.Signal, this.collidesWith = [], this.removeNextStep = !1, this.debugBody = null, this.dirty = !1, this._collideWorldBounds = !0, this._bodyCallbacks = {}, this._bodyCallbackContext = {}, this._groupCallbacks = {}, this._groupCallbackContext = {}, this._reset = !1, b && (this.setRectangleFromSprite(b), b.exists && this.game.physics.p2.addBody(this)) }, c.Physics.P2.Body.prototype = { createBodyCallback: function(a, b, c) { var d = -1; a.id ? d = a.id : a.body && (d = a.body.id), d > -1 && (null === b ? (delete this._bodyCallbacks[d], delete this._bodyCallbackContext[d]) : (this._bodyCallbacks[d] = b, this._bodyCallbackContext[d] = c)) }, createGroupCallback: function(a, b, c) { null === b ? (delete this._groupCallbacks[a.mask], delete this._groupCallbackContext[a.mask]) : (this._groupCallbacks[a.mask] = b, this._groupCallbackContext[a.mask] = c) }, getCollisionMask: function() { var a = 0; this._collideWorldBounds && (a = this.game.physics.p2.boundsCollisionGroup.mask); for (var b = 0; b < this.collidesWith.length; b++) a |= this.collidesWith[b].mask; return a }, updateCollisionMask: function(a) { var b = this.getCollisionMask(); if (void 0 === a) for (var c = this.data.shapes.length - 1; c >= 0; c--) this.data.shapes[c].collisionMask = b; else a.collisionMask = b }, setCollisionGroup: function(a, b) { var c = this.getCollisionMask(); if (void 0 === b) for (var d = this.data.shapes.length - 1; d >= 0; d--) this.data.shapes[d].collisionGroup = a.mask, this.data.shapes[d].collisionMask = c; else b.collisionGroup = a.mask, b.collisionMask = c }, clearCollision: function(a, b, c) { if (void 0 === a && (a = !0), void 0 === b && (b = !0), void 0 === c) for (var d = this.data.shapes.length - 1; d >= 0; d--) a && (this.data.shapes[d].collisionGroup = null), b && (this.data.shapes[d].collisionMask = null); else a && (c.collisionGroup = null), b && (c.collisionMask = null); a && (this.collidesWith.length = 0) }, removeCollisionGroup: function(a, b, c) { void 0 === b && (b = !0); var d; if (Array.isArray(a)) for (var e = 0; e < a.length; e++)(d = this.collidesWith.indexOf(a[e])) > -1 && (this.collidesWith.splice(d, 1), b && (delete this._groupCallbacks[a.mask], delete this._groupCallbackContext[a.mask])); else(d = this.collidesWith.indexOf(a)) > -1 && (this.collidesWith.splice(d, 1), b && (delete this._groupCallbacks[a.mask], delete this._groupCallbackContext[a.mask])); var f = this.getCollisionMask(); if (void 0 === c) for (var e = this.data.shapes.length - 1; e >= 0; e--) this.data.shapes[e].collisionMask = f; else c.collisionMask = f }, collides: function(a, b, c, d) { if (Array.isArray(a)) for (var e = 0; e < a.length; e++) - 1 === this.collidesWith.indexOf(a[e]) && (this.collidesWith.push(a[e]), b && this.createGroupCallback(a[e], b, c)); else -1 === this.collidesWith.indexOf(a) && (this.collidesWith.push(a), b && this.createGroupCallback(a, b, c)); var f = this.getCollisionMask(); if (void 0 === d) for (var e = this.data.shapes.length - 1; e >= 0; e--) this.data.shapes[e].collisionMask = f; else d.collisionMask = f }, adjustCenterOfMass: function() { this.data.adjustCenterOfMass(), this.shapeChanged() }, getVelocityAtPoint: function(a, b) { return this.data.getVelocityAtPoint(a, b) }, applyDamping: function(a) { this.data.applyDamping(a) }, applyImpulse: function(a, b, c) { this.data.applyImpulse(a, [this.world.pxmi(b), this.world.pxmi(c)]) }, applyImpulseLocal: function(a, b, c) { this.data.applyImpulseLocal(a, [this.world.pxmi(b), this.world.pxmi(c)]) }, applyForce: function(a, b, c) { this.data.applyForce(a, [this.world.pxmi(b), this.world.pxmi(c)]) }, setZeroForce: function() { this.data.setZeroForce() }, setZeroRotation: function() { this.data.angularVelocity = 0 }, setZeroVelocity: function() { this.data.velocity[0] = 0, this.data.velocity[1] = 0 }, setZeroDamping: function() { this.data.damping = 0, this.data.angularDamping = 0 }, toLocalFrame: function(a, b) { return this.data.toLocalFrame(a, b) }, toWorldFrame: function(a, b) { return this.data.toWorldFrame(a, b) }, rotateLeft: function(a) { this.data.angularVelocity = this.world.pxm(-a) }, rotateRight: function(a) { this.data.angularVelocity = this.world.pxm(a) }, moveForward: function(a) { var b = this.world.pxmi(-a), c = this.data.angle + Math.PI / 2; this.data.velocity[0] = b * Math.cos(c), this.data.velocity[1] = b * Math.sin(c) }, moveBackward: function(a) { var b = this.world.pxmi(-a), c = this.data.angle + Math.PI / 2; this.data.velocity[0] = -b * Math.cos(c), this.data.velocity[1] = -b * Math.sin(c) }, thrust: function(a) { var b = this.world.pxmi(-a), c = this.data.angle + Math.PI / 2; this.data.force[0] += b * Math.cos(c), this.data.force[1] += b * Math.sin(c) }, thrustLeft: function(a) { var b = this.world.pxmi(-a), c = this.data.angle; this.data.force[0] += b * Math.cos(c), this.data.force[1] += b * Math.sin(c) }, thrustRight: function(a) { var b = this.world.pxmi(-a), c = this.data.angle; this.data.force[0] -= b * Math.cos(c), this.data.force[1] -= b * Math.sin(c) }, reverse: function(a) { var b = this.world.pxmi(-a), c = this.data.angle + Math.PI / 2; this.data.force[0] -= b * Math.cos(c), this.data.force[1] -= b * Math.sin(c) }, moveLeft: function(a) { this.data.velocity[0] = this.world.pxmi(-a) }, moveRight: function(a) { this.data.velocity[0] = this.world.pxmi(a) }, moveUp: function(a) { this.data.velocity[1] = this.world.pxmi(-a) }, moveDown: function(a) { this.data.velocity[1] = this.world.pxmi(a) }, preUpdate: function() { this.dirty = !0, this.removeNextStep && (this.removeFromWorld(), this.removeNextStep = !1) }, postUpdate: function() { this.sprite.x = this.world.mpxi(this.data.position[0]) + this.offset.x, this.sprite.y = this.world.mpxi(this.data.position[1]) + this.offset.y, this.fixedRotation || (this.sprite.rotation = this.data.angle), this.debugBody && this.debugBody.updateSpriteTransform(), this.dirty = !1 }, reset: function(a, b, c, d) { void 0 === c && (c = !1), void 0 === d && (d = !1), this.setZeroForce(), this.setZeroVelocity(), this.setZeroRotation(), c && this.setZeroDamping(), d && (this.mass = 1), this.x = a, this.y = b }, addToWorld: function() { if (this.game.physics.p2._toRemove) for (var a = 0; a < this.game.physics.p2._toRemove.length; a++) this.game.physics.p2._toRemove[a] === this && this.game.physics.p2._toRemove.splice(a, 1); this.data.world !== this.game.physics.p2.world && this.game.physics.p2.addBody(this) }, removeFromWorld: function() { this.data.world === this.game.physics.p2.world && this.game.physics.p2.removeBodyNextStep(this) }, destroy: function() { this.removeFromWorld(), this.clearShapes(), this._bodyCallbacks = {}, this._bodyCallbackContext = {}, this._groupCallbacks = {}, this._groupCallbackContext = {}, this.debugBody && this.debugBody.destroy(!0, !0), this.debugBody = null, this.sprite && (this.sprite.body = null, this.sprite = null) }, clearShapes: function() { for (var a = this.data.shapes.length; a--;) this.data.removeShape(this.data.shapes[a]); this.shapeChanged() }, addShape: function(a, b, c, d) { return void 0 === b && (b = 0), void 0 === c && (c = 0), void 0 === d && (d = 0), this.data.addShape(a, [this.world.pxmi(b), this.world.pxmi(c)], d), this.shapeChanged(), a }, addCircle: function(a, b, c, d) { var e = new p2.Circle({ radius: this.world.pxm(a) }); return this.addShape(e, b, c, d) }, addRectangle: function(a, b, c, d, e) { var f = new p2.Box({ width: this.world.pxm(a), height: this.world.pxm(b) }); return this.addShape(f, c, d, e) }, addPlane: function(a, b, c) { var d = new p2.Plane; return this.addShape(d, a, b, c) }, addParticle: function(a, b, c) { var d = new p2.Particle; return this.addShape(d, a, b, c) }, addLine: function(a, b, c, d) { var e = new p2.Line({ length: this.world.pxm(a) }); return this.addShape(e, b, c, d) }, addCapsule: function(a, b, c, d, e) { var f = new p2.Capsule({ length: this.world.pxm(a), radius: this.world.pxm(b) }); return this.addShape(f, c, d, e) }, addPolygon: function(a, b) { a = a || {}, Array.isArray(b) || (b = Array.prototype.slice.call(arguments, 1)); var c = []; if (1 === b.length && Array.isArray(b[0])) c = b[0].slice(0); else if (Array.isArray(b[0])) c = b.slice(); else if ("number" == typeof b[0]) for (var d = 0, e = b.length; d < e; d += 2) c.push([b[d], b[d + 1]]); var f = c.length - 1; c[f][0] === c[0][0] && c[f][1] === c[0][1] && c.pop(); for (var g = 0; g < c.length; g++) c[g][0] = this.world.pxmi(c[g][0]), c[g][1] = this.world.pxmi(c[g][1]); var h = this.data.fromPolygon(c, a); return this.shapeChanged(), h }, removeShape: function(a) { var b = this.data.removeShape(a); return this.shapeChanged(), b }, setCircle: function(a, b, c, d) { return this.clearShapes(), this.addCircle(a, b, c, d) }, setRectangle: function(a, b, c, d, e) { return void 0 === a && (a = 16), void 0 === b && (b = 16), this.clearShapes(), this.addRectangle(a, b, c, d, e) }, setRectangleFromSprite: function(a) { return void 0 === a && (a = this.sprite), this.clearShapes(), this.addRectangle(a.width, a.height, 0, 0, a.rotation) }, setMaterial: function(a, b) { if (void 0 === b) for (var c = this.data.shapes.length - 1; c >= 0; c--) this.data.shapes[c].material = a; else b.material = a }, shapeChanged: function() { this.debugBody && this.debugBody.draw() }, addPhaserPolygon: function(a, b) { for (var c = this.game.cache.getPhysicsData(a, b), d = [], e = 0; e < c.length; e++) { var f = c[e], g = this.addFixture(f); d[f.filter.group] = d[f.filter.group] || [], d[f.filter.group] = d[f.filter.group].concat(g), f.fixtureKey && (d[f.fixtureKey] = g) } return this.data.aabbNeedsUpdate = !0, this.shapeChanged(), d }, addFixture: function(a) { var b = []; if (a.circle) { var c = new p2.Circle({ radius: this.world.pxm(a.circle.radius) }); c.collisionGroup = a.filter.categoryBits, c.collisionMask = a.filter.maskBits, c.sensor = a.isSensor; var d = p2.vec2.create(); d[0] = this.world.pxmi(a.circle.position[0] - this.sprite.width / 2), d[1] = this.world.pxmi(a.circle.position[1] - this.sprite.height / 2), this.data.addShape(c, d), b.push(c) } else for (var e = a.polygons, f = p2.vec2.create(), g = 0; g < e.length; g++) { for (var h = e[g], i = [], j = 0; j < h.length; j += 2) i.push([this.world.pxmi(h[j]), this.world.pxmi(h[j + 1])]); for (var c = new p2.Convex({ vertices: i }), k = 0; k !== c.vertices.length; k++) { var l = c.vertices[k]; p2.vec2.sub(l, l, c.centerOfMass) } p2.vec2.scale(f, c.centerOfMass, 1), f[0] -= this.world.pxmi(this.sprite.width / 2), f[1] -= this.world.pxmi(this.sprite.height / 2), c.updateTriangles(), c.updateCenterOfMass(), c.updateBoundingRadius(), c.collisionGroup = a.filter.categoryBits, c.collisionMask = a.filter.maskBits, c.sensor = a.isSensor, this.data.addShape(c, f), b.push(c) } return b }, loadPolygon: function(a, b) { if (null === a) var c = b; else var c = this.game.cache.getPhysicsData(a, b); for (var d = p2.vec2.create(), e = 0; e < c.length; e++) { for (var f = [], g = 0; g < c[e].shape.length; g += 2) f.push([this.world.pxmi(c[e].shape[g]), this.world.pxmi(c[e].shape[g + 1])]); for (var h = new p2.Convex({ vertices: f }), i = 0; i !== h.vertices.length; i++) { var j = h.vertices[i]; p2.vec2.sub(j, j, h.centerOfMass) } p2.vec2.scale(d, h.centerOfMass, 1), d[0] -= this.world.pxmi(this.sprite.width / 2), d[1] -= this.world.pxmi(this.sprite.height / 2), h.updateTriangles(), h.updateCenterOfMass(), h.updateBoundingRadius(), this.data.addShape(h, d) } return this.data.aabbNeedsUpdate = !0, this.shapeChanged(), !0 } }, c.Physics.P2.Body.prototype.constructor = c.Physics.P2.Body, c.Physics.P2.Body.DYNAMIC = 1, c.Physics.P2.Body.STATIC = 2, c.Physics.P2.Body.KINEMATIC = 4, Object.defineProperty(c.Physics.P2.Body.prototype, "static", { get: function() { return this.data.type === c.Physics.P2.Body.STATIC }, set: function(a) { a && this.data.type !== c.Physics.P2.Body.STATIC ? (this.data.type = c.Physics.P2.Body.STATIC, this.mass = 0) : a || this.data.type !== c.Physics.P2.Body.STATIC || (this.data.type = c.Physics.P2.Body.DYNAMIC, this.mass = 1) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "dynamic", { get: function() { return this.data.type === c.Physics.P2.Body.DYNAMIC }, set: function(a) { a && this.data.type !== c.Physics.P2.Body.DYNAMIC ? (this.data.type = c.Physics.P2.Body.DYNAMIC, this.mass = 1) : a || this.data.type !== c.Physics.P2.Body.DYNAMIC || (this.data.type = c.Physics.P2.Body.STATIC, this.mass = 0) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "kinematic", { get: function() { return this.data.type === c.Physics.P2.Body.KINEMATIC }, set: function(a) { a && this.data.type !== c.Physics.P2.Body.KINEMATIC ? (this.data.type = c.Physics.P2.Body.KINEMATIC, this.mass = 4) : a || this.data.type !== c.Physics.P2.Body.KINEMATIC || (this.data.type = c.Physics.P2.Body.STATIC, this.mass = 0) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "allowSleep", { get: function() { return this.data.allowSleep }, set: function(a) { a !== this.data.allowSleep && (this.data.allowSleep = a) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "angle", { get: function() { return c.Math.wrapAngle(c.Math.radToDeg(this.data.angle)) }, set: function(a) { this.data.angle = c.Math.degToRad(c.Math.wrapAngle(a)) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "angularDamping", { get: function() { return this.data.angularDamping }, set: function(a) { this.data.angularDamping = a } }), Object.defineProperty(c.Physics.P2.Body.prototype, "angularForce", { get: function() { return this.data.angularForce }, set: function(a) { this.data.angularForce = a } }), Object.defineProperty(c.Physics.P2.Body.prototype, "angularVelocity", { get: function() { return this.data.angularVelocity }, set: function(a) { this.data.angularVelocity = a } }), Object.defineProperty(c.Physics.P2.Body.prototype, "damping", { get: function() { return this.data.damping }, set: function(a) { this.data.damping = a } }), Object.defineProperty(c.Physics.P2.Body.prototype, "fixedRotation", { get: function() { return this.data.fixedRotation }, set: function(a) { a !== this.data.fixedRotation && (this.data.fixedRotation = a) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "inertia", { get: function() { return this.data.inertia }, set: function(a) { this.data.inertia = a } }), Object.defineProperty(c.Physics.P2.Body.prototype, "mass", { get: function() { return this.data.mass }, set: function(a) { a !== this.data.mass && (this.data.mass = a, this.data.updateMassProperties()) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "motionState", { get: function() { return this.data.type }, set: function(a) { a !== this.data.type && (this.data.type = a) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "rotation", { get: function() { return this.data.angle }, set: function(a) { this.data.angle = a } }), Object.defineProperty(c.Physics.P2.Body.prototype, "sleepSpeedLimit", { get: function() { return this.data.sleepSpeedLimit }, set: function(a) { this.data.sleepSpeedLimit = a } }), Object.defineProperty(c.Physics.P2.Body.prototype, "x", { get: function() { return this.world.mpxi(this.data.position[0]) }, set: function(a) { this.data.position[0] = this.world.pxmi(a) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "y", { get: function() { return this.world.mpxi(this.data.position[1]) }, set: function(a) { this.data.position[1] = this.world.pxmi(a) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "id", { get: function() { return this.data.id } }), Object.defineProperty(c.Physics.P2.Body.prototype, "debug", { get: function() { return null !== this.debugBody }, set: function(a) { a && !this.debugBody ? this.debugBody = new c.Physics.P2.BodyDebug(this.game, this.data) : !a && this.debugBody && (this.debugBody.destroy(), this.debugBody = null) } }), Object.defineProperty(c.Physics.P2.Body.prototype, "collideWorldBounds", { get: function() { return this._collideWorldBounds }, set: function(a) { a && !this._collideWorldBounds ? (this._collideWorldBounds = !0, this.updateCollisionMask()) : !a && this._collideWorldBounds && (this._collideWorldBounds = !1, this.updateCollisionMask()) } }), c.Physics.P2.BodyDebug = function(a, b, d) { c.Group.call(this, a); var e = { pixelsPerLengthUnit: a.physics.p2.mpx(1), debugPolygons: !1, lineWidth: 1, alpha: .5 }; this.settings = c.Utils.extend(e, d), this.ppu = this.settings.pixelsPerLengthUnit, this.ppu = -1 * this.ppu, this.body = b, this.canvas = new c.Graphics(a), this.canvas.alpha = this.settings.alpha, this.add(this.canvas), this.draw(), this.updateSpriteTransform() }, c.Physics.P2.BodyDebug.prototype = Object.create(c.Group.prototype), c.Physics.P2.BodyDebug.prototype.constructor = c.Physics.P2.BodyDebug, c.Utils.extend(c.Physics.P2.BodyDebug.prototype, { updateSpriteTransform: function() { this.position.x = this.body.position[0] * this.ppu, this.position.y = this.body.position[1] * this.ppu, this.rotation = this.body.angle }, draw: function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o; if (h = this.body, j = this.canvas, j.clear(), c = parseInt(this.randomPastelHex(), 16), f = 16711680, g = this.lineWidth, h instanceof p2.Body && h.shapes.length) { var p = h.shapes.length; for (d = 0; d !== p;) { if (b = h.shapes[d], i = b.position || 0, a = b.angle || 0, b instanceof p2.Circle) this.drawCircle(j, i[0] * this.ppu, i[1] * this.ppu, a, b.radius * this.ppu, c, g); else if (b instanceof p2.Capsule) this.drawCapsule(j, i[0] * this.ppu, i[1] * this.ppu, a, b.length * this.ppu, b.radius * this.ppu, f, c, g); else if (b instanceof p2.Plane) this.drawPlane(j, i[0] * this.ppu, -i[1] * this.ppu, c, f, 5 * g, 10 * g, 10 * g, 100 * this.ppu, a); else if (b instanceof p2.Line) this.drawLine(j, b.length * this.ppu, f, g); else if (b instanceof p2.Box) this.drawRectangle(j, i[0] * this.ppu, i[1] * this.ppu, a, b.width * this.ppu, b.height * this.ppu, f, c, g); else if (b instanceof p2.Convex) { for (l = [], m = p2.vec2.create(), e = n = 0, o = b.vertices.length; 0 <= o ? n < o : n > o; e = 0 <= o ? ++n : --n) k = b.vertices[e], p2.vec2.rotate(m, k, a), l.push([(m[0] + i[0]) * this.ppu, -(m[1] + i[1]) * this.ppu]); this.drawConvex(j, l, b.triangles, f, c, g, this.settings.debugPolygons, [i[0] * this.ppu, -i[1] * this.ppu]) } d++ } } }, drawRectangle: function(a, b, c, d, e, f, g, h, i) { void 0 === i && (i = 1), void 0 === g && (g = 0), a.lineStyle(i, g, 1), a.beginFill(h), a.drawRect(b - e / 2, c - f / 2, e, f) }, drawCircle: function(a, b, c, d, e, f, g) { void 0 === g && (g = 1), void 0 === f && (f = 16777215), a.lineStyle(g, 0, 1), a.beginFill(f, 1), a.drawCircle(b, c, 2 * -e), a.endFill(), a.moveTo(b, c), a.lineTo(b + e * Math.cos(-d), c + e * Math.sin(-d)) }, drawLine: function(a, b, c, d) { void 0 === d && (d = 1), void 0 === c && (c = 0), a.lineStyle(5 * d, c, 1), a.moveTo(-b / 2, 0), a.lineTo(b / 2, 0) }, drawConvex: function(a, b, c, d, e, f, g, h) { var i, j, k, l, m, n, o, p, q, r, s; if (void 0 === f && (f = 1), void 0 === d && (d = 0), g) { for (i = [16711680, 65280, 255], j = 0; j !== b.length + 1;) l = b[j % b.length], m = b[(j + 1) % b.length], o = l[0], r = l[1], p = m[0], s = m[1], a.lineStyle(f, i[j % i.length], 1), a.moveTo(o, -r), a.lineTo(p, -s), a.drawCircle(o, -r, 2 * f), j++; return a.lineStyle(f, 0, 1), a.drawCircle(h[0], h[1], 2 * f) } for (a.lineStyle(f, d, 1), a.beginFill(e), j = 0; j !== b.length;) k = b[j], n = k[0], q = k[1], 0 === j ? a.moveTo(n, -q) : a.lineTo(n, -q), j++; if (a.endFill(), b.length > 2) return a.moveTo(b[b.length - 1][0], -b[b.length - 1][1]), a.lineTo(b[0][0], -b[0][1]) }, drawPath: function(a, b, c, d, e) { var f, g, h, i, j, k, l, m, n, o, p, q; for (void 0 === e && (e = 1), void 0 === c && (c = 0), a.lineStyle(e, c, 1), "number" == typeof d && a.beginFill(d), g = null, h = null, f = 0; f < b.length;) o = b[f], p = o[0], q = o[1], p === g && q === h || (0 === f ? a.moveTo(p, q) : (i = g, j = h, k = p, l = q, m = b[(f + 1) % b.length][0], n = b[(f + 1) % b.length][1], 0 !== (k - i) * (n - j) - (m - i) * (l - j) && a.lineTo(p, q)), g = p, h = q), f++; "number" == typeof d && a.endFill(), b.length > 2 && "number" == typeof d && (a.moveTo(b[b.length - 1][0], b[b.length - 1][1]), a.lineTo(b[0][0], b[0][1])) }, drawPlane: function(a, b, c, d, e, f, g, h, i, j) { var k, l; void 0 === f && (f = 1), void 0 === d && (d = 16777215), a.lineStyle(f, e, 11), a.beginFill(d), a.moveTo(b, -c), k = b + Math.cos(j) * this.game.width, l = c + Math.sin(j) * this.game.height, a.lineTo(k, -l), a.moveTo(b, -c), k = b + Math.cos(j) * -this.game.width, l = c + Math.sin(j) * -this.game.height, a.lineTo(k, -l) }, drawCapsule: function(a, b, c, d, e, f, g, h, i) { void 0 === i && (i = 1), void 0 === g && (g = 0), a.lineStyle(i, g, 1); var j = Math.cos(d), k = Math.sin(d); a.beginFill(h, 1), a.drawCircle(-e / 2 * j + b, -e / 2 * k + c, 2 * -f), a.drawCircle(e / 2 * j + b, e / 2 * k + c, 2 * -f), a.endFill(), a.lineStyle(i, g, 0), a.beginFill(h, 1), a.moveTo(-e / 2 * j + f * k + b, -e / 2 * k + f * j + c), a.lineTo(e / 2 * j + f * k + b, e / 2 * k + f * j + c), a.lineTo(e / 2 * j - f * k + b, e / 2 * k - f * j + c), a.lineTo(-e / 2 * j - f * k + b, -e / 2 * k - f * j + c), a.endFill(), a.lineStyle(i, g, 1), a.moveTo(-e / 2 * j + f * k + b, -e / 2 * k + f * j + c), a.lineTo(e / 2 * j + f * k + b, e / 2 * k + f * j + c), a.moveTo(-e / 2 * j - f * k + b, -e / 2 * k - f * j + c), a.lineTo(e / 2 * j - f * k + b, e / 2 * k - f * j + c) }, randomPastelHex: function() { var a, b, c, d; return c = [255, 255, 255], d = Math.floor(256 * Math.random()), b = Math.floor(256 * Math.random()), a = Math.floor(256 * Math.random()), d = Math.floor((d + 3 * c[0]) / 4), b = Math.floor((b + 3 * c[1]) / 4), a = Math.floor((a + 3 * c[2]) / 4), this.rgbToHex(d, b, a) }, rgbToHex: function(a, b, c) { return this.componentToHex(a) + this.componentToHex(b) + this.componentToHex(c) }, componentToHex: function(a) { var b; return b = a.toString(16), 2 === b.length ? b : b + "0" } }), c.Physics.P2.Spring = function(a, b, c, d, e, f, g, h, i, j) { this.game = a.game, this.world = a, void 0 === d && (d = 1), void 0 === e && (e = 100), void 0 === f && (f = 1), d = a.pxm(d); var k = { restLength: d, stiffness: e, damping: f }; void 0 !== g && null !== g && (k.worldAnchorA = [a.pxm(g[0]), a.pxm(g[1])]), void 0 !== h && null !== h && (k.worldAnchorB = [a.pxm(h[0]), a.pxm(h[1])]), void 0 !== i && null !== i && (k.localAnchorA = [a.pxm(i[0]), a.pxm(i[1])]), void 0 !== j && null !== j && (k.localAnchorB = [a.pxm(j[0]), a.pxm(j[1])]), this.data = new p2.LinearSpring(b, c, k), this.data.parent = this }, c.Physics.P2.Spring.prototype.constructor = c.Physics.P2.Spring, c.Physics.P2.RotationalSpring = function(a, b, c, d, e, f) { this.game = a.game, this.world = a, void 0 === d && (d = null), void 0 === e && (e = 100), void 0 === f && (f = 1), d && (d = a.pxm(d)); var g = { restAngle: d, stiffness: e, damping: f }; this.data = new p2.RotationalSpring(b, c, g), this.data.parent = this }, c.Physics.P2.Spring.prototype.constructor = c.Physics.P2.Spring, c.Physics.P2.Material = function(a) { this.name = a, p2.Material.call(this) }, c.Physics.P2.Material.prototype = Object.create(p2.Material.prototype), c.Physics.P2.Material.prototype.constructor = c.Physics.P2.Material, c.Physics.P2.ContactMaterial = function(a, b, c) { p2.ContactMaterial.call(this, a, b, c) }, c.Physics.P2.ContactMaterial.prototype = Object.create(p2.ContactMaterial.prototype), c.Physics.P2.ContactMaterial.prototype.constructor = c.Physics.P2.ContactMaterial, c.Physics.P2.CollisionGroup = function(a) { this.mask = a }, c.Physics.P2.DistanceConstraint = function(a, b, c, d, e, f, g) { void 0 === d && (d = 100), void 0 === e && (e = [0, 0]), void 0 === f && (f = [0, 0]), void 0 === g && (g = Number.MAX_VALUE), this.game = a.game, this.world = a, d = a.pxm(d), e = [a.pxmi(e[0]), a.pxmi(e[1])], f = [a.pxmi(f[0]), a.pxmi(f[1])]; var h = { distance: d, localAnchorA: e, localAnchorB: f, maxForce: g }; p2.DistanceConstraint.call(this, b, c, h) }, c.Physics.P2.DistanceConstraint.prototype = Object.create(p2.DistanceConstraint.prototype), c.Physics.P2.DistanceConstraint.prototype.constructor = c.Physics.P2.DistanceConstraint, c.Physics.P2.GearConstraint = function(a, b, c, d, e) { void 0 === d && (d = 0), void 0 === e && (e = 1), this.game = a.game, this.world = a; var f = { angle: d, ratio: e }; p2.GearConstraint.call(this, b, c, f) }, c.Physics.P2.GearConstraint.prototype = Object.create(p2.GearConstraint.prototype), c.Physics.P2.GearConstraint.prototype.constructor = c.Physics.P2.GearConstraint, c.Physics.P2.LockConstraint = function(a, b, c, d, e, f) { void 0 === d && (d = [0, 0]), void 0 === e && (e = 0), void 0 === f && (f = Number.MAX_VALUE), this.game = a.game, this.world = a, d = [a.pxm(d[0]), a.pxm(d[1])]; var g = { localOffsetB: d, localAngleB: e, maxForce: f }; p2.LockConstraint.call(this, b, c, g) }, c.Physics.P2.LockConstraint.prototype = Object.create(p2.LockConstraint.prototype), c.Physics.P2.LockConstraint.prototype.constructor = c.Physics.P2.LockConstraint, c.Physics.P2.PrismaticConstraint = function(a, b, c, d, e, f, g, h) { void 0 === d && (d = !0), void 0 === e && (e = [0, 0]), void 0 === f && (f = [0, 0]), void 0 === g && (g = [0, 0]), void 0 === h && (h = Number.MAX_VALUE), this.game = a.game, this.world = a, e = [a.pxmi(e[0]), a.pxmi(e[1])], f = [a.pxmi(f[0]), a.pxmi(f[1])]; var i = { localAnchorA: e, localAnchorB: f, localAxisA: g, maxForce: h, disableRotationalLock: !d }; p2.PrismaticConstraint.call(this, b, c, i) }, c.Physics.P2.PrismaticConstraint.prototype = Object.create(p2.PrismaticConstraint.prototype), c.Physics.P2.PrismaticConstraint.prototype.constructor = c.Physics.P2.PrismaticConstraint, c.Physics.P2.RevoluteConstraint = function(a, b, c, d, e, f, g) { void 0 === f && (f = Number.MAX_VALUE), void 0 === g && (g = null), this.game = a.game, this.world = a, c = [a.pxmi(c[0]), a.pxmi(c[1])], e = [a.pxmi(e[0]), a.pxmi(e[1])], g && (g = [a.pxmi(g[0]), a.pxmi(g[1])]); var h = { worldPivot: g, localPivotA: c, localPivotB: e, maxForce: f }; p2.RevoluteConstraint.call(this, b, d, h) }, c.Physics.P2.RevoluteConstraint.prototype = Object.create(p2.RevoluteConstraint.prototype), c.Physics.P2.RevoluteConstraint.prototype.constructor = c.Physics.P2.RevoluteConstraint, c.ImageCollection = function(a, b, c, d, e, f, g) { (void 0 === c || c <= 0) && (c = 32), (void 0 === d || d <= 0) && (d = 32), void 0 === e && (e = 0), void 0 === f && (f = 0), this.name = a, this.firstgid = 0 | b, this.imageWidth = 0 | c, this.imageHeight = 0 | d, this.imageMargin = 0 | e, this.imageSpacing = 0 | f, this.properties = g || {}, this.images = [], this.total = 0 }, c.ImageCollection.prototype = { containsImageIndex: function(a) { return a >= this.firstgid && a < this.firstgid + this.total }, addImage: function(a, b) { this.images.push({ gid: a, image: b }), this.total++ } }, c.ImageCollection.prototype.constructor = c.ImageCollection, c.Tile = function(a, b, c, d, e, f) { this.layer = a, this.index = b, this.x = c, this.y = d, this.rotation = 0, this.flipped = !1, this.worldX = c * e, this.worldY = d * f, this.width = e, this.height = f, this.centerX = Math.abs(e / 2), this.centerY = Math.abs(f / 2), this.alpha = 1, this.properties = {}, this.scanned = !1, this.faceTop = !1, this.faceBottom = !1, this.faceLeft = !1, this.faceRight = !1, this.collideLeft = !1, this.collideRight = !1, this.collideUp = !1, this.collideDown = !1, this.collisionCallback = null, this.collisionCallbackContext = this }, c.Tile.prototype = { containsPoint: function(a, b) { return !(a < this.worldX || b < this.worldY || a > this.right || b > this.bottom) }, intersects: function(a, b, c, d) { return !(c <= this.worldX) && (!(d <= this.worldY) && (!(a >= this.worldX + this.width) && !(b >= this.worldY + this.height))) }, setCollisionCallback: function(a, b) { this.collisionCallback = a, this.collisionCallbackContext = b }, destroy: function() { this.collisionCallback = null, this.collisionCallbackContext = null, this.properties = null }, setCollision: function(a, b, c, d) { this.collideLeft = a, this.collideRight = b, this.collideUp = c, this.collideDown = d, this.faceLeft = a, this.faceRight = b, this.faceTop = c, this.faceBottom = d }, resetCollision: function() { this.collideLeft = !1, this.collideRight = !1, this.collideUp = !1, this.collideDown = !1, this.faceTop = !1, this.faceBottom = !1, this.faceLeft = !1, this.faceRight = !1 }, isInteresting: function(a, b) { return a && b ? this.collideLeft || this.collideRight || this.collideUp || this.collideDown || this.faceTop || this.faceBottom || this.faceLeft || this.faceRight || this.collisionCallback : a ? this.collideLeft || this.collideRight || this.collideUp || this.collideDown : !!b && (this.faceTop || this.faceBottom || this.faceLeft || this.faceRight) }, copy: function(a) { this.index = a.index, this.alpha = a.alpha, this.properties = a.properties, this.collideUp = a.collideUp, this.collideDown = a.collideDown, this.collideLeft = a.collideLeft, this.collideRight = a.collideRight, this.collisionCallback = a.collisionCallback, this.collisionCallbackContext = a.collisionCallbackContext } }, c.Tile.prototype.constructor = c.Tile, Object.defineProperty(c.Tile.prototype, "collides", { get: function() { return this.collideLeft || this.collideRight || this.collideUp || this.collideDown } }), Object.defineProperty(c.Tile.prototype, "canCollide", { get: function() { return this.collideLeft || this.collideRight || this.collideUp || this.collideDown || this.collisionCallback } }), Object.defineProperty(c.Tile.prototype, "left", { get: function() { return this.worldX } }), Object.defineProperty(c.Tile.prototype, "right", { get: function() { return this.worldX + this.width } }), Object.defineProperty(c.Tile.prototype, "top", { get: function() { return this.worldY } }), Object.defineProperty(c.Tile.prototype, "bottom", { get: function() { return this.worldY + this.height } }), c.Tilemap = function(a, b, d, e, f, g) { this.game = a, this.key = b; var h = c.TilemapParser.parse(this.game, b, d, e, f, g); null !== h && (this.width = h.width, this.height = h.height, this.tileWidth = h.tileWidth, this.tileHeight = h.tileHeight, this.orientation = h.orientation, this.format = h.format, this.version = h.version, this.properties = h.properties, this.widthInPixels = h.widthInPixels, this.heightInPixels = h.heightInPixels, this.layers = h.layers, this.tilesets = h.tilesets, this.imagecollections = h.imagecollections, this.tiles = h.tiles, this.objects = h.objects, this.collideIndexes = [], this.collision = h.collision, this.images = h.images, this.enableDebug = !1, this.currentLayer = 0, this.debugMap = [], this._results = [], this._tempA = 0, this._tempB = 0) }, c.Tilemap.CSV = 0, c.Tilemap.TILED_JSON = 1, c.Tilemap.NORTH = 0, c.Tilemap.EAST = 1, c.Tilemap.SOUTH = 2, c.Tilemap.WEST = 3, c.Tilemap.prototype = { create: function(a, b, c, d, e, f) { return void 0 === f && (f = this.game.world), this.width = b, this.height = c, this.setTileSize(d, e), this.layers.length = 0, this.createBlankLayer(a, b, c, d, e, f) }, setTileSize: function(a, b) { this.tileWidth = a, this.tileHeight = b, this.widthInPixels = this.width * a, this.heightInPixels = this.height * b }, addTilesetImage: function(a, b, d, e, f, g, h) { if (void 0 === a) return null; void 0 === d && (d = this.tileWidth), void 0 === e && (e = this.tileHeight), void 0 === f && (f = 0), void 0 === g && (g = 0), void 0 === h && (h = 0), 0 === d && (d = 32), 0 === e && (e = 32); var i = null; if (void 0 !== b && null !== b || (b = a), b instanceof c.BitmapData) i = b.canvas; else { if (!this.game.cache.checkImageKey(b)) return console.warn('Phaser.Tilemap.addTilesetImage: Invalid image key given: "' + b + '"'), null; i = this.game.cache.getImage(b) } var j = this.getTilesetIndex(a); if (null === j && this.format === c.Tilemap.TILED_JSON) return console.warn('Phaser.Tilemap.addTilesetImage: No data found in the JSON matching the tileset name: "' + a + '"'), null; if (this.tilesets[j]) return this.tilesets[j].setImage(i), this.tilesets[j]; var k = new c.Tileset(a, h, d, e, f, g, {}); k.setImage(i), this.tilesets.push(k); for (var l = this.tilesets.length - 1, m = f, n = f, o = 0, p = 0, q = 0, r = h; r < h + k.total && (this.tiles[r] = [m, n, l], m += d + g, ++o !== k.total) && (++p !== k.columns || (m = f, n += e + g, p = 0, ++q !== k.rows)); r++); return k }, createFromObjects: function(a, b, d, e, f, g, h, i, j) { if (void 0 === f && (f = !0), void 0 === g && (g = !1), void 0 === h && (h = this.game.world), void 0 === i && (i = c.Sprite), void 0 === j && (j = !0), !this.objects[a]) return void console.warn("Tilemap.createFromObjects: Invalid objectgroup name given: " + a); for (var k = 0; k < this.objects[a].length; k++) { var l = !1, m = this.objects[a][k]; if (void 0 !== m.gid && "number" == typeof b && m.gid === b ? l = !0 : void 0 !== m.id && "number" == typeof b && m.id === b ? l = !0 : void 0 !== m.name && "string" == typeof b && m.name === b && (l = !0), l) { var n = new i(this.game, parseFloat(m.x, 10), parseFloat(m.y, 10), d, e); n.name = m.name, n.visible = m.visible, n.autoCull = g, n.exists = f, m.width && (n.width = m.width), m.height && (n.height = m.height), m.rotation && (n.angle = m.rotation), j && (n.y -= n.height), h.add(n); for (var o in m.properties) h.set(n, o, m.properties[o], !1, !1, 0, !0) } } }, createFromTiles: function(a, b, d, e, f, g) { "number" == typeof a && (a = [a]), void 0 === b || null === b ? b = [] : "number" == typeof b && (b = [b]), e = this.getLayer(e), void 0 === f && (f = this.game.world), void 0 === g && (g = {}), void 0 === g.customClass && (g.customClass = c.Sprite), void 0 === g.adjustY && (g.adjustY = !0); var h = this.layers[e].width, i = this.layers[e].height; if (this.copy(0, 0, h, i, e), this._results.length < 2) return 0; for (var j, k = 0, l = 1, m = this._results.length; l < m; l++) if (-1 !== a.indexOf(this._results[l].index)) { j = new g.customClass(this.game, this._results[l].worldX, this._results[l].worldY, d); for (var n in g) j[n] = g[n]; f.add(j), k++ } if (1 === b.length) for (l = 0; l < a.length; l++) this.replace(a[l], b[0], 0, 0, h, i, e); else if (b.length > 1) for (l = 0; l < a.length; l++) this.replace(a[l], b[l], 0, 0, h, i, e); return k }, createLayer: function(a, b, d, e) { void 0 === b && (b = this.game.width), void 0 === d && (d = this.game.height), void 0 === e && (e = this.game.world); var f = a; if ("string" == typeof a && (f = this.getLayerIndex(a)), null === f || f > this.layers.length) return void console.warn("Tilemap.createLayer: Invalid layer ID given: " + f); void 0 === b || b <= 0 ? b = Math.min(this.game.width, this.layers[f].widthInPixels) : b > this.game.width && (b = this.game.width), void 0 === d || d <= 0 ? d = Math.min(this.game.height, this.layers[f].heightInPixels) : d > this.game.height && (d = this.game.height), this.enableDebug && (console.group("Tilemap.createLayer"), console.log("Name:", this.layers[f].name), console.log("Size:", b, "x", d), console.log("Tileset:", this.tilesets[0].name, "index:", f)); var g = e.add(new c.TilemapLayer(this.game, this, f, b, d)); return this.enableDebug && console.groupEnd(), g }, createBlankLayer: function(a, b, d, e, f, g) { if (void 0 === g && (g = this.game.world), null !== this.getLayerIndex(a)) return void console.warn("Tilemap.createBlankLayer: Layer with matching name already exists: " + a); for (var h, i = { name: a, x: 0, y: 0, width: b, height: d, widthInPixels: b * e, heightInPixels: d * f, alpha: 1, visible: !0, properties: {}, indexes: [], callbacks: [], bodies: [], data: null }, j = [], k = 0; k < d; k++) { h = []; for (var l = 0; l < b; l++) h.push(new c.Tile(i, -1, l, k, e, f)); j.push(h) } i.data = j, this.layers.push(i), this.currentLayer = this.layers.length - 1; var m = i.widthInPixels, n = i.heightInPixels; m > this.game.width && (m = this.game.width), n > this.game.height && (n = this.game.height); var j = new c.TilemapLayer(this.game, this, this.layers.length - 1, m, n); return j.name = a, g.add(j) }, getIndex: function(a, b) { for (var c = 0; c < a.length; c++) if (a[c].name === b) return c; return null }, getLayerIndex: function(a) { return this.getIndex(this.layers, a) }, getTilesetIndex: function(a) { return this.getIndex(this.tilesets, a) }, getImageIndex: function(a) { return this.getIndex(this.images, a) }, setTileIndexCallback: function(a, b, c, d) { if (d = this.getLayer(d), "number" == typeof a) this.layers[d].callbacks[a] = { callback: b, callbackContext: c }; else for (var e = 0, f = a.length; e < f; e++) this.layers[d].callbacks[a[e]] = { callback: b, callbackContext: c } }, setTileLocationCallback: function(a, b, c, d, e, f, g) { if (g = this.getLayer(g), this.copy(a, b, c, d, g), !(this._results.length < 2)) for (var h = 1; h < this._results.length; h++) this._results[h].setCollisionCallback(e, f) }, setCollision: function(a, b, c, d) { if (void 0 === b && (b = !0), void 0 === d && (d = !0), c = this.getLayer(c), "number" == typeof a) return this.setCollisionByIndex(a, b, c, !0); if (Array.isArray(a)) { for (var e = 0; e < a.length; e++) this.setCollisionByIndex(a[e], b, c, !1); d && this.calculateFaces(c) } }, setCollisionBetween: function(a, b, c, d, e) { if (void 0 === c && (c = !0), void 0 === e && (e = !0), d = this.getLayer(d), !(a > b)) { for (var f = a; f <= b; f++) this.setCollisionByIndex(f, c, d, !1); e && this.calculateFaces(d) } }, setCollisionByExclusion: function(a, b, c, d) { void 0 === b && (b = !0), void 0 === d && (d = !0), c = this.getLayer(c); for (var e = 0, f = this.tiles.length; e < f; e++) - 1 === a.indexOf(e) && this.setCollisionByIndex(e, b, c, !1); d && this.calculateFaces(c) }, setCollisionByIndex: function(a, b, c, d) { if (void 0 === b && (b = !0), void 0 === c && (c = this.currentLayer), void 0 === d && (d = !0), b) this.collideIndexes.push(a); else { var e = this.collideIndexes.indexOf(a); e > -1 && this.collideIndexes.splice(e, 1) } for (var f = 0; f < this.layers[c].height; f++) for (var g = 0; g < this.layers[c].width; g++) { var h = this.layers[c].data[f][g]; h && h.index === a && (b ? h.setCollision(!0, !0, !0, !0) : h.resetCollision(), h.faceTop = b, h.faceBottom = b, h.faceLeft = b, h.faceRight = b) } return d && this.calculateFaces(c), c }, getLayer: function(a) { return void 0 === a ? a = this.currentLayer : "string" == typeof a ? a = this.getLayerIndex(a) : a instanceof c.TilemapLayer && (a = a.index), a }, setPreventRecalculate: function(a) { if (!0 === a && !0 !== this.preventingRecalculate && (this.preventingRecalculate = !0, this.needToRecalculate = {}), !1 === a && !0 === this.preventingRecalculate) { this.preventingRecalculate = !1; for (var b in this.needToRecalculate) this.calculateFaces(b); this.needToRecalculate = !1 } }, calculateFaces: function(a) { if (this.preventingRecalculate) return void(this.needToRecalculate[a] = !0); for (var b = null, c = null, d = null, e = null, f = 0, g = this.layers[a].height; f < g; f++) for (var h = 0, i = this.layers[a].width; h < i; h++) { var j = this.layers[a].data[f][h]; j && (b = this.getTileAbove(a, h, f), c = this.getTileBelow(a, h, f), d = this.getTileLeft(a, h, f), e = this.getTileRight(a, h, f), j.collides && (j.faceTop = !0, j.faceBottom = !0, j.faceLeft = !0, j.faceRight = !0), b && b.collides && (j.faceTop = !1), c && c.collides && (j.faceBottom = !1), d && d.collides && (j.faceLeft = !1), e && e.collides && (j.faceRight = !1)) } }, getTileAbove: function(a, b, c) { return c > 0 ? this.layers[a].data[c - 1][b] : null }, getTileBelow: function(a, b, c) { return c < this.layers[a].height - 1 ? this.layers[a].data[c + 1][b] : null }, getTileLeft: function(a, b, c) { return b > 0 ? this.layers[a].data[c][b - 1] : null }, getTileRight: function(a, b, c) { return b < this.layers[a].width - 1 ? this.layers[a].data[c][b + 1] : null }, setLayer: function(a) { a = this.getLayer(a), this.layers[a] && (this.currentLayer = a) }, hasTile: function(a, b, c) { return c = this.getLayer(c), void 0 !== this.layers[c].data[b] && void 0 !== this.layers[c].data[b][a] && this.layers[c].data[b][a].index > -1 }, removeTile: function(a, b, d) { if (d = this.getLayer(d), a >= 0 && a < this.layers[d].width && b >= 0 && b < this.layers[d].height && this.hasTile(a, b, d)) { var e = this.layers[d].data[b][a]; return this.layers[d].data[b][a] = new c.Tile(this.layers[d], -1, a, b, this.tileWidth, this.tileHeight), this.layers[d].dirty = !0, this.calculateFaces(d), e } }, removeTileWorldXY: function(a, b, c, d, e) { return e = this.getLayer(e), a = this.game.math.snapToFloor(a, c) / c, b = this.game.math.snapToFloor(b, d) / d, this.removeTile(a, b, e) }, putTile: function(a, b, d, e) { if (null === a) return this.removeTile(b, d, e); if (e = this.getLayer(e), b >= 0 && b < this.layers[e].width && d >= 0 && d < this.layers[e].height) { var f; return a instanceof c.Tile ? (f = a.index, this.hasTile(b, d, e) ? this.layers[e].data[d][b].copy(a) : this.layers[e].data[d][b] = new c.Tile(e, f, b, d, a.width, a.height)) : (f = a, this.hasTile(b, d, e) ? this.layers[e].data[d][b].index = f : this.layers[e].data[d][b] = new c.Tile(this.layers[e], f, b, d, this.tileWidth, this.tileHeight)), this.collideIndexes.indexOf(f) > -1 ? this.layers[e].data[d][b].setCollision(!0, !0, !0, !0) : this.layers[e].data[d][b].resetCollision(), this.layers[e].dirty = !0, this.calculateFaces(e), this.layers[e].data[d][b] } return null }, putTileWorldXY: function(a, b, c, d, e, f) { return f = this.getLayer(f), b = this.game.math.snapToFloor(b, d) / d, c = this.game.math.snapToFloor(c, e) / e, this.putTile(a, b, c, f) }, searchTileIndex: function(a, b, c, d) { void 0 === b && (b = 0), void 0 === c && (c = !1), d = this.getLayer(d); var e = 0; if (c) { for (var f = this.layers[d].height - 1; f >= 0; f--) for (var g = this.layers[d].width - 1; g >= 0; g--) if (this.layers[d].data[f][g].index === a) { if (e === b) return this.layers[d].data[f][g]; e++ } } else for (var f = 0; f < this.layers[d].height; f++) for (var g = 0; g < this.layers[d].width; g++) if (this.layers[d].data[f][g].index === a) { if (e === b) return this.layers[d].data[f][g]; e++ } return null }, getTile: function(a, b, c, d) { return void 0 === d && (d = !1), c = this.getLayer(c), a >= 0 && a < this.layers[c].width && b >= 0 && b < this.layers[c].height ? -1 === this.layers[c].data[b][a].index ? d ? this.layers[c].data[b][a] : null : this.layers[c].data[b][a] : null }, getTileWorldXY: function(a, b, c, d, e, f) { return void 0 === c && (c = this.tileWidth), void 0 === d && (d = this.tileHeight), e = this.getLayer(e), a = this.game.math.snapToFloor(a, c) / c, b = this.game.math.snapToFloor(b, d) / d, this.getTile(a, b, e, f) }, copy: function(a, b, c, d, e) { if (e = this.getLayer(e), !this.layers[e]) return void(this._results.length = 0); void 0 === a && (a = 0), void 0 === b && (b = 0), void 0 === c && (c = this.layers[e].width), void 0 === d && (d = this.layers[e].height), a < 0 && (a = 0), b < 0 && (b = 0), c > this.layers[e].width && (c = this.layers[e].width), d > this.layers[e].height && (d = this.layers[e].height), this._results.length = 0, this._results.push({ x: a, y: b, width: c, height: d, layer: e }); for (var f = b; f < b + d; f++) for (var g = a; g < a + c; g++) this._results.push(this.layers[e].data[f][g]); return this._results }, paste: function(a, b, c, d) { if (void 0 === a && (a = 0), void 0 === b && (b = 0), d = this.getLayer(d), c && !(c.length < 2)) { for (var e = a - c[1].x, f = b - c[1].y, g = 1; g < c.length; g++) this.layers[d].data[f + c[g].y][e + c[g].x].copy(c[g]); this.layers[d].dirty = !0, this.calculateFaces(d) } }, swap: function(a, b, c, d, e, f, g) { g = this.getLayer(g), this.copy(c, d, e, f, g), this._results.length < 2 || (this._tempA = a, this._tempB = b, this._results.forEach(this.swapHandler, this), this.paste(c, d, this._results, g)) }, swapHandler: function(a) { a.index === this._tempA ? a.index = this._tempB : a.index === this._tempB && (a.index = this._tempA) }, forEach: function(a, b, c, d, e, f, g) { g = this.getLayer(g), this.copy(c, d, e, f, g), this._results.length < 2 || (this._results.forEach(a, b), this.paste(c, d, this._results, g)) }, replace: function(a, b, c, d, e, f, g) { if (g = this.getLayer(g), this.copy(c, d, e, f, g), !(this._results.length < 2)) { for (var h = 1; h < this._results.length; h++) this._results[h].index === a && (this._results[h].index = b); this.paste(c, d, this._results, g) } }, random: function(a, b, c, d, e) { if (e = this.getLayer(e), this.copy(a, b, c, d, e), !(this._results.length < 2)) { for (var f = [], g = 1; g < this._results.length; g++) if (this._results[g].index) { var h = this._results[g].index; - 1 === f.indexOf(h) && f.push(h) } for (var i = 1; i < this._results.length; i++) this._results[i].index = this.game.rnd.pick(f); this.paste(a, b, this._results, e) } }, shuffle: function(a, b, d, e, f) { if (f = this.getLayer(f), this.copy(a, b, d, e, f), !(this._results.length < 2)) { for (var g = [], h = 1; h < this._results.length; h++) this._results[h].index && g.push(this._results[h].index); c.ArrayUtils.shuffle(g); for (var i = 1; i < this._results.length; i++) this._results[i].index = g[i - 1]; this.paste(a, b, this._results, f) } }, fill: function(a, b, c, d, e, f) { if (f = this.getLayer(f), this.copy(b, c, d, e, f), !(this._results.length < 2)) { for (var g = 1; g < this._results.length; g++) this._results[g].index = a; this.paste(b, c, this._results, f) } }, removeAllLayers: function() { this.layers.length = 0, this.currentLayer = 0 }, dump: function() { for (var a = "", b = [""], c = 0; c < this.layers[this.currentLayer].height; c++) { for (var d = 0; d < this.layers[this.currentLayer].width; d++) a += "%c ", this.layers[this.currentLayer].data[c][d] > 1 ? this.debugMap[this.layers[this.currentLayer].data[c][d]] ? b.push("background: " + this.debugMap[this.layers[this.currentLayer].data[c][d]]) : b.push("background: #ffffff") : b.push("background: rgb(0, 0, 0)"); a += "\n" } b[0] = a, console.log.apply(console, b) }, destroy: function() { this.removeAllLayers(), this.data = [], this.game = null } }, c.Tilemap.prototype.constructor = c.Tilemap, Object.defineProperty(c.Tilemap.prototype, "layer", { get: function() { return this.layers[this.currentLayer] }, set: function(a) { a !== this.currentLayer && this.setLayer(a) } }), c.TilemapLayer = function(a, b, d, e, f) { e |= 0, f |= 0, c.Sprite.call(this, a, 0, 0), this.map = b, this.index = d, this.layer = b.layers[d], this.canvas = PIXI.CanvasPool.create(this, e, f), this.context = this.canvas.getContext("2d"), this.setTexture(new PIXI.Texture(new PIXI.BaseTexture(this.canvas))), this.type = c.TILEMAPLAYER, this.physicsType = c.TILEMAPLAYER, this.renderSettings = { enableScrollDelta: !1, overdrawRatio: .2, copyCanvas: null }, this.debug = !1, this.exists = !0, this.debugSettings = { missingImageFill: "rgb(255,255,255)", debuggedTileOverfill: "rgba(0,255,0,0.4)", forceFullRedraw: !0, debugAlpha: .5, facingEdgeStroke: "rgba(0,255,0,1)", collidingTileOverfill: "rgba(0,255,0,0.2)" }, this.scrollFactorX = 1, this.scrollFactorY = 1, this.dirty = !0, this.rayStepRate = 4, this._wrap = !1, this._mc = { scrollX: 0, scrollY: 0, renderWidth: 0, renderHeight: 0, tileWidth: b.tileWidth, tileHeight: b.tileHeight, cw: b.tileWidth, ch: b.tileHeight, tilesets: [] }, this._scrollX = 0, this._scrollY = 0, this._results = [], a.device.canvasBitBltShift || (this.renderSettings.copyCanvas = c.TilemapLayer.ensureSharedCopyCanvas()), this.fixedToCamera = !0 }, c.TilemapLayer.prototype = Object.create(c.Sprite.prototype), c.TilemapLayer.prototype.constructor = c.TilemapLayer, c.TilemapLayer.prototype.preUpdateCore = c.Component.Core.preUpdate, c.TilemapLayer.sharedCopyCanvas = null, c.TilemapLayer.ensureSharedCopyCanvas = function() { return this.sharedCopyCanvas || (this.sharedCopyCanvas = PIXI.CanvasPool.create(this, 2, 2)), this.sharedCopyCanvas }, c.TilemapLayer.prototype.preUpdate = function() { return this.preUpdateCore() }, c.TilemapLayer.prototype.postUpdate = function() { this.fixedToCamera && (this.position.x = (this.game.camera.view.x + this.cameraOffset.x) / this.game.camera.scale.x, this.position.y = (this.game.camera.view.y + this.cameraOffset.y) / this.game.camera.scale.y), this._scrollX = this.game.camera.view.x * this.scrollFactorX / this.scale.x, this._scrollY = this.game.camera.view.y * this.scrollFactorY / this.scale.y }, c.TilemapLayer.prototype._renderCanvas = function(a) { this.fixedToCamera && (this.position.x = (this.game.camera.view.x + this.cameraOffset.x) / this.game.camera.scale.x, this.position.y = (this.game.camera.view.y + this.cameraOffset.y) / this.game.camera.scale.y), this._scrollX = this.game.camera.view.x * this.scrollFactorX / this.scale.x, this._scrollY = this.game.camera.view.y * this.scrollFactorY / this.scale.y, this.render(), PIXI.Sprite.prototype._renderCanvas.call(this, a) }, c.TilemapLayer.prototype._renderWebGL = function(a) { this.fixedToCamera && (this.position.x = (this.game.camera.view.x + this.cameraOffset.x) / this.game.camera.scale.x, this.position.y = (this.game.camera.view.y + this.cameraOffset.y) / this.game.camera.scale.y), this._scrollX = this.game.camera.view.x * this.scrollFactorX / this.scale.x, this._scrollY = this.game.camera.view.y * this.scrollFactorY / this.scale.y, this.render(), PIXI.Sprite.prototype._renderWebGL.call(this, a) }, c.TilemapLayer.prototype.destroy = function() { PIXI.CanvasPool.remove(this), c.Component.Destroy.prototype.destroy.call(this) }, c.TilemapLayer.prototype.resize = function(a, b) { this.canvas.width = a, this.canvas.height = b, this.texture.frame.resize(a, b), this.texture.width = a, this.texture.height = b, this.texture.crop.width = a, this.texture.crop.height = b, this.texture.baseTexture.width = a, this.texture.baseTexture.height = b, this.texture.baseTexture.dirty(), this.texture.requiresUpdate = !0, this.texture._updateUvs(), this.dirty = !0 }, c.TilemapLayer.prototype.resizeWorld = function() { this.game.world.setBounds(0, 0, this.layer.widthInPixels * this.scale.x, this.layer.heightInPixels * this.scale.y) }, c.TilemapLayer.prototype._fixX = function(a) { return 1 === this.scrollFactorX || 0 === this.scrollFactorX && 0 === this.position.x ? a : 0 === this.scrollFactorX && 0 !== this.position.x ? a - this.position.x : this._scrollX + (a - this._scrollX / this.scrollFactorX) }, c.TilemapLayer.prototype._unfixX = function(a) { return 1 === this.scrollFactorX ? a : this._scrollX / this.scrollFactorX + (a - this._scrollX) }, c.TilemapLayer.prototype._fixY = function(a) { return 1 === this.scrollFactorY || 0 === this.scrollFactorY && 0 === this.position.y ? a : 0 === this.scrollFactorY && 0 !== this.position.y ? a - this.position.y : this._scrollY + (a - this._scrollY / this.scrollFactorY) }, c.TilemapLayer.prototype._unfixY = function(a) { return 1 === this.scrollFactorY ? a : this._scrollY / this.scrollFactorY + (a - this._scrollY) }, c.TilemapLayer.prototype.getTileX = function(a) { return Math.floor(this._fixX(a) / this._mc.tileWidth) }, c.TilemapLayer.prototype.getTileY = function(a) { return Math.floor(this._fixY(a) / this._mc.tileHeight) }, c.TilemapLayer.prototype.getTileXY = function(a, b, c) { return c.x = this.getTileX(a), c.y = this.getTileY(b), c }, c.TilemapLayer.prototype.getRayCastTiles = function(a, b, c, d) { b || (b = this.rayStepRate), void 0 === c && (c = !1), void 0 === d && (d = !1); var e = this.getTiles(a.x, a.y, a.width, a.height, c, d); if (0 === e.length) return []; for (var f = a.coordinatesOnLine(b), g = [], h = 0; h < e.length; h++) for (var i = 0; i < f.length; i++) { var j = e[h], k = f[i]; if (j.containsPoint(k[0], k[1])) { g.push(j); break } } return g }, c.TilemapLayer.prototype.getTiles = function(a, b, c, d, e, f) { void 0 === e && (e = !1), void 0 === f && (f = !1); var g = !(e || f); a = this._fixX(a), b = this._fixY(b); for (var h = Math.floor(a / (this._mc.cw * this.scale.x)), i = Math.floor(b / (this._mc.ch * this.scale.y)), j = Math.ceil((a + c) / (this._mc.cw * this.scale.x)) - h, k = Math.ceil((b + d) / (this._mc.ch * this.scale.y)) - i; this._results.length;) this._results.pop(); for (var l = i; l < i + k; l++) for (var m = h; m < h + j; m++) { var n = this.layer.data[l]; n && n[m] && (g || n[m].isInteresting(e, f)) && this._results.push(n[m]) } return this._results.slice() }, c.TilemapLayer.prototype.resolveTileset = function(a) { var b = this._mc.tilesets; if (a < 2e3) for (; b.length < a;) b.push(void 0); var c = this.map.tiles[a] && this.map.tiles[a][2]; if (null !== c) { var d = this.map.tilesets[c]; if (d && d.containsTileIndex(a)) return b[a] = d } return b[a] = null }, c.TilemapLayer.prototype.resetTilesetCache = function() { for (var a = this._mc.tilesets; a.length;) a.pop() }, c.TilemapLayer.prototype.setScale = function(a, b) { a = a || 1, b = b || a; for (var c = 0; c < this.layer.data.length; c++) for (var d = this.layer.data[c], e = 0; e < d.length; e++) { var f = d[e]; f.width = this.map.tileWidth * a, f.height = this.map.tileHeight * b, f.worldX = f.x * f.width, f.worldY = f.y * f.height } this.scale.setTo(a, b) }, c.TilemapLayer.prototype.shiftCanvas = function(a, b, c) { var d = a.canvas, e = d.width - Math.abs(b), f = d.height - Math.abs(c), g = 0, h = 0, i = b, j = c; b < 0 && (g = -b, i = 0), c < 0 && (h = -c, j = 0); var k = this.renderSettings.copyCanvas; if (k) { (k.width < e || k.height < f) && (k.width = e, k.height = f); var l = k.getContext("2d"); l.clearRect(0, 0, e, f), l.drawImage(d, g, h, e, f, 0, 0, e, f), a.clearRect(i, j, e, f), a.drawImage(k, 0, 0, e, f, i, j, e, f) } else a.save(), a.globalCompositeOperation = "copy", a.drawImage(d, g, h, e, f, i, j, e, f), a.restore() }, c.TilemapLayer.prototype.renderRegion = function(a, b, c, d, e, f) { var g = this.context, h = this.layer.width, i = this.layer.height, j = this._mc.tileWidth, k = this._mc.tileHeight, l = this._mc.tilesets, m = NaN; this._wrap || (c <= e && (c = Math.max(0, c), e = Math.min(h - 1, e)), d <= f && (d = Math.max(0, d), f = Math.min(i - 1, f))); var n, o, p, q, r, s, t = c * j - a, u = d * k - b, v = (c + (1 << 20) * h) % h, w = (d + (1 << 20) * i) % i; for (q = w, s = f - d, o = u; s >= 0; q++, s--, o += k) { q >= i && (q -= i); var x = this.layer.data[q]; for (p = v, r = e - c, n = t; r >= 0; p++, r--, n += j) { p >= h && (p -= h); var y = x[p]; if (y && !(y.index < 0)) { var z = y.index, A = l[z]; void 0 === A && (A = this.resolveTileset(z)), y.alpha === m || this.debug || (g.globalAlpha = y.alpha, m = y.alpha), A ? y.rotation || y.flipped ? (g.save(), g.translate(n + y.centerX, o + y.centerY), g.rotate(y.rotation), y.flipped && g.scale(-1, 1), A.draw(g, -y.centerX, -y.centerY, z), g.restore()) : A.draw(g, n, o, z) : this.debugSettings.missingImageFill && (g.fillStyle = this.debugSettings.missingImageFill, g.fillRect(n, o, j, k)), y.debug && this.debugSettings.debuggedTileOverfill && (g.fillStyle = this.debugSettings.debuggedTileOverfill, g.fillRect(n, o, j, k)) } } } }, c.TilemapLayer.prototype.renderDeltaScroll = function(a, b) { var c = this._mc.scrollX, d = this._mc.scrollY, e = this.canvas.width, f = this.canvas.height, g = this._mc.tileWidth, h = this._mc.tileHeight, i = 0, j = -g, k = 0, l = -h; if (a < 0 ? (i = e + a, j = e - 1) : a > 0 && (j = a), b < 0 ? (k = f + b, l = f - 1) : b > 0 && (l = b), this.shiftCanvas(this.context, a, b), i = Math.floor((i + c) / g), j = Math.floor((j + c) / g), k = Math.floor((k + d) / h), l = Math.floor((l + d) / h), i <= j) { this.context.clearRect(i * g - c, 0, (j - i + 1) * g, f); var m = Math.floor((0 + d) / h), n = Math.floor((f - 1 + d) / h); this.renderRegion(c, d, i, m, j, n) } if (k <= l) { this.context.clearRect(0, k * h - d, e, (l - k + 1) * h); var o = Math.floor((0 + c) / g), p = Math.floor((e - 1 + c) / g); this.renderRegion(c, d, o, k, p, l) } }, c.TilemapLayer.prototype.renderFull = function() { var a = this._mc.scrollX, b = this._mc.scrollY, c = this.canvas.width, d = this.canvas.height, e = this._mc.tileWidth, f = this._mc.tileHeight, g = Math.floor(a / e), h = Math.floor((c - 1 + a) / e), i = Math.floor(b / f), j = Math.floor((d - 1 + b) / f); this.context.clearRect(0, 0, c, d), this.renderRegion(a, b, g, i, h, j) }, c.TilemapLayer.prototype.render = function() { var a = !1; if (this.visible) { (this.dirty || this.layer.dirty) && (this.layer.dirty = !1, a = !0); var b = this.canvas.width, c = this.canvas.height, d = 0 | this._scrollX, e = 0 | this._scrollY, f = this._mc, g = f.scrollX - d, h = f.scrollY - e; if (a || 0 !== g || 0 !== h || f.renderWidth !== b || f.renderHeight !== c) return this.context.save(), f.scrollX = d, f.scrollY = e, f.renderWidth === b && f.renderHeight === c || (f.renderWidth = b, f.renderHeight = c), this.debug && (this.context.globalAlpha = this.debugSettings.debugAlpha, this.debugSettings.forceFullRedraw && (a = !0)), !a && this.renderSettings.enableScrollDelta && Math.abs(g) + Math.abs(h) < Math.min(b, c) ? this.renderDeltaScroll(g, h) : this.renderFull(), this.debug && (this.context.globalAlpha = 1, this.renderDebug()), this.texture.baseTexture.dirty(), this.dirty = !1, this.context.restore(), !0 } }, c.TilemapLayer.prototype.renderDebug = function() { var a, b, c, d, e, f, g = this._mc.scrollX, h = this._mc.scrollY, i = this.context, j = this.canvas.width, k = this.canvas.height, l = this.layer.width, m = this.layer.height, n = this._mc.tileWidth, o = this._mc.tileHeight, p = Math.floor(g / n), q = Math.floor((j - 1 + g) / n), r = Math.floor(h / o), s = Math.floor((k - 1 + h) / o), t = p * n - g, u = r * o - h, v = (p + (1 << 20) * l) % l, w = (r + (1 << 20) * m) % m; for (i.strokeStyle = this.debugSettings.facingEdgeStroke, d = w, f = s - r, b = u; f >= 0; d++, f--, b += o) { d >= m && (d -= m); var x = this.layer.data[d]; for (c = v, e = q - p, a = t; e >= 0; c++, e--, a += n) { c >= l && (c -= l); var y = x[c];!y || y.index < 0 || !y.collides || (this.debugSettings.collidingTileOverfill && (i.fillStyle = this.debugSettings.collidingTileOverfill, i.fillRect(a, b, this._mc.cw, this._mc.ch)), this.debugSettings.facingEdgeStroke && (i.beginPath(), y.faceTop && (i.moveTo(a, b), i.lineTo(a + this._mc.cw, b)), y.faceBottom && (i.moveTo(a, b + this._mc.ch), i.lineTo(a + this._mc.cw, b + this._mc.ch)), y.faceLeft && (i.moveTo(a, b), i.lineTo(a, b + this._mc.ch)), y.faceRight && (i.moveTo(a + this._mc.cw, b), i.lineTo(a + this._mc.cw, b + this._mc.ch)), i.closePath(), i.stroke())) } } }, Object.defineProperty(c.TilemapLayer.prototype, "wrap", { get: function() { return this._wrap }, set: function(a) { this._wrap = a, this.dirty = !0 } }), Object.defineProperty(c.TilemapLayer.prototype, "scrollX", { get: function() { return this._scrollX }, set: function(a) { this._scrollX = a } }), Object.defineProperty(c.TilemapLayer.prototype, "scrollY", { get: function() { return this._scrollY }, set: function(a) { this._scrollY = a } }), Object.defineProperty(c.TilemapLayer.prototype, "collisionWidth", { get: function() { return this._mc.cw }, set: function(a) { this._mc.cw = 0 | a, this.dirty = !0 } }), Object.defineProperty(c.TilemapLayer.prototype, "collisionHeight", { get: function() { return this._mc.ch }, set: function(a) { this._mc.ch = 0 | a, this.dirty = !0 } }), c.TilemapParser = { INSERT_NULL: !1, parse: function(a, b, d, e, f, g) { if (void 0 === d && (d = 32), void 0 === e && (e = 32), void 0 === f && (f = 10), void 0 === g && (g = 10), void 0 === b) return this.getEmptyData(); if (null === b) return this.getEmptyData(d, e, f, g); var h = a.cache.getTilemapData(b); if (h) { if (h.format === c.Tilemap.CSV) return this.parseCSV(b, h.data, d, e); if (!h.format || h.format === c.Tilemap.TILED_JSON) return this.parseTiledJSON(h.data) } else console.warn("Phaser.TilemapParser.parse - No map data found for key " + b) }, parseCSV: function(a, b, d, e) { var f = this.getEmptyData(); b = b.trim(); for (var g = [], h = b.split("\n"), i = h.length, j = 0, k = 0; k < h.length; k++) { g[k] = []; for (var l = h[k].split(","), m = 0; m < l.length; m++) g[k][m] = new c.Tile(f.layers[0], parseInt(l[m], 10), m, k, d, e); 0 === j && (j = l.length) } return f.format = c.Tilemap.CSV, f.name = a, f.width = j, f.height = i, f.tileWidth = d, f.tileHeight = e, f.widthInPixels = j * d, f.heightInPixels = i * e, f.layers[0].width = j, f.layers[0].height = i, f.layers[0].widthInPixels = f.widthInPixels, f.layers[0].heightInPixels = f.heightInPixels, f.layers[0].data = g, f }, getEmptyData: function(a, b, c, d) { return { width: void 0 !== c && null !== c ? c : 0, height: void 0 !== d && null !== d ? d : 0, tileWidth: void 0 !== a && null !== a ? a : 0, tileHeight: void 0 !== b && null !== b ? b : 0, orientation: "orthogonal", version: "1", properties: {}, widthInPixels: 0, heightInPixels: 0, layers: [{ name: "layer", x: 0, y: 0, width: 0, height: 0, widthInPixels: 0, heightInPixels: 0, alpha: 1, visible: !0, properties: {}, indexes: [], callbacks: [], bodies: [], data: [] }], images: [], objects: {}, collision: {}, tilesets: [], tiles: [] } }, parseTiledJSON: function(a) { function b(a, b) { var c = {}; for (var d in b) { var e = b[d]; void 0 !== a[e] && (c[e] = a[e]) } return c } if ("orthogonal" !== a.orientation) return console.warn("TilemapParser.parseTiledJSON - Only orthogonal map types are supported in this version of Phaser"), null; for (var d = { width: a.width, height: a.height, tileWidth: a.tilewidth, tileHeight: a.tileheight, orientation: a.orientation, format: c.Tilemap.TILED_JSON, version: a.version, properties: a.properties, widthInPixels: a.width * a.tilewidth, heightInPixels: a.height * a.tileheight }, e = [], f = 0; f < a.layers.length; f++) if ("tilelayer" === a.layers[f].type) { var g = a.layers[f]; if (!g.compression && g.encoding && "base64" === g.encoding) { for (var h = window.atob(g.data), i = h.length, j = new Array(i), k = 0; k < i; k += 4) j[k / 4] = (h.charCodeAt(k) | h.charCodeAt(k + 1) << 8 | h.charCodeAt(k + 2) << 16 | h.charCodeAt(k + 3) << 24) >>> 0; g.data = j, delete g.encoding } else if (g.compression) { console.warn("TilemapParser.parseTiledJSON - Layer compression is unsupported, skipping layer '" + g.name + "'"); continue } var l = { name: g.name, x: g.x, y: g.y, width: g.width, height: g.height, widthInPixels: g.width * a.tilewidth, heightInPixels: g.height * a.tileheight, alpha: g.opacity, visible: g.visible, properties: {}, indexes: [], callbacks: [], bodies: [] }; g.properties && (l.properties = g.properties); for (var m, n, o, p, q = 0, r = [], s = [], t = 0, i = g.data.length; t < i; t++) { if (m = 0, n = !1, p = g.data[t], o = 0, p > 536870912) switch (p > 2147483648 && (p -= 2147483648, o += 4), p > 1073741824 && (p -= 1073741824, o += 2), p > 536870912 && (p -= 536870912, o += 1), o) { case 5: m = Math.PI / 2; break; case 6: m = Math.PI; break; case 3: m = 3 * Math.PI / 2; break; case 4: m = 0, n = !0; break; case 7: m = Math.PI / 2, n = !0; break; case 2: m = Math.PI, n = !0; break; case 1: m = 3 * Math.PI / 2, n = !0 } if (p > 0) { var u = new c.Tile(l, p, q, s.length, a.tilewidth, a.tileheight); u.rotation = m, u.flipped = n, 0 !== o && (u.flippedVal = o), r.push(u) } else c.TilemapParser.INSERT_NULL ? r.push(null) : r.push(new c.Tile(l, -1, q, s.length, a.tilewidth, a.tileheight)); q++, q === g.width && (s.push(r), q = 0, r = []) } l.data = s, e.push(l) } d.layers = e; for (var v = [], f = 0; f < a.layers.length; f++) if ("imagelayer" === a.layers[f].type) { var w = a.layers[f], x = { name: w.name, image: w.image, x: w.x, y: w.y, alpha: w.opacity, visible: w.visible, properties: {} }; w.properties && (x.properties = w.properties), v.push(x) } d.images = v; for (var y = [], z = [], A = null, f = 0; f < a.tilesets.length; f++) { var B = a.tilesets[f]; if (B.image) { var C = new c.Tileset(B.name, B.firstgid, B.tilewidth, B.tileheight, B.margin, B.spacing, B.properties); B.tileproperties && (C.tileProperties = B.tileproperties), C.updateTileData(B.imagewidth, B.imageheight), y.push(C) } else { var D = new c.ImageCollection(B.name, B.firstgid, B.tilewidth, B.tileheight, B.margin, B.spacing, B.properties); for (var E in B.tiles) { var x = B.tiles[E].image, p = B.firstgid + parseInt(E, 10); D.addImage(p, x) } z.push(D) } A && (A.lastgid = B.firstgid - 1), A = B } d.tilesets = y, d.imagecollections = z; for (var F = {}, G = {}, f = 0; f < a.layers.length; f++) if ("objectgroup" === a.layers[f].type) { var H = a.layers[f]; F[H.name] = [], G[H.name] = []; for (var I = 0, i = H.objects.length; I < i; I++) if (H.objects[I].gid) { var J = { gid: H.objects[I].gid, name: H.objects[I].name, type: H.objects[I].hasOwnProperty("type") ? H.objects[I].type : "", x: H.objects[I].x, y: H.objects[I].y, visible: H.objects[I].visible, properties: H.objects[I].properties }; H.objects[I].rotation && (J.rotation = H.objects[I].rotation), F[H.name].push(J) } else if (H.objects[I].polyline) { var J = { name: H.objects[I].name, type: H.objects[I].type, x: H.objects[I].x, y: H.objects[I].y, width: H.objects[I].width, height: H.objects[I].height, visible: H.objects[I].visible, properties: H.objects[I].properties }; H.objects[I].rotation && (J.rotation = H.objects[I].rotation), J.polyline = []; for (var K = 0; K < H.objects[I].polyline.length; K++) J.polyline.push([H.objects[I].polyline[K].x, H.objects[I].polyline[K].y]); G[H.name].push(J), F[H.name].push(J) } else if (H.objects[I].polygon) { var J = b(H.objects[I], ["name", "type", "x", "y", "visible", "rotation", "properties"]); J.polygon = []; for (var K = 0; K < H.objects[I].polygon.length; K++) J.polygon.push([H.objects[I].polygon[K].x, H.objects[I].polygon[K].y]); F[H.name].push(J) } else if (H.objects[I].ellipse) { var J = b(H.objects[I], ["name", "type", "ellipse", "x", "y", "width", "height", "visible", "rotation", "properties"]); F[H.name].push(J) } else { var J = b(H.objects[I], ["name", "type", "x", "y", "width", "height", "visible", "rotation", "properties"]); J.rectangle = !0, F[H.name].push(J) } } d.objects = F, d.collision = G, d.tiles = []; for (var f = 0; f < d.tilesets.length; f++) for (var B = d.tilesets[f], q = B.tileMargin, L = B.tileMargin, M = 0, N = 0, O = 0, t = B.firstgid; t < B.firstgid + B.total && (d.tiles[t] = [q, L, f], q += B.tileWidth + B.tileSpacing, ++M !== B.total) && (++N !== B.columns || (q = B.tileMargin, L += B.tileHeight + B.tileSpacing, N = 0, ++O !== B.rows)); t++); for (var l, u, P, B, f = 0; f < d.layers.length; f++) { l = d.layers[f], B = null; for (var k = 0; k < l.data.length; k++) { r = l.data[k]; for (var Q = 0; Q < r.length; Q++) null === (u = r[Q]) || u.index < 0 || (P = d.tiles[u.index][2], B = d.tilesets[P], B.tileProperties && B.tileProperties[u.index - B.firstgid] && (u.properties = c.Utils.mixin(B.tileProperties[u.index - B.firstgid], u.properties))) } } return d } }, c.Tileset = function(a, b, c, d, e, f, g) { (void 0 === c || c <= 0) && (c = 32), (void 0 === d || d <= 0) && (d = 32), void 0 === e && (e = 0), void 0 === f && (f = 0), this.name = a, this.firstgid = 0 | b, this.tileWidth = 0 | c, this.tileHeight = 0 | d, this.tileMargin = 0 | e, this.tileSpacing = 0 | f, this.properties = g || {}, this.image = null, this.rows = 0, this.columns = 0, this.total = 0, this.drawCoords = [] }, c.Tileset.prototype = { draw: function(a, b, c, d) { var e = d - this.firstgid << 1; e >= 0 && e + 1 < this.drawCoords.length && a.drawImage(this.image, this.drawCoords[e], this.drawCoords[e + 1], this.tileWidth, this.tileHeight, b, c, this.tileWidth, this.tileHeight) }, containsTileIndex: function(a) { return a >= this.firstgid && a < this.firstgid + this.total }, setImage: function(a) { this.image = a, this.updateTileData(a.width, a.height) }, setSpacing: function(a, b) { this.tileMargin = 0 | a, this.tileSpacing = 0 | b, this.image && this.updateTileData(this.image.width, this.image.height) }, updateTileData: function(a, b) { var c = (b - 2 * this.tileMargin + this.tileSpacing) / (this.tileHeight + this.tileSpacing), d = (a - 2 * this.tileMargin + this.tileSpacing) / (this.tileWidth + this.tileSpacing); c % 1 == 0 && d % 1 == 0 || console.warn("Phaser.Tileset - " + this.name + " image tile area is not an even multiple of tile size"), c = Math.floor(c), d = Math.floor(d), (this.rows && this.rows !== c || this.columns && this.columns !== d) && console.warn("Phaser.Tileset - actual and expected number of tile rows and columns differ"), this.rows = c, this.columns = d, this.total = c * d, this.drawCoords.length = 0; for (var e = this.tileMargin, f = this.tileMargin, g = 0; g < this.rows; g++) { for (var h = 0; h < this.columns; h++) this.drawCoords.push(e), this.drawCoords.push(f), e += this.tileWidth + this.tileSpacing; e = this.tileMargin, f += this.tileHeight + this.tileSpacing } } }, c.Tileset.prototype.constructor = c.Tileset, c.Particle = function(a, b, d, e, f) { c.Sprite.call(this, a, b, d, e, f), this.autoScale = !1, this.scaleData = null, this._s = 0, this.autoAlpha = !1, this.alphaData = null, this._a = 0 }, c.Particle.prototype = Object.create(c.Sprite.prototype), c.Particle.prototype.constructor = c.Particle, c.Particle.prototype.update = function() { this.autoScale && (this._s--, this._s ? this.scale.set(this.scaleData[this._s].x, this.scaleData[this._s].y) : this.autoScale = !1), this.autoAlpha && (this._a--, this._a ? this.alpha = this.alphaData[this._a].v : this.autoAlpha = !1) }, c.Particle.prototype.onEmit = function() {}, c.Particle.prototype.setAlphaData = function(a) { this.alphaData = a, this._a = a.length - 1, this.alpha = this.alphaData[this._a].v, this.autoAlpha = !0 }, c.Particle.prototype.setScaleData = function(a) { this.scaleData = a, this._s = a.length - 1, this.scale.set(this.scaleData[this._s].x, this.scaleData[this._s].y), this.autoScale = !0 }, c.Particle.prototype.reset = function(a, b, d) { return c.Component.Reset.prototype.reset.call(this, a, b, d), this.alpha = 1, this.scale.set(1), this.autoScale = !1, this.autoAlpha = !1, this }, c.Particles = function(a) { this.game = a, this.emitters = {}, this.ID = 0 }, c.Particles.prototype = { add: function(a) { return this.emitters[a.name] = a, a }, remove: function(a) { delete this.emitters[a.name] }, update: function() { for (var a in this.emitters) this.emitters[a].exists && this.emitters[a].update() } }, c.Particles.prototype.constructor = c.Particles, c.Particles.Arcade = {}, c.Particles.Arcade.Emitter = function(a, b, d, e) { this.maxParticles = e || 50, c.Group.call(this, a), this.name = "emitter" + this.game.particles.ID++, this.type = c.EMITTER, this.physicsType = c.GROUP, this.area = new c.Rectangle(b, d, 1, 1), this.minParticleSpeed = new c.Point(-100, -100), this.maxParticleSpeed = new c.Point(100, 100), this.minParticleScale = 1, this.maxParticleScale = 1, this.scaleData = null, this.minRotation = -360, this.maxRotation = 360, this.minParticleAlpha = 1, this.maxParticleAlpha = 1, this.alphaData = null, this.gravity = 100, this.particleClass = c.Particle, this.particleDrag = new c.Point, this.angularDrag = 0, this.frequency = 100, this.lifespan = 2e3, this.bounce = new c.Point, this.on = !1, this.particleAnchor = new c.Point(.5, .5), this.blendMode = c.blendModes.NORMAL, this.emitX = b, this.emitY = d, this.autoScale = !1, this.autoAlpha = !1, this.particleBringToTop = !1, this.particleSendToBack = !1, this._minParticleScale = new c.Point(1, 1), this._maxParticleScale = new c.Point(1, 1), this._quantity = 0, this._timer = 0, this._counter = 0, this._flowQuantity = 0, this._flowTotal = 0, this._explode = !0, this._frames = null }, c.Particles.Arcade.Emitter.prototype = Object.create(c.Group.prototype), c.Particles.Arcade.Emitter.prototype.constructor = c.Particles.Arcade.Emitter, c.Particles.Arcade.Emitter.prototype.update = function() { if (this.on && this.game.time.time >= this._timer) if (this._timer = this.game.time.time + this.frequency * this.game.time.slowMotion, 0 !== this._flowTotal) if (this._flowQuantity > 0) { for (var a = 0; a < this._flowQuantity; a++) if (this.emitParticle() && (this._counter++, -1 !== this._flowTotal && this._counter >= this._flowTotal)) { this.on = !1; break } } else this.emitParticle() && (this._counter++, -1 !== this._flowTotal && this._counter >= this._flowTotal && (this.on = !1)); else this.emitParticle() && (this._counter++, this._quantity > 0 && this._counter >= this._quantity && (this.on = !1)); for (var a = this.children.length; a--;) this.children[a].exists && this.children[a].update() }, c.Particles.Arcade.Emitter.prototype.makeParticles = function(a, b, c, d, e) { void 0 === b && (b = 0), void 0 === c && (c = this.maxParticles), void 0 === d && (d = !1), void 0 === e && (e = !1); var f, g = 0, h = a, i = b; for (this._frames = b, c > this.maxParticles && (this.maxParticles = c); g < c;) Array.isArray(a) && (h = this.game.rnd.pick(a)), Array.isArray(b) && (i = this.game.rnd.pick(b)), f = new this.particleClass(this.game, 0, 0, h, i), this.game.physics.arcade.enable(f, !1), d ? (f.body.checkCollision.any = !0, f.body.checkCollision.none = !1) : f.body.checkCollision.none = !0, f.body.collideWorldBounds = e, f.body.skipQuadTree = !0, f.exists = !1, f.visible = !1, f.anchor.copyFrom(this.particleAnchor), this.add(f), g++; return this }, c.Particles.Arcade.Emitter.prototype.kill = function() { return this.on = !1, this.alive = !1, this.exists = !1, this }, c.Particles.Arcade.Emitter.prototype.revive = function() { return this.alive = !0, this.exists = !0, this }, c.Particles.Arcade.Emitter.prototype.explode = function(a, b) { return this._flowTotal = 0, this.start(!0, a, 0, b, !1), this }, c.Particles.Arcade.Emitter.prototype.flow = function(a, b, c, d, e) { return void 0 !== c && 0 !== c || (c = 1), void 0 === d && (d = -1), void 0 === e && (e = !0), c > this.maxParticles && (c = this.maxParticles), this._counter = 0, this._flowQuantity = c, this._flowTotal = d, e ? (this.start(!0, a, b, c), this._counter += c, this.on = !0, this._timer = this.game.time.time + b * this.game.time.slowMotion) : this.start(!1, a, b, c), this }, c.Particles.Arcade.Emitter.prototype.start = function(a, b, c, d, e) { if (void 0 === a && (a = !0), void 0 === b && (b = 0), void 0 !== c && null !== c || (c = 250), void 0 === d && (d = 0), void 0 === e && (e = !1), d > this.maxParticles && (d = this.maxParticles), this.revive(), this.visible = !0, this.lifespan = b, this.frequency = c, a || e) for (var f = 0; f < d; f++) this.emitParticle(); else this.on = !0, this._quantity = d, this._counter = 0, this._timer = this.game.time.time + c * this.game.time.slowMotion; return this }, c.Particles.Arcade.Emitter.prototype.emitParticle = function(a, b, c, d) { void 0 === a && (a = null), void 0 === b && (b = null); var e = this.getFirstExists(!1); if (null === e) return !1; var f = this.game.rnd; void 0 !== c && void 0 !== d ? e.loadTexture(c, d) : void 0 !== c && e.loadTexture(c); var g = this.emitX, h = this.emitY; null !== a ? g = a : this.width > 1 && (g = f.between(this.left, this.right)), null !== b ? h = b : this.height > 1 && (h = f.between(this.top, this.bottom)), e.reset(g, h), e.angle = 0, e.lifespan = this.lifespan, this.particleBringToTop ? this.bringToTop(e) : this.particleSendToBack && this.sendToBack(e), this.autoScale ? e.setScaleData(this.scaleData) : 1 !== this.minParticleScale || 1 !== this.maxParticleScale ? e.scale.set(f.realInRange(this.minParticleScale, this.maxParticleScale)) : this._minParticleScale.x === this._maxParticleScale.x && this._minParticleScale.y === this._maxParticleScale.y || e.scale.set(f.realInRange(this._minParticleScale.x, this._maxParticleScale.x), f.realInRange(this._minParticleScale.y, this._maxParticleScale.y)), void 0 === d && (Array.isArray(this._frames) ? e.frame = this.game.rnd.pick(this._frames) : e.frame = this._frames), this.autoAlpha ? e.setAlphaData(this.alphaData) : e.alpha = f.realInRange(this.minParticleAlpha, this.maxParticleAlpha), e.blendMode = this.blendMode; var i = e.body; return i.updateBounds(), i.bounce.copyFrom(this.bounce), i.drag.copyFrom(this.particleDrag), i.velocity.x = f.between(this.minParticleSpeed.x, this.maxParticleSpeed.x), i.velocity.y = f.between(this.minParticleSpeed.y, this.maxParticleSpeed.y), i.angularVelocity = f.between(this.minRotation, this.maxRotation), i.gravity.y = this.gravity, i.angularDrag = this.angularDrag, e.onEmit(), !0 }, c.Particles.Arcade.Emitter.prototype.destroy = function() { this.game.particles.remove(this), c.Group.prototype.destroy.call(this, !0, !1) }, c.Particles.Arcade.Emitter.prototype.setSize = function(a, b) { return this.area.width = a, this.area.height = b, this }, c.Particles.Arcade.Emitter.prototype.setXSpeed = function(a, b) { return a = a || 0, b = b || 0, this.minParticleSpeed.x = a, this.maxParticleSpeed.x = b, this }, c.Particles.Arcade.Emitter.prototype.setYSpeed = function(a, b) { return a = a || 0, b = b || 0, this.minParticleSpeed.y = a, this.maxParticleSpeed.y = b, this }, c.Particles.Arcade.Emitter.prototype.setRotation = function(a, b) { return a = a || 0, b = b || 0, this.minRotation = a, this.maxRotation = b, this }, c.Particles.Arcade.Emitter.prototype.setAlpha = function(a, b, d, e, f) { if (void 0 === a && (a = 1), void 0 === b && (b = 1), void 0 === d && (d = 0), void 0 === e && (e = c.Easing.Linear.None), void 0 === f && (f = !1), this.minParticleAlpha = a, this.maxParticleAlpha = b, this.autoAlpha = !1, d > 0 && a !== b) { var g = { v: a }, h = this.game.make.tween(g).to({ v: b }, d, e); h.yoyo(f), this.alphaData = h.generateData(60), this.alphaData.reverse(), this.autoAlpha = !0 } return this }, c.Particles.Arcade.Emitter.prototype.setScale = function(a, b, d, e, f, g, h) { if (void 0 === a && (a = 1), void 0 === b && (b = 1), void 0 === d && (d = 1), void 0 === e && (e = 1), void 0 === f && (f = 0), void 0 === g && (g = c.Easing.Linear.None), void 0 === h && (h = !1), this.minParticleScale = 1, this.maxParticleScale = 1, this._minParticleScale.set(a, d), this._maxParticleScale.set(b, e), this.autoScale = !1, f > 0 && (a !== b || d !== e)) { var i = { x: a, y: d }, j = this.game.make.tween(i).to({ x: b, y: e }, f, g); j.yoyo(h), this.scaleData = j.generateData(60), this.scaleData.reverse(), this.autoScale = !0 } return this }, c.Particles.Arcade.Emitter.prototype.at = function(a) { return a.center ? (this.emitX = a.center.x, this.emitY = a.center.y) : (this.emitX = a.world.x + a.anchor.x * a.width, this.emitY = a.world.y + a.anchor.y * a.height), this }, Object.defineProperty(c.Particles.Arcade.Emitter.prototype, "width", { get: function() { return this.area.width }, set: function(a) { this.area.width = a } }), Object.defineProperty(c.Particles.Arcade.Emitter.prototype, "height", { get: function() { return this.area.height }, set: function(a) { this.area.height = a } }), Object.defineProperty(c.Particles.Arcade.Emitter.prototype, "x", { get: function() { return this.emitX }, set: function(a) { this.emitX = a } }), Object.defineProperty(c.Particles.Arcade.Emitter.prototype, "y", { get: function() { return this.emitY }, set: function(a) { this.emitY = a } }), Object.defineProperty(c.Particles.Arcade.Emitter.prototype, "left", { get: function() { return Math.floor(this.x - this.area.width / 2) } }), Object.defineProperty(c.Particles.Arcade.Emitter.prototype, "right", { get: function() { return Math.floor(this.x + this.area.width / 2) } }), Object.defineProperty(c.Particles.Arcade.Emitter.prototype, "top", { get: function() { return Math.floor(this.y - this.area.height / 2) } }), Object.defineProperty(c.Particles.Arcade.Emitter.prototype, "bottom", { get: function() { return Math.floor(this.y + this.area.height / 2) } }), c.Weapon = function(a, b) { c.Plugin.call(this, a, b), this.bullets = null, this.autoExpandBulletsGroup = !1, this.autofire = !1, this.shots = 0, this.fireLimit = 0, this.fireRate = 100, this.fireRateVariance = 0, this.fireFrom = new c.Rectangle(0, 0, 1, 1), this.fireAngle = c.ANGLE_UP, this.bulletInheritSpriteSpeed = !1, this.bulletAnimation = "", this.bulletFrameRandom = !1, this.bulletFrameCycle = !1, this.bulletWorldWrap = !1, this.bulletWorldWrapPadding = 0, this.bulletAngleOffset = 0, this.bulletAngleVariance = 0, this.bulletSpeed = 200, this.bulletSpeedVariance = 0, this.bulletLifespan = 0, this.bulletKillDistance = 0, this.bulletGravity = new c.Point(0, 0), this.bulletRotateToVelocity = !1, this.bulletKey = "", this.bulletFrame = "", this._bulletClass = c.Bullet, this._bulletCollideWorldBounds = !1, this._bulletKillType = c.Weapon.KILL_WORLD_BOUNDS, this._data = { customBody: !1, width: 0, height: 0, offsetX: 0, offsetY: 0 }, this.bounds = new c.Rectangle, this.bulletBounds = a.world.bounds, this.bulletFrames = [], this.bulletFrameIndex = 0, this.anims = {}, this.onFire = new c.Signal, this.onKill = new c.Signal, this.onFireLimit = new c.Signal, this.trackedSprite = null, this.trackedPointer = null, this.trackRotation = !1, this.trackOffset = new c.Point, this._nextFire = 0, this._rotatedPoint = new c.Point }, c.Weapon.prototype = Object.create(c.Plugin.prototype), c.Weapon.prototype.constructor = c.Weapon, c.Weapon.KILL_NEVER = 0, c.Weapon.KILL_LIFESPAN = 1, c.Weapon.KILL_DISTANCE = 2, c.Weapon.KILL_WEAPON_BOUNDS = 3, c.Weapon.KILL_CAMERA_BOUNDS = 4, c.Weapon.KILL_WORLD_BOUNDS = 5, c.Weapon.KILL_STATIC_BOUNDS = 6, c.Weapon.prototype.createBullets = function(a, b, d, e) { return void 0 === a && (a = 1), void 0 === e && (e = this.game.world), this.bullets || (this.bullets = this.game.add.physicsGroup(c.Physics.ARCADE, e), this.bullets.classType = this._bulletClass), 0 !== a && (-1 === a && (this.autoExpandBulletsGroup = !0, a = 1), this.bullets.createMultiple(a, b, d), this.bullets.setAll("data.bulletManager", this), this.bulletKey = b, this.bulletFrame = d), this }, c.Weapon.prototype.forEach = function(a, b) { return this.bullets.forEachExists(a, b, arguments), this }, c.Weapon.prototype.pauseAll = function() { return this.bullets.setAll("body.enable", !1), this }, c.Weapon.prototype.resumeAll = function() { return this.bullets.setAll("body.enable", !0), this }, c.Weapon.prototype.killAll = function() { return this.bullets.callAllExists("kill", !0), this.bullets.setAll("body.enable", !0), this }, c.Weapon.prototype.resetShots = function(a) { return this.shots = 0, void 0 !== a && (this.fireLimit = a), this }, c.Weapon.prototype.destroy = function() { this.parent.remove(this, !1), this.bullets.destroy(), this.game = null, this.parent = null, this.active = !1, this.visible = !1 }, c.Weapon.prototype.update = function() { this._bulletKillType === c.Weapon.KILL_WEAPON_BOUNDS && (this.trackedSprite ? (this.trackedSprite.updateTransform(), this.bounds.centerOn(this.trackedSprite.worldPosition.x, this.trackedSprite.worldPosition.y)) : this.trackedPointer && this.bounds.centerOn(this.trackedPointer.worldX, this.trackedPointer.worldY)), this.autofire && this.fire() }, c.Weapon.prototype.trackSprite = function(a, b, c, d) { return void 0 === b && (b = 0), void 0 === c && (c = 0), void 0 === d && (d = !1), this.trackedPointer = null, this.trackedSprite = a, this.trackRotation = d, this.trackOffset.set(b, c), this }, c.Weapon.prototype.trackPointer = function(a, b, c) { return void 0 === a && (a = this.game.input.activePointer), void 0 === b && (b = 0), void 0 === c && (c = 0), this.trackedPointer = a, this.trackedSprite = null, this.trackRotation = !1, this.trackOffset.set(b, c), this }, c.Weapon.prototype.fire = function(a, b, d) { if (this.game.time.now < this._nextFire || this.fireLimit > 0 && this.shots === this.fireLimit) return !1; var e = this.bulletSpeed; 0 !== this.bulletSpeedVariance && (e += c.Math.between(-this.bulletSpeedVariance, this.bulletSpeedVariance)), a ? this.fireFrom.width > 1 ? this.fireFrom.centerOn(a.x, a.y) : (this.fireFrom.x = a.x, this.fireFrom.y = a.y) : this.trackedSprite ? (this.trackRotation ? (this._rotatedPoint.set(this.trackedSprite.world.x + this.trackOffset.x, this.trackedSprite.world.y + this.trackOffset.y), this._rotatedPoint.rotate(this.trackedSprite.world.x, this.trackedSprite.world.y, this.trackedSprite.rotation), this.fireFrom.width > 1 ? this.fireFrom.centerOn(this._rotatedPoint.x, this._rotatedPoint.y) : (this.fireFrom.x = this._rotatedPoint.x, this.fireFrom.y = this._rotatedPoint.y)) : this.fireFrom.width > 1 ? this.fireFrom.centerOn(this.trackedSprite.world.x + this.trackOffset.x, this.trackedSprite.world.y + this.trackOffset.y) : (this.fireFrom.x = this.trackedSprite.world.x + this.trackOffset.x, this.fireFrom.y = this.trackedSprite.world.y + this.trackOffset.y), this.bulletInheritSpriteSpeed && (e += this.trackedSprite.body.speed)) : this.trackedPointer && (this.fireFrom.width > 1 ? this.fireFrom.centerOn(this.trackedPointer.world.x + this.trackOffset.x, this.trackedPointer.world.y + this.trackOffset.y) : (this.fireFrom.x = this.trackedPointer.world.x + this.trackOffset.x, this.fireFrom.y = this.trackedPointer.world.y + this.trackOffset.y)); var f = this.fireFrom.width > 1 ? this.fireFrom.randomX : this.fireFrom.x, g = this.fireFrom.height > 1 ? this.fireFrom.randomY : this.fireFrom.y, h = this.trackRotation ? this.trackedSprite.angle : this.fireAngle; void 0 !== b && void 0 !== d && (h = this.game.math.radToDeg(Math.atan2(d - g, b - f))), 0 !== this.bulletAngleVariance && (h += c.Math.between(-this.bulletAngleVariance, this.bulletAngleVariance)); var i = 0, j = 0; 0 === h || 180 === h ? i = Math.cos(this.game.math.degToRad(h)) * e : 90 === h || 270 === h ? j = Math.sin(this.game.math.degToRad(h)) * e : (i = Math.cos(this.game.math.degToRad(h)) * e, j = Math.sin(this.game.math.degToRad(h)) * e); var k = null; if (this.autoExpandBulletsGroup ? (k = this.bullets.getFirstExists(!1, !0, f, g, this.bulletKey, this.bulletFrame), k.data.bulletManager = this) : k = this.bullets.getFirstExists(!1), k) { if (k.reset(f, g), k.data.fromX = f, k.data.fromY = g, k.data.killType = this.bulletKillType, k.data.killDistance = this.bulletKillDistance, k.data.rotateToVelocity = this.bulletRotateToVelocity, this.bulletKillType === c.Weapon.KILL_LIFESPAN && (k.lifespan = this.bulletLifespan), k.angle = h + this.bulletAngleOffset, "" !== this.bulletAnimation) { if (null === k.animations.getAnimation(this.bulletAnimation)) { var l = this.anims[this.bulletAnimation]; k.animations.add(l.name, l.frames, l.frameRate, l.loop, l.useNumericIndex) } k.animations.play(this.bulletAnimation) } else this.bulletFrameCycle ? (k.frame = this.bulletFrames[this.bulletFrameIndex], ++this.bulletFrameIndex >= this.bulletFrames.length && (this.bulletFrameIndex = 0)) : this.bulletFrameRandom && (k.frame = this.bulletFrames[Math.floor(Math.random() * this.bulletFrames.length)]); if (k.data.bodyDirty && (this._data.customBody && k.body.setSize(this._data.width, this._data.height, this._data.offsetX, this._data.offsetY), k.body.collideWorldBounds = this.bulletCollideWorldBounds, k.data.bodyDirty = !1), k.body.velocity.set(i, j), k.body.gravity.set(this.bulletGravity.x, this.bulletGravity.y), 0 !== this.bulletSpeedVariance) { var m = this.fireRate; m += c.Math.between(-this.fireRateVariance, this.fireRateVariance), m < 0 && (m = 0), this._nextFire = this.game.time.now + m } else this._nextFire = this.game.time.now + this.fireRate; this.shots++, this.onFire.dispatch(k, this, e), this.fireLimit > 0 && this.shots === this.fireLimit && this.onFireLimit.dispatch(this, this.fireLimit) } return k }, c.Weapon.prototype.fireAtPointer = function(a) { return void 0 === a && (a = this.game.input.activePointer), this.fire(null, a.worldX, a.worldY) }, c.Weapon.prototype.fireAtSprite = function(a) { return this.fire(null, a.world.x, a.world.y) }, c.Weapon.prototype.fireAtXY = function(a, b) { return this.fire(null, a, b) }, c.Weapon.prototype.setBulletBodyOffset = function(a, b, c, d) { return void 0 === c && (c = 0), void 0 === d && (d = 0), this._data.customBody = !0, this._data.width = a, this._data.height = b, this._data.offsetX = c, this._data.offsetY = d, this.bullets.callAll("body.setSize", "body", a, b, c, d), this.bullets.setAll("data.bodyDirty", !1), this }, c.Weapon.prototype.setBulletFrames = function(a, b, d, e) { return void 0 === d && (d = !0), void 0 === e && (e = !1), this.bulletFrames = c.ArrayUtils.numberArray(a, b), this.bulletFrameIndex = 0, this.bulletFrameCycle = d, this.bulletFrameRandom = e, this }, c.Weapon.prototype.addBulletAnimation = function(a, b, c, d, e) { return this.anims[a] = { name: a, frames: b, frameRate: c, loop: d, useNumericIndex: e }, this.bullets.callAll("animations.add", "animations", a, b, c, d, e), this.bulletAnimation = a, this }, c.Weapon.prototype.debug = function(a, b, c) { void 0 === a && (a = 16), void 0 === b && (b = 32), void 0 === c && (c = !1), this.game.debug.text("Weapon Plugin", a, b), this.game.debug.text("Bullets Alive: " + this.bullets.total + " - Total: " + this.bullets.length, a, b + 24), c && this.bullets.forEachExists(this.game.debug.body, this.game.debug, "rgba(255, 0, 255, 0.8)") }, Object.defineProperty(c.Weapon.prototype, "bulletClass", { get: function() { return this._bulletClass }, set: function(a) { this._bulletClass = a, this.bullets.classType = this._bulletClass } }), Object.defineProperty(c.Weapon.prototype, "bulletKillType", { get: function() { return this._bulletKillType }, set: function(a) { switch (a) { case c.Weapon.KILL_STATIC_BOUNDS: case c.Weapon.KILL_WEAPON_BOUNDS: this.bulletBounds = this.bounds; break; case c.Weapon.KILL_CAMERA_BOUNDS: this.bulletBounds = this.game.camera.view; break; case c.Weapon.KILL_WORLD_BOUNDS: this.bulletBounds = this.game.world.bounds } this._bulletKillType = a } }), Object.defineProperty(c.Weapon.prototype, "bulletCollideWorldBounds", { get: function() { return this._bulletCollideWorldBounds }, set: function(a) { this._bulletCollideWorldBounds = a, this.bullets.setAll("body.collideWorldBounds", a), this.bullets.setAll("data.bodyDirty", !1) } }), Object.defineProperty(c.Weapon.prototype, "x", { get: function() { return this.fireFrom.x }, set: function(a) { this.fireFrom.x = a } }), Object.defineProperty(c.Weapon.prototype, "y", { get: function() { return this.fireFrom.y }, set: function(a) { this.fireFrom.y = a } }), c.Bullet = function(a, b, d, e, f) { c.Sprite.call(this, a, b, d, e, f), this.anchor.set(.5), this.data = { bulletManager: null, fromX: 0, fromY: 0, bodyDirty: !0, rotateToVelocity: !1, killType: 0, killDistance: 0 } }, c.Bullet.prototype = Object.create(c.Sprite.prototype), c.Bullet.prototype.constructor = c.Bullet, c.Bullet.prototype.kill = function() { return this.alive = !1, this.exists = !1, this.visible = !1, this.data.bulletManager.onKill.dispatch(this), this }, c.Bullet.prototype.update = function() { this.exists && (this.data.killType > c.Weapon.KILL_LIFESPAN && (this.data.killType === c.Weapon.KILL_DISTANCE ? this.game.physics.arcade.distanceToXY(this, this.data.fromX, this.data.fromY, !0) > this.data.killDistance && this.kill() : this.data.bulletManager.bulletBounds.intersects(this) || this.kill()), this.data.rotateToVelocity && (this.rotation = Math.atan2(this.body.velocity.y, this.body.velocity.x)), this.data.bulletManager.bulletWorldWrap && this.game.world.wrap(this, this.data.bulletManager.bulletWorldWrapPadding)) }, c.Video = function(a, b, d) { if (void 0 === b && (b = null), void 0 === d && (d = null), this.game = a, this.key = b, this.width = 0, this.height = 0, this.type = c.VIDEO, this.disableTextureUpload = !1, this.touchLocked = !1, this.onPlay = new c.Signal, this.onChangeSource = new c.Signal, this.onComplete = new c.Signal, this.onAccess = new c.Signal, this.onError = new c.Signal, this.onTimeout = new c.Signal, this.timeout = 15e3, this._timeOutID = null, this.video = null, this.videoStream = null, this.isStreaming = !1, this.retryLimit = 20, this.retry = 0, this.retryInterval = 500, this._retryID = null, this._codeMuted = !1, this._muted = !1, this._codePaused = !1, this._paused = !1, this._pending = !1, this._autoplay = !1, this._endCallback = null, this._playCallback = null, b && this.game.cache.checkVideoKey(b)) { var e = this.game.cache.getVideo(b); e.isBlob ? this.createVideoFromBlob(e.data) : this.video = e.data, this.width = this.video.videoWidth, this.height = this.video.videoHeight } else d && this.createVideoFromURL(d, !1); this.video && !d ? (this.baseTexture = new PIXI.BaseTexture(this.video), this.baseTexture.forceLoaded(this.width, this.height)) : (this.baseTexture = new PIXI.BaseTexture(c.Cache.DEFAULT.baseTexture.source), this.baseTexture.forceLoaded(this.width, this.height)), this.texture = new PIXI.Texture(this.baseTexture), this.textureFrame = new c.Frame(0, 0, 0, this.width, this.height, "video"), this.texture.setFrame(this.textureFrame), this.texture.valid = !1, null !== b && this.video && (this.texture.valid = this.video.canplay), this.snapshot = null, c.BitmapData && (this.snapshot = new c.BitmapData(this.game, "", this.width, this.height)), !this.game.device.cocoonJS && (this.game.device.iOS || this.game.device.chrome) || window.PhaserGlobal && window.PhaserGlobal.fakeiOSTouchLock ? this.setTouchLock() : e && (e.locked = !1) }, c.Video.prototype = { connectToMediaStream: function(a, b) { return a && b && (this.video = a, this.videoStream = b, this.isStreaming = !0, this.baseTexture.source = this.video, this.updateTexture(null, this.video.videoWidth, this.video.videoHeight), this.onAccess.dispatch(this)), this }, startMediaStream: function(a, b, c) { if (void 0 === a && (a = !1), void 0 === b && (b = null), void 0 === c && (c = null), !this.game.device.getUserMedia) return this.onError.dispatch(this, "No getUserMedia"), !1; null !== this.videoStream && (this.videoStream.active ? this.videoStream.active = !1 : this.videoStream.stop()), this.removeVideoElement(), this.video = document.createElement("video"), this.video.setAttribute("autoplay", "autoplay"), null !== b && (this.video.width = b), null !== c && (this.video.height = c), this._timeOutID = window.setTimeout(this.getUserMediaTimeout.bind(this), this.timeout); try { navigator.getUserMedia({ audio: a, video: !0 }, this.getUserMediaSuccess.bind(this), this.getUserMediaError.bind(this)) } catch (a) { this.getUserMediaError(a) } return this }, getUserMediaTimeout: function() { clearTimeout(this._timeOutID), this.onTimeout.dispatch(this) }, getUserMediaError: function(a) { clearTimeout(this._timeOutID), this.onError.dispatch(this, a) }, getUserMediaSuccess: function(a) { clearTimeout(this._timeOutID), this.videoStream = a, void 0 !== this.video.mozSrcObject ? this.video.mozSrcObject = a : this.video.src = window.URL && window.URL.createObjectURL(a) || a; var b = this; this.video.onloadeddata = function() { function a() { if (c > 0) if (b.video.videoWidth > 0) { var d = b.video.videoWidth, e = b.video.videoHeight; isNaN(b.video.videoHeight) && (e = d / (4 / 3)), b.video.play(), b.isStreaming = !0, b.baseTexture.source = b.video, b.updateTexture(null, d, e), b.onAccess.dispatch(b) } else window.setTimeout(a, 500); else console.warn("Unable to connect to video stream. Webcam error?"); c-- } var c = 10; a() } }, createVideoFromBlob: function(a) { var b = this; return this.video = document.createElement("video"), this.video.controls = !1, this.video.setAttribute("autoplay", "autoplay"), this.video.addEventListener("loadeddata", function(a) { b.updateTexture(a) }, !0), this.video.src = window.URL.createObjectURL(a), this.video.canplay = !0, this }, createVideoFromURL: function(a, b) { return void 0 === b && (b = !1), this.texture && (this.texture.valid = !1), this.video = document.createElement("video"), this.video.controls = !1, b && this.video.setAttribute("autoplay", "autoplay"), this.video.src = a, this.video.canplay = !0, this.video.load(), this.retry = this.retryLimit, this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval), this.key = a, this }, updateTexture: function(a, b, c) { var d = !1; void 0 !== b && null !== b || (b = this.video.videoWidth, d = !0), void 0 !== c && null !== c || (c = this.video.videoHeight), this.width = b, this.height = c, this.baseTexture.source !== this.video && (this.baseTexture.source = this.video), this.baseTexture.forceLoaded(b, c), this.texture.frame.resize(b, c), this.texture.width = b, this.texture.height = c, this.texture.valid = !0, this.snapshot && this.snapshot.resize(b, c), d && null !== this.key && (this.onChangeSource.dispatch(this, b, c), this._autoplay && (this.video.play(), this.onPlay.dispatch(this, this.loop, this.playbackRate))) }, complete: function() { this.onComplete.dispatch(this) }, play: function(a, b) { return void 0 === a && (a = !1), void 0 === b && (b = 1), this.game.sound.onMute && (this.game.sound.onMute.add(this.setMute, this), this.game.sound.onUnMute.add(this.unsetMute, this), this.game.sound.mute && this.setMute()), this.game.onPause.add(this.setPause, this), this.game.onResume.add(this.setResume, this), this._endCallback = this.complete.bind(this), this.video.addEventListener("ended", this._endCallback, !0), this.video.addEventListener("webkitendfullscreen", this._endCallback, !0), this.video.loop = a ? "loop" : "", this.video.playbackRate = b, this.touchLocked ? this._pending = !0 : (this._pending = !1, null !== this.key && (4 !== this.video.readyState ? (this.retry = this.retryLimit, this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval)) : (this._playCallback = this.playHandler.bind(this), this.video.addEventListener("playing", this._playCallback, !0))), this.video.play(), this.onPlay.dispatch(this, a, b)), this }, playHandler: function() { this.video.removeEventListener("playing", this._playCallback, !0), this.updateTexture() }, stop: function() { return this.game.sound.onMute && (this.game.sound.onMute.remove(this.setMute, this), this.game.sound.onUnMute.remove(this.unsetMute, this)), this.game.onPause.remove(this.setPause, this), this.game.onResume.remove(this.setResume, this), this.isStreaming ? (this.video.mozSrcObject ? (this.video.mozSrcObject.stop(), this.video.src = null) : (this.video.src = "", this.videoStream.active ? this.videoStream.active = !1 : this.videoStream.getTracks ? this.videoStream.getTracks().forEach(function(a) { a.stop() }) : this.videoStream.stop()), this.videoStream = null, this.isStreaming = !1) : (this.video.removeEventListener("ended", this._endCallback, !0), this.video.removeEventListener("webkitendfullscreen", this._endCallback, !0), this.video.removeEventListener("playing", this._playCallback, !0), this.touchLocked ? this._pending = !1 : this.video.pause()), this }, add: function(a) { if (Array.isArray(a)) for (var b = 0; b < a.length; b++) a[b].loadTexture && a[b].loadTexture(this); else a.loadTexture(this); return this }, addToWorld: function(a, b, c, d, e, f) { e = e || 1, f = f || 1; var g = this.game.add.image(a, b, this); return g.anchor.set(c, d), g.scale.set(e, f), g }, render: function() {!this.disableTextureUpload && this.playing && this.baseTexture.dirty() }, setMute: function() { this._muted || (this._muted = !0, this.video.muted = !0) }, unsetMute: function() { this._muted && !this._codeMuted && (this._muted = !1, this.video.muted = !1) }, setPause: function() { this._paused || this.touchLocked || (this._paused = !0, this.video.pause()) }, setResume: function() {!this._paused || this._codePaused || this.touchLocked || (this._paused = !1, this.video.ended || this.video.play()) }, changeSource: function(a, b) { return void 0 === b && (b = !0), this.texture.valid = !1, this.video.pause(), this.retry = this.retryLimit, this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval), this.video.src = a, this.video.load(), this._autoplay = b, b || (this.paused = !0), this }, checkVideoProgress: function() { 4 === this.video.readyState ? this.updateTexture() : (this.retry--, this.retry > 0 ? this._retryID = window.setTimeout(this.checkVideoProgress.bind(this), this.retryInterval) : console.warn("Phaser.Video: Unable to start downloading video in time", this.isStreaming)) }, setTouchLock: function() { this.game.input.touch.addTouchLockCallback(this.unlock, this), this.touchLocked = !0 }, unlock: function() { if (this.touchLocked = !1, this.video.play(), this.onPlay.dispatch(this, this.loop, this.playbackRate), this.key) { var a = this.game.cache.getVideo(this.key); a && !a.isBlob && (a.locked = !1) } return !0 }, grab: function(a, b, c) { return void 0 === a && (a = !1), void 0 === b && (b = 1), void 0 === c && (c = null), null === this.snapshot ? void console.warn("Video.grab cannot run because Phaser.BitmapData is unavailable") : (a && this.snapshot.cls(), this.snapshot.copy(this.video, 0, 0, this.width, this.height, 0, 0, this.width, this.height, 0, 0, 0, 1, 1, b, c), this.snapshot) }, removeVideoElement: function() { if (this.video) { for (this.video.parentNode && this.video.parentNode.removeChild(this.video); this.video.hasChildNodes();) this.video.removeChild(this.video.firstChild); this.video.removeAttribute("autoplay"), this.video.removeAttribute("src"), this.video = null } }, destroy: function() { this.stop(), this.removeVideoElement(), this.touchLocked && this.game.input.touch.removeTouchLockCallback(this.unlock, this), this._retryID && window.clearTimeout(this._retryID) } }, Object.defineProperty(c.Video.prototype, "currentTime", { get: function() { return this.video ? this.video.currentTime : 0 }, set: function(a) { this.video.currentTime = a } }), Object.defineProperty(c.Video.prototype, "duration", { get: function() { return this.video ? this.video.duration : 0 } }), Object.defineProperty(c.Video.prototype, "progress", { get: function() { return this.video ? this.video.currentTime / this.video.duration : 0 } }), Object.defineProperty(c.Video.prototype, "mute", { get: function() { return this._muted }, set: function(a) { if (a = a || null) { if (this._muted) return; this._codeMuted = !0, this.setMute() } else { if (!this._muted) return; this._codeMuted = !1, this.unsetMute() } } }), Object.defineProperty(c.Video.prototype, "paused", { get: function() { return this._paused }, set: function(a) { if (a = a || null, !this.touchLocked) if (a) { if (this._paused) return; this._codePaused = !0, this.setPause() } else { if (!this._paused) return; this._codePaused = !1, this.setResume() } } }), Object.defineProperty(c.Video.prototype, "volume", { get: function() { return this.video ? this.video.volume : 1 }, set: function(a) { a < 0 ? a = 0 : a > 1 && (a = 1), this.video && (this.video.volume = a) } }), Object.defineProperty(c.Video.prototype, "playbackRate", { get: function() { return this.video ? this.video.playbackRate : 1 }, set: function(a) { this.video && (this.video.playbackRate = a) } }), Object.defineProperty(c.Video.prototype, "loop", { get: function() { return !!this.video && this.video.loop }, set: function(a) { a && this.video ? this.video.loop = "loop" : this.video && (this.video.loop = "") } }), Object.defineProperty(c.Video.prototype, "playing", { get: function() { return !(this.video.paused && this.video.ended) } }), c.Video.prototype.constructor = c.Video, void 0 === PIXI.blendModes && (PIXI.blendModes = c.blendModes), void 0 === PIXI.scaleModes && (PIXI.scaleModes = c.scaleModes), void 0 === PIXI.Texture.emptyTexture && (PIXI.Texture.emptyTexture = new PIXI.Texture(new PIXI.BaseTexture)), void 0 === PIXI.DisplayObject._tempMatrix && (PIXI.DisplayObject._tempMatrix = new PIXI.Matrix), void 0 === PIXI.RenderTexture.tempMatrix && (PIXI.RenderTexture.tempMatrix = new PIXI.Matrix), PIXI.Graphics && void 0 === PIXI.Graphics.POLY && (PIXI.Graphics.POLY = c.POLYGON, PIXI.Graphics.RECT = c.RECTANGLE, PIXI.Graphics.CIRC = c.CIRCLE, PIXI.Graphics.ELIP = c.ELLIPSE, PIXI.Graphics.RREC = c.ROUNDEDRECTANGLE), PIXI.TextureSilentFail = !0, "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = c), exports.Phaser = c) : "undefined" != typeof define && define.amd ? define("Phaser", function() { return b.Phaser = c }()) : b.Phaser = c, c }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Common/Button", ["Phaser"], function() { "use strict"; return function(c) { function d(b, c, e, f, g, h, i) { this.destroy = a(this.destroy, this), this.disable = a(this.disable, this), this.enable = a(this.enable, this), this.setUp = a(this.setUp, this), this.setDown = a(this.setDown, this), this.soundId = i, _.isArray(g) && (this.downFrameName = g[1], g = this.upFrameName = g[0]), null != g ? d.__super__.constructor.call(this, b, c, e, f, "_default0000") : d.__super__.constructor.call(this, b, c, e, f), g && (this.sprite = b.make.sprite(0, 0, f, g), this.sprite.anchor.set(.5), this.addChild(this.sprite)), this.id = Math.random(), this.customEvents || (this.game.bowser.mobile || this.game.bowser.tablet || this.game.device.iPad ? (b.TouchManager.register(this, "touchstart", this.setDown), b.TouchManager.register(this, "touchend", function(a) { return function(b, c) { return c && a.isDown && null != h && (a.game.settings.vibrate && navigator.vibrate && navigator.vibrate(50), a.game.settings.fx && a.soundId && a.game.currentSounds[a.soundId].play(), h(a)), a.setUp() } }(this))) : (b.TouchManager.register(this, "mousedown", this.setDown), b.TouchManager.register(this, "mouseup", function(a) { return function(b, c) { return c && a.isDown && null != h && (a.game.settings.fx && a.soundId && a.game.currentSounds[a.soundId].play(), h(a)), a.setUp() } }(this)))) } return b(d, c), d.prototype.setDown = function() { if (this.isDown = !0, this.disabled || null == this.downFrameName || null == this.sprite || (this.sprite.frameName = this.downFrameName), !this.disabled && this.label) return this.label.scale.set(.95) }, d.prototype.setUp = function() { if (this.isDown = !1, this.disabled || null == this.upFrameName || null == this.sprite || (this.sprite.frameName = this.upFrameName), !this.disabled && this.label) return this.label.scale.set(1) }, d.prototype.enable = function() { return this.disabled = !1 }, d.prototype.disable = function() { return this.disabled = !0 }, d.prototype.destroy = function() { return this.game.bowser.mobile || this.game.bowser.tablet || this.game.device.iPad ? (this.game.TouchManager.unregister(this, "touchstart"), this.game.TouchManager.unregister(this, "touchend")) : (this.game.TouchManager.unregister(this, "mousedown"), this.game.TouchManager.unregister(this, "mouseup")), d.__super__.destroy.apply(this, arguments) }, d }(Phaser.Sprite) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Common/GoldButton", ["./Button", "Phaser"], function(b) { "use strict"; return function(b) { function c(a, b, d, e, f, g) { null == g && (g = 28), c.__super__.constructor.call(this, a, b, d, "MenuAssets", "", f, "pusher"), this.anchor.set(.5), console.log(e), console.log(a.lang.font), this.label = a.make.bitmapText(0, 0, a.lang.font, e + " ", g), this.label.anchor.set(.5), this.addChild(this.label) } return a(c, b), c }(b) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Common/Navies", ["./Button", "Phaser"], function(c) { "use strict"; return function(c) { function d(b, c, e, f) { var g, h, i; for (null == f && (f = 3), this.update = a(this.update, this), d.__super__.constructor.call(this, b, c, e, "MenuAssets", "_default0000"), this.anchor.set(.5), g = 0, i = f; 0 <= i ? g <= i : g >= i; 0 <= i ? ++g : --g) h = new Phaser.Sprite(b, 0, 0, "MenuAssets", "Navy0000"), h.anchor.set(.5), h.scale.set(.3 + .7 * Math.random()), h.offsetCart = { x: 200 * (Math.random() - .5), y: 50 * (Math.random() - .5) }, h.offset = { r: 400 * Math.random(), theta: Math.random() }, h.rprime = 0, h.speed = { r: 7e-4 + 5e-4 * Math.random(), theta: 3e-4 + 5e-4 * (Math.random() - .5) }, h.pos = { r: Math.random(), theta: Math.random() * Math.PI * 2 }, h.update = function() { return this.rprime += this.speed.r, this.pos.r = this.offset.r * Math.sin(this.rprime), this.pos.theta += this.speed.theta, this.x = this.offsetCart.x + this.pos.r * Math.cos(this.pos.theta), this.y = this.offsetCart.y + this.pos.r * Math.sin(this.pos.theta) }, this.addChild(h) } return b(d, c), d.prototype.update = function() { var a, b, c, d, e; for (d = this.children, e = [], b = 0, c = d.length; b < c; b++) a = d[b], e.push(a.update.call(a)); return e }, d }(Phaser.Sprite) }) }.call(this), function(a, b) { "object" == typeof exports && "undefined" != typeof module ? b(exports) : "function" == typeof define && define.amd ? define("h5branding", ["exports"], b) : b(a.h5branding = a.h5branding || {}) }(this, function(a) { "use strict"; function b() { throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs") } function c(a, b) { return b = { exports: {} }, a(b, b.exports), b.exports } function d(a, b, c) { var d = document.createElement("script"); d.setAttribute("src", a + "?v=" + b), "function" == typeof c && (d.onload = c), document.body.appendChild(d) } function e(a, b, c, d) { return new(c || (c = Promise))(function(e, f) { function g(a) { try { i(d.next(a)) } catch (a) { f(a) } } function h(a) { try { i(d.throw(a)) } catch (a) { f(a) } } function i(a) { a.done ? e(a.value) : new c(function(b) { b(a.value) }).then(g, h) } i((d = d.apply(a, b || [])).next()) }) } function f(a, b) { function c(a) { return function(b) { return d([a, b]) } } function d(c) { if (e) throw new TypeError("Generator is already executing."); for (; i;) try { if (e = 1, f && (g = 2 & c[0] ? f.return : c[0] ? f.throw || ((g = f.return) && g.call(f), 0) : f.next) && !(g = g.call(f, c[1])).done) return g; switch (f = 0, g && (c = [2 & c[0], g.value]), c[0]) { case 0: case 1: g = c; break; case 4: return i.label++, { value: c[1], done: !1 }; case 5: i.label++, f = c[1], c = [0]; continue; case 7: c = i.ops.pop(), i.trys.pop(); continue; default: if (g = i.trys, !(g = g.length > 0 && g[g.length - 1]) && (6 === c[0] || 2 === c[0])) { i = 0; continue } if (3 === c[0] && (!g || c[1] > g[0] && c[1] < g[3])) { i.label = c[1]; break } if (6 === c[0] && i.label < g[1]) { i.label = g[1], g = c; break } if (g && i.label < g[2]) { i.label = g[2], i.ops.push(c); break } g[2] && i.ops.pop(), i.trys.pop(); continue } c = b.call(a, i) } catch (a) { c = [6, a], f = 0 } finally { e = g = 0 } if (5 & c[0]) throw c[1]; return { value: c[0] ? c[1] : void 0, done: !0 } } var e, f, g, h, i = { label: 0, sent: function() { if (1 & g[0]) throw g[1]; return g[1] }, trys: [], ops: [] }; return h = { next: c(0), throw: c(1), return: c(2) }, "function" == typeof Symbol && (h[Symbol.iterator] = function() { return this }), h } function g(a, b) { return '\n <div id="h5branding-background"></div>\n <div id="h5branding-logo"></div>\n <div id="h5branding-center">\n <div id="h5branding-ad"></div>\n <div id="h5branding-wrapper">\n <img src="' + a + '" />\n <div id="h5branding-bar"></div>\n <button id="h5branding-button" onclick="h5branding.SplashLoader.getInstance().onPlayButtonClick();">Play</button>\n </div>\n </div>\n <div id="h5branding-title">' + b + "</div>\n " } var h = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}, i = (c(function(a, c) { ! function(c, d) { a.exports = function() { function a(a) { var b = typeof a; return null !== a && ("object" === b || "function" === b) } function c(a) { return "function" == typeof a } function d(a) { N = a } function e(a) { O = a } function f() { return void 0 !== M ? function() { M(i) } : g() } function g() { var a = setTimeout; return function() { return a(i, 1) } } function i() { for (var a = 0; a < L; a += 2) { (0, U[a])(U[a + 1]), U[a] = void 0, U[a + 1] = void 0 } L = 0 } function j(a, b) { var c = this, d = new this.constructor(l); void 0 === d[W] && B(d); var e = c._state; if (e) { var f = arguments[e - 1]; O(function() { return y(e, d, f, c._result) }) } else w(c, d, a, b); return d } function k(a) { var b = this; if (a && "object" == typeof a && a.constructor === b) return a; var c = new b(l); return s(c, a), c } function l() {} function m() { return new TypeError("You cannot resolve a promise with itself") } function n() { return new TypeError("A promises callback cannot return that same promise.") } function o(a, b, c, d) { try { a.call(b, c, d) } catch (a) { return a } } function p(a, b, c) { O(function(a) { var d = !1, e = o(c, b, function(c) { d || (d = !0, b !== c ? s(a, c) : u(a, c)) }, function(b) { d || (d = !0, v(a, b)) }, "Settle: " + (a._label || " unknown promise"));!d && e && (d = !0, v(a, e)) }, a) } function q(a, b) { b._state === Y ? u(a, b._result) : b._state === Z ? v(a, b._result) : w(b, void 0, function(b) { return s(a, b) }, function(b) { return v(a, b) }) } function r(a, b, d) { b.constructor === a.constructor && d === j && b.constructor.resolve === k ? q(a, b) : void 0 === d ? u(a, b) : c(d) ? p(a, b, d) : u(a, b) } function s(b, c) { if (b === c) v(b, m()); else if (a(c)) { var d = void 0; try { d = c.then } catch (a) { return void v(b, a) } r(b, c, d) } else u(b, c) } function t(a) { a._onerror && a._onerror(a._result), x(a) } function u(a, b) { a._state === X && (a._result = b, a._state = Y, 0 !== a._subscribers.length && O(x, a)) } function v(a, b) { a._state === X && (a._state = Z, a._result = b, O(t, a)) } function w(a, b, c, d) { var e = a._subscribers, f = e.length; a._onerror = null, e[f] = b, e[f + Y] = c, e[f + Z] = d, 0 === f && a._state && O(x, a) } function x(a) { var b = a._subscribers, c = a._state; if (0 !== b.length) { for (var d = void 0, e = void 0, f = a._result, g = 0; g < b.length; g += 3) d = b[g], e = b[g + c], d ? y(c, d, e, f) : e(f); a._subscribers.length = 0 } } function y(a, b, d, e) { var f = c(d), g = void 0, h = void 0, i = !0; if (f) { try { g = d(e) } catch (a) { i = !1, h = a } if (b === g) return void v(b, n()) } else g = e; b._state !== X || (f && i ? s(b, g) : !1 === i ? v(b, h) : a === Y ? u(b, g) : a === Z && v(b, g)) } function z(a, b) { try { b(function(b) { s(a, b) }, function(b) { v(a, b) }) } catch (b) { v(a, b) } } function A() { return $++ } function B(a) { a[W] = $++, a._state = void 0, a._result = void 0, a._subscribers = [] } function C() { return new Error("Array Methods must be provided an Array") } function D(a) { return new _(this, a).promise } function E(a) { var b = this; return new b(K(a) ? function(c, d) { for (var e = a.length, f = 0; f < e; f++) b.resolve(a[f]).then(c, d) } : function(a, b) { return b(new TypeError("You must pass an array to race.")) }) } function F(a) { var b = this, c = new b(l); return v(c, a), c } function G() { throw new TypeError("You must pass a resolver function as the first argument to the promise constructor") } function H() { throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.") } function I() { var a = void 0; if (void 0 !== h) a = h; else if ("undefined" != typeof self) a = self; else try { a = Function("return this")() } catch (a) { throw new Error("polyfill failed because global object is unavailable in this environment") } var b = a.Promise; if (b) { var c = null; try { c = Object.prototype.toString.call(b.resolve()) } catch (a) {} if ("[object Promise]" === c && !b.cast) return } a.Promise = aa } var J = void 0; J = Array.isArray ? Array.isArray : function(a) { return "[object Array]" === Object.prototype.toString.call(a) }; var K = J, L = 0, M = void 0, N = void 0, O = function(a, b) { U[L] = a, U[L + 1] = b, 2 === (L += 2) && (N ? N(i) : V()) }, P = "undefined" != typeof window ? window : void 0, Q = P || {}, R = Q.MutationObserver || Q.WebKitMutationObserver, S = "undefined" == typeof self && "undefined" != typeof process && "[object process]" === {}.toString.call(process), T = "undefined" != typeof Uint8ClampedArray && "undefined" != typeof importScripts && "undefined" != typeof MessageChannel, U = new Array(1e3), V = void 0; V = S ? function() { return function() { return process.nextTick(i) } }() : R ? function() { var a = 0, b = new R(i), c = document.createTextNode(""); return b.observe(c, { characterData: !0 }), function() { c.data = a = ++a % 2 } }() : T ? function() { var a = new MessageChannel; return a.port1.onmessage = i, function() { return a.port2.postMessage(0) } }() : void 0 === P && "function" == typeof b ? function() { try { var a = Function("return this")().require("vertx"); return M = a.runOnLoop || a.runOnContext, f() } catch (a) { return g() } }() : g(); var W = Math.random().toString(36).substring(2), X = void 0, Y = 1, Z = 2, $ = 0, _ = function() { function a(a, b) { this._instanceConstructor = a, this.promise = new a(l), this.promise[W] || B(this.promise), K(b) ? (this.length = b.length, this._remaining = b.length, this._result = new Array(this.length), 0 === this.length ? u(this.promise, this._result) : (this.length = this.length || 0, this._enumerate(b), 0 === this._remaining && u(this.promise, this._result))) : v(this.promise, C()) } return a.prototype._enumerate = function(a) { for (var b = 0; this._state === X && b < a.length; b++) this._eachEntry(a[b], b) }, a.prototype._eachEntry = function(a, b) { var c = this._instanceConstructor, d = c.resolve; if (d === k) { var e = void 0, f = void 0, g = !1; try { e = a.then } catch (a) { g = !0, f = a } if (e === j && a._state !== X) this._settledAt(a._state, b, a._result); else if ("function" != typeof e) this._remaining--, this._result[b] = a; else if (c === aa) { var h = new c(l); g ? v(h, f) : r(h, a, e), this._willSettleAt(h, b) } else this._willSettleAt(new c(function(b) { return b(a) }), b) } else this._willSettleAt(d(a), b) }, a.prototype._settledAt = function(a, b, c) { var d = this.promise; d._state === X && (this._remaining--, a === Z ? v(d, c) : this._result[b] = c), 0 === this._remaining && u(d, this._result) }, a.prototype._willSettleAt = function(a, b) { var c = this; w(a, void 0, function(a) { return c._settledAt(Y, b, a) }, function(a) { return c._settledAt(Z, b, a) }) }, a }(), aa = function() { function a(b) { this[W] = A(), this._result = this._state = void 0, this._subscribers = [], l !== b && ("function" != typeof b && G(), this instanceof a ? z(this, b) : H()) } return a.prototype.catch = function(a) { return this.then(null, a) }, a.prototype.finally = function(a) { var b = this, d = b.constructor; return c(a) ? b.then(function(b) { return d.resolve(a()).then(function() { return b }) }, function(b) { return d.resolve(a()).then(function() { throw b }) }) : b.then(a, a) }, a }(); return aa.prototype.then = j, aa.all = D, aa.race = E, aa.resolve = k, aa.reject = F, aa._setScheduler = d, aa._setAsap = e, aa._asap = O, aa.polyfill = I, aa.Promise = aa, aa }() }() }), c(function(a, c) {! function(c, d) { a.exports = function() { function a(a) { var b = typeof a; return null !== a && ("object" === b || "function" === b) } function c(a) { return "function" == typeof a } function d(a) { N = a } function e(a) { O = a } function f() { return void 0 !== M ? function() { M(i) } : g() } function g() { var a = setTimeout; return function() { return a(i, 1) } } function i() { for (var a = 0; a < L; a += 2) { (0, U[a])(U[a + 1]), U[a] = void 0, U[a + 1] = void 0 } L = 0 } function j(a, b) { var c = this, d = new this.constructor(l); void 0 === d[W] && B(d); var e = c._state; if (e) { var f = arguments[e - 1]; O(function() { return y(e, d, f, c._result) }) } else w(c, d, a, b); return d } function k(a) { var b = this; if (a && "object" == typeof a && a.constructor === b) return a; var c = new b(l); return s(c, a), c } function l() {} function m() { return new TypeError("You cannot resolve a promise with itself") } function n() { return new TypeError("A promises callback cannot return that same promise.") } function o(a, b, c, d) { try { a.call(b, c, d) } catch (a) { return a } } function p(a, b, c) { O(function(a) { var d = !1, e = o(c, b, function(c) { d || (d = !0, b !== c ? s(a, c) : u(a, c)) }, function(b) { d || (d = !0, v(a, b)) }, "Settle: " + (a._label || " unknown promise"));!d && e && (d = !0, v(a, e)) }, a) } function q(a, b) { b._state === Y ? u(a, b._result) : b._state === Z ? v(a, b._result) : w(b, void 0, function(b) { return s(a, b) }, function(b) { return v(a, b) }) } function r(a, b, d) { b.constructor === a.constructor && d === j && b.constructor.resolve === k ? q(a, b) : void 0 === d ? u(a, b) : c(d) ? p(a, b, d) : u(a, b) } function s(b, c) { if (b === c) v(b, m()); else if (a(c)) { var d = void 0; try { d = c.then } catch (a) { return void v(b, a) } r(b, c, d) } else u(b, c) } function t(a) { a._onerror && a._onerror(a._result), x(a) } function u(a, b) { a._state === X && (a._result = b, a._state = Y, 0 !== a._subscribers.length && O(x, a)) } function v(a, b) { a._state === X && (a._state = Z, a._result = b, O(t, a)) } function w(a, b, c, d) { var e = a._subscribers, f = e.length; a._onerror = null, e[f] = b, e[f + Y] = c, e[f + Z] = d, 0 === f && a._state && O(x, a) } function x(a) { var b = a._subscribers, c = a._state; if (0 !== b.length) { for (var d = void 0, e = void 0, f = a._result, g = 0; g < b.length; g += 3) d = b[g], e = b[g + c], d ? y(c, d, e, f) : e(f); a._subscribers.length = 0 } } function y(a, b, d, e) { var f = c(d), g = void 0, h = void 0, i = !0; if (f) { try { g = d(e) } catch (a) { i = !1, h = a } if (b === g) return void v(b, n()) } else g = e; b._state !== X || (f && i ? s(b, g) : !1 === i ? v(b, h) : a === Y ? u(b, g) : a === Z && v(b, g)) } function z(a, b) { try { b(function(b) { s(a, b) }, function(b) { v(a, b) }) } catch (b) { v(a, b) } } function A() { return $++ } function B(a) { a[W] = $++, a._state = void 0, a._result = void 0, a._subscribers = [] } function C() { return new Error("Array Methods must be provided an Array") } function D(a) { return new _(this, a).promise } function E(a) { var b = this; return new b(K(a) ? function(c, d) { for (var e = a.length, f = 0; f < e; f++) b.resolve(a[f]).then(c, d) } : function(a, b) { return b(new TypeError("You must pass an array to race.")) }) } function F(a) { var b = this, c = new b(l); return v(c, a), c } function G() { throw new TypeError("You must pass a resolver function as the first argument to the promise constructor") } function H() { throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.") } function I() { var a = void 0; if (void 0 !== h) a = h; else if ("undefined" != typeof self) a = self; else try { a = Function("return this")() } catch (a) { throw new Error("polyfill failed because global object is unavailable in this environment") } var b = a.Promise; if (b) { var c = null; try { c = Object.prototype.toString.call(b.resolve()) } catch (a) {} if ("[object Promise]" === c && !b.cast) return } a.Promise = aa } var J = void 0; J = Array.isArray ? Array.isArray : function(a) { return "[object Array]" === Object.prototype.toString.call(a) }; var K = J, L = 0, M = void 0, N = void 0, O = function(a, b) { U[L] = a, U[L + 1] = b, 2 === (L += 2) && (N ? N(i) : V()) }, P = "undefined" != typeof window ? window : void 0, Q = P || {}, R = Q.MutationObserver || Q.WebKitMutationObserver, S = "undefined" == typeof self && "undefined" != typeof process && "[object process]" === {}.toString.call(process), T = "undefined" != typeof Uint8ClampedArray && "undefined" != typeof importScripts && "undefined" != typeof MessageChannel, U = new Array(1e3), V = void 0; V = S ? function() { return function() { return process.nextTick(i) } }() : R ? function() { var a = 0, b = new R(i), c = document.createTextNode(""); return b.observe(c, { characterData: !0 }), function() { c.data = a = ++a % 2 } }() : T ? function() { var a = new MessageChannel; return a.port1.onmessage = i, function() { return a.port2.postMessage(0) } }() : void 0 === P && "function" == typeof b ? function() { try { var a = Function("return this")().require("vertx"); return M = a.runOnLoop || a.runOnContext, f() } catch (a) { return g() } }() : g(); var W = Math.random().toString(36).substring(2), X = void 0, Y = 1, Z = 2, $ = 0, _ = function() { function a(a, b) { this._instanceConstructor = a, this.promise = new a(l), this.promise[W] || B(this.promise), K(b) ? (this.length = b.length, this._remaining = b.length, this._result = new Array(this.length), 0 === this.length ? u(this.promise, this._result) : (this.length = this.length || 0, this._enumerate(b), 0 === this._remaining && u(this.promise, this._result))) : v(this.promise, C()) } return a.prototype._enumerate = function(a) { for (var b = 0; this._state === X && b < a.length; b++) this._eachEntry(a[b], b) }, a.prototype._eachEntry = function(a, b) { var c = this._instanceConstructor, d = c.resolve; if (d === k) { var e = void 0, f = void 0, g = !1; try { e = a.then } catch (a) { g = !0, f = a } if (e === j && a._state !== X) this._settledAt(a._state, b, a._result); else if ("function" != typeof e) this._remaining--, this._result[b] = a; else if (c === aa) { var h = new c(l); g ? v(h, f) : r(h, a, e), this._willSettleAt(h, b) } else this._willSettleAt(new c(function(b) { return b(a) }), b) } else this._willSettleAt(d(a), b) }, a.prototype._settledAt = function(a, b, c) { var d = this.promise; d._state === X && (this._remaining--, a === Z ? v(d, c) : this._result[b] = c), 0 === this._remaining && u(d, this._result) }, a.prototype._willSettleAt = function(a, b) { var c = this; w(a, void 0, function(a) { return c._settledAt(Y, b, a) }, function(a) { return c._settledAt(Z, b, a) }) }, a }(), aa = function() { function a(b) { this[W] = A(), this._result = this._state = void 0, this._subscribers = [], l !== b && ("function" != typeof b && G(), this instanceof a ? z(this, b) : H()) } return a.prototype.catch = function(a) { return this.then(null, a) }, a.prototype.finally = function(a) { var b = this, d = b.constructor; return c(a) ? b.then(function(b) { return d.resolve(a()).then(function() { return b }) }, function(b) { return d.resolve(a()).then(function() { throw b }) }) : b.then(a, a) }, a }(); return aa.prototype.then = j, aa.all = D, aa.race = E, aa.resolve = k, aa.reject = F, aa._setScheduler = d, aa._setAsap = e, aa._asap = O, aa.polyfill = I, aa.Promise = aa, aa }() }() })); i.polyfill(); ! function(a) { a[a.Neutral = 0] = "Neutral", a[a.Yepi = 1] = "Yepi", a[a.Spele = 2] = "Spele", a[a.Funnygames = 3] = "Funnygames", a[a.Kizi = 4] = "Kizi", a[a.PlayCell = 5] = "PlayCell", a[a.GameCell = 6] = "GameCell", a[a.Bild = 7] = "Bild", a[a.Spil = 8] = "Spil", a[a.Admeen = 9] = "Admeen" }(a.BrandingDomain || (a.BrandingDomain = {})); var j, k = function() { function a() {} return a.has = function(a) { var b = a.lastIndexOf("."); if (b <= 0 || b >= a.length - 1) return !1; var c = a.lastIndexOf(".", b - 1); if (c <= 0 || c >= b - 1) return !1; var d = j[a.slice(b + 1)]; return !!d && d.indexOf(" " + a.slice(c + 1, b) + " ") >= 0 }, a.is = function(a) { var b = a.lastIndexOf("."); if (b <= 0 || b >= a.length - 1) return !1; if (a.lastIndexOf(".", b - 1) >= 0) return !1; var c = j[a.slice(b + 1)]; return !!c && c.indexOf(" " + a.slice(0, b) + " ") >= 0 }, a.get = function(a) { var b = a.lastIndexOf("."); if (b <= 0 || b >= a.length - 1) return null; var c = a.lastIndexOf(".", b - 1); if (c <= 0 || c >= b - 1) return null; var d = j[a.slice(b + 1)]; return d ? d.indexOf(" " + a.slice(c + 1, b) + " ") < 0 ? null : a.slice(c + 1) : null }, a }(), l = function() { function a() {} return a.setList = function(a) { j = a || {} }, a.getDomain = function(a) { if (!j) return null; var b = a.match(/\./g); if (b && b.length < 2) return a; var c = this.getTld(a); if (!c) return null; var d = a.length - c.length - 1; return d = a.lastIndexOf(".", d - 1) + 1, a.substring(d) || "" }, a.getTld = function(a) { if (!j) return ""; var b = a.lastIndexOf("."), c = a.substring(b + 1); return j[c.toLowerCase()] ? k.get(a) || c : c }, a.KEY = "Domains", a }(), m = function() { function a() { this.cache = {} } return Object.defineProperty(a, "instance", { get: function() { return void 0 === a.classInstance && (a.classInstance = new a), a.classInstance }, enumerable: !0, configurable: !0 }), a.prototype.load = function(a, b, c) { var d = this; return this.contains(a) ? Promise.reject("Already in cache.") : (this.cache[a] = { url: b, data: null }, this.requestXhr(b, c).then(function(b) { return d.loadComplete(a, b) }).catch(function(b) { return d.remove(a), Promise.reject(b) })) }, a.prototype.loadComplete = function(a, b) { if (!this.contains(a)) return Promise.reject("Item was removed from cache before loading was complete."); try { var c = JSON.parse(b); return this.cache[a].data = c, Promise.resolve(c) } catch (a) { return Promise.reject("There was an error parsing JSON file.") } }, a.prototype.remove = function(a) { this.contains(a) && delete this.cache[a] }, a.prototype.get = function(a) { return this.contains(a) ? this.cache[a].data : null }, a.prototype.contains = function(a) { return this.cache.hasOwnProperty(a) }, a.prototype.isLoading = function(a) { return this.contains(a) && null === this.cache[a].data }, a.prototype.isLoaded = function(a) { return this.contains(a) && null !== this.cache[a].data }, a.prototype.loadScript = function(a, b, c) { return void 0 === b && (b = !0), new Promise(function(b, d) { var e = document.createElement("script"); e.src = a, e.async = !1, e.onload = function() { "function" == typeof c && c(), b() }, document.head.appendChild(e) }) }, a.prototype.requestXhr = function(a, b) { void 0 === b && (b = "application/json"); var c; return window.XMLHttpRequest ? (c = new XMLHttpRequest, new Promise(function(d, e) { c.onreadystatechange = function() { 4 === c.readyState && (200 === c.status ? (d(c.responseText), c.onreadystatechange = null) : c.status > 0 && (e("There was a problem with the request: status " + c.status), c.onreadystatechange = null)) }; try { c.open("GET", a, !0), c.setRequestHeader("Content-Type", b), c.send() } catch (a) { e("Error: Unable to send request, CORS not allowed.") } })) : Promise.reject("Unable to send request, XMLHttpRequest not supported.") }, a }(); ! function(a) { a[a.splashscreen = 0] = "splashscreen", a[a.logo = 1] = "logo", a[a.facebook = 2] = "facebook", a[a.twitter = 3] = "twitter", a[a.playstore = 4] = "playstore", a[a.appstore = 5] = "appstore", a[a.more_games = 6] = "more_games", a[a.download_game = 7] = "download_game", a[a.walkthrough = 8] = "walkthrough", a[a.disclaimer = 9] = "disclaimer", a[a.highscores = 10] = "highscores" }(a.UtmTargets || (a.UtmTargets = {})); var n = function() { function a() {} return a.loadPortalScript = function(a) { a && a.hasOwnProperty("minijuegos") && -1 !== a.minijuegos.indexOf(p.getSourceSite()) && (void 0 !== window.mpConfig ? window.mpConfig.partner = "orange-games" : window.mpConfig = { partner: "orange-games" }, d("https://ext.minijuegosgratis.com/external-host/main.js", Date.now() / 1e3)), a && a.hasOwnProperty("kongregate") && -1 !== a.kongregate.indexOf(p.getSourceSite()) && d("https://cdn1.kongregate.com/javascripts/kongregate_api.js", Date.now() / 1e3, function() { "undefined" != typeof kongregateAPI && kongregateAPI.loadAPI(function() { window.kongregate = kongregateAPI.getAPI()+'a' }) }), a && a.hasOwnProperty("newgrounds") && -1 !== a.newgrounds.indexOf(p.getSourceSite()) && d("https://cdn.fbrq.io/@azerion/splash/assets/scripts/newgroundsio.min.js", Date.now() / 1e3) }, a }(), o = function() { function b() {} return b.preload = function(a) { var c = Promise.all([m.instance.load(l.KEY, p.ASSET_LOCATION + "json/domains.json?v=" + a, "text/plain"), m.instance.load(b.SITELOCK_PORTALS, p.ASSET_LOCATION + "json/sitelock.json?v=" + a, "text/plain")]); return Promise.all([m.instance.load(b.INTERNAL_PORTALS_KEY, p.ASSET_LOCATION + "json/internal.json?v=" + a, "text/plain"), m.instance.load(b.CONTRACTED_PORTALS_KEY, p.ASSET_LOCATION + "json/contracted.json?v=" + a, "text/plain"), m.instance.load(b.SPECIAL_PORTALS_KEY, p.ASSET_LOCATION + "json/special.json?v=" + a, "text/plain"), m.instance.load(b.GAME_ICONS_KEY, p.ASSET_LOCATION + "json/games.json?v=" + a, "text/plain")]), c.then(function(a) { var c = a[0], d = a[1]; l.setList(c), n.loadPortalScript(d), b.setSiteLock(d) }).catch(function() { console.warn("Unable to parse json") }) }, b.setSiteLock = function(a) { b.siteLocks = a }, Object.defineProperty(b, "brandingLogoUrl", { get: function() { var c; switch (p.isOnDevice() || b.isAirfi() ? p.ASSET_LOCATION = "assets/" : "fbrq.io" === p.getSourceSite(!0) && (p.ASSET_LOCATION = "https://" + window.location.host + "/@azerion/splash/assets/"), p.getBrandingDomain()) { case a.BrandingDomain.Spele: c = "spele"; break; case a.BrandingDomain.PlayCell: c = "playcell"; break; case a.BrandingDomain.GameCell: c = "gamecell"; break; case a.BrandingDomain.Yepi: c = "yepi"; break; case a.BrandingDomain.Spil: c = "spil"; break; case a.BrandingDomain.Admeen: c = "admeen"; break; case a.BrandingDomain.Bild: c = "bild"; break; default: case a.BrandingDomain.Kizi: c = "kizi"; break; case a.BrandingDomain.Funnygames: c = "funnygames" } return p.ASSET_LOCATION + "images/branding_logo_" + c + "_small.png" }, enumerable: !0, configurable: !0 }), Object.defineProperty(b, "brandingBackgroundColor", { get: function() { var b; switch (p.getBrandingDomain()) { case a.BrandingDomain.Spele: b = "#4a72ad"; break; case a.BrandingDomain.PlayCell: b = "#52a1e1"; break; case a.BrandingDomain.GameCell: b = "#c600b2"; break; case a.BrandingDomain.Yepi: b = "#0573a7"; break; case a.BrandingDomain.Spil: b = "#0C486C"; break; case a.BrandingDomain.Admeen: b = "#4267B2"; break; case a.BrandingDomain.Bild: b = "#de0000"; break; default: case a.BrandingDomain.Kizi: b = "#012f50"; break; case a.BrandingDomain.Funnygames: b = "#33b0ff" } return b }, enumerable: !0, configurable: !0 }), b.openCampaignLink = function(c, d) { if (!p.isOnDevice() && !b.isSpecial() && b.outGoingLinksAllowed()) { var e, f, g = p.getSourceSite(), h = p.isOnDevice() ? "https://" : "//"; switch (p.getBrandingDomain()) { case a.BrandingDomain.Spele: e = h + "www.spele.nl"; break; case a.BrandingDomain.Yepi: e = h + "www.yepi.com"; break; case a.BrandingDomain.Admeen: return e = "https://media.admeen.com/branding/link.php", void((f = window.open(e, "_blank")) && f.focus && f.focus()); case a.BrandingDomain.PlayCell: e = h + "www.playcell.com"; break; case a.BrandingDomain.GameCell: e = h + "www.gamecell.com"; break; default: case a.BrandingDomain.Kizi: e = "http://www.kizi.com"; break; case a.BrandingDomain.Bild: return void((f = window.open(h + "www.bildspielt.de", "_blank")) && f.focus && f.focus()); case a.BrandingDomain.Funnygames: e = h + "www.funnygames.nu" } var i = "string" == typeof d ? d : a.UtmTargets[d]; f = window.open(e + "/?utm_source=" + g + "&utm_medium=html5&utm_term=" + c + "&utm_content=" + i + "&utm_campaign=Gamedistribution", "_blank"), f && f.focus && f.focus() } }, b.isInternal = function() { return b.hostMatchesList(m.instance.get(b.INTERNAL_PORTALS_KEY)) }, b.isContracted = function() { return b.hostMatchesList(m.instance.get(b.CONTRACTED_PORTALS_KEY)) }, b.isSpecial = function() { return b.hostMatchesList(m.instance.get(b.SPECIAL_PORTALS_KEY)) }, b.isAdmeen = function() { if (!b.siteLocks || !b.siteLocks.hasOwnProperty("admeen")) return !1; var a = b.siteLocks.admeen; return b.hostMatchesList(a) }, b.isKongregate = function() { if (!b.siteLocks || !b.siteLocks.hasOwnProperty("kongregate")) return !1; var a = b.siteLocks.kongregate; return b.hostMatchesList(a) }, b.isNewgrounds = function() { if (!b.siteLocks || !b.siteLocks.hasOwnProperty("newgrounds")) return !1; var a = b.siteLocks.newgrounds; return b.hostMatchesList(a) }, b.isBild = function() { return "bild.fbrq.io" === window.location.host || -1 !== window.location.host.indexOf("contentfleet.com") }, b.isBip = function() { return -1 !== window.location.search.indexOf("bipgaming") || "bip.fbrq.io" === window.location.host }, b.isPlaycellApp = function() { return -1 !== window.location.search.indexOf("playcellApp") }, b.isSpil = function() { return -1 !== document.referrer.indexOf("gameplayer.io") }, b.isAirfi = function() { return !!window.hasOwnProperty("airfi") && window.airfi }, b.outGoingLinksAllowed = function() { return !(b.isAirfi() || b.isSpecial() || b.isContracted()) && (!window.hasOwnProperty("fbrqLA") || window.fbrqLA) }, b.hostMatchesList = function(a) { a = a || []; for (var b = p.getSourceSite(), c = 0; c < a.length; c++) if (b === a[c]) return !0; return !1 }, b.LOGO_KEY = "branding_logo", b.INTERNAL_PORTALS_KEY = "branding_portals", b.CONTRACTED_PORTALS_KEY = "branding_contracted", b.SPECIAL_PORTALS_KEY = "branding_special", b.SITELOCK_PORTALS = "sitelock_portals", b.GAME_ICONS_KEY = "more_games", b.DOMAIN_OVERWRITE = null, b }(), p = function() { function b() {} return b.getSourceSite = function(a) { void 0 === a && (a = !1); var c = document.referrer || window.location.host; if (a && (c = window.location.host), -1 !== c.indexOf("embed.gamedistribution.com") && -1 !== window.location.search.indexOf("gd_sdk_referrer_url") && (c = b.getUrlParameter("gd_sdk_referrer_url") || c), c = decodeURIComponent(c), o.isBild()) return "bildspielt.de"; if (o.isBip()) return "bipgaming.com"; o.isSpil() && (c = b.getReferrer(c)), c = c.indexOf("://") > -1 ? c.split("/")[2] : c.split("/")[0], c = c.split(":")[0]; var d = l.getDomain(c); return null !== d ? d : (3 === c.split(".").length && (c = c.substr(c.indexOf(".") + 1)), c) }, b.getBrandingDomain = function() { if (window.hasOwnProperty("fbrqBD") && window.fbrqBD in a.BrandingDomain) return window.fbrqBD; if (o.DOMAIN_OVERWRITE) return o.DOMAIN_OVERWRITE; var c = b.getSourceSite(); if (o.isAdmeen()) return a.BrandingDomain.Admeen; if (o.isPlaycellApp() || o.isBip()) return a.BrandingDomain.PlayCell; switch (c) { case "spele.nl": return a.BrandingDomain.Spele; case "yepi.com": return a.BrandingDomain.Yepi; case "oyunskor.com": case "barbioyunu.com.tr": case "bebekoyunu.com.tr": case "oyunkolu.com": case "oyungemisi.com": case "oyunlar1.com": case "oyunkuzusu.com": case "kraloyun.com": case "rekoroyun.com": case "oyundedem.com": case "oyunoyna.com": case "pastaoyunu.com.tr": case "playcell.com": return a.BrandingDomain.PlayCell; case "gamecell.com": return a.BrandingDomain.GameCell; case "playxl.com": return a.BrandingDomain.Admeen; default: case "kizi.com": return a.BrandingDomain.Kizi; case "bildspielt.de": return a.BrandingDomain.Bild; case "funnygames.nl": return a.BrandingDomain.Funnygames } }, b.getReferrer = function(a) { return -1 !== a.indexOf("?ref=") ? a.substr(a.indexOf("?ref=") + 5) : a }, b.inIframe = function() { try { return window.self !== window.top } catch (a) { return !0 } }, b.getDomain = function(a) { var b = document.createElement("a"); return b.href = a, b.origin }, b.isOnDevice = function() { return void 0 !== window.cordova && !/(gamedistribution\.com)/.test(window.location.hostname) }, b.isTc = function() { return /(teamcity\.azerdev\.com)/.test(window.location.host) }, b.getRandomRange = function(a, b) { return Math.random() * (b - a) + a | 0 }, b.getUrlParameter = function(a) { a = a.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var b = new RegExp("[\\?&]" + a + "=([^&#]*)"), c = b.exec(location.search); return null === c ? "" : decodeURIComponent(c[1].replace(/\+/g, " ")) }, b.intTimeToString = function(a) { var b = Math.floor(a / 3600), c = Math.floor(a % 3600 / 60), d = a % 60; return (b < 10 ? "0" + b : b.toString()) + ":" + (c < 10 ? "0" + c : c.toString()) + ":" + (d < 10 ? "0" + d : d.toString()) }, b.ASSET_LOCATION = window.hasOwnProperty("fbrqSA") && !0 === window.fbrqSA ? "assets/" : "cdn.fbrq/@azerion/splash/assets/", b }(), q = function() { function a() { var a = p.isOnDevice() ? "https://" : "//";! function(a, b, c, d, e, f, g) { a.GoogleAnalyticsObject = e, a[e] = a[e] ? a[e] : function() { (a[e].q = a[e].q || []).push(arguments) }, a[e].l = Date.now(), f = b.createElement(c), g = b.getElementsByTagName(c)[0], f.async = 1, f.src = d, g.parentNode.insertBefore(f, g) }(window, document, "script", a + "www.google-analytics.com/analytics.js", "ga") } return a.prototype.setup = function(a, b, c, d, e) { if (void 0 === d && (d = "auto"), void 0 === e && (e = 100), ga("create", a, d, { sampleRate: e }), p.isOnDevice() && ga("set", "checkProtocolTask", null), void 0 !== b && ga("set", "appName", b), void 0 !== b && ga("set", "appVersion", c), ga("send", "pageview"), "auto" !== d) { var f = { name: "fbrq", sampleRate: 1 }; for (var g in d) d.hasOwnProperty(g) && (f[g] = d[g]); ga("create", "UA-602359297-50", f) } else ga("create", "UA-603594297-50", d, "fbrq", { sampleRate: 1 }); if (o.isSpil()) { var h = p.getReferrer(decodeURIComponent(document.referrer)); ga("fbrq.set", "referrer", h), ga("set", "referrer", h) } return p.isOnDevice() && ga("fbrq.set", "checkProtocolTask", null), ga("fbrq.set", "appName", "All"), ga("fbrq.send", "pageview"), ga }, a.prototype.sendScreenView = function(a) { ["send", "fbrq.send"].forEach(function(b) { ga(b, "screenview", { screenName: a }) }) }, a.prototype.sendGenericEvent = function(a, b, c) { ["send", "fbrq.send"].forEach(function(d) { ga(d, "event", a, b, c) }) }, a }(), r = c(function(a, c) { ! function(c) { a.exports = function() { return function a(c, d, e) { function f(h, i) { if (!d[h]) { if (!c[h]) { var j = "function" == typeof b && b; if (!i && j) return j(h, !0); if (g) return g(h, !0); var k = new Error("Cannot find module '" + h + "'"); throw k.code = "MODULE_NOT_FOUND", k } var l = d[h] = { exports: {} }; c[h][0].call(l.exports, function(a) { var b = c[h][1][a]; return f(b || a) }, l, l.exports, a, c, d, e) } return d[h].exports } for (var g = "function" == typeof b && b, h = 0; h < e.length; h++) f(e[h]); return f }({ 1: [function(a, b, c) { (function() { var a = this || Function("return this")(), d = function() { function d() {} function e(a, b) { var c; for (c in a) Object.hasOwnProperty.call(a, c) && b(c) } function f(a, b) { return e(b, function(c) { a[c] = b[c] }), a } function g(a, b) { e(b, function(c) { void 0 === a[c] && (a[c] = b[c]) }) } function h(a, b, c, d, e, f, g) { var h, j, k, l = a < f ? 0 : (a - f) / e; for (h in b) b.hasOwnProperty(h) && (j = g[h], k = "function" == typeof j ? j : n[j], b[h] = i(c[h], d[h], k, l)); return b } function i(a, b, c, d) { return a + (b - a) * c(d) } function j(a, b) { var c = m.prototype.filter, d = a._filterArgs; e(c, function(e) { void 0 !== c[e][b] && c[e][b].apply(a, d) }) } function k(a, b, c, d, e, f, g, i, k, l, m) { t = b + c + d, u = Math.min(m || s(), t), v = u >= t, w = d - (t - u), a.isPlaying() && (v ? (k(g, a._attachment, w), a.stop(!0)) : (a._scheduleId = l(a._timeoutHandler, q), j(a, "beforeTween"), u < b + c ? h(1, e, f, g, 1, 1, i) : h(u, e, f, g, d, b + c, i), j(a, "afterTween"), k(e, a._attachment, w))) } function l(a, b) { var c = {}, d = typeof b; return "string" === d || "function" === d ? e(a, function(a) { c[a] = b }) : e(a, function(a) { c[a] || (c[a] = b[a] || p) }), c } function m(a, b) { this._currentState = a || {}, this._configured = !1, this._scheduleFunction = o, void 0 !== b && this.setConfig(b) } var n, o, p = "linear", q = 1e3 / 60, r = Date.now ? Date.now : function() { return +new Date }, s = "undefined" != typeof SHIFTY_DEBUG_NOW ? SHIFTY_DEBUG_NOW : r; o = "undefined" != typeof window ? window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || window.mozCancelRequestAnimationFrame && window.mozRequestAnimationFrame || setTimeout : setTimeout; var t, u, v, w; return m.prototype.tween = function(a) { return this._isTweening ? this : (void 0 === a && this._configured || this.setConfig(a), this._timestamp = s(), this._start(this.get(), this._attachment), this.resume()) }, m.prototype.setConfig = function(a) { a = a || {}, this._configured = !0, this._attachment = a.attachment, this._pausedAtTime = null, this._scheduleId = null, this._delay = a.delay || 0, this._start = a.start || d, this._step = a.step || d, this._finish = a.finish || d, this._duration = a.duration || 500, this._currentState = f({}, a.from || this.get()), this._originalState = this.get(), this._targetState = f({}, a.to || this.get()); var b = this; this._timeoutHandler = function() { k(b, b._timestamp, b._delay, b._duration, b._currentState, b._originalState, b._targetState, b._easing, b._step, b._scheduleFunction) }; var c = this._currentState, e = this._targetState; return g(e, c), this._easing = l(c, a.easing || p), this._filterArgs = [c, this._originalState, e, this._easing], j(this, "tweenCreated"), this }, m.prototype.get = function() { return f({}, this._currentState) }, m.prototype.set = function(a) { this._currentState = a }, m.prototype.pause = function() { return this._pausedAtTime = s(), this._isPaused = !0, this }, m.prototype.resume = function() { return this._isPaused && (this._timestamp += s() - this._pausedAtTime), this._isPaused = !1, this._isTweening = !0, this._timeoutHandler(), this }, m.prototype.seek = function(a) { a = Math.max(a, 0); var b = s(); return this._timestamp + a === 0 ? this : (this._timestamp = b - a, this.isPlaying() || (this._isTweening = !0, this._isPaused = !1, k(this, this._timestamp, this._delay, this._duration, this._currentState, this._originalState, this._targetState, this._easing, this._step, this._scheduleFunction, b), this.pause()), this) }, m.prototype.stop = function(b) { return this._isTweening = !1, this._isPaused = !1, this._timeoutHandler = d, (a.cancelAnimationFrame || a.webkitCancelAnimationFrame || a.oCancelAnimationFrame || a.msCancelAnimationFrame || a.mozCancelRequestAnimationFrame || a.clearTimeout)(this._scheduleId), b && (j(this, "beforeTween"), h(1, this._currentState, this._originalState, this._targetState, 1, 0, this._easing), j(this, "afterTween"), j(this, "afterTweenEnd"), this._finish.call(this, this._currentState, this._attachment)), this }, m.prototype.isPlaying = function() { return this._isTweening && !this._isPaused }, m.prototype.setScheduleFunction = function(a) { this._scheduleFunction = a }, m.prototype.dispose = function() { var a; for (a in this) this.hasOwnProperty(a) && delete this[a] }, m.prototype.filter = {}, m.prototype.formula = { linear: function(a) { return a } }, n = m.prototype.formula, f(m, { now: s, each: e, tweenProps: h, tweenProp: i, applyFilter: j, shallowCopy: f, defaults: g, composeEasingObject: l }), "function" == typeof SHIFTY_DEBUG_NOW && (a.timeoutHandler = k), "object" == typeof c ? b.exports = m : void 0 === a.Tweenable && (a.Tweenable = m), m }(); ! function() { d.shallowCopy(d.prototype.formula, { easeInQuad: function(a) { return Math.pow(a, 2) }, easeOutQuad: function(a) { return -(Math.pow(a - 1, 2) - 1) }, easeInOutQuad: function(a) { return (a /= .5) < 1 ? .5 * Math.pow(a, 2) : -.5 * ((a -= 2) * a - 2) }, easeInCubic: function(a) { return Math.pow(a, 3) }, easeOutCubic: function(a) { return Math.pow(a - 1, 3) + 1 }, easeInOutCubic: function(a) { return (a /= .5) < 1 ? .5 * Math.pow(a, 3) : .5 * (Math.pow(a - 2, 3) + 2) }, easeInQuart: function(a) { return Math.pow(a, 4) }, easeOutQuart: function(a) { return -(Math.pow(a - 1, 4) - 1) }, easeInOutQuart: function(a) { return (a /= .5) < 1 ? .5 * Math.pow(a, 4) : -.5 * ((a -= 2) * Math.pow(a, 3) - 2) }, easeInQuint: function(a) { return Math.pow(a, 5) }, easeOutQuint: function(a) { return Math.pow(a - 1, 5) + 1 }, easeInOutQuint: function(a) { return (a /= .5) < 1 ? .5 * Math.pow(a, 5) : .5 * (Math.pow(a - 2, 5) + 2) }, easeInSine: function(a) { return 1 - Math.cos(a * (Math.PI / 2)) }, easeOutSine: function(a) { return Math.sin(a * (Math.PI / 2)) }, easeInOutSine: function(a) { return -.5 * (Math.cos(Math.PI * a) - 1) }, easeInExpo: function(a) { return 0 === a ? 0 : Math.pow(2, 10 * (a - 1)) }, easeOutExpo: function(a) { return 1 === a ? 1 : 1 - Math.pow(2, -10 * a) }, easeInOutExpo: function(a) { return 0 === a ? 0 : 1 === a ? 1 : (a /= .5) < 1 ? .5 * Math.pow(2, 10 * (a - 1)) : .5 * (2 - Math.pow(2, -10 * --a)) }, easeInCirc: function(a) { return -(Math.sqrt(1 - a * a) - 1) }, easeOutCirc: function(a) { return Math.sqrt(1 - Math.pow(a - 1, 2)) }, easeInOutCirc: function(a) { return (a /= .5) < 1 ? -.5 * (Math.sqrt(1 - a * a) - 1) : .5 * (Math.sqrt(1 - (a -= 2) * a) + 1) }, easeOutBounce: function(a) { return a < 1 / 2.75 ? 7.5625 * a * a : a < 2 / 2.75 ? 7.5625 * (a -= 1.5 / 2.75) * a + .75 : a < 2.5 / 2.75 ? 7.5625 * (a -= 2.25 / 2.75) * a + .9375 : 7.5625 * (a -= 2.625 / 2.75) * a + .984375 }, easeInBack: function(a) { var b = 1.70158; return a * a * ((b + 1) * a - b) }, easeOutBack: function(a) { var b = 1.70158; return (a -= 1) * a * ((b + 1) * a + b) + 1 }, easeInOutBack: function(a) { var b = 1.70158; return (a /= .5) < 1 ? a * a * ((1 + (b *= 1.525)) * a - b) * .5 : .5 * ((a -= 2) * a * ((1 + (b *= 1.525)) * a + b) + 2) }, elastic: function(a) { return -1 * Math.pow(4, -8 * a) * Math.sin((6 * a - 1) * (2 * Math.PI) / 2) + 1 }, swingFromTo: function(a) { var b = 1.70158; return (a /= .5) < 1 ? a * a * ((1 + (b *= 1.525)) * a - b) * .5 : .5 * ((a -= 2) * a * ((1 + (b *= 1.525)) * a + b) + 2) }, swingFrom: function(a) { var b = 1.70158; return a * a * ((b + 1) * a - b) }, swingTo: function(a) { var b = 1.70158; return (a -= 1) * a * ((b + 1) * a + b) + 1 }, bounce: function(a) { return a < 1 / 2.75 ? 7.5625 * a * a : a < 2 / 2.75 ? 7.5625 * (a -= 1.5 / 2.75) * a + .75 : a < 2.5 / 2.75 ? 7.5625 * (a -= 2.25 / 2.75) * a + .9375 : 7.5625 * (a -= 2.625 / 2.75) * a + .984375 }, bouncePast: function(a) { return a < 1 / 2.75 ? 7.5625 * a * a : a < 2 / 2.75 ? 2 - (7.5625 * (a -= 1.5 / 2.75) * a + .75) : a < 2.5 / 2.75 ? 2 - (7.5625 * (a -= 2.25 / 2.75) * a + .9375) : 2 - (7.5625 * (a -= 2.625 / 2.75) * a + .984375) }, easeFromTo: function(a) { return (a /= .5) < 1 ? .5 * Math.pow(a, 4) : -.5 * ((a -= 2) * Math.pow(a, 3) - 2) }, easeFrom: function(a) { return Math.pow(a, 4) }, easeTo: function(a) { return Math.pow(a, .25) } }) }(), function() { function a(a, b, c, d, e, f) { function g(a) { return ((l * a + m) * a + n) * a } function h(a) { return ((o * a + p) * a + q) * a } function i(a) { return (3 * l * a + 2 * m) * a + n } function j(a) { return a >= 0 ? a : 0 - a } function k(a, b) { var c, d, e, f, h, k; for (e = a, k = 0; k < 8; k++) { if (f = g(e) - a, j(f) < b) return e; if (h = i(e), j(h) < 1e-6) break; e -= f / h } if (c = 0, d = 1, (e = a) < c) return c; if (e > d) return d; for (; c < d;) { if (f = g(e), j(f - a) < b) return e; a > f ? c = e : d = e, e = .5 * (d - c) + c } return e } var l = 0, m = 0, n = 0, o = 0, p = 0, q = 0; return n = 3 * b, m = 3 * (d - b) - n, l = 1 - n - m, q = 3 * c, p = 3 * (e - c) - q, o = 1 - q - p, function(a, b) { return h(k(a, b)) }(a, function(a) { return 1 / (200 * a) }(f)) } function b(b, c, d, e) { return function(f) { return a(f, b, c, d, e, 1) } } d.setBezierFunction = function(a, c, e, f, g) { var h = b(c, e, f, g); return h.displayName = a, h.x1 = c, h.y1 = e, h.x2 = f, h.y2 = g, d.prototype.formula[a] = h }, d.unsetBezierFunction = function(a) { delete d.prototype.formula[a] } }(), function() { function a(a, b, c, e, f, g) { return d.tweenProps(e, b, a, c, 1, g, f) } var b = new d; b._filterArgs = [], d.interpolate = function(c, e, f, g, h) { var i = d.shallowCopy({}, c), j = h || 0, k = d.composeEasingObject(c, g || "linear"); b.set({}); var l = b._filterArgs; l.length = 0, l[0] = i, l[1] = c, l[2] = e, l[3] = k, d.applyFilter(b, "tweenCreated"), d.applyFilter(b, "beforeTween"); var m = a(c, i, e, f, k, j); return d.applyFilter(b, "afterTween"), m } }(), function(a) { function b(a, b) { var c, d = [], e = a.length; for (c = 0; c < e; c++) d.push("_" + b + "_" + c); return d } function c(a) { var b = a.match(v); return b ? (1 === b.length || a.charAt(0).match(u)) && b.unshift("") : b = ["", ""], b.join(A) } function d(b) { a.each(b, function(a) { var c = b[a]; "string" == typeof c && c.match(z) && (b[a] = e(c)) }) } function e(a) { return i(z, a, f) } function f(a) { var b = g(a); return "rgb(" + b[0] + "," + b[1] + "," + b[2] + ")" } function g(a) { return a = a.replace(/#/, ""), 3 === a.length && (a = a.split(""), a = a[0] + a[0] + a[1] + a[1] + a[2] + a[2]), B[0] = h(a.substr(0, 2)), B[1] = h(a.substr(2, 2)), B[2] = h(a.substr(4, 2)), B } function h(a) { return parseInt(a, 16) } function i(a, b, c) { var d = b.match(a), e = b.replace(a, A); if (d) for (var f, g = d.length, h = 0; h < g; h++) f = d.shift(), e = e.replace(A, c(f)); return e } function j(a) { return i(x, a, k) } function k(a) { for (var b = a.match(w), c = b.length, d = a.match(y)[0], e = 0; e < c; e++) d += parseInt(b[e], 10) + ","; return d = d.slice(0, -1) + ")" } function l(d) { var e = {}; return a.each(d, function(a) { var f = d[a]; if ("string" == typeof f) { var g = r(f); e[a] = { formatString: c(f), chunkNames: b(g, a) } } }), e } function m(b, c) { a.each(c, function(a) { for (var d = b[a], e = r(d), f = e.length, g = 0; g < f; g++) b[c[a].chunkNames[g]] = +e[g]; delete b[a] }) } function n(b, c) { a.each(c, function(a) { var d = b[a], e = o(b, c[a].chunkNames), f = p(e, c[a].chunkNames); d = q(c[a].formatString, f), b[a] = j(d) }) } function o(a, b) { for (var c, d = {}, e = b.length, f = 0; f < e; f++) c = b[f], d[c] = a[c], delete a[c]; return d } function p(a, b) { C.length = 0; for (var c = b.length, d = 0; d < c; d++) C.push(a[b[d]]); return C } function q(a, b) { for (var c = a, d = b.length, e = 0; e < d; e++) c = c.replace(A, +b[e].toFixed(4)); return c } function r(a) { return a.match(w) } function s(b, c) { a.each(c, function(a) { var d, e = c[a], f = e.chunkNames, g = f.length, h = b[a]; if ("string" == typeof h) { var i = h.split(" "), j = i[i.length - 1]; for (d = 0; d < g; d++) b[f[d]] = i[d] || j } else for (d = 0; d < g; d++) b[f[d]] = h; delete b[a] }) } function t(b, c) { a.each(c, function(a) { var d = c[a], e = d.chunkNames, f = e.length, g = b[e[0]]; if ("string" == typeof g) { for (var h = "", i = 0; i < f; i++) h += " " + b[e[i]], delete b[e[i]]; b[a] = h.substr(1) } else b[a] = g }) } var u = /(\d|\-|\.)/, v = /([^\-0-9\.]+)/g, w = /[0-9.\-]+/g, x = new RegExp("rgb\\(" + w.source + /,\s*/.source + w.source + /,\s*/.source + w.source + "\\)", "g"), y = /^.*\(/, z = /#([0-9]|[a-f]){3,6}/gi, A = "VAL", B = [], C = []; a.prototype.filter.token = { tweenCreated: function(a, b, c, e) { d(a), d(b), d(c), this._tokenData = l(a) }, beforeTween: function(a, b, c, d) { s(d, this._tokenData), m(a, this._tokenData), m(b, this._tokenData), m(c, this._tokenData) }, afterTween: function(a, b, c, d) { n(a, this._tokenData), n(b, this._tokenData), n(c, this._tokenData), t(d, this._tokenData) } } }(d) }).call(null) }, {}], 2: [function(a, b, c) { var d = a("./shape"), e = a("./utils"), f = function(a, b) { this._pathTemplate = "M 50,50 m 0,-{radius} a {radius},{radius} 0 1 1 0,{2radius} a {radius},{radius} 0 1 1 0,-{2radius}", this.containerAspectRatio = 1, d.apply(this, arguments) }; f.prototype = new d, f.prototype.constructor = f, f.prototype._pathString = function(a) { var b = a.strokeWidth; a.trailWidth && a.trailWidth > a.strokeWidth && (b = a.trailWidth); var c = 50 - b / 2; return e.render(this._pathTemplate, { radius: c, "2radius": 2 * c }) }, f.prototype._trailString = function(a) { return this._pathString(a) }, b.exports = f }, { "./shape": 7, "./utils": 9 }], 3: [function(a, b, c) { var d = a("./shape"), e = a("./utils"), f = function(a, b) { this._pathTemplate = "M 0,{center} L 100,{center}", d.apply(this, arguments) }; f.prototype = new d, f.prototype.constructor = f, f.prototype._initializeSvg = function(a, b) { a.setAttribute("viewBox", "0 0 100 " + b.strokeWidth), a.setAttribute("preserveAspectRatio", "none") }, f.prototype._pathString = function(a) { return e.render(this._pathTemplate, { center: a.strokeWidth / 2 }) }, f.prototype._trailString = function(a) { return this._pathString(a) }, b.exports = f }, { "./shape": 7, "./utils": 9 }], 4: [function(a, b, c) { b.exports = { Line: a("./line"), Circle: a("./circle"), SemiCircle: a("./semicircle"), Square: a("./square"), Path: a("./path"), Shape: a("./shape"), utils: a("./utils") } }, { "./circle": 2, "./line": 3, "./path": 5, "./semicircle": 6, "./shape": 7, "./square": 8, "./utils": 9 }], 5: [function(a, b, c) { var d = a("shifty"), e = a("./utils"), f = { easeIn: "easeInCubic", easeOut: "easeOutCubic", easeInOut: "easeInOutCubic" }, g = function a(b, c) { if (!(this instanceof a)) throw new Error("Constructor was called without new keyword"); c = e.extend({ duration: 800, easing: "linear", from: {}, to: {}, step: function() {} }, c); var d; d = e.isString(b) ? document.querySelector(b) : b, this.path = d, this._opts = c, this._tweenable = null; var f = this.path.getTotalLength(); this.path.style.strokeDasharray = f + " " + f, this.set(0) }; g.prototype.value = function() { var a = this._getComputedDashOffset(), b = this.path.getTotalLength(), c = 1 - a / b; return parseFloat(c.toFixed(6), 10) }, g.prototype.set = function(a) { this.stop(), this.path.style.strokeDashoffset = this._progressToOffset(a); var b = this._opts.step; if (e.isFunction(b)) { var c = this._easing(this._opts.easing); b(this._calculateTo(a, c), this._opts.shape || this, this._opts.attachment) } }, g.prototype.stop = function() { this._stopTween(), this.path.style.strokeDashoffset = this._getComputedDashOffset() }, g.prototype.animate = function(a, b, c) { b = b || {}, e.isFunction(b) && (c = b, b = {}); var f = e.extend({}, b), g = e.extend({}, this._opts); b = e.extend(g, b); var h = this._easing(b.easing), i = this._resolveFromAndTo(a, h, f); this.stop(), this.path.getBoundingClientRect(); var j = this._getComputedDashOffset(), k = this._progressToOffset(a), l = this; this._tweenable = new d, this._tweenable.tween({ from: e.extend({ offset: j }, i.from), to: e.extend({ offset: k }, i.to), duration: b.duration, easing: h, step: function(a) { l.path.style.strokeDashoffset = a.offset; var c = b.shape || l; b.step(a, c, b.attachment) }, finish: function(a) { e.isFunction(c) && c() } }) }, g.prototype._getComputedDashOffset = function() { var a = window.getComputedStyle(this.path, null); return parseFloat(a.getPropertyValue("stroke-dashoffset"), 10) }, g.prototype._progressToOffset = function(a) { var b = this.path.getTotalLength(); return b - a * b }, g.prototype._resolveFromAndTo = function(a, b, c) { return c.from && c.to ? { from: c.from, to: c.to } : { from: this._calculateFrom(b), to: this._calculateTo(a, b) } }, g.prototype._calculateFrom = function(a) { return d.interpolate(this._opts.from, this._opts.to, this.value(), a) }, g.prototype._calculateTo = function(a, b) { return d.interpolate(this._opts.from, this._opts.to, a, b) }, g.prototype._stopTween = function() { null !== this._tweenable && (this._tweenable.stop(), this._tweenable = null) }, g.prototype._easing = function(a) { return f.hasOwnProperty(a) ? f[a] : a }, b.exports = g }, { "./utils": 9, shifty: 1 }], 6: [function(a, b, c) { var d = a("./shape"), e = a("./circle"), f = a("./utils"), g = function(a, b) { this._pathTemplate = "M 50,50 m -{radius},0 a {radius},{radius} 0 1 1 {2radius},0", this.containerAspectRatio = 2, d.apply(this, arguments) }; g.prototype = new d, g.prototype.constructor = g, g.prototype._initializeSvg = function(a, b) { a.setAttribute("viewBox", "0 0 100 50") }, g.prototype._initializeTextContainer = function(a, b, c) { a.text.style && (c.style.top = "auto", c.style.bottom = "0", a.text.alignToBottom ? f.setStyle(c, "transform", "translate(-50%, 0)") : f.setStyle(c, "transform", "translate(-50%, 50%)")) }, g.prototype._pathString = e.prototype._pathString, g.prototype._trailString = e.prototype._trailString, b.exports = g }, { "./circle": 2, "./shape": 7, "./utils": 9 }], 7: [function(a, b, c) { var d = a("./path"), e = a("./utils"), f = function a(b, c) { if (!(this instanceof a)) throw new Error("Constructor was called without new keyword"); if (0 !== arguments.length) { this._opts = e.extend({ color: "#555", strokeWidth: 1, trailColor: null, trailWidth: null, fill: null, text: { style: { color: null, position: "absolute", left: "50%", top: "50%", padding: 0, margin: 0, transform: { prefix: !0, value: "translate(-50%, -50%)" } }, autoStyleContainer: !0, alignToBottom: !0, value: null, className: "progressbar-text" }, svgStyle: { display: "block", width: "100%" }, warnings: !1 }, c, !0), e.isObject(c) && void 0 !== c.svgStyle && (this._opts.svgStyle = c.svgStyle), e.isObject(c) && e.isObject(c.text) && void 0 !== c.text.style && (this._opts.text.style = c.text.style); var f, g = this._createSvgView(this._opts); if (!(f = e.isString(b) ? document.querySelector(b) : b)) throw new Error("Container does not exist: " + b); this._container = f, this._container.appendChild(g.svg), this._opts.warnings && this._warnContainerAspectRatio(this._container), this._opts.svgStyle && e.setStyles(g.svg, this._opts.svgStyle), this.svg = g.svg, this.path = g.path, this.trail = g.trail, this.text = null; var h = e.extend({ attachment: void 0, shape: this }, this._opts); this._progressPath = new d(g.path, h), e.isObject(this._opts.text) && null !== this._opts.text.value && this.setText(this._opts.text.value) } }; f.prototype.animate = function(a, b, c) { if (null === this._progressPath) throw new Error("Object is destroyed"); this._progressPath.animate(a, b, c) }, f.prototype.stop = function() { if (null === this._progressPath) throw new Error("Object is destroyed"); void 0 !== this._progressPath && this._progressPath.stop() }, f.prototype.destroy = function() { if (null === this._progressPath) throw new Error("Object is destroyed"); this.stop(), this.svg.parentNode.removeChild(this.svg), this.svg = null, this.path = null, this.trail = null, this._progressPath = null, null !== this.text && (this.text.parentNode.removeChild(this.text), this.text = null) }, f.prototype.set = function(a) { if (null === this._progressPath) throw new Error("Object is destroyed"); this._progressPath.set(a) }, f.prototype.value = function() { if (null === this._progressPath) throw new Error("Object is destroyed"); return void 0 === this._progressPath ? 0 : this._progressPath.value() }, f.prototype.setText = function(a) { if (null === this._progressPath) throw new Error("Object is destroyed"); null === this.text && (this.text = this._createTextContainer(this._opts, this._container), this._container.appendChild(this.text)), e.isObject(a) ? (e.removeChildren(this.text), this.text.appendChild(a)) : this.text.innerHTML = a }, f.prototype._createSvgView = function(a) { var b = document.createElementNS("http://www.w3.org/2000/svg", "svg"); this._initializeSvg(b, a); var c = null; (a.trailColor || a.trailWidth) && (c = this._createTrail(a), b.appendChild(c)); var d = this._createPath(a); return b.appendChild(d), { svg: b, path: d, trail: c } }, f.prototype._initializeSvg = function(a, b) { a.setAttribute("viewBox", "0 0 100 100") }, f.prototype._createPath = function(a) { var b = this._pathString(a); return this._createPathElement(b, a) }, f.prototype._createTrail = function(a) { var b = this._trailString(a), c = e.extend({}, a); return c.trailColor || (c.trailColor = "#eee"), c.trailWidth || (c.trailWidth = c.strokeWidth), c.color = c.trailColor, c.strokeWidth = c.trailWidth, c.fill = null, this._createPathElement(b, c) }, f.prototype._createPathElement = function(a, b) { var c = document.createElementNS("http://www.w3.org/2000/svg", "path"); return c.setAttribute("d", a), c.setAttribute("stroke", b.color), c.setAttribute("stroke-width", b.strokeWidth), b.fill ? c.setAttribute("fill", b.fill) : c.setAttribute("fill-opacity", "0"), c }, f.prototype._createTextContainer = function(a, b) { var c = document.createElement("div"); c.className = a.text.className; var d = a.text.style; return d && (a.text.autoStyleContainer && (b.style.position = "relative"), e.setStyles(c, d), d.color || (c.style.color = a.color)), this._initializeTextContainer(a, b, c), c }, f.prototype._initializeTextContainer = function(a, b, c) {}, f.prototype._pathString = function(a) { throw new Error("Override this function for each progress bar") }, f.prototype._trailString = function(a) { throw new Error("Override this function for each progress bar") }, f.prototype._warnContainerAspectRatio = function(a) { if (this.containerAspectRatio) { var b = window.getComputedStyle(a, null), c = parseFloat(b.getPropertyValue("width"), 10), d = parseFloat(b.getPropertyValue("height"), 10); e.floatEquals(this.containerAspectRatio, c / d) || (console.warn("Incorrect aspect ratio of container", "#" + a.id, "detected:", b.getPropertyValue("width") + "(width)", "/", b.getPropertyValue("height") + "(height)", "=", c / d), console.warn("Aspect ratio of should be", this.containerAspectRatio)) } }, b.exports = f }, { "./path": 5, "./utils": 9 }], 8: [function(a, b, c) { var d = a("./shape"), e = a("./utils"), f = function(a, b) { this._pathTemplate = "M 0,{halfOfStrokeWidth} L {width},{halfOfStrokeWidth} L {width},{width} L {halfOfStrokeWidth},{width} L {halfOfStrokeWidth},{strokeWidth}", this._trailTemplate = "M {startMargin},{halfOfStrokeWidth} L {width},{halfOfStrokeWidth} L {width},{width} L {halfOfStrokeWidth},{width} L {halfOfStrokeWidth},{halfOfStrokeWidth}", d.apply(this, arguments) }; f.prototype = new d, f.prototype.constructor = f, f.prototype._pathString = function(a) { var b = 100 - a.strokeWidth / 2; return e.render(this._pathTemplate, { width: b, strokeWidth: a.strokeWidth, halfOfStrokeWidth: a.strokeWidth / 2 }) }, f.prototype._trailString = function(a) { var b = 100 - a.strokeWidth / 2; return e.render(this._trailTemplate, { width: b, strokeWidth: a.strokeWidth, halfOfStrokeWidth: a.strokeWidth / 2, startMargin: a.strokeWidth / 2 - a.trailWidth / 2 }) }, b.exports = f }, { "./shape": 7, "./utils": 9 }], 9: [function(a, b, c) { function d(a, b, c) { a = a || {}, b = b || {}, c = c || !1; for (var e in b) if (b.hasOwnProperty(e)) { var f = a[e], g = b[e]; c && l(f) && l(g) ? a[e] = d(f, g, c) : a[e] = g } return a } function e(a, b) { var c = a; for (var d in b) if (b.hasOwnProperty(d)) { var e = b[d], f = "\\{" + d + "\\}", g = new RegExp(f, "g"); c = c.replace(g, e) } return c } function f(a, b, c) { for (var d = a.style, e = 0; e < p.length; ++e) { d[p[e] + h(b)] = c } d[b] = c } function g(a, b) { m(b, function(b, c) { null !== b && void 0 !== b && (l(b) && !0 === b.prefix ? f(a, c, b.value) : a.style[c] = b) }) } function h(a) { return a.charAt(0).toUpperCase() + a.slice(1) } function i(a) { return "string" == typeof a || a instanceof String } function j(a) { return "function" == typeof a } function k(a) { return "[object Array]" === Object.prototype.toString.call(a) } function l(a) { return !k(a) && ("object" == typeof a && !!a) } function m(a, b) { for (var c in a) if (a.hasOwnProperty(c)) { var d = a[c]; b(d, c) } } function n(a, b) { return Math.abs(a - b) < q } function o(a) { for (; a.firstChild;) a.removeChild(a.firstChild) } var p = "Webkit Moz O ms".split(" "), q = .001; b.exports = { extend: d, render: e, setStyle: f, setStyles: g, capitalize: h, isString: i, isFunction: j, isObject: l, forEachObject: m, floatEquals: n, removeChildren: o } }, {}] }, {}, [4])(4) }() }() }), s = function() { function a(a) { this.circleLoader = null, this.loaded = !1, this.showPlayButton = "undefined" == typeof playBtn || playBtn, this.progress = 0, this.options = { gameId: "12346", gameTitle: "Place Holder", gameName: "place-holder", libs: [], version: "dev", barColor: "white" }, this.options.gameId = a.gameId, this.options.gameTitle = a.gameTitle, this.options.version = a.version, this.options.barColor = a.barColor ? a.barColor : this.options.barColor, this.options.libs = a.libs } return a.getInstance = function(b) { if (!a.instance) { if (!b) throw new Error("Can not create new SplashLoader instance without options!"); a.instance = new a(b) } return a.instance }, a.prototype.create = function() { return e(this, void 0, void 0, function() { var a, b, c, d, e, h; return f(this, function(f) { switch (f.label) { case 0: return a = "\n #h5branding-center {\n position: absolute;\n top: 45%;\n left: 50%;\n transform: translate(-50%, -20%);\n text-align: center;\n width: 100%;\n }\n #h5branding-wrapper {\n position: relative;\n z-index: 665;\n width: 150px;\n height: 150px;\n display:inline-block;\n margin: 35px 40px 96px 40px;\n }\n\n #h5branding-wrapper > #h5branding-bar, #h5branding-wrapper > img {\n box-shadow: inset 10px 10px 20px 5px rgba(0, 0, 0, 0.5);\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n #h5branding-ad {\n position: relative;\n z-index: 667;\n border-radius: 5px;\n border: 3px solid white;\n background: rgba(256, 256, 256, 0.2);\n width: 336px;\n height: 280px;\n display: none;\n margin: 0px 10px 0px 10px;\n }\n\n #h5branding-wrapper > img {\n /* Needs appropriate vendor prefixes */\n box-sizing: border-box;\n\n /* This needs to be equal to strokeWidth */\n padding: 4%;\n }\n\n #h5branding-wrapper > img {\n border-radius: 50%;\n box-shadow: inset 0 5px 5px rgba(0, 0, 0, 0.5), 5px 5px 7px rgba(0, 0, 0, 0.3);\n }\n\n #h5branding-container {\n box-sizing: border-box;\n position: absolute;\n z-index: 664;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: #000;\n overflow: hidden;\n }\n \n #h5branding-background {\n position: absolute;\n top: -25%;\n left: -25%;\n width: 150%;\n height: 150%;\n background-blend-mode: multiply;\n background-size: cover;\n filter: blur(40px) brightness(1.5);\n }\n \n @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n /* IE10+ CSS styles go here */\n #h5branding-background {\n background-image: none !important;\n }\n }\n\n #h5branding-logo {\n position: absolute;\n margin: 0 auto;\n left: 0;\n right: 0;\n text-align: center;\n top: 10%;\n }\n\n #h5branding-logo > img {\n height: 150px;\n }\n\n #h5branding-title {\n position: absolute;\n width: 100%;\n background: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.5) 50%, transparent);\n color: #fff;\n text-shadow: 0 0 1px rgba(0, 0, 0, 0.7);\n bottom:10%;\n padding: 15px 0;\n text-align: center;\n font-size: 18px;\n font-family: Helvetica, Arial, sans-serif;\n font-weight: bold;\n line-height: 100%;\n }\n \n #h5branding-button {\n /* border: 0; */\n padding: 10px 22px;\n border-radius: 5px;\n border: 3px solid white;\n background: linear-gradient(0deg, #dddddd, #ffffff);\n color: #222;\n text-transform: uppercase;\n text-shadow: 0 0 1px #fff;\n font-family: Helvetica, Arial, sans-serif;\n font-weight: bold;\n font-size: 18px;\n cursor: pointer;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);\n display: none;\n width: 150px;\n position: absolute;\n top: 170px;\n margin: 0 auto;\n left: 0;\n right: 0;\n }\n \n @media (orientation: portrait) and (max-width: 1080px) {\n #h5branding-logo > img {\n height: initial;\n width:100%;\n }\n }\n \n @media (orientation: landscape) and (max-height: 640px) {\n #h5branding-title {\n display: none;\n }\n \n #h5branding-logo > img {\n height: 100px;\n }\n }\n \n @media (orientation: landscape) and (max-height: 460px) {\n #h5branding-title {\n display: none;\n }\n \n #h5branding-wrapper {\n width: 110px;\n height: 110px;\n margin: 0;\n }\n \n #h5branding-logo {\n top: 0;\n transform: scale(0.7, 0.7);\n }\n \n #h5branding-button {\n top: initial;\n width: 110px;\n font-size: 14px;\n position: absolute;\n top: 140px;\n left: 0;\n right: 0;\n }\n \n #h5branding-ad {\n display: none !important;\n }\n }\n \n @media (orientation: portrait) and (max-width: 250px) {\n #h5branding-logo {\n top: 2%;\n }\n }\n \n @media (orientation: landscape) and (max-width: 330px) {\n #h5branding-button {\n top: 120px;\n }\n \n #h5branding-logo > img {\n height: 70px;\n }\n }\n \n @media (max-width: 600px) and (max-height: 850px) {\n #h5branding-ad {\n display: none !important;\n }\n }\n \n @media (max-width: 600px) and (max-height: 1100px) {\n #h5branding-center {\n top: 40%;\n }\n\n #h5branding-title {\n bottom: 5%\n }\n }\n \n @media (max-width: 600px) and (max-height: 900px) {\n #h5branding-title {\n display: none\n }\n }\n \n @media (orientation: landscape) and (min-width: 800px) {\n #h5branding-wrapper {\n margin-left: 120px;\n margin-right: 120px;\n }\n }\n\n ", b = g(this.getGameLogoUrl(this.options.gameId), this.options.gameTitle), c = document.head || document.getElementsByTagName("head")[0], d = document.createElement("style"), d.type = "text/css", d.styleSheet ? d.styleSheet.cssText = a : d.appendChild(document.createTextNode(a)), c.appendChild(d), e = document.createElement("div"), e.innerHTML = b, e.id = "h5branding-container", h = document.body || document.getElementsByTagName("body")[0], h.insertBefore(e, h.firstChild), this.circleLoader = new r.Circle("#h5branding-bar", { strokeWidth: 3, color: this.options.barColor }), [4, Promise.all([this.loadBranding(), this.loadLibs()])]; case 1: return f.sent(), this.loaded = !0, [2] } }) }) }, a.prototype.loadBranding = function() { return e(this, void 0, void 0, function() { var a, b, c; return f(this, function(d) { switch (d.label) { case 0: return [4, o.preload(Date.now().toString())]; case 1: return d.sent(), a = document.getElementById("h5branding-background"), a && (a.style.backgroundImage = "url(" + this.getGameLogoUrl(this.options.gameId) + ")", a.style.backgroundColor = o.brandingBackgroundColor), b = document.getElementById("h5branding-logo"), b && (c = document.createElement("img"), c.src = o.brandingLogoUrl.replace("_small", ""), b.appendChild(c)), [2] } }) }) }, a.prototype.loadLibs = function() { var a = this, b = this.options.libs.map(function(c, d) { return m.instance.loadScript(c, !0, function() { a.setScriptloadProgress(b.length, d + 1) }) }); return Promise.all(b) }, Object.defineProperty(a.prototype, "bannerAllowed", { get: function() { var a = document.body.clientWidth, b = document.body.clientHeight; return this.progress < 100 && !(a > b && b <= 460) && !(a < 600 && b < 850) }, enumerable: !0, configurable: !0 }), a.prototype.showBanner = function() { if (!this.bannerAllowed) return null; var a = document.getElementById("h5branding-ad"); return a ? (a.style.display = "inline-flex", a) : null }, a.prototype.setScriptloadProgress = function(a, b) { var c = .3 * b / a; this.circleLoader.animate(c, null, function() {}) }, a.prototype.setLoadProgress = function(a) { var b = this; if (this.loaded) if (a = 30 + .7 * a, this.progress = a, 100 === a) { var c = document.querySelector("#h5branding-button"); this.circleLoader.animate(1, null, function() { c && !0 === b.showPlayButton ? c.style.display = "block" : !1 === b.showPlayButton && b.onPlayButtonClick() }) } else this.circleLoader.animate(a / 100, null, function() {}) }, a.prototype.setButtonCallback = function(a) { this.buttonCallback = a }, a.prototype.onPlayButtonClick = function() { this.buttonCallback && this.buttonCallback() }, a.prototype.destroy = function() { var a = document.querySelector("#h5branding-container"); null !== a && null !== a.parentNode && a.parentNode.removeChild(a) }, a.prototype.getGameLogoUrl = function(a) { var b = a + "-512x512.jpeg"; return window.hasOwnProperty("fbrqSA") && !0 === window.fbrqSA ? "assets/" + b : "img.gamedistribution.com/" + b }, a }(), t = new q; a.google = t, a.Utils = p, a.Domain = l, a.Branding = o, a.SplashLoader = s, Object.defineProperty(a, "__esModule", { value: !0 }) }), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Menu/TempleHall", ["require", "Phaser", "../Common/Button", "../Common/GoldButton", "../Common/Navies", "h5branding"], function(c) { var d, e, f, g; return f = c("Phaser"), c("../Common/Button"), d = c("../Common/GoldButton"), e = c("../Common/Navies"), g = c("h5branding"), function(c) { function h(b, c, g) { this.layoutContent = a(this.layoutContent, this), this.update = a(this.update, this), this.createChar = a(this.createChar, this), this.domainAllowsExtenral = a(this.domainAllowsExtenral, this); var i, j, k, l, m, n, o, p, q, r, s, t, u; for (h.__super__.constructor.call(this, b, c, g), this.w = this.game.realWidth, this.h = this.game.realHeight, this.bkg = l = this.game.make.sprite(0, 0, "TempleHall"), l.anchor.set(.5), this._scale = u = Math.max(this.w / l.width, this.h / l.height), l.scale.set(u), l.height / 2 > this.h / 2 && (l.y = this.h / 2 - l.height / 2), this.addChild(l), this.beams = k = [], j = 7, q = r = 0, t = j; 0 <= t ? r <= t : r >= t; q = 0 <= t ? ++r : --r) i = this.game.make.sprite(0, 0, "HallBeam"), i.anchor.set(.5, -.5), i.alpha = .6 + .4 * Math.random(), i.t_offset = 2 * (q - j / 2) * Math.PI / j - Math.random() * Math.PI / 6, i.t_speed = .6 * Math.random(), i.blendMode = f.blendModes.SCREEN, i.cacheAsBitmap = !0, this.addChild(i), k.push(i); this.char1 = n = this.createChar("fire"), this.addChild(n), n.scale.set(u), n.x = -this.w / 4, n.y = this.h / 2 - 2 * n.height, this.char2 = o = this.createChar("water"), o.scale.set(u), o.x = this.w / 4, o.y = this.h / 2 - 2 * o.height, this.addChild(o), this.gameName = p = this.game.make.sprite(0, 0, "GameName"), p.anchor.set(.5, .5), s = Math.min(1, .9 * this.game.realWidth / p.width), p.scale.set(s), this.addChild(p), this.onStart = new f.Signal, this.playBtn = m = new d(this.game, 0, 0, this.game.lang.locale("Play"), function(a) { return function() { return a.onStart.dispatch(b.progress.get("temples")[0]) } }(this), 40), this.addChild(m), this.domainAllowsExtenral() && (this.moreBtn = m = new d(this.game, 0, 0, this.game.lang.locale("More Games"), function(a) { return function() { return window.open("http://kizi.com/?ch=3307&utm_source=GameDistribution", "_blank") } }(), 30), this.addChild(m), this.walkthrouhgBtn = m = new d(this.game, 0, 0, this.game.lang.locale("Walkthrough"), function(a) { return function() { return window.open("http://kizi.com/videos/fireboy-and-watergirl-the-forest-temple/?ch=3308&utm_source=GameDistribution", "_blank") } }(), 30), this.addChild(m)), this.navies = new e(this.game, 0, 0), this.addChild(this.navies), this.layoutContent() } return b(h, c), h.prototype.domainAllowsExtenral = function() { var a; return !!g.Branding.outGoingLinksAllowed() && (a = ["playcell.com"], a.reduce(function(a) { return function(a, b) { return null != document.referrer && (a = a && document.referrer.indexOf(b) < 0), null != window.location && null != window.location.hostname && (a = a && window.location.hostname.indexOf(b) < 0), a } }(), !0)) }, h.prototype.createChar = function(a) { var b, c, d, e; return b = this.game.make.sprite(0, 0, "CharAssets", "_default0000"), e = this.game.make.sprite(0, 0, "CharAssets", a + "_legs_idle0000"), e.anchor.set(.5), d = this.game.make.sprite(0, 0, "CharAssets"), d.animations.add("idle", f.Animation.generateFrameNames(a + "_head_idle", 0, 29, "", 4), 30, !0), d.animations.play("idle"), d.anchor.set(.5), c = this.game.make.sprite(0, 0, "CharAssets", a + "_glow0000"), c.anchor.set(.5), c.y = 40, b.addChild(c), b.addChild(e), b.addChild(d), b }, h.prototype.update = function() { var a, b, c, d; for (this.t || (this.t = 0), this.t += .003, d = this.beams, b = 0, c = d.length; b < c; b++) a = d[b], a.rotation = .2 * Math.sin(a.t_offset + this.t * a.t_speed), a.y = -this.h / 2 - a._frame.height * this._scale / 2 - Math.abs(Math.sin(a.t_offset + this.t * a.t_speed) * this.h / 4), a.scale.set(.6 + .4 * Math.abs(Math.sin(a.t_offset + this.t * a.t_speed)), this._scale); return this.navies.update() }, h.prototype.layoutContent = function() { var a, b, c, d, e, f, g; for (this.w = this.game.realWidth, this.h = this.game.realHeight, this._scale = g = Math.max(this.w / this.bkg._frame.width, this.h / this.bkg._frame.height), this.bkg.scale.set(g), this.bkg.height / 2 > this.h / 2 ? this.bkg.y = this.h / 2 - this.bkg.height / 2 : this.bkg.y = 0, this.char1.scale.set(g), this.char1.x = -this.w / 4, this.char1.y = this.h / 2 - 2 * this.char1.height, this.char2.scale.set(g), this.char2.x = this.w / 4, this.char2.y = this.h / 2 - 2 * this.char2.height, f = this.beams, b = 0, c = f.length; b < c; b++) a = f[b], a.scale.set(g * (.3 + 1.3 * Math.random()), g); return this.gameName.y = -this.game.realHeight / 5, this.playBtn.y = this.playBtn.height, this.moreBtn && (this.moreBtn.y = .2 * this.game.realHeight), this.walkthrouhgBtn ? this.walkthrouhgBtn.y = .3 * this.game.realHeight : this.playBtn.y = 2 * this.playBtn.height, d = .75 * this.gameName.height, e = this.gameName.y - d / 2, this.game.realHeight / 2 + e, this.navies.y = this.playBtn.y }, h }(f.Sprite) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Common/MuteButton", ["./Button", "Phaser"], function(c) { "use strict"; return function(c) { function d(b, c, e, f) { this.updateState = a(this.updateState, this), this.clicked = a(this.clicked, this), d.__super__.constructor.call(this, b, c, e, f || "MenuAssets", "MuteButton0000", this.clicked), this.anchor.set(.5), this.sprite.anchor.set(1, 0), this.updateState() } return b(d, c), d.prototype.clicked = function() { return console.log("mute"), this.updateState() }, d.prototype.updateState = function() { return this.game.sound.mute ? this.sprite.frameName = "MuteButton0001" : this.sprite.frameName = "MuteButton0000" }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Common/UIState", ["./MuteButton", "Phaser"], function(c) { "use strict"; return function(c) { function d() { this.layoutContent = a(this.layoutContent, this), this.startMusic = a(this.startMusic, this), this.updateMusic = a(this.updateMusic, this), this.decodeAudio = a(this.decodeAudio, this), this.preloadAudioFiles = a(this.preloadAudioFiles, this), this.preload = a(this.preload, this), this.onReady = new Phaser.Signal, d.__super__.constructor.apply(this, arguments) } return b(d, c), d.prototype.preload = function() { return this.sounds = ["menuMusic", "pusher"], this.preloadAudioFiles() }, d.prototype.preloadAudioFiles = function() {}, d.prototype.decodeAudio = function(a) { var b, c, d, e, f; for (f = {}, d = this.sounds, b = 0, c = d.length; b < c; b++) e = d[b], f[e] = this.game.add.audio(e); return this.sounds = f, this.game.currentSounds = f, this.game.sound.setDecodedCallback(_.map(this.sounds), function(a) { return function() { return a.startMusic(), a.started = !0 } }(this), this), a() }, d.prototype.updateMusic = function() { return this.sounds.menuMusic.stop(), this.game.settings.music ? null == this.game.menuMusic ? this.game.menuMusic = this.sounds.menuMusic.play() : this.game.menuMusic.play() : null != this.game.menuMusic ? this.game.menuMusic.stop() : void 0 }, d.prototype.startMusic = function() { if (this.game.settings.music && (null == this.game.menuMusic || !this.game.menuMusic.isPlaying)) return this.sounds.menuMusic.loop = !0, this.sounds.menuMusic.allowMultiple = !1, this.game.menuMusic = this.sounds.menuMusic.play() }, d.prototype.create = function() { return this.root = this.game.make.group(0, 0), this.game.add.existing(this.root), this.game.stage.backgroundColor = "#000000", this.decodeAudio(function(a) { return function() { return console.log("load completed"), a.addContent() } }(this)) }, d.prototype.layoutContent = function() { if (null != this.muteButton) return this.muteButton.x = this.game.realWidth / 2, this.muteButton.y = -this.game.realHeight / 2 }, d }(Phaser.State) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/LevelMenu/LevelButton", ["States/Common/Button", "Phaser"], function(c) { "use strict"; return function(c) { function d(b, c, e, f, g, h) { this.destroy = a(this.destroy, this), this.setUp = a(this.setUp, this), this.setDown = a(this.setDown, this); var i; d.__super__.constructor.call(this, b, c, e), this.anchor.set(.5), i = "speed" === f ? "DiamondSpeed" : "puzzle" === f ? "DiamondPuzzle" : "dark" === f ? "DiamondDark" : "Diamond", this.upFrameName = i + g, this.downFrameName = i + g, this.diamond = b.make.sprite(0, 0, "MenuAssets", this.upFrameName), this.diamond.anchor.set(.5), this.addChild(this.diamond), this.hitArea = new PIXI.Circle(0, 0, 1.5 * this.diamond.width), null != h && (this.game.bowser.mobile || this.game.bowser.tablet || this.game.device.iPad ? (this.game.TouchManager.register(this, "touchstart", this.setDown), this.game.TouchManager.register(this, "touchend", function(a) { return function(b, c) { if (a.setUp(), c) return a.game.settings.vibrate && navigator.vibrate && navigator.vibrate(50), a.game.settings.fx && a.game.currentSounds.pusher.play(), h(a) } }(this))) : (this.game.TouchManager.register(this, "mousedown", this.setDown), this.game.TouchManager.register(this, "mouseup", function(a) { return function(b, c) { if (a.setUp(), c) return a.game.settings.fx && a.game.currentSounds.pusher.play(), h(a) } }(this)))) } return b(d, c), d.prototype.setDown = function() { return this.diamond.scale.set(.95) }, d.prototype.setUp = function() { return _.delay(function(a) { return function() { return a.diamond.scale.set(1) } }(this), 100) }, d.prototype.destroy = function() { return this.game.bowser.mobile || this.game.bowser.tablet || this.game.device.iPad ? (this.game.TouchManager.unregister(this, "touchstart"), this.game.TouchManager.unregister(this, "touchend")) : (this.game.TouchManager.unregister(this, "mousedown"), this.game.TouchManager.unregister(this, "mouseup")), d.__super__.destroy.call(this) }, d }(Phaser.Sprite) }) }.call(this); var COMPILED = !1, goog = goog || {}; goog.global = this, goog.global.CLOSURE_UNCOMPILED_DEFINES, goog.global.CLOSURE_DEFINES, goog.isDef = function(a) { return void 0 !== a }, goog.exportPath_ = function(a, b, c) { var d = a.split("."), e = c || goog.global; d[0] in e || !e.execScript || e.execScript("var " + d[0]); for (var f; d.length && (f = d.shift());) !d.length && goog.isDef(b) ? e[f] = b : e = e[f] ? e[f] : e[f] = {} }, goog.define = function(a, b) { var c = b; COMPILED || (goog.global.CLOSURE_UNCOMPILED_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_UNCOMPILED_DEFINES, a) ? c = goog.global.CLOSURE_UNCOMPILED_DEFINES[a] : goog.global.CLOSURE_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES, a) && (c = goog.global.CLOSURE_DEFINES[a])), goog.exportPath_(a, c) }, goog.DEBUG = !0, goog.define("goog.LOCALE", "en"), goog.define("goog.TRUSTED_SITE", !0), goog.define("goog.STRICT_MODE_COMPATIBLE", !1), goog.provide = function(a) { if (!COMPILED) { if (goog.isProvided_(a)) throw Error('Namespace "' + a + '" already declared.'); delete goog.implicitNamespaces_[a]; for (var b = a; (b = b.substring(0, b.lastIndexOf("."))) && !goog.getObjectByName(b);) goog.implicitNamespaces_[b] = !0 } goog.exportPath_(a) }, goog.setTestOnly = function(a) { if (COMPILED && !goog.DEBUG) throw a = a || "", Error("Importing test-only code into non-debug environment" + (a ? ": " + a : ".")) }, goog.forwardDeclare = function(a) {}, COMPILED || (goog.isProvided_ = function(a) { return !goog.implicitNamespaces_[a] && goog.isDefAndNotNull(goog.getObjectByName(a)) }, goog.implicitNamespaces_ = {}), goog.getObjectByName = function(a, b) { for (var c, d = a.split("."), e = b || goog.global; c = d.shift();) { if (!goog.isDefAndNotNull(e[c])) return null; e = e[c] } return e }, goog.globalize = function(a, b) { var c = b || goog.global; for (var d in a) c[d] = a[d] }, goog.addDependency = function(a, b, c) { if (goog.DEPENDENCIES_ENABLED) { for (var d, e, f = a.replace(/\\/g, "/"), g = goog.dependencies_, h = 0; d = b[h]; h++) g.nameToPath[d] = f, f in g.pathToNames || (g.pathToNames[f] = {}), g.pathToNames[f][d] = !0; for (var i = 0; e = c[i]; i++) f in g.requires || (g.requires[f] = {}), g.requires[f][e] = !0 } }, goog.define("goog.ENABLE_DEBUG_LOADER", !0), goog.require = function(a) { if (!COMPILED) { if (goog.isProvided_(a)) return; if (goog.ENABLE_DEBUG_LOADER) { var b = goog.getPathFromDeps_(a); if (b) return goog.included_[b] = !0, void goog.writeScripts_() } var c = "goog.require could not find: " + a; throw goog.global.console && goog.global.console.error(c), Error(c) } }, goog.basePath = "", goog.global.CLOSURE_BASE_PATH, goog.global.CLOSURE_NO_DEPS, goog.global.CLOSURE_IMPORT_SCRIPT, goog.nullFunction = function() {}, goog.identityFunction = function(a, b) { return a }, goog.abstractMethod = function() { throw Error("unimplemented abstract method") }, goog.addSingletonGetter = function(a) { a.getInstance = function() { return a.instance_ ? a.instance_ : (goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = a), a.instance_ = new a) } }, goog.instantiatedSingletons_ = [], goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER, goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = { pathToNames: {}, nameToPath: {}, requires: {}, visited: {}, written: {} }, goog.inHtmlDocument_ = function() { var a = goog.global.document; return void 0 !== a && "write" in a }, goog.findBasePath_ = function() { if (goog.global.CLOSURE_BASE_PATH) return void(goog.basePath = goog.global.CLOSURE_BASE_PATH); if (goog.inHtmlDocument_()) for (var a = goog.global.document, b = a.getElementsByTagName("script"), c = b.length - 1; c >= 0; --c) { var d = b[c].src, e = d.lastIndexOf("?"), f = -1 == e ? d.length : e; if ("base.js" == d.substr(f - 7, 7)) return void(goog.basePath = d.substr(0, f - 7)) } }, goog.importScript_ = function(a) { var b = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_;!goog.dependencies_.written[a] && b(a) && (goog.dependencies_.written[a] = !0) }, goog.writeScriptTag_ = function(a) { if (goog.inHtmlDocument_()) { var b = goog.global.document; if ("complete" == b.readyState) { if (/\bdeps.js$/.test(a)) return !1; throw Error('Cannot write "' + a + '" after document load') } return b.write('<script type="text/javascript" src="' + a + '"><\/script>'), !0 } return !1 }, goog.writeScripts_ = function() { function a(e) { if (!(e in d.written)) { if (e in d.visited) return void(e in c || (c[e] = !0, b.push(e))); if (d.visited[e] = !0, e in d.requires) for (var f in d.requires[e]) if (!goog.isProvided_(f)) { if (!(f in d.nameToPath)) throw Error("Undefined nameToPath for " + f); a(d.nameToPath[f]) } e in c || (c[e] = !0, b.push(e)) } } var b = [], c = {}, d = goog.dependencies_; for (var e in goog.included_) d.written[e] || a(e); for (var f = 0; f < b.length; f++) { if (!b[f]) throw Error("Undefined script input"); goog.importScript_(goog.basePath + b[f]) } }, goog.getPathFromDeps_ = function(a) { return a in goog.dependencies_.nameToPath ? goog.dependencies_.nameToPath[a] : null }, goog.findBasePath_()), goog.typeOf = function(a) { var b = typeof a; if ("object" == b) { if (!a) return "null"; if (a instanceof Array) return "array"; if (a instanceof Object) return b; var c = Object.prototype.toString.call(a); if ("[object Window]" == c) return "object"; if ("[object Array]" == c || "number" == typeof a.length && void 0 !== a.splice && void 0 !== a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) return "array"; if ("[object Function]" == c || void 0 !== a.call && void 0 !== a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) return "function" } else if ("function" == b && void 0 === a.call) return "object"; return b }, goog.isNull = function(a) { return null === a }, goog.isDefAndNotNull = function(a) { return null != a }, goog.isArray = function(a) { return "array" == goog.typeOf(a) }, goog.isArrayLike = function(a) { var b = goog.typeOf(a); return "array" == b || "object" == b && "number" == typeof a.length }, goog.isDateLike = function(a) { return goog.isObject(a) && "function" == typeof a.getFullYear }, goog.isString = function(a) { return "string" == typeof a }, goog.isBoolean = function(a) { return "boolean" == typeof a }, goog.isNumber = function(a) { return "number" == typeof a }, goog.isFunction = function(a) { return "function" == goog.typeOf(a) }, goog.isObject = function(a) { var b = typeof a; return "object" == b && null != a || "function" == b }, goog.getUid = function(a) { return a[goog.UID_PROPERTY_] || (a[goog.UID_PROPERTY_] = ++goog.uidCounter_) }, goog.hasUid = function(a) { return !!a[goog.UID_PROPERTY_] }, goog.removeUid = function(a) { "removeAttribute" in a && a.removeAttribute(goog.UID_PROPERTY_); try { delete a[goog.UID_PROPERTY_] } catch (a) {} }, goog.UID_PROPERTY_ = "closure_uid_" + (1e9 * Math.random() >>> 0), goog.uidCounter_ = 0, goog.getHashCode = goog.getUid, goog.removeHashCode = goog.removeUid, goog.cloneObject = function(a) { var b = goog.typeOf(a); if ("object" == b || "array" == b) { if (a.clone) return a.clone(); var c = "array" == b ? [] : {}; for (var d in a) c[d] = goog.cloneObject(a[d]); return c } return a }, goog.bindNative_ = function(a, b, c) { return a.call.apply(a.bind, arguments) }, goog.bindJs_ = function(a, b, c) { if (!a) throw new Error; if (arguments.length > 2) { var d = Array.prototype.slice.call(arguments, 2); return function() { var c = Array.prototype.slice.call(arguments); return Array.prototype.unshift.apply(c, d), a.apply(b, c) } } return function() { return a.apply(b, arguments) } }, goog.bind = function(a, b, c) { return Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? goog.bind = goog.bindNative_ : goog.bind = goog.bindJs_, goog.bind.apply(null, arguments) }, goog.partial = function(a, b) { var c = Array.prototype.slice.call(arguments, 1); return function() { var b = c.slice(); return b.push.apply(b, arguments), a.apply(this, b) } }, goog.mixin = function(a, b) { for (var c in b) a[c] = b[c] }, goog.now = goog.TRUSTED_SITE && Date.now || function() { return +new Date }, goog.globalEval = function(a) { if (goog.global.execScript) goog.global.execScript(a, "JavaScript"); else { if (!goog.global.eval) throw Error("goog.globalEval not available"); if (null == goog.evalWorksForGlobals_ && (goog.global.eval("var _et_ = 1;"), void 0 !== goog.global._et_ ? (delete goog.global._et_, goog.evalWorksForGlobals_ = !0) : goog.evalWorksForGlobals_ = !1), goog.evalWorksForGlobals_) goog.global.eval(a); else { var b = goog.global.document, c = b.createElement("script"); c.type = "text/javascript", c.defer = !1, c.appendChild(b.createTextNode(a)), b.body.appendChild(c), b.body.removeChild(c) } } }, goog.evalWorksForGlobals_ = null, goog.cssNameMapping_, goog.cssNameMappingStyle_, goog.getCssName = function(a, b) { var c, d = function(a) { return goog.cssNameMapping_[a] || a }, e = function(a) { for (var b = a.split("-"), c = [], e = 0; e < b.length; e++) c.push(d(b[e])); return c.join("-") }; return c = goog.cssNameMapping_ ? "BY_WHOLE" == goog.cssNameMappingStyle_ ? d : e : function(a) { return a }, b ? a + "-" + c(b) : c(a) }, goog.setCssNameMapping = function(a, b) { goog.cssNameMapping_ = a, goog.cssNameMappingStyle_ = b }, goog.global.CLOSURE_CSS_NAME_MAPPING, !COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING && (goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING), goog.getMsg = function(a, b) { return b && (a = a.replace(/\{\$([^}]+)}/g, function(a, c) { return c in b ? b[c] : a })), a }, goog.getMsgWithFallback = function(a, b) { return a }, goog.exportSymbol = function(a, b, c) { goog.exportPath_(a, b, c) }, goog.exportProperty = function(a, b, c) { a[b] = c }, goog.inherits = function(a, b) { function c() {} c.prototype = b.prototype, a.superClass_ = b.prototype, a.prototype = new c, a.prototype.constructor = a, a.base = function(a, c, d) { var e = Array.prototype.slice.call(arguments, 2); return b.prototype[c].apply(a, e) } }, goog.base = function(a, b, c) { var d = arguments.callee.caller; if (goog.STRICT_MODE_COMPATIBLE || goog.DEBUG && !d) throw Error("arguments.caller not defined. goog.base() cannot be used with strict mode code. See http://www.ecma-international.org/ecma-262/5.1/#sec-C"); if (d.superClass_) return d.superClass_.constructor.apply(a, Array.prototype.slice.call(arguments, 1)); for (var e = Array.prototype.slice.call(arguments, 2), f = !1, g = a.constructor; g; g = g.superClass_ && g.superClass_.constructor) if (g.prototype[b] === d) f = !0; else if (f) return g.prototype[b].apply(a, e); if (a[b] === d) return a.constructor.prototype[b].apply(a, e); throw Error("goog.base called from a method of one name to a method of a different name") }, goog.scope = function(a) { a.call(goog.global) }, COMPILED || (goog.global.COMPILED = COMPILED), goog.defineClass = function(a, b) { var c = b.constructor, d = b.statics; c && c != Object.prototype.constructor || (c = function() { throw Error("cannot instantiate an interface (no constructor defined).") }); var e = goog.defineClass.createSealingConstructor_(c, a); return a && goog.inherits(e, a), delete b.constructor, delete b.statics, goog.defineClass.applyProperties_(e.prototype, b), null != d && (d instanceof Function ? d(e) : goog.defineClass.applyProperties_(e, d)), e }, goog.defineClass.ClassDescriptor, goog.define("goog.defineClass.SEAL_CLASS_INSTANCES", goog.DEBUG), goog.defineClass.createSealingConstructor_ = function(a, b) { if (goog.defineClass.SEAL_CLASS_INSTANCES && Object.seal instanceof Function) { if (b && b.prototype && b.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]) return a; var c = function() { var b = a.apply(this, arguments) || this; return this.constructor === c && Object.seal(b), b }; return c } return a }, goog.defineClass.OBJECT_PROTOTYPE_FIELDS_ = ["constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"], goog.defineClass.applyProperties_ = function(a, b) { var c; for (c in b) Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]); for (var d = 0; d < goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length; d++) c = goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[d], Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]) }, goog.tagUnsealableClass = function(a) {!COMPILED && goog.defineClass.SEAL_CLASS_INSTANCES && (a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_] = !0) }, goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_ = "goog_defineClass_legacy_unsealable", goog.provide("box2d.b2Settings"), Object.defineProperty || (Object.defineProperty = function(a, b, c) { Object.__defineGetter__ && ("get" in c ? a.__defineGetter__(b, c.get) : "value" in c && a.__defineGetter__(b, c.value)), Object.__defineSetter__ && ("set" in c ? a.__defineSetter__(b, c.set) : "value" in c && a.__defineSetter__(b, c.value)) }), box2d.DEBUG = !1, box2d.ENABLE_ASSERTS = box2d.DEBUG, box2d.b2Assert = function(a, b, c) { box2d.DEBUG }, box2d.b2_maxFloat = 1e37, box2d.b2_epsilon = 1e-5, box2d.b2_epsilon_sq = box2d.b2_epsilon * box2d.b2_epsilon, box2d.b2_pi = Math.PI, box2d.b2_maxManifoldPoints = 2, box2d.b2_maxPolygonVertices = 8, box2d.b2_aabbExtension = .1, box2d.b2_aabbMultiplier = 2, box2d.b2_linearSlop = .008, box2d.b2_angularSlop = 2 / 180 * box2d.b2_pi, box2d.b2_polygonRadius = 2 * box2d.b2_linearSlop, box2d.b2_maxSubSteps = 8, box2d.b2_maxTOIContacts = 32, box2d.b2_velocityThreshold = 1, box2d.b2_maxLinearCorrection = .2, box2d.b2_maxAngularCorrection = 8 / 180 * box2d.b2_pi, box2d.b2_maxTranslation = 2, box2d.b2_maxTranslationSquared = box2d.b2_maxTranslation * box2d.b2_maxTranslation, box2d.b2_maxRotation = .5 * box2d.b2_pi, box2d.b2_maxRotationSquared = box2d.b2_maxRotation * box2d.b2_maxRotation, box2d.b2_baumgarte = .2, box2d.b2_toiBaumgarte = .75, box2d.b2_timeToSleep = .5, box2d.b2_linearSleepTolerance = .01, box2d.b2_angularSleepTolerance = 2 / 180 * box2d.b2_pi, box2d.b2Alloc = function(a) { return null }, box2d.b2Free = function(a) {}, box2d.b2Log = function(a) { goog.global.console.log.apply(null, arguments) }, box2d.b2Version = function(a, b, c) { this.major = a || 0, this.minor = b || 0, this.revision = c || 0 }, box2d.b2Version.prototype.major = 0, box2d.b2Version.prototype.minor = 0, box2d.b2Version.prototype.revision = 0, box2d.b2Version.prototype.toString = function() { return this.major + "." + this.minor + "." + this.revision }, box2d.b2_version = new box2d.b2Version(2, 3, 0), box2d.b2_changelist = 278, box2d.b2ParseInt = function(a) { return parseInt(a, 10) }, box2d.b2ParseUInt = function(a) { return box2d.b2Abs(parseInt(a, 10)) }, box2d.b2MakeArray = function(a, b) { void 0 === a && (a = 0); var c = new Array(a); if (void 0 !== b) for (var d = 0; d < a; ++d) c[d] = b(d); return c }, box2d.b2MakeNumberArray = function(a) { return box2d.b2MakeArray(a, function(a) { return 0 }) }, goog.provide("box2d.b2Math"), goog.require("box2d.b2Settings"), box2d.b2_pi_over_180 = box2d.b2_pi / 180, box2d.b2_180_over_pi = 180 / box2d.b2_pi, box2d.b2_two_pi = 2 * box2d.b2_pi, box2d.b2Abs = function(a) { return a < 0 ? -a : a }, box2d.b2Min = function(a, b) { return a < b ? a : b }, box2d.b2Max = function(a, b) { return a > b ? a : b }, box2d.b2Clamp = function(a, b, c) { return a < b ? b : a > c ? c : a }, box2d.b2Swap = function(a, b) { box2d.ENABLE_ASSERTS && box2d.b2Assert(!1); var c = a[0]; a[0] = b[0], b[0] = c }, box2d.b2IsValid = function(a) { return isFinite(a) }, box2d.b2Sq = function(a) { return a * a }, box2d.b2InvSqrt = function(a) { return 1 / Math.sqrt(a) }, box2d.b2Sqrt = function(a) { return Math.sqrt(a) }, box2d.b2Pow = function(a, b) { return Math.pow(a, b) }, box2d.b2DegToRad = function(a) { return a * box2d.b2_pi_over_180 }, box2d.b2RadToDeg = function(a) { return a * box2d.b2_180_over_pi }, box2d.b2Cos = function(a) { return Math.cos(a) }, box2d.b2Sin = function(a) { return Math.sin(a) }, box2d.b2Acos = function(a) { return Math.acos(a) }, box2d.b2Asin = function(a) { return Math.asin(a) }, box2d.b2Atan2 = function(a, b) { return Math.atan2(a, b) }, box2d.b2NextPowerOfTwo = function(a) { return a |= a >> 1 & 2147483647, a |= a >> 2 & 1073741823, a |= a >> 4 & 268435455, a |= a >> 8 & 16777215, (a |= a >> 16 & 65535) + 1 }, box2d.b2IsPowerOfTwo = function(a) { return a > 0 && 0 == (a & a - 1) }, box2d.b2Random = function() { return 2 * Math.random() - 1 }, box2d.b2RandomRange = function(a, b) { return (b - a) * Math.random() + a }, box2d.b2Vec2 = function(a, b) { this.x = a || 0, this.y = b || 0 }, box2d.b2Vec2.prototype.x = 0, box2d.b2Vec2.prototype.y = 0, box2d.b2Vec2_zero = new box2d.b2Vec2, box2d.b2Vec2.ZERO = new box2d.b2Vec2, box2d.b2Vec2.UNITX = new box2d.b2Vec2(1, 0), box2d.b2Vec2.UNITY = new box2d.b2Vec2(0, 1), box2d.b2Vec2.s_t0 = new box2d.b2Vec2, box2d.b2Vec2.s_t1 = new box2d.b2Vec2, box2d.b2Vec2.s_t2 = new box2d.b2Vec2, box2d.b2Vec2.s_t3 = new box2d.b2Vec2, box2d.b2Vec2.MakeArray = function(a) { return box2d.b2MakeArray(a, function(a) { return new box2d.b2Vec2 }) }, box2d.b2Vec2.prototype.Clone = function() { return new box2d.b2Vec2(this.x, this.y) }, box2d.b2Vec2.prototype.SetZero = function() { return this.x = 0, this.y = 0, this }, box2d.b2Vec2.prototype.SetXY = function(a, b) { return this.x = a, this.y = b, this }, box2d.b2Vec2.prototype.Copy = function(a) { return this.x = a.x, this.y = a.y, this }, box2d.b2Vec2.prototype.SelfAdd = function(a) { return this.x += a.x, this.y += a.y, this }, box2d.b2Vec2.prototype.SelfAddXY = function(a, b) { return this.x += a, this.y += b, this }, box2d.b2Vec2.prototype.SelfSub = function(a) { return this.x -= a.x, this.y -= a.y, this }, box2d.b2Vec2.prototype.SelfSubXY = function(a, b) { return this.x -= a, this.y -= b, this }, box2d.b2Vec2.prototype.SelfMul = function(a) { return this.x *= a, this.y *= a, this }, box2d.b2Vec2.prototype.SelfMulAdd = function(a, b) { return this.x += a * b.x, this.y += a * b.y, this }, box2d.b2Vec2.prototype.SelfMulSub = function(a, b) { return this.x -= a * b.x, this.y -= a * b.y, this }, box2d.b2Vec2.prototype.Dot = function(a) { return this.x * a.x + this.y * a.y }, box2d.b2Vec2.prototype.Cross = function(a) { return this.x * a.y - this.y * a.x }, box2d.b2Vec2.prototype.Length = function() { var a = this.x, b = this.y; return Math.sqrt(a * a + b * b) }, box2d.b2Vec2.prototype.GetLength = box2d.b2Vec2.prototype.Length, box2d.b2Vec2.prototype.LengthSquared = function() { var a = this.x, b = this.y; return a * a + b * b }, box2d.b2Vec2.prototype.GetLengthSquared = box2d.b2Vec2.prototype.LengthSquared, box2d.b2Vec2.prototype.Normalize = function() { var a = this.GetLength(); if (a >= box2d.b2_epsilon) { var b = 1 / a; this.x *= b, this.y *= b } return a }, box2d.b2Vec2.prototype.SelfNormalize = function() { var a = this.GetLength(); if (a >= box2d.b2_epsilon) { var b = 1 / a; this.x *= b, this.y *= b } return this }, box2d.b2Vec2.prototype.SelfRotate = function(a, b) { var c = this.x, d = this.y; return this.x = a * c - b * d, this.y = b * c + a * d, this }, box2d.b2Vec2.prototype.SelfRotateRadians = function(a) { return this.SelfRotate(Math.cos(a), Math.sin(a)) }, box2d.b2Vec2.prototype.SelfRotateDegrees = function(a) { return this.SelfRotateRadians(box2d.b2DegToRad(a)) }, box2d.b2Vec2.prototype.IsValid = function() { return isFinite(this.x) && isFinite(this.y) }, box2d.b2Vec2.prototype.SelfCrossVS = function(a) { var b = this.x; return this.x = a * this.y, this.y = -a * b, this }, box2d.b2Vec2.prototype.SelfCrossSV = function(a) { var b = this.x; return this.x = -a * this.y, this.y = a * b, this }, box2d.b2Vec2.prototype.SelfMinV = function(a) { return this.x = box2d.b2Min(this.x, a.x), this.y = box2d.b2Min(this.y, a.y), this }, box2d.b2Vec2.prototype.SelfMaxV = function(a) { return this.x = box2d.b2Max(this.x, a.x), this.y = box2d.b2Max(this.y, a.y), this }, box2d.b2Vec2.prototype.SelfAbs = function() { return this.x = box2d.b2Abs(this.x), this.y = box2d.b2Abs(this.y), this }, box2d.b2Vec2.prototype.SelfNeg = function() { return this.x = -this.x, this.y = -this.y, this }, box2d.b2Vec2.prototype.SelfSkew = function() { var a = this.x; return this.x = -this.y, this.y = a, this }, box2d.b2AbsV = function(a, b) { return b.x = box2d.b2Abs(a.x), b.y = box2d.b2Abs(a.y), b }, box2d.b2MinV = function(a, b, c) { return c.x = box2d.b2Min(a.x, b.x), c.y = box2d.b2Min(a.y, b.y), c }, box2d.b2MaxV = function(a, b, c) { return c.x = box2d.b2Max(a.x, b.x), c.y = box2d.b2Max(a.y, b.y), c }, box2d.b2ClampV = function(a, b, c, d) { return d.x = box2d.b2Clamp(a.x, b.x, c.x), d.y = box2d.b2Clamp(a.y, b.y, c.y), d }, box2d.b2RotateV = function(a, b, c, d) { var e = a.x, f = a.y; return d.x = b * e - c * f, d.y = c * e + b * f, d }, box2d.b2RotateRadiansV = function(a, b, c) { return box2d.b2RotateV(a, Math.cos(b), Math.sin(b), c) }, box2d.b2RotateDegreesV = function(a, b, c) { return box2d.b2RotateRadiansV(a, box2d.b2DegToRad(b), c) }, box2d.b2DotVV = function(a, b) { return a.x * b.x + a.y * b.y }, box2d.b2CrossVV = function(a, b) { return a.x * b.y - a.y * b.x }; box2d.b2CrossVS = function(a, b, c) { var d = a.x; return c.x = b * a.y, c.y = -b * d, c }, box2d.b2CrossVOne = function(a, b) { var c = a.x; return b.x = a.y, b.y = -c, b }, box2d.b2CrossSV = function(a, b, c) { var d = b.x; return c.x = -a * b.y, c.y = a * d, c }, box2d.b2CrossOneV = function(a, b) { var c = a.x; return b.x = -a.y, b.y = c, b }, box2d.b2AddVV = function(a, b, c) { return c.x = a.x + b.x, c.y = a.y + b.y, c }, box2d.b2SubVV = function(a, b, c) { return c.x = a.x - b.x, c.y = a.y - b.y, c }, box2d.b2MulSV = function(a, b, c) { return c.x = b.x * a, c.y = b.y * a, c }, box2d.b2AddVMulSV = function(a, b, c, d) { return d.x = a.x + b * c.x, d.y = a.y + b * c.y, d }, box2d.b2SubVMulSV = function(a, b, c, d) { return d.x = a.x - b * c.x, d.y = a.y - b * c.y, d }, box2d.b2AddVCrossSV = function(a, b, c, d) { var e = c.x; return d.x = a.x - b * c.y, d.y = a.y + b * e, d }, box2d.b2MidVV = function(a, b, c) { return c.x = .5 * (a.x + b.x), c.y = .5 * (a.y + b.y), c }, box2d.b2ExtVV = function(a, b, c) { return c.x = .5 * (b.x - a.x), c.y = .5 * (b.y - a.y), c }, box2d.b2IsEqualToV = function(a, b) { return a.x === b.x && a.y === b.y }, box2d.b2DistanceVV = function(a, b) { var c = a.x - b.x, d = a.y - b.y; return Math.sqrt(c * c + d * d) }, box2d.b2DistanceSquaredVV = function(a, b) { var c = a.x - b.x, d = a.y - b.y; return c * c + d * d }, box2d.b2NegV = function(a, b) { return b.x = -a.x, b.y = -a.y, b }, box2d.b2Vec3 = function(a, b, c) { this.x = a || 0, this.y = b || 0, this.z = c || 0 }, box2d.b2Vec3.prototype.x = 0, box2d.b2Vec3.prototype.y = 0, box2d.b2Vec3.prototype.z = 0, box2d.b2Vec3.ZERO = new box2d.b2Vec3, box2d.b2Vec3.s_t0 = new box2d.b2Vec3, box2d.b2Vec3.prototype.Clone = function() { return new box2d.b2Vec3(this.x, this.y, this.z) }, box2d.b2Vec3.prototype.SetZero = function() { return this.x = 0, this.y = 0, this.z = 0, this }, box2d.b2Vec3.prototype.SetXYZ = function(a, b, c) { return this.x = a, this.y = b, this.z = c, this }, box2d.b2Vec3.prototype.Copy = function(a) { return this.x = a.x, this.y = a.y, this.z = a.z, this }, box2d.b2Vec3.prototype.SelfNeg = function() { return this.x = -this.x, this.y = -this.y, this.z = -this.z, this }, box2d.b2Vec3.prototype.SelfAdd = function(a) { return this.x += a.x, this.y += a.y, this.z += a.z, this }, box2d.b2Vec3.prototype.SelfAddXYZ = function(a, b, c) { return this.x += a, this.y += b, this.z += c, this }, box2d.b2Vec3.prototype.SelfSub = function(a) { return this.x -= a.x, this.y -= a.y, this.z -= a.z, this }, box2d.b2Vec3.prototype.SelfSubXYZ = function(a, b, c) { return this.x -= a, this.y -= b, this.z -= c, this }, box2d.b2Vec3.prototype.SelfMul = function(a) { return this.x *= a, this.y *= a, this.z *= a, this }, box2d.b2DotV3V3 = function(a, b) { return a.x * b.x + a.y * b.y + a.z * b.z }, box2d.b2CrossV3V3 = function(a, b, c) { var d = a.x, e = a.y, f = a.z, g = b.x, h = b.y, i = b.z; return c.x = e * i - f * h, c.y = f * g - d * i, c.z = d * h - e * g, c }, box2d.b2Mat22 = function() { this.ex = new box2d.b2Vec2(1, 0), this.ey = new box2d.b2Vec2(0, 1) }, box2d.b2Mat22.prototype.ex = null, box2d.b2Mat22.prototype.ey = null, box2d.b2Mat22.IDENTITY = new box2d.b2Mat22, box2d.b2Mat22.prototype.Clone = function() { return (new box2d.b2Mat22).Copy(this) }, box2d.b2Mat22.FromVV = function(a, b) { return (new box2d.b2Mat22).SetVV(a, b) }, box2d.b2Mat22.FromSSSS = function(a, b, c, d) { return (new box2d.b2Mat22).SetSSSS(a, b, c, d) }, box2d.b2Mat22.FromAngleRadians = function(a) { return (new box2d.b2Mat22).SetAngleRadians(a) }, box2d.b2Mat22.prototype.SetSSSS = function(a, b, c, d) { return this.ex.SetXY(a, c), this.ey.SetXY(b, d), this }, box2d.b2Mat22.prototype.SetVV = function(a, b) { return this.ex.Copy(a), this.ey.Copy(b), this }, box2d.b2Mat22.prototype.SetAngle = function(a) { var b = Math.cos(a), c = Math.sin(a); return this.ex.SetXY(b, c), this.ey.SetXY(-c, b), this }, box2d.b2Mat22.prototype.SetAngleRadians = box2d.b2Mat22.prototype.SetAngle, box2d.b2Mat22.prototype.SetAngleDegrees = function(a) { return this.SetAngle(box2d.b2DegToRad(a)) }, box2d.b2Mat22.prototype.Copy = function(a) { return this.ex.Copy(a.ex), this.ey.Copy(a.ey), this }, box2d.b2Mat22.prototype.SetIdentity = function() { return this.ex.SetXY(1, 0), this.ey.SetXY(0, 1), this }, box2d.b2Mat22.prototype.SetZero = function() { return this.ex.SetZero(), this.ey.SetZero(), this }, box2d.b2Mat22.prototype.GetAngle = function() { return Math.atan2(this.ex.y, this.ex.x) }, box2d.b2Mat22.prototype.GetAngleRadians = box2d.b2Mat22.prototype.GetAngle, box2d.b2Mat22.prototype.GetInverse = function(a) { var b = this.ex.x, c = this.ey.x, d = this.ex.y, e = this.ey.y, f = b * e - c * d; return 0 !== f && (f = 1 / f), a.ex.x = f * e, a.ey.x = -f * c, a.ex.y = -f * d, a.ey.y = f * b, a }, box2d.b2Mat22.prototype.Solve = function(a, b, c) { var d = this.ex.x, e = this.ey.x, f = this.ex.y, g = this.ey.y, h = d * g - e * f; return 0 !== h && (h = 1 / h), c.x = h * (g * a - e * b), c.y = h * (d * b - f * a), c }, box2d.b2Mat22.prototype.SelfAbs = function() { return this.ex.SelfAbs(), this.ey.SelfAbs(), this }, box2d.b2Mat22.prototype.SelfInv = function() { return this.GetInverse(this) }, box2d.b2Mat22.prototype.SelfAddM = function(a) { return this.ex.SelfAdd(a.ex), this.ey.SelfAdd(a.ey), this }, box2d.b2Mat22.prototype.SelfSubM = function(a) { return this.ex.SelfSub(a.ex), this.ey.SelfSub(a.ey), this }, box2d.b2AbsM = function(a, b) { var c = a.ex, d = a.ey; return b.ex.x = box2d.b2Abs(c.x), b.ex.y = box2d.b2Abs(c.y), b.ey.x = box2d.b2Abs(d.x), b.ey.y = box2d.b2Abs(d.y), b }, box2d.b2MulMV = function(a, b, c) { var d = a.ex, e = a.ey, f = b.x, g = b.y; return c.x = d.x * f + e.x * g, c.y = d.y * f + e.y * g, c }, box2d.b2MulTMV = function(a, b, c) { var d = a.ex, e = a.ey, f = b.x, g = b.y; return c.x = d.x * f + d.y * g, c.y = e.x * f + e.y * g, c }, box2d.b2AddMM = function(a, b, c) { var d = a.ex, e = a.ey, f = b.ex, g = b.ey; return c.ex.x = d.x + f.x, c.ex.y = d.y + f.y, c.ey.x = e.x + g.x, c.ey.y = e.y + g.y, c }, box2d.b2MulMM = function(a, b, c) { var d = a.ex.x, e = a.ex.y, f = a.ey.x, g = a.ey.y, h = b.ex.x, i = b.ex.y, j = b.ey.x, k = b.ey.y; return c.ex.x = d * h + f * i, c.ex.y = e * h + g * i, c.ey.x = d * j + f * k, c.ey.y = e * j + g * k, c }, box2d.b2MulTMM = function(a, b, c) { var d = a.ex.x, e = a.ex.y, f = a.ey.x, g = a.ey.y, h = b.ex.x, i = b.ex.y, j = b.ey.x, k = b.ey.y; return c.ex.x = d * h + e * i, c.ex.y = f * h + g * i, c.ey.x = d * j + e * k, c.ey.y = f * j + g * k, c }, box2d.b2Mat33 = function() { this.ex = new box2d.b2Vec3(1, 0, 0), this.ey = new box2d.b2Vec3(0, 1, 0), this.ez = new box2d.b2Vec3(0, 0, 1) }, box2d.b2Mat33.prototype.ex = null, box2d.b2Mat33.prototype.ey = null, box2d.b2Mat33.prototype.ez = null, box2d.b2Mat33.IDENTITY = new box2d.b2Mat33, box2d.b2Mat33.prototype.Clone = function() { return (new box2d.b2Mat33).Copy(this) }, box2d.b2Mat33.prototype.SetVVV = function(a, b, c) { return this.ex.Copy(a), this.ey.Copy(b), this.ez.Copy(c), this }, box2d.b2Mat33.prototype.Copy = function(a) { return this.ex.Copy(a.ex), this.ey.Copy(a.ey), this.ez.Copy(a.ez), this }, box2d.b2Mat33.prototype.SetIdentity = function() { return this.ex.SetXYZ(1, 0, 0), this.ey.SetXYZ(0, 1, 0), this.ez.SetXYZ(0, 0, 1), this }, box2d.b2Mat33.prototype.SetZero = function() { return this.ex.SetZero(), this.ey.SetZero(), this.ez.SetZero(), this }, box2d.b2Mat33.prototype.SelfAddM = function(a) { return this.ex.SelfAdd(a.ex), this.ey.SelfAdd(a.ey), this.ez.SelfAdd(a.ez), this }, box2d.b2Mat33.prototype.Solve33 = function(a, b, c, d) { var e = this.ex.x, f = this.ex.y, g = this.ex.z, h = this.ey.x, i = this.ey.y, j = this.ey.z, k = this.ez.x, l = this.ez.y, m = this.ez.z, n = e * (i * m - j * l) + f * (j * k - h * m) + g * (h * l - i * k); return 0 !== n && (n = 1 / n), d.x = n * (a * (i * m - j * l) + b * (j * k - h * m) + c * (h * l - i * k)), d.y = n * (e * (b * m - c * l) + f * (c * k - a * m) + g * (a * l - b * k)), d.z = n * (e * (i * c - j * b) + f * (j * a - h * c) + g * (h * b - i * a)), d }, box2d.b2Mat33.prototype.Solve22 = function(a, b, c) { var d = this.ex.x, e = this.ey.x, f = this.ex.y, g = this.ey.y, h = d * g - e * f; return 0 !== h && (h = 1 / h), c.x = h * (g * a - e * b), c.y = h * (d * b - f * a), c }, box2d.b2Mat33.prototype.GetInverse22 = function(a) { var b = this.ex.x, c = this.ey.x, d = this.ex.y, e = this.ey.y, f = b * e - c * d; 0 !== f && (f = 1 / f), a.ex.x = f * e, a.ey.x = -f * c, a.ex.z = 0, a.ex.y = -f * d, a.ey.y = f * b, a.ey.z = 0, a.ez.x = 0, a.ez.y = 0, a.ez.z = 0 }, box2d.b2Mat33.prototype.GetSymInverse33 = function(a) { var b = box2d.b2DotV3V3(this.ex, box2d.b2CrossV3V3(this.ey, this.ez, box2d.b2Vec3.s_t0)); 0 !== b && (b = 1 / b); var c = this.ex.x, d = this.ey.x, e = this.ez.x, f = this.ey.y, g = this.ez.y, h = this.ez.z; a.ex.x = b * (f * h - g * g), a.ex.y = b * (e * g - d * h), a.ex.z = b * (d * g - e * f), a.ey.x = a.ex.y, a.ey.y = b * (c * h - e * e), a.ey.z = b * (e * d - c * g), a.ez.x = a.ex.z, a.ez.y = a.ey.z, a.ez.z = b * (c * f - d * d) }, box2d.b2MulM33V3 = function(a, b, c) { var d = b.x, e = b.y, f = b.z; return c.x = a.ex.x * d + a.ey.x * e + a.ez.x * f, c.y = a.ex.y * d + a.ey.y * e + a.ez.y * f, c.z = a.ex.z * d + a.ey.z * e + a.ez.z * f, c }, box2d.b2MulM33XYZ = function(a, b, c, d, e) { return e.x = a.ex.x * b + a.ey.x * c + a.ez.x * d, e.y = a.ex.y * b + a.ey.y * c + a.ez.y * d, e.z = a.ex.z * b + a.ey.z * c + a.ez.z * d, e }, box2d.b2MulM33V2 = function(a, b, c) { var d = b.x, e = b.y; return c.x = a.ex.x * d + a.ey.x * e, c.y = a.ex.y * d + a.ey.y * e, c }, box2d.b2MulM33XY = function(a, b, c, d) { return d.x = a.ex.x * b + a.ey.x * c, d.y = a.ex.y * b + a.ey.y * c, d }, box2d.b2Rot = function(a) { a && (this.angle = a, this.s = Math.sin(a), this.c = Math.cos(a)) }, box2d.b2Rot.prototype.angle = 0, box2d.b2Rot.prototype.s = 0, box2d.b2Rot.prototype.c = 1, box2d.b2Rot.IDENTITY = new box2d.b2Rot, box2d.b2Rot.prototype.Clone = function() { return (new box2d.b2Rot).Copy(this) }, box2d.b2Rot.prototype.Copy = function(a) { return this.angle = a.angle, this.s = a.s, this.c = a.c, this }, box2d.b2Rot.prototype.SetAngle = function(a) { return this.angle !== a && (this.angle = a, this.s = Math.sin(a), this.c = Math.cos(a)), this }, box2d.b2Rot.prototype.SetAngleRadians = box2d.b2Rot.prototype.SetAngle, box2d.b2Rot.prototype.SetAngleDegrees = function(a) { return this.SetAngle(box2d.b2DegToRad(a)) }, box2d.b2Rot.prototype.SetIdentity = function() { return this.angle = 0, this.s = 0, this.c = 1, this }, box2d.b2Rot.prototype.GetAngle = function() { return this.angle }, box2d.b2Rot.prototype.GetAngleRadians = box2d.b2Rot.prototype.GetAngle, box2d.b2Rot.prototype.GetAngleDegrees = function() { return box2d.b2RadToDeg(this.GetAngle()) }, box2d.b2Rot.prototype.GetXAxis = function(a) { return a.x = this.c, a.y = this.s, a }, box2d.b2Rot.prototype.GetYAxis = function(a) { return a.x = -this.s, a.y = this.c, a }, box2d.b2MulRR = function(a, b, c) { var d = a.c, e = a.s, f = b.c, g = b.s; for (c.s = e * f + d * g, c.c = d * f - e * g, c.angle = a.angle + b.angle; c.angle < -box2d.b2_pi;) c.angle += box2d.b2_two_pi; for (; c.angle >= box2d.b2_pi;) c.angle -= box2d.b2_two_pi; return c }, box2d.b2MulTRR = function(a, b, c) { var d = a.c, e = a.s, f = b.c, g = b.s; for (c.s = d * g - e * f, c.c = d * f + e * g, c.angle = a.angle - b.angle; c.angle < -box2d.b2_pi;) c.angle += box2d.b2_two_pi; for (; c.angle >= box2d.b2_pi;) c.angle -= box2d.b2_two_pi; return c }, box2d.b2MulRV = function(a, b, c) { var d = a.c, e = a.s, f = b.x, g = b.y; return c.x = d * f - e * g, c.y = e * f + d * g, c }, box2d.b2MulTRV = function(a, b, c) { var d = a.c, e = a.s, f = b.x, g = b.y; return c.x = d * f + e * g, c.y = -e * f + d * g, c }, box2d.b2Transform = function() { this.p = new box2d.b2Vec2, this.q = new box2d.b2Rot }, box2d.b2Transform.prototype.p = null, box2d.b2Transform.prototype.q = null, box2d.b2Transform.IDENTITY = new box2d.b2Transform, box2d.b2Transform.prototype.Clone = function() { return (new box2d.b2Transform).Copy(this) }, box2d.b2Transform.prototype.Copy = function(a) { return this.p.Copy(a.p), this.q.Copy(a.q), this }, box2d.b2Transform.prototype.SetIdentity = function() { return this.p.SetZero(), this.q.SetIdentity(), this }, box2d.b2Transform.prototype.SetPositionRotation = function(a, b) { return this.p.Copy(a), this.q.Copy(b), this }, box2d.b2Transform.prototype.SetPositionAngleRadians = function(a, b) { return this.p.Copy(a), this.q.SetAngleRadians(b), this }, box2d.b2Transform.prototype.SetPosition = function(a) { return this.p.Copy(a), this }, box2d.b2Transform.prototype.SetPositionXY = function(a, b) { return this.p.SetXY(a, b), this }, box2d.b2Transform.prototype.SetRotation = function(a) { return this.q.Copy(a), this }, box2d.b2Transform.prototype.SetRotationAngleRadians = function(a) { return this.q.SetAngleRadians(a), this }, box2d.b2Transform.prototype.GetPosition = function() { return this.p }, box2d.b2Transform.prototype.GetRotation = function() { return this.q }, box2d.b2Transform.prototype.GetRotationAngle = function() { return this.q.GetAngle() }, box2d.b2Transform.prototype.GetRotationAngleRadians = box2d.b2Transform.prototype.GetRotationAngle, box2d.b2Transform.prototype.GetAngle = function() { return this.q.GetAngle() }, box2d.b2Transform.prototype.GetAngleRadians = box2d.b2Transform.prototype.GetAngle, box2d.b2MulXV = function(a, b, c) { var d = a.q.c, e = a.q.s, f = b.x, g = b.y; return c.x = d * f - e * g + a.p.x, c.y = e * f + d * g + a.p.y, c }, box2d.b2MulTXV = function(a, b, c) { var d = a.q.c, e = a.q.s, f = b.x - a.p.x, g = b.y - a.p.y; return c.x = d * f + e * g, c.y = -e * f + d * g, c }, box2d.b2MulXX = function(a, b, c) { return box2d.b2MulRR(a.q, b.q, c.q), box2d.b2AddVV(box2d.b2MulRV(a.q, b.p, c.p), a.p, c.p), c }, box2d.b2MulTXX = function(a, b, c) { return box2d.b2MulTRR(a.q, b.q, c.q), box2d.b2MulTRV(a.q, box2d.b2SubVV(b.p, a.p, c.p), c.p), c }, box2d.b2Sweep = function() { this.localCenter = new box2d.b2Vec2, this.c0 = new box2d.b2Vec2, this.c = new box2d.b2Vec2 }, box2d.b2Sweep.prototype.localCenter = null, box2d.b2Sweep.prototype.c0 = null, box2d.b2Sweep.prototype.c = null, box2d.b2Sweep.prototype.a0 = 0, box2d.b2Sweep.prototype.a = 0, box2d.b2Sweep.prototype.alpha0 = 0, box2d.b2Sweep.prototype.Clone = function() { return (new box2d.b2Sweep).Copy(this) }, box2d.b2Sweep.prototype.Copy = function(a) { return this.localCenter.Copy(a.localCenter), this.c0.Copy(a.c0), this.c.Copy(a.c), this.a0 = a.a0, this.a = a.a, this.alpha0 = a.alpha0, this }, box2d.b2Sweep.prototype.GetTransform = function(a, b) { var c = 1 - b; a.p.x = c * this.c0.x + b * this.c.x, a.p.y = c * this.c0.y + b * this.c.y; var d = c * this.a0 + b * this.a; return a.q.SetAngleRadians(d), a.p.SelfSub(box2d.b2MulRV(a.q, this.localCenter, box2d.b2Vec2.s_t0)), a }, box2d.b2Sweep.prototype.Advance = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(this.alpha0 < 1); var b = (a - this.alpha0) / (1 - this.alpha0); this.c0.x += b * (this.c.x - this.c0.x), this.c0.y += b * (this.c.y - this.c0.y), this.a0 += b * (this.a - this.a0), this.alpha0 = a }, box2d.b2Sweep.prototype.Normalize = function() { var a = box2d.b2_two_pi * Math.floor(this.a0 / box2d.b2_two_pi); this.a0 -= a, this.a -= a }, goog.provide("box2d.b2Controller"), goog.require("box2d.b2Settings"), box2d.b2ControllerEdge = function() {}, box2d.b2ControllerEdge.prototype.controller = null, box2d.b2ControllerEdge.prototype.body = null, box2d.b2ControllerEdge.prototype.prevBody = null, box2d.b2ControllerEdge.prototype.nextBody = null, box2d.b2ControllerEdge.prototype.prevController = null, box2d.b2ControllerEdge.prototype.nextController = null, box2d.b2Controller = function() {}, box2d.b2Controller.prototype.m_world = null, box2d.b2Controller.prototype.m_bodyList = null, box2d.b2Controller.prototype.m_bodyCount = 0, box2d.b2Controller.prototype.m_prev = null, box2d.b2Controller.prototype.m_next = null, box2d.b2Controller.prototype.Step = function(a) {}, box2d.b2Controller.prototype.Draw = function(a) {}, box2d.b2Controller.prototype.GetNext = function() { return this.m_next }, box2d.b2Controller.prototype.GetPrev = function() { return this.m_prev }, box2d.b2Controller.prototype.GetWorld = function() { return this.m_world }, box2d.b2Controller.prototype.GetBodyList = function() { return this.m_bodyList }, box2d.b2Controller.prototype.AddBody = function(a) { var b = new box2d.b2ControllerEdge; b.body = a, b.controller = this, b.nextBody = this.m_bodyList, b.prevBody = null, this.m_bodyList && (this.m_bodyList.prevBody = b), this.m_bodyList = b, ++this.m_bodyCount, b.nextController = a.m_controllerList, b.prevController = null, a.m_controllerList && (a.m_controllerList.prevController = b), a.m_controllerList = b, ++a.m_controllerCount }, box2d.b2Controller.prototype.RemoveBody = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_bodyCount > 0); for (var b = this.m_bodyList; b && b.body !== a;) b = b.nextBody; box2d.ENABLE_ASSERTS && box2d.b2Assert(null !== b), b.prevBody && (b.prevBody.nextBody = b.nextBody), b.nextBody && (b.nextBody.prevBody = b.prevBody), this.m_bodyList === b && (this.m_bodyList = b.nextBody), --this.m_bodyCount, b.nextController && (b.nextController.prevController = b.prevController), b.prevController && (b.prevController.nextController = b.nextController), a.m_controllerList === b && (a.m_controllerList = b.nextController), --a.m_controllerCount }, box2d.b2Controller.prototype.Clear = function() { for (; this.m_bodyList;) this.RemoveBody(this.m_bodyList.body); this.m_bodyCount = 0 }, goog.provide("box2d.b2ConstantAccelController"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Controller"), goog.require("box2d.b2Math"), box2d.b2ConstantAccelController = function() { goog.base(this), this.A = new box2d.b2Vec2(0, 0) }, goog.inherits(box2d.b2ConstantAccelController, box2d.b2Controller), box2d.b2ConstantAccelController.prototype.A = null, box2d.b2ConstantAccelController.prototype.Step = function(a) { for (var b = box2d.b2MulSV(a.dt, this.A, box2d.b2ConstantAccelController.prototype.Step.s_dtA), c = this.m_bodyList; c; c = c.nextBody) { var d = c.body; d.IsAwake() && d.SetLinearVelocity(box2d.b2AddVV(d.GetLinearVelocity(), b, box2d.b2Vec2.s_t0)) } }, box2d.b2ConstantAccelController.prototype.Step.s_dtA = new box2d.b2Vec2, goog.provide("box2d.b2Joint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Math"), box2d.b2JointType = { e_unknownJoint: 0, e_revoluteJoint: 1, e_prismaticJoint: 2, e_distanceJoint: 3, e_pulleyJoint: 4, e_mouseJoint: 5, e_gearJoint: 6, e_wheelJoint: 7, e_weldJoint: 8, e_frictionJoint: 9, e_ropeJoint: 10, e_motorJoint: 11, e_areaJoint: 12 }, goog.exportProperty(box2d.b2JointType, "e_unknownJoint", box2d.b2JointType.e_unknownJoint), goog.exportProperty(box2d.b2JointType, "e_revoluteJoint", box2d.b2JointType.e_revoluteJoint), goog.exportProperty(box2d.b2JointType, "e_prismaticJoint", box2d.b2JointType.e_prismaticJoint), goog.exportProperty(box2d.b2JointType, "e_distanceJoint", box2d.b2JointType.e_distanceJoint), goog.exportProperty(box2d.b2JointType, "e_pulleyJoint", box2d.b2JointType.e_pulleyJoint), goog.exportProperty(box2d.b2JointType, "e_mouseJoint", box2d.b2JointType.e_mouseJoint), goog.exportProperty(box2d.b2JointType, "e_gearJoint", box2d.b2JointType.e_gearJoint), goog.exportProperty(box2d.b2JointType, "e_wheelJoint", box2d.b2JointType.e_wheelJoint), goog.exportProperty(box2d.b2JointType, "e_weldJoint", box2d.b2JointType.e_weldJoint), goog.exportProperty(box2d.b2JointType, "e_frictionJoint", box2d.b2JointType.e_frictionJoint), goog.exportProperty(box2d.b2JointType, "e_ropeJoint", box2d.b2JointType.e_ropeJoint), goog.exportProperty(box2d.b2JointType, "e_motorJoint", box2d.b2JointType.e_motorJoint), goog.exportProperty(box2d.b2JointType, "e_areaJoint", box2d.b2JointType.e_areaJoint), box2d.b2LimitState = { e_inactiveLimit: 0, e_atLowerLimit: 1, e_atUpperLimit: 2, e_equalLimits: 3 }, goog.exportProperty(box2d.b2LimitState, "e_inactiveLimit", box2d.b2LimitState.e_inactiveLimit), goog.exportProperty(box2d.b2LimitState, "e_atLowerLimit", box2d.b2LimitState.e_atLowerLimit), goog.exportProperty(box2d.b2LimitState, "e_atUpperLimit", box2d.b2LimitState.e_atUpperLimit), goog.exportProperty(box2d.b2LimitState, "e_equalLimits", box2d.b2LimitState.e_equalLimits), box2d.b2Jacobian = function() { this.linear = new box2d.b2Vec2 }, box2d.b2Jacobian.prototype.linear = null, box2d.b2Jacobian.prototype.angularA = 0, box2d.b2Jacobian.prototype.angularB = 0, box2d.b2Jacobian.prototype.SetZero = function() { return this.linear.SetZero(), this.angularA = 0, this.angularB = 0, this }, box2d.b2Jacobian.prototype.Set = function(a, b, c) { return this.linear.Copy(a), this.angularA = b, this.angularB = c, this }, box2d.b2JointEdge = function() {}; box2d.b2JointEdge.prototype.other = null, box2d.b2JointEdge.prototype.joint = null, box2d.b2JointEdge.prototype.prev = null, box2d.b2JointEdge.prototype.next = null, box2d.b2JointDef = function(a) { this.type = a }, box2d.b2JointDef.prototype.type = box2d.b2JointType.e_unknownJoint, box2d.b2JointDef.prototype.userData = null, box2d.b2JointDef.prototype.bodyA = null, box2d.b2JointDef.prototype.bodyB = null, box2d.b2JointDef.prototype.collideConnected = !1, box2d.b2Joint = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(a.bodyA !== a.bodyB), this.m_type = a.type, this.m_edgeA = new box2d.b2JointEdge, this.m_edgeB = new box2d.b2JointEdge, this.m_bodyA = a.bodyA, this.m_bodyB = a.bodyB, this.m_collideConnected = a.collideConnected, this.m_userData = a.userData }, box2d.b2Joint.prototype.m_type = box2d.b2JointType.e_unknownJoint, box2d.b2Joint.prototype.m_prev = null, box2d.b2Joint.prototype.m_next = null, box2d.b2Joint.prototype.m_edgeA = null, box2d.b2Joint.prototype.m_edgeB = null, box2d.b2Joint.prototype.m_bodyA = null, box2d.b2Joint.prototype.m_bodyB = null, box2d.b2Joint.prototype.m_index = 0, box2d.b2Joint.prototype.m_islandFlag = !1, box2d.b2Joint.prototype.m_collideConnected = !1, box2d.b2Joint.prototype.m_userData = null, box2d.b2Joint.prototype.GetAnchorA = function(a) { return a.SetZero() }, box2d.b2Joint.prototype.GetAnchorB = function(a) { return a.SetZero() }, box2d.b2Joint.prototype.GetReactionForce = function(a, b) { return b.SetZero() }, box2d.b2Joint.prototype.GetReactionTorque = function(a) { return 0 }, box2d.b2Joint.prototype.InitVelocityConstraints = function(a) {}, box2d.b2Joint.prototype.SolveVelocityConstraints = function(a) {}, box2d.b2Joint.prototype.SolvePositionConstraints = function(a) { return !1 }, box2d.b2Joint.prototype.GetType = function() { return this.m_type }, box2d.b2Joint.prototype.GetBodyA = function() { return this.m_bodyA }, box2d.b2Joint.prototype.GetBodyB = function() { return this.m_bodyB }, box2d.b2Joint.prototype.GetNext = function() { return this.m_next }, box2d.b2Joint.prototype.GetUserData = function() { return this.m_userData }, box2d.b2Joint.prototype.SetUserData = function(a) { this.m_userData = a }, box2d.b2Joint.prototype.GetCollideConnected = function() { return this.m_collideConnected }, box2d.b2Joint.prototype.Dump = function() { box2d.DEBUG && box2d.b2Log("// Dump is not supported for this joint type.\n") }, box2d.b2Joint.prototype.IsActive = function() { return this.m_bodyA.IsActive() && this.m_bodyB.IsActive() }, box2d.b2Joint.prototype.ShiftOrigin = function(a) {}, goog.provide("box2d.b2RevoluteJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Joint"), goog.require("box2d.b2Math"), box2d.b2RevoluteJointDef = function() { goog.base(this, box2d.b2JointType.e_revoluteJoint), this.localAnchorA = new box2d.b2Vec2(0, 0), this.localAnchorB = new box2d.b2Vec2(0, 0) }, goog.inherits(box2d.b2RevoluteJointDef, box2d.b2JointDef), box2d.b2RevoluteJointDef.prototype.localAnchorA = null, box2d.b2RevoluteJointDef.prototype.localAnchorB = null, box2d.b2RevoluteJointDef.prototype.referenceAngle = 0, box2d.b2RevoluteJointDef.prototype.enableLimit = !1, box2d.b2RevoluteJointDef.prototype.lowerAngle = 0, box2d.b2RevoluteJointDef.prototype.upperAngle = 0, box2d.b2RevoluteJointDef.prototype.enableMotor = !1, box2d.b2RevoluteJointDef.prototype.motorSpeed = 0, box2d.b2RevoluteJointDef.prototype.maxMotorTorque = 0, box2d.b2RevoluteJointDef.prototype.Initialize = function(a, b, c) { this.bodyA = a, this.bodyB = b, this.bodyA.GetLocalPoint(c, this.localAnchorA), this.bodyB.GetLocalPoint(c, this.localAnchorB), this.referenceAngle = this.bodyB.GetAngleRadians() - this.bodyA.GetAngleRadians() }, box2d.b2RevoluteJoint = function(a) { goog.base(this, a), this.m_localAnchorA = new box2d.b2Vec2, this.m_localAnchorB = new box2d.b2Vec2, this.m_impulse = new box2d.b2Vec3, this.m_rA = new box2d.b2Vec2, this.m_rB = new box2d.b2Vec2, this.m_localCenterA = new box2d.b2Vec2, this.m_localCenterB = new box2d.b2Vec2, this.m_mass = new box2d.b2Mat33, this.m_qA = new box2d.b2Rot, this.m_qB = new box2d.b2Rot, this.m_lalcA = new box2d.b2Vec2, this.m_lalcB = new box2d.b2Vec2, this.m_K = new box2d.b2Mat22, this.m_localAnchorA.Copy(a.localAnchorA), this.m_localAnchorB.Copy(a.localAnchorB), this.m_referenceAngle = a.referenceAngle, this.m_impulse.SetZero(), this.m_motorImpulse = 0, this.m_lowerAngle = a.lowerAngle, this.m_upperAngle = a.upperAngle, this.m_maxMotorTorque = a.maxMotorTorque, this.m_motorSpeed = a.motorSpeed, this.m_enableLimit = a.enableLimit, this.m_enableMotor = a.enableMotor, this.m_limitState = box2d.b2LimitState.e_inactiveLimit }, goog.inherits(box2d.b2RevoluteJoint, box2d.b2Joint), box2d.b2RevoluteJoint.prototype.m_localAnchorA = null, box2d.b2RevoluteJoint.prototype.m_localAnchorB = null, box2d.b2RevoluteJoint.prototype.m_impulse = null, box2d.b2RevoluteJoint.prototype.m_motorImpulse = 0, box2d.b2RevoluteJoint.prototype.m_enableMotor = !1, box2d.b2RevoluteJoint.prototype.m_maxMotorTorque = 0, box2d.b2RevoluteJoint.prototype.m_motorSpeed = 0, box2d.b2RevoluteJoint.prototype.m_enableLimit = !1, box2d.b2RevoluteJoint.prototype.m_referenceAngle = 0, box2d.b2RevoluteJoint.prototype.m_lowerAngle = 0, box2d.b2RevoluteJoint.prototype.m_upperAngle = 0, box2d.b2RevoluteJoint.prototype.m_indexA = 0, box2d.b2RevoluteJoint.prototype.m_indexB = 0, box2d.b2RevoluteJoint.prototype.m_rA = null, box2d.b2RevoluteJoint.prototype.m_rB = null, box2d.b2RevoluteJoint.prototype.m_localCenterA = null, box2d.b2RevoluteJoint.prototype.m_localCenterB = null, box2d.b2RevoluteJoint.prototype.m_invMassA = 0, box2d.b2RevoluteJoint.prototype.m_invMassB = 0, box2d.b2RevoluteJoint.prototype.m_invIA = 0, box2d.b2RevoluteJoint.prototype.m_invIB = 0, box2d.b2RevoluteJoint.prototype.m_mass = null, box2d.b2RevoluteJoint.prototype.m_motorMass = 0, box2d.b2RevoluteJoint.prototype.m_limitState = box2d.b2LimitState.e_inactiveLimit, box2d.b2RevoluteJoint.prototype.m_qA = null, box2d.b2RevoluteJoint.prototype.m_qB = null, box2d.b2RevoluteJoint.prototype.m_lalcA = null, box2d.b2RevoluteJoint.prototype.m_lalcB = null, box2d.b2RevoluteJoint.prototype.m_K = null, box2d.b2RevoluteJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI; var b = a.positions[this.m_indexA].a, c = a.velocities[this.m_indexA].v, d = a.velocities[this.m_indexA].w, e = a.positions[this.m_indexB].a, f = a.velocities[this.m_indexB].v, g = a.velocities[this.m_indexB].w, h = this.m_qA.SetAngleRadians(b), i = this.m_qB.SetAngleRadians(e); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA), box2d.b2MulRV(h, this.m_lalcA, this.m_rA), box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), box2d.b2MulRV(i, this.m_lalcB, this.m_rB); var j = this.m_invMassA, k = this.m_invMassB, l = this.m_invIA, m = this.m_invIB, n = l + m === 0; if (this.m_mass.ex.x = j + k + this.m_rA.y * this.m_rA.y * l + this.m_rB.y * this.m_rB.y * m, this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * l - this.m_rB.y * this.m_rB.x * m, this.m_mass.ez.x = -this.m_rA.y * l - this.m_rB.y * m, this.m_mass.ex.y = this.m_mass.ey.x, this.m_mass.ey.y = j + k + this.m_rA.x * this.m_rA.x * l + this.m_rB.x * this.m_rB.x * m, this.m_mass.ez.y = this.m_rA.x * l + this.m_rB.x * m, this.m_mass.ex.z = this.m_mass.ez.x, this.m_mass.ey.z = this.m_mass.ez.y, this.m_mass.ez.z = l + m, this.m_motorMass = l + m, this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass), (!1 === this.m_enableMotor || n) && (this.m_motorImpulse = 0), this.m_enableLimit && !1 === n) { var o = e - b - this.m_referenceAngle; box2d.b2Abs(this.m_upperAngle - this.m_lowerAngle) < 2 * box2d.b2_angularSlop ? this.m_limitState = box2d.b2LimitState.e_equalLimits : o <= this.m_lowerAngle ? (this.m_limitState !== box2d.b2LimitState.e_atLowerLimit && (this.m_impulse.z = 0), this.m_limitState = box2d.b2LimitState.e_atLowerLimit) : o >= this.m_upperAngle ? (this.m_limitState !== box2d.b2LimitState.e_atUpperLimit && (this.m_impulse.z = 0), this.m_limitState = box2d.b2LimitState.e_atUpperLimit) : (this.m_limitState = box2d.b2LimitState.e_inactiveLimit, this.m_impulse.z = 0) } else this.m_limitState = box2d.b2LimitState.e_inactiveLimit; if (a.step.warmStarting) { this.m_impulse.SelfMul(a.step.dtRatio), this.m_motorImpulse *= a.step.dtRatio; var p = box2d.b2RevoluteJoint.prototype.InitVelocityConstraints.s_P.SetXY(this.m_impulse.x, this.m_impulse.y); c.SelfMulSub(j, p), d -= l * (box2d.b2CrossVV(this.m_rA, p) + this.m_motorImpulse + this.m_impulse.z), f.SelfMulAdd(k, p), g += m * (box2d.b2CrossVV(this.m_rB, p) + this.m_motorImpulse + this.m_impulse.z) } else this.m_impulse.SetZero(), this.m_motorImpulse = 0; a.velocities[this.m_indexA].w = d, a.velocities[this.m_indexB].w = g }, box2d.b2RevoluteJoint.prototype.InitVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints = function(a) { var b = a.velocities[this.m_indexA].v, c = a.velocities[this.m_indexA].w, d = a.velocities[this.m_indexB].v, e = a.velocities[this.m_indexB].w, f = this.m_invMassA, g = this.m_invMassB, h = this.m_invIA, i = this.m_invIB, j = h + i === 0; if (this.m_enableMotor && this.m_limitState !== box2d.b2LimitState.e_equalLimits && !1 === j) { var k = e - c - this.m_motorSpeed, l = -this.m_motorMass * k, m = this.m_motorImpulse, n = a.step.dt * this.m_maxMotorTorque; this.m_motorImpulse = box2d.b2Clamp(this.m_motorImpulse + l, -n, n), l = this.m_motorImpulse - m, c -= h * l, e += i * l } if (this.m_enableLimit && this.m_limitState !== box2d.b2LimitState.e_inactiveLimit && !1 === j) { var o = box2d.b2SubVV(box2d.b2AddVCrossSV(d, e, this.m_rB, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(b, c, this.m_rA, box2d.b2Vec2.s_t1), box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_Cdot1), p = e - c, l = this.m_mass.Solve33(o.x, o.y, p, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_impulse3).SelfNeg(); if (this.m_limitState === box2d.b2LimitState.e_equalLimits) this.m_impulse.SelfAdd(l); else if (this.m_limitState === box2d.b2LimitState.e_atLowerLimit) { var q = this.m_impulse.z + l.z; if (q < 0) { var r = -o.x + this.m_impulse.z * this.m_mass.ez.x, s = -o.y + this.m_impulse.z * this.m_mass.ez.y, t = this.m_mass.Solve22(r, s, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_reduced); l.x = t.x, l.y = t.y, l.z = -this.m_impulse.z, this.m_impulse.x += t.x, this.m_impulse.y += t.y, this.m_impulse.z = 0 } else this.m_impulse.SelfAdd(l) } else if (this.m_limitState === box2d.b2LimitState.e_atUpperLimit) { var q = this.m_impulse.z + l.z; if (q > 0) { var r = -o.x + this.m_impulse.z * this.m_mass.ez.x, s = -o.y + this.m_impulse.z * this.m_mass.ez.y, t = this.m_mass.Solve22(r, s, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_reduced); l.x = t.x, l.y = t.y, l.z = -this.m_impulse.z, this.m_impulse.x += t.x, this.m_impulse.y += t.y, this.m_impulse.z = 0 } else this.m_impulse.SelfAdd(l) } var u = box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_P.SetXY(l.x, l.y); b.SelfMulSub(f, u), c -= h * (box2d.b2CrossVV(this.m_rA, u) + l.z), d.SelfMulAdd(g, u), e += i * (box2d.b2CrossVV(this.m_rB, u) + l.z) } else { var k = box2d.b2SubVV(box2d.b2AddVCrossSV(d, e, this.m_rB, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(b, c, this.m_rA, box2d.b2Vec2.s_t1), box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_Cdot), l = this.m_mass.Solve22(-k.x, -k.y, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_impulse2); this.m_impulse.x += l.x, this.m_impulse.y += l.y, b.SelfMulSub(f, l), c -= h * box2d.b2CrossVV(this.m_rA, l), d.SelfMulAdd(g, l), e += i * box2d.b2CrossVV(this.m_rB, l) } a.velocities[this.m_indexA].w = c, a.velocities[this.m_indexB].w = e }, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_Cdot = new box2d.b2Vec2, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_Cdot1 = new box2d.b2Vec2, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_impulse3 = new box2d.b2Vec3, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_reduced = new box2d.b2Vec2, box2d.b2RevoluteJoint.prototype.SolveVelocityConstraints.s_impulse2 = new box2d.b2Vec2, box2d.b2RevoluteJoint.prototype.SolvePositionConstraints = function(a) { var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.positions[this.m_indexB].c, e = a.positions[this.m_indexB].a, f = this.m_qA.SetAngleRadians(c), g = this.m_qB.SetAngleRadians(e), h = 0, i = 0, j = this.m_invIA + this.m_invIB === 0; if (this.m_enableLimit && this.m_limitState !== box2d.b2LimitState.e_inactiveLimit && !1 === j) { var k = e - c - this.m_referenceAngle, l = 0; if (this.m_limitState === box2d.b2LimitState.e_equalLimits) { var m = box2d.b2Clamp(k - this.m_lowerAngle, -box2d.b2_maxAngularCorrection, box2d.b2_maxAngularCorrection); l = -this.m_motorMass * m, h = box2d.b2Abs(m) } else if (this.m_limitState === box2d.b2LimitState.e_atLowerLimit) { var m = k - this.m_lowerAngle; h = -m, m = box2d.b2Clamp(m + box2d.b2_angularSlop, -box2d.b2_maxAngularCorrection, 0), l = -this.m_motorMass * m } else if (this.m_limitState === box2d.b2LimitState.e_atUpperLimit) { var m = k - this.m_upperAngle; h = m, m = box2d.b2Clamp(m - box2d.b2_angularSlop, 0, box2d.b2_maxAngularCorrection), l = -this.m_motorMass * m } c -= this.m_invIA * l, e += this.m_invIB * l } f.SetAngleRadians(c), g.SetAngleRadians(e), box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); var n = box2d.b2MulRV(f, this.m_lalcA, this.m_rA); box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); var o = box2d.b2MulRV(g, this.m_lalcB, this.m_rB), m = box2d.b2SubVV(box2d.b2AddVV(d, o, box2d.b2Vec2.s_t0), box2d.b2AddVV(b, n, box2d.b2Vec2.s_t1), box2d.b2RevoluteJoint.prototype.SolvePositionConstraints.s_C); i = m.GetLength(); var p = this.m_invMassA, q = this.m_invMassB, r = this.m_invIA, s = this.m_invIB, t = this.m_K; t.ex.x = p + q + r * n.y * n.y + s * o.y * o.y, t.ex.y = -r * n.x * n.y - s * o.x * o.y, t.ey.x = t.ex.y, t.ey.y = p + q + r * n.x * n.x + s * o.x * o.x; var u = t.Solve(m.x, m.y, box2d.b2RevoluteJoint.prototype.SolvePositionConstraints.s_impulse).SelfNeg(); return b.SelfMulSub(p, u), c -= r * box2d.b2CrossVV(n, u), d.SelfMulAdd(q, u), e += s * box2d.b2CrossVV(o, u), a.positions[this.m_indexA].a = c, a.positions[this.m_indexB].a = e, i <= box2d.b2_linearSlop && h <= box2d.b2_angularSlop }, box2d.b2RevoluteJoint.prototype.SolvePositionConstraints.s_C = new box2d.b2Vec2, box2d.b2RevoluteJoint.prototype.SolvePositionConstraints.s_impulse = new box2d.b2Vec2, box2d.b2RevoluteJoint.prototype.GetAnchorA = function(a) { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, a) }, box2d.b2RevoluteJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, a) }, box2d.b2RevoluteJoint.prototype.GetReactionForce = function(a, b) { return b.SetXY(a * this.m_impulse.x, a * this.m_impulse.y) }, box2d.b2RevoluteJoint.prototype.GetReactionTorque = function(a) { return a * this.m_impulse.z }, box2d.b2RevoluteJoint.prototype.GetLocalAnchorA = function(a) { return a.Copy(this.m_localAnchorA) }, box2d.b2RevoluteJoint.prototype.GetLocalAnchorB = function(a) { return a.Copy(this.m_localAnchorB) }, box2d.b2RevoluteJoint.prototype.GetReferenceAngle = function() { return this.m_referenceAngle }, box2d.b2RevoluteJoint.prototype.GetJointAngleRadians = function() { return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a - this.m_referenceAngle }, box2d.b2RevoluteJoint.prototype.GetJointSpeed = function() { return this.m_bodyB.m_angularVelocity - this.m_bodyA.m_angularVelocity }, box2d.b2RevoluteJoint.prototype.IsMotorEnabled = function() { return this.m_enableMotor }, box2d.b2RevoluteJoint.prototype.EnableMotor = function(a) { this.m_enableMotor !== a && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_enableMotor = a) }, box2d.b2RevoluteJoint.prototype.GetMotorTorque = function(a) { return a * this.m_motorImpulse }, box2d.b2RevoluteJoint.prototype.GetMotorSpeed = function() { return this.m_motorSpeed }, box2d.b2RevoluteJoint.prototype.SetMaxMotorTorque = function(a) { this.m_maxMotorTorque = a }, box2d.b2RevoluteJoint.prototype.GetMaxMotorTorque = function() { return this.m_maxMotorTorque }, box2d.b2RevoluteJoint.prototype.IsLimitEnabled = function() { return this.m_enableLimit }, box2d.b2RevoluteJoint.prototype.EnableLimit = function(a) { a !== this.m_enableLimit && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_enableLimit = a, this.m_impulse.z = 0) }, box2d.b2RevoluteJoint.prototype.GetLowerLimit = function() { return this.m_lowerAngle }, box2d.b2RevoluteJoint.prototype.GetUpperLimit = function() { return this.m_upperAngle }, box2d.b2RevoluteJoint.prototype.SetLimits = function(a, b) { a === this.m_lowerAngle && b === this.m_upperAngle || (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_impulse.z = 0, this.m_lowerAngle = a, this.m_upperAngle = b) }, box2d.b2RevoluteJoint.prototype.SetMotorSpeed = function(a) { this.m_motorSpeed !== a && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_motorSpeed = a) }, box2d.b2RevoluteJoint.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_bodyA.m_islandIndex, b = this.m_bodyB.m_islandIndex; box2d.b2Log(" /*box2d.b2RevoluteJointDef*/ var jd = new box2d.b2RevoluteJointDef();\n"), box2d.b2Log(" jd.bodyA = bodies[%d];\n", a), box2d.b2Log(" jd.bodyB = bodies[%d];\n", b), box2d.b2Log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), box2d.b2Log(" jd.localAnchorA.SetXY(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), box2d.b2Log(" jd.localAnchorB.SetXY(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), box2d.b2Log(" jd.referenceAngle = %.15f;\n", this.m_referenceAngle), box2d.b2Log(" jd.enableLimit = %s;\n", this.m_enableLimit ? "true" : "false"), box2d.b2Log(" jd.lowerAngle = %.15f;\n", this.m_lowerAngle), box2d.b2Log(" jd.upperAngle = %.15f;\n", this.m_upperAngle), box2d.b2Log(" jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"), box2d.b2Log(" jd.motorSpeed = %.15f;\n", this.m_motorSpeed), box2d.b2Log(" jd.maxMotorTorque = %.15f;\n", this.m_maxMotorTorque), box2d.b2Log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index) } }, goog.provide("box2d.b2PrismaticJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Joint"), goog.require("box2d.b2Math"), box2d.b2PrismaticJointDef = function() { goog.base(this, box2d.b2JointType.e_prismaticJoint), this.localAnchorA = new box2d.b2Vec2, this.localAnchorB = new box2d.b2Vec2, this.localAxisA = new box2d.b2Vec2(1, 0) }, goog.inherits(box2d.b2PrismaticJointDef, box2d.b2JointDef), box2d.b2PrismaticJointDef.prototype.localAnchorA = null, box2d.b2PrismaticJointDef.prototype.localAnchorB = null, box2d.b2PrismaticJointDef.prototype.localAxisA = null, box2d.b2PrismaticJointDef.prototype.referenceAngle = 0, box2d.b2PrismaticJointDef.prototype.enableLimit = !1, box2d.b2PrismaticJointDef.prototype.lowerTranslation = 0, box2d.b2PrismaticJointDef.prototype.upperTranslation = 0, box2d.b2PrismaticJointDef.prototype.enableMotor = !1, box2d.b2PrismaticJointDef.prototype.maxMotorForce = 0, box2d.b2PrismaticJointDef.prototype.motorSpeed = 0, box2d.b2PrismaticJointDef.prototype.Initialize = function(a, b, c, d) { this.bodyA = a, this.bodyB = b, this.bodyA.GetLocalPoint(c, this.localAnchorA), this.bodyB.GetLocalPoint(c, this.localAnchorB), this.bodyA.GetLocalVector(d, this.localAxisA), this.referenceAngle = this.bodyB.GetAngleRadians() - this.bodyA.GetAngleRadians() }, box2d.b2PrismaticJoint = function(a) { goog.base(this, a), this.m_localAnchorA = a.localAnchorA.Clone(), this.m_localAnchorB = a.localAnchorB.Clone(), this.m_localXAxisA = a.localAxisA.Clone().SelfNormalize(), this.m_localYAxisA = box2d.b2CrossOneV(this.m_localXAxisA, new box2d.b2Vec2), this.m_referenceAngle = a.referenceAngle, this.m_impulse = new box2d.b2Vec3(0, 0, 0), this.m_lowerTranslation = a.lowerTranslation, this.m_upperTranslation = a.upperTranslation, this.m_maxMotorForce = a.maxMotorForce, this.m_motorSpeed = a.motorSpeed, this.m_enableLimit = a.enableLimit, this.m_enableMotor = a.enableMotor, this.m_localCenterA = new box2d.b2Vec2, this.m_localCenterB = new box2d.b2Vec2, this.m_axis = new box2d.b2Vec2(0, 0), this.m_perp = new box2d.b2Vec2(0, 0), this.m_K = new box2d.b2Mat33, this.m_K3 = new box2d.b2Mat33, this.m_K2 = new box2d.b2Mat22, this.m_qA = new box2d.b2Rot, this.m_qB = new box2d.b2Rot, this.m_lalcA = new box2d.b2Vec2, this.m_lalcB = new box2d.b2Vec2, this.m_rA = new box2d.b2Vec2, this.m_rB = new box2d.b2Vec2 }, goog.inherits(box2d.b2PrismaticJoint, box2d.b2Joint), box2d.b2PrismaticJoint.prototype.m_localAnchorA = null, box2d.b2PrismaticJoint.prototype.m_localAnchorB = null, box2d.b2PrismaticJoint.prototype.m_localXAxisA = null, box2d.b2PrismaticJoint.prototype.m_localYAxisA = null, box2d.b2PrismaticJoint.prototype.m_referenceAngle = 0, box2d.b2PrismaticJoint.prototype.m_impulse = null, box2d.b2PrismaticJoint.prototype.m_motorImpulse = 0, box2d.b2PrismaticJoint.prototype.m_lowerTranslation = 0, box2d.b2PrismaticJoint.prototype.m_upperTranslation = 0, box2d.b2PrismaticJoint.prototype.m_maxMotorForce = 0, box2d.b2PrismaticJoint.prototype.m_motorSpeed = 0, box2d.b2PrismaticJoint.prototype.m_enableLimit = !1, box2d.b2PrismaticJoint.prototype.m_enableMotor = !1, box2d.b2PrismaticJoint.prototype.m_limitState = box2d.b2LimitState.e_inactiveLimit, box2d.b2PrismaticJoint.prototype.m_indexA = 0, box2d.b2PrismaticJoint.prototype.m_indexB = 0, box2d.b2PrismaticJoint.prototype.m_localCenterA = null, box2d.b2PrismaticJoint.prototype.m_localCenterB = null, box2d.b2PrismaticJoint.prototype.m_invMassA = 0, box2d.b2PrismaticJoint.prototype.m_invMassB = 0, box2d.b2PrismaticJoint.prototype.m_invIA = 0, box2d.b2PrismaticJoint.prototype.m_invIB = 0, box2d.b2PrismaticJoint.prototype.m_axis = null, box2d.b2PrismaticJoint.prototype.m_perp = null, box2d.b2PrismaticJoint.prototype.m_s1 = 0, box2d.b2PrismaticJoint.prototype.m_s2 = 0, box2d.b2PrismaticJoint.prototype.m_a1 = 0, box2d.b2PrismaticJoint.prototype.m_a2 = 0, box2d.b2PrismaticJoint.prototype.m_K = null, box2d.b2PrismaticJoint.prototype.m_K3 = null, box2d.b2PrismaticJoint.prototype.m_K2 = null, box2d.b2PrismaticJoint.prototype.m_motorMass = 0, box2d.b2PrismaticJoint.prototype.m_qA = null, box2d.b2PrismaticJoint.prototype.m_qB = null, box2d.b2PrismaticJoint.prototype.m_lalcA = null, box2d.b2PrismaticJoint.prototype.m_lalcB = null, box2d.b2PrismaticJoint.prototype.m_rA = null, box2d.b2PrismaticJoint.prototype.m_rB = null, box2d.b2PrismaticJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI; var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.velocities[this.m_indexA].v, e = a.velocities[this.m_indexA].w, f = a.positions[this.m_indexB].c, g = a.positions[this.m_indexB].a, h = a.velocities[this.m_indexB].v, i = a.velocities[this.m_indexB].w, j = this.m_qA.SetAngleRadians(c), k = this.m_qB.SetAngleRadians(g); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); var l = box2d.b2MulRV(j, this.m_lalcA, this.m_rA); box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); var m = box2d.b2MulRV(k, this.m_lalcB, this.m_rB), n = box2d.b2AddVV(box2d.b2SubVV(f, b, box2d.b2Vec2.s_t0), box2d.b2SubVV(m, l, box2d.b2Vec2.s_t1), box2d.b2PrismaticJoint.prototype.InitVelocityConstraints.s_d), o = this.m_invMassA, p = this.m_invMassB, q = this.m_invIA, r = this.m_invIB; if (box2d.b2MulRV(j, this.m_localXAxisA, this.m_axis), this.m_a1 = box2d.b2CrossVV(box2d.b2AddVV(n, l, box2d.b2Vec2.s_t0), this.m_axis), this.m_a2 = box2d.b2CrossVV(m, this.m_axis), this.m_motorMass = o + p + q * this.m_a1 * this.m_a1 + r * this.m_a2 * this.m_a2, this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass), box2d.b2MulRV(j, this.m_localYAxisA, this.m_perp), this.m_s1 = box2d.b2CrossVV(box2d.b2AddVV(n, l, box2d.b2Vec2.s_t0), this.m_perp), this.m_s2 = box2d.b2CrossVV(m, this.m_perp), this.m_K.ex.x = o + p + q * this.m_s1 * this.m_s1 + r * this.m_s2 * this.m_s2, this.m_K.ex.y = q * this.m_s1 + r * this.m_s2, this.m_K.ex.z = q * this.m_s1 * this.m_a1 + r * this.m_s2 * this.m_a2, this.m_K.ey.x = this.m_K.ex.y, this.m_K.ey.y = q + r, 0 === this.m_K.ey.y && (this.m_K.ey.y = 1), this.m_K.ey.z = q * this.m_a1 + r * this.m_a2, this.m_K.ez.x = this.m_K.ex.z, this.m_K.ez.y = this.m_K.ey.z, this.m_K.ez.z = o + p + q * this.m_a1 * this.m_a1 + r * this.m_a2 * this.m_a2, this.m_enableLimit) { var s = box2d.b2DotVV(this.m_axis, n); box2d.b2Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2 * box2d.b2_linearSlop ? this.m_limitState = box2d.b2LimitState.e_equalLimits : s <= this.m_lowerTranslation ? this.m_limitState !== box2d.b2LimitState.e_atLowerLimit && (this.m_limitState = box2d.b2LimitState.e_atLowerLimit, this.m_impulse.z = 0) : s >= this.m_upperTranslation ? this.m_limitState !== box2d.b2LimitState.e_atUpperLimit && (this.m_limitState = box2d.b2LimitState.e_atUpperLimit, this.m_impulse.z = 0) : (this.m_limitState = box2d.b2LimitState.e_inactiveLimit, this.m_impulse.z = 0) } else this.m_limitState = box2d.b2LimitState.e_inactiveLimit, this.m_impulse.z = 0; if (!1 === this.m_enableMotor && (this.m_motorImpulse = 0), a.step.warmStarting) { this.m_impulse.SelfMul(a.step.dtRatio), this.m_motorImpulse *= a.step.dtRatio; var t = box2d.b2AddVV(box2d.b2MulSV(this.m_impulse.x, this.m_perp, box2d.b2Vec2.s_t0), box2d.b2MulSV(this.m_motorImpulse + this.m_impulse.z, this.m_axis, box2d.b2Vec2.s_t1), box2d.b2PrismaticJoint.prototype.InitVelocityConstraints.s_P), u = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1, v = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2; d.SelfMulSub(o, t), e -= q * u, h.SelfMulAdd(p, t), i += r * v } else this.m_impulse.SetZero(), this.m_motorImpulse = 0; a.velocities[this.m_indexA].w = e, a.velocities[this.m_indexB].w = i }, box2d.b2PrismaticJoint.prototype.InitVelocityConstraints.s_d = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.InitVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints = function(a) { var b = a.velocities[this.m_indexA].v, c = a.velocities[this.m_indexA].w, d = a.velocities[this.m_indexB].v, e = a.velocities[this.m_indexB].w, f = this.m_invMassA, g = this.m_invMassB, h = this.m_invIA, i = this.m_invIB; if (this.m_enableMotor && this.m_limitState !== box2d.b2LimitState.e_equalLimits) { var j = box2d.b2DotVV(this.m_axis, box2d.b2SubVV(d, b, box2d.b2Vec2.s_t0)) + this.m_a2 * e - this.m_a1 * c, k = this.m_motorMass * (this.m_motorSpeed - j), l = this.m_motorImpulse, m = a.step.dt * this.m_maxMotorForce; this.m_motorImpulse = box2d.b2Clamp(this.m_motorImpulse + k, -m, m), k = this.m_motorImpulse - l; var n = box2d.b2MulSV(k, this.m_axis, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_P), o = k * this.m_a1, p = k * this.m_a2; b.SelfMulSub(f, n), c -= h * o, d.SelfMulAdd(g, n), e += i * p } var q = box2d.b2DotVV(this.m_perp, box2d.b2SubVV(d, b, box2d.b2Vec2.s_t0)) + this.m_s2 * e - this.m_s1 * c, r = e - c; if (this.m_enableLimit && this.m_limitState !== box2d.b2LimitState.e_inactiveLimit) { var s = box2d.b2DotVV(this.m_axis, box2d.b2SubVV(d, b, box2d.b2Vec2.s_t0)) + this.m_a2 * e - this.m_a1 * c, t = box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_f1.Copy(this.m_impulse), u = this.m_K.Solve33(-q, -r, -s, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_df3); this.m_impulse.SelfAdd(u), this.m_limitState === box2d.b2LimitState.e_atLowerLimit ? this.m_impulse.z = box2d.b2Max(this.m_impulse.z, 0) : this.m_limitState === box2d.b2LimitState.e_atUpperLimit && (this.m_impulse.z = box2d.b2Min(this.m_impulse.z, 0)); var v = -q - (this.m_impulse.z - t.z) * this.m_K.ez.x, w = -r - (this.m_impulse.z - t.z) * this.m_K.ez.y, x = this.m_K.Solve22(v, w, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_f2r); x.x += t.x, x.y += t.y, this.m_impulse.x = x.x, this.m_impulse.y = x.y, u.x = this.m_impulse.x - t.x, u.y = this.m_impulse.y - t.y, u.z = this.m_impulse.z - t.z; var n = box2d.b2AddVV(box2d.b2MulSV(u.x, this.m_perp, box2d.b2Vec2.s_t0), box2d.b2MulSV(u.z, this.m_axis, box2d.b2Vec2.s_t1), box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_P), o = u.x * this.m_s1 + u.y + u.z * this.m_a1, p = u.x * this.m_s2 + u.y + u.z * this.m_a2; b.SelfMulSub(f, n), c -= h * o, d.SelfMulAdd(g, n), e += i * p } else { var u = this.m_K.Solve22(-q, -r, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_df2); this.m_impulse.x += u.x, this.m_impulse.y += u.y; var n = box2d.b2MulSV(u.x, this.m_perp, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_P), o = u.x * this.m_s1 + u.y, p = u.x * this.m_s2 + u.y; b.SelfMulSub(f, n), c -= h * o, d.SelfMulAdd(g, n), e += i * p } a.velocities[this.m_indexA].w = c, a.velocities[this.m_indexB].w = e }, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_f2r = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_f1 = new box2d.b2Vec3, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_df3 = new box2d.b2Vec3, box2d.b2PrismaticJoint.prototype.SolveVelocityConstraints.s_df2 = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.SolvePositionConstraints = function(a) { var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.positions[this.m_indexB].c, e = a.positions[this.m_indexB].a, f = this.m_qA.SetAngleRadians(c), g = this.m_qB.SetAngleRadians(e), h = this.m_invMassA, i = this.m_invMassB, j = this.m_invIA, k = this.m_invIB, l = box2d.b2MulRV(f, this.m_lalcA, this.m_rA), m = box2d.b2MulRV(g, this.m_lalcB, this.m_rB), n = box2d.b2SubVV(box2d.b2AddVV(d, m, box2d.b2Vec2.s_t0), box2d.b2AddVV(b, l, box2d.b2Vec2.s_t1), box2d.b2PrismaticJoint.prototype.SolvePositionConstraints.s_d), o = box2d.b2MulRV(f, this.m_localXAxisA, this.m_axis), p = box2d.b2CrossVV(box2d.b2AddVV(n, l, box2d.b2Vec2.s_t0), o), q = box2d.b2CrossVV(m, o), r = box2d.b2MulRV(f, this.m_localYAxisA, this.m_perp), s = box2d.b2CrossVV(box2d.b2AddVV(n, l, box2d.b2Vec2.s_t0), r), t = box2d.b2CrossVV(m, r), u = box2d.b2PrismaticJoint.prototype.SolvePositionConstraints.s_impulse, v = box2d.b2DotVV(r, n), w = e - c - this.m_referenceAngle, x = box2d.b2Abs(v), y = box2d.b2Abs(w), z = !1, A = 0; if (this.m_enableLimit) { var B = box2d.b2DotVV(o, n); box2d.b2Abs(this.m_upperTranslation - this.m_lowerTranslation) < 2 * box2d.b2_linearSlop ? (A = box2d.b2Clamp(B, -box2d.b2_maxLinearCorrection, box2d.b2_maxLinearCorrection), x = box2d.b2Max(x, box2d.b2Abs(B)), z = !0) : B <= this.m_lowerTranslation ? (A = box2d.b2Clamp(B - this.m_lowerTranslation + box2d.b2_linearSlop, -box2d.b2_maxLinearCorrection, 0), x = box2d.b2Max(x, this.m_lowerTranslation - B), z = !0) : B >= this.m_upperTranslation && (A = box2d.b2Clamp(B - this.m_upperTranslation - box2d.b2_linearSlop, 0, box2d.b2_maxLinearCorrection), x = box2d.b2Max(x, B - this.m_upperTranslation), z = !0) } if (z) { var C = h + i + j * s * s + k * t * t, D = j * s + k * t, E = j * s * p + k * t * q, F = j + k; 0 === F && (F = 1); var G = j * p + k * q, H = h + i + j * p * p + k * q * q, I = this.m_K3; I.ex.SetXYZ(C, D, E), I.ey.SetXYZ(D, F, G), I.ez.SetXYZ(E, G, H), u = I.Solve33(-v, -w, -A, u) } else { var C = h + i + j * s * s + k * t * t, D = j * s + k * t, F = j + k; 0 === F && (F = 1); var J = this.m_K2; J.ex.SetXY(C, D), J.ey.SetXY(D, F); var K = J.Solve(-v, -w, box2d.b2PrismaticJoint.prototype.SolvePositionConstraints.s_impulse1); u.x = K.x, u.y = K.y, u.z = 0 } var L = box2d.b2AddVV(box2d.b2MulSV(u.x, r, box2d.b2Vec2.s_t0), box2d.b2MulSV(u.z, o, box2d.b2Vec2.s_t1), box2d.b2PrismaticJoint.prototype.SolvePositionConstraints.s_P), M = u.x * s + u.y + u.z * p, N = u.x * t + u.y + u.z * q; return b.SelfMulSub(h, L), c -= j * M, d.SelfMulAdd(i, L), e += k * N, a.positions[this.m_indexA].a = c, a.positions[this.m_indexB].a = e, x <= box2d.b2_linearSlop && y <= box2d.b2_angularSlop }, box2d.b2PrismaticJoint.prototype.SolvePositionConstraints.s_d = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.SolvePositionConstraints.s_impulse = new box2d.b2Vec3, box2d.b2PrismaticJoint.prototype.SolvePositionConstraints.s_impulse1 = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.SolvePositionConstraints.s_P = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.GetAnchorA = function(a) { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, a) }, box2d.b2PrismaticJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, a) }, box2d.b2PrismaticJoint.prototype.GetReactionForce = function(a, b) { return b.SetXY(a * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x), a * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y)) }, box2d.b2PrismaticJoint.prototype.GetReactionTorque = function(a) { return a * this.m_impulse.y }, box2d.b2PrismaticJoint.prototype.GetLocalAnchorA = function(a) { return a.Copy(this.m_localAnchorA) }, box2d.b2PrismaticJoint.prototype.GetLocalAnchorB = function(a) { return a.Copy(this.m_localAnchorB) }, box2d.b2PrismaticJoint.prototype.GetLocalAxisA = function(a) { return a.Copy(this.m_localXAxisA) }, box2d.b2PrismaticJoint.prototype.GetReferenceAngle = function() { return this.m_referenceAngle }, box2d.b2PrismaticJoint.prototype.GetJointTranslation = function() { var a = this.m_bodyA.GetWorldPoint(this.m_localAnchorA, box2d.b2PrismaticJoint.prototype.GetJointTranslation.s_pA), b = this.m_bodyB.GetWorldPoint(this.m_localAnchorB, box2d.b2PrismaticJoint.prototype.GetJointTranslation.s_pB), c = box2d.b2SubVV(b, a, box2d.b2PrismaticJoint.prototype.GetJointTranslation.s_d), d = this.m_bodyA.GetWorldVector(this.m_localXAxisA, box2d.b2PrismaticJoint.prototype.GetJointTranslation.s_axis); return box2d.b2DotVV(c, d) }; box2d.b2PrismaticJoint.prototype.GetJointTranslation.s_pA = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.GetJointTranslation.s_pB = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.GetJointTranslation.s_d = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.GetJointTranslation.s_axis = new box2d.b2Vec2, box2d.b2PrismaticJoint.prototype.GetJointSpeed = function() { var a = this.m_bodyA, b = this.m_bodyB; box2d.b2SubVV(this.m_localAnchorA, a.m_sweep.localCenter, this.m_lalcA); var c = box2d.b2MulRV(a.m_xf.q, this.m_lalcA, this.m_rA); box2d.b2SubVV(this.m_localAnchorB, b.m_sweep.localCenter, this.m_lalcB); var d = box2d.b2MulRV(b.m_xf.q, this.m_lalcB, this.m_rB), e = box2d.b2AddVV(a.m_sweep.c, c, box2d.b2Vec2.s_t0), f = box2d.b2AddVV(b.m_sweep.c, d, box2d.b2Vec2.s_t1), g = box2d.b2SubVV(f, e, box2d.b2Vec2.s_t2), h = a.GetWorldVector(this.m_localXAxisA, this.m_axis), i = a.m_linearVelocity, j = b.m_linearVelocity, k = a.m_angularVelocity, l = b.m_angularVelocity; return box2d.b2DotVV(g, box2d.b2CrossSV(k, h, box2d.b2Vec2.s_t0)) + box2d.b2DotVV(h, box2d.b2SubVV(box2d.b2AddVCrossSV(j, l, d, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(i, k, c, box2d.b2Vec2.s_t1), box2d.b2Vec2.s_t0)) }, box2d.b2PrismaticJoint.prototype.IsLimitEnabled = function() { return this.m_enableLimit }, box2d.b2PrismaticJoint.prototype.EnableLimit = function(a) { a !== this.m_enableLimit && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_enableLimit = a, this.m_impulse.z = 0) }, box2d.b2PrismaticJoint.prototype.GetLowerLimit = function() { return this.m_lowerTranslation }, box2d.b2PrismaticJoint.prototype.GetUpperLimit = function() { return this.m_upperTranslation }, box2d.b2PrismaticJoint.prototype.SetLimits = function(a, b) { a === this.m_lowerTranslation && b === this.m_upperTranslation || (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_lowerTranslation = a, this.m_upperTranslation = b, this.m_impulse.z = 0) }, box2d.b2PrismaticJoint.prototype.IsMotorEnabled = function() { return this.m_enableMotor }, box2d.b2PrismaticJoint.prototype.EnableMotor = function(a) { this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_enableMotor = a }, box2d.b2PrismaticJoint.prototype.SetMotorSpeed = function(a) { this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_motorSpeed = a }, box2d.b2PrismaticJoint.prototype.GetMotorSpeed = function() { return this.m_motorSpeed }, box2d.b2PrismaticJoint.prototype.SetMaxMotorForce = function(a) { this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_maxMotorForce = a }, box2d.b2PrismaticJoint.prototype.GetMaxMotorForce = function() { return this.m_maxMotorForce }, box2d.b2PrismaticJoint.prototype.GetMotorForce = function(a) { return a * this.m_motorImpulse }, box2d.b2PrismaticJoint.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_bodyA.m_islandIndex, b = this.m_bodyB.m_islandIndex; box2d.b2Log(" /*box2d.b2PrismaticJointDef*/ var jd = new box2d.b2PrismaticJointDef();\n"), box2d.b2Log(" jd.bodyA = bodies[%d];\n", a), box2d.b2Log(" jd.bodyB = bodies[%d];\n", b), box2d.b2Log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), box2d.b2Log(" jd.localAnchorA.SetXY(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), box2d.b2Log(" jd.localAnchorB.SetXY(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), box2d.b2Log(" jd.localAxisA.SetXY(%.15f, %.15f);\n", this.m_localXAxisA.x, this.m_localXAxisA.y), box2d.b2Log(" jd.referenceAngle = %.15f;\n", this.m_referenceAngle), box2d.b2Log(" jd.enableLimit = %s;\n", this.m_enableLimit ? "true" : "false"), box2d.b2Log(" jd.lowerTranslation = %.15f;\n", this.m_lowerTranslation), box2d.b2Log(" jd.upperTranslation = %.15f;\n", this.m_upperTranslation), box2d.b2Log(" jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"), box2d.b2Log(" jd.motorSpeed = %.15f;\n", this.m_motorSpeed), box2d.b2Log(" jd.maxMotorForce = %.15f;\n", this.m_maxMotorForce), box2d.b2Log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index) } }, goog.provide("box2d.b2GearJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Joint"), goog.require("box2d.b2Math"), goog.require("box2d.b2RevoluteJoint"), goog.require("box2d.b2PrismaticJoint"), box2d.b2GearJointDef = function() { goog.base(this, box2d.b2JointType.e_gearJoint) }, goog.inherits(box2d.b2GearJointDef, box2d.b2JointDef), box2d.b2GearJointDef.prototype.joint1 = null, box2d.b2GearJointDef.prototype.joint2 = null, box2d.b2GearJointDef.prototype.ratio = 1, box2d.b2GearJoint = function(a) { goog.base(this, a), this.m_joint1 = a.joint1, this.m_joint2 = a.joint2, this.m_localAnchorA = new box2d.b2Vec2, this.m_localAnchorB = new box2d.b2Vec2, this.m_localAnchorC = new box2d.b2Vec2, this.m_localAnchorD = new box2d.b2Vec2, this.m_localAxisC = new box2d.b2Vec2, this.m_localAxisD = new box2d.b2Vec2, this.m_lcA = new box2d.b2Vec2, this.m_lcB = new box2d.b2Vec2, this.m_lcC = new box2d.b2Vec2, this.m_lcD = new box2d.b2Vec2, this.m_JvAC = new box2d.b2Vec2, this.m_JvBD = new box2d.b2Vec2, this.m_qA = new box2d.b2Rot, this.m_qB = new box2d.b2Rot, this.m_qC = new box2d.b2Rot, this.m_qD = new box2d.b2Rot, this.m_lalcA = new box2d.b2Vec2, this.m_lalcB = new box2d.b2Vec2, this.m_lalcC = new box2d.b2Vec2, this.m_lalcD = new box2d.b2Vec2, this.m_typeA = this.m_joint1.GetType(), this.m_typeB = this.m_joint2.GetType(), box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_typeA === box2d.b2JointType.e_revoluteJoint || this.m_typeA === box2d.b2JointType.e_prismaticJoint), box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_typeB === box2d.b2JointType.e_revoluteJoint || this.m_typeB === box2d.b2JointType.e_prismaticJoint); var b, c; this.m_bodyC = this.m_joint1.GetBodyA(), this.m_bodyA = this.m_joint1.GetBodyB(); var d = this.m_bodyA.m_xf, e = this.m_bodyA.m_sweep.a, f = this.m_bodyC.m_xf, g = this.m_bodyC.m_sweep.a; if (this.m_typeA === box2d.b2JointType.e_revoluteJoint) { var h = a.joint1; this.m_localAnchorC.Copy(h.m_localAnchorA), this.m_localAnchorA.Copy(h.m_localAnchorB), this.m_referenceAngleA = h.m_referenceAngle, this.m_localAxisC.SetZero(), b = e - g - this.m_referenceAngleA } else { var i = a.joint1; this.m_localAnchorC.Copy(i.m_localAnchorA), this.m_localAnchorA.Copy(i.m_localAnchorB), this.m_referenceAngleA = i.m_referenceAngle, this.m_localAxisC.Copy(i.m_localXAxisA); var j = this.m_localAnchorC, k = box2d.b2MulTRV(f.q, box2d.b2AddVV(box2d.b2MulRV(d.q, this.m_localAnchorA, box2d.b2Vec2.s_t0), box2d.b2SubVV(d.p, f.p, box2d.b2Vec2.s_t1), box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t0); b = box2d.b2DotVV(box2d.b2SubVV(k, j, box2d.b2Vec2.s_t0), this.m_localAxisC) } this.m_bodyD = this.m_joint2.GetBodyA(), this.m_bodyB = this.m_joint2.GetBodyB(); var l = this.m_bodyB.m_xf, m = this.m_bodyB.m_sweep.a, n = this.m_bodyD.m_xf, o = this.m_bodyD.m_sweep.a; if (this.m_typeB === box2d.b2JointType.e_revoluteJoint) { var h = a.joint2; this.m_localAnchorD.Copy(h.m_localAnchorA), this.m_localAnchorB.Copy(h.m_localAnchorB), this.m_referenceAngleB = h.m_referenceAngle, this.m_localAxisD.SetZero(), c = m - o - this.m_referenceAngleB } else { var i = a.joint2; this.m_localAnchorD.Copy(i.m_localAnchorA), this.m_localAnchorB.Copy(i.m_localAnchorB), this.m_referenceAngleB = i.m_referenceAngle, this.m_localAxisD.Copy(i.m_localXAxisA); var p = this.m_localAnchorD, q = box2d.b2MulTRV(n.q, box2d.b2AddVV(box2d.b2MulRV(l.q, this.m_localAnchorB, box2d.b2Vec2.s_t0), box2d.b2SubVV(l.p, n.p, box2d.b2Vec2.s_t1), box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t0); c = box2d.b2DotVV(box2d.b2SubVV(q, p, box2d.b2Vec2.s_t0), this.m_localAxisD) } this.m_ratio = a.ratio, this.m_constant = b + this.m_ratio * c, this.m_impulse = 0 }, goog.inherits(box2d.b2GearJoint, box2d.b2Joint), box2d.b2GearJoint.prototype.m_joint1 = null, box2d.b2GearJoint.prototype.m_joint2 = null, box2d.b2GearJoint.prototype.m_typeA = box2d.b2JointType.e_unknownJoint, box2d.b2GearJoint.prototype.m_typeB = box2d.b2JointType.e_unknownJoint, box2d.b2GearJoint.prototype.m_bodyC = null, box2d.b2GearJoint.prototype.m_bodyD = null, box2d.b2GearJoint.prototype.m_localAnchorA = null, box2d.b2GearJoint.prototype.m_localAnchorB = null, box2d.b2GearJoint.prototype.m_localAnchorC = null, box2d.b2GearJoint.prototype.m_localAnchorD = null, box2d.b2GearJoint.prototype.m_localAxisC = null, box2d.b2GearJoint.prototype.m_localAxisD = null, box2d.b2GearJoint.prototype.m_referenceAngleA = 0, box2d.b2GearJoint.prototype.m_referenceAngleB = 0, box2d.b2GearJoint.prototype.m_constant = 0, box2d.b2GearJoint.prototype.m_ratio = 0, box2d.b2GearJoint.prototype.m_impulse = 0, box2d.b2GearJoint.prototype.m_indexA = 0, box2d.b2GearJoint.prototype.m_indexB = 0, box2d.b2GearJoint.prototype.m_indexC = 0, box2d.b2GearJoint.prototype.m_indexD = 0, box2d.b2GearJoint.prototype.m_lcA = null, box2d.b2GearJoint.prototype.m_lcB = null, box2d.b2GearJoint.prototype.m_lcC = null, box2d.b2GearJoint.prototype.m_lcD = null, box2d.b2GearJoint.prototype.m_mA = 0, box2d.b2GearJoint.prototype.m_mB = 0, box2d.b2GearJoint.prototype.m_mC = 0, box2d.b2GearJoint.prototype.m_mD = 0, box2d.b2GearJoint.prototype.m_iA = 0, box2d.b2GearJoint.prototype.m_iB = 0, box2d.b2GearJoint.prototype.m_iC = 0, box2d.b2GearJoint.prototype.m_iD = 0, box2d.b2GearJoint.prototype.m_JvAC = null, box2d.b2GearJoint.prototype.m_JvBD = null, box2d.b2GearJoint.prototype.m_JwA = 0, box2d.b2GearJoint.prototype.m_JwB = 0, box2d.b2GearJoint.prototype.m_JwC = 0, box2d.b2GearJoint.prototype.m_JwD = 0, box2d.b2GearJoint.prototype.m_mass = 0, box2d.b2GearJoint.prototype.m_qA = null, box2d.b2GearJoint.prototype.m_qB = null, box2d.b2GearJoint.prototype.m_qC = null, box2d.b2GearJoint.prototype.m_qD = null, box2d.b2GearJoint.prototype.m_lalcA = null, box2d.b2GearJoint.prototype.m_lalcB = null, box2d.b2GearJoint.prototype.m_lalcC = null, box2d.b2GearJoint.prototype.m_lalcD = null, box2d.b2GearJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_indexC = this.m_bodyC.m_islandIndex, this.m_indexD = this.m_bodyD.m_islandIndex, this.m_lcA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_lcB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_lcC.Copy(this.m_bodyC.m_sweep.localCenter), this.m_lcD.Copy(this.m_bodyD.m_sweep.localCenter), this.m_mA = this.m_bodyA.m_invMass, this.m_mB = this.m_bodyB.m_invMass, this.m_mC = this.m_bodyC.m_invMass, this.m_mD = this.m_bodyD.m_invMass, this.m_iA = this.m_bodyA.m_invI, this.m_iB = this.m_bodyB.m_invI, this.m_iC = this.m_bodyC.m_invI, this.m_iD = this.m_bodyD.m_invI; var b = a.positions[this.m_indexA].a, c = a.velocities[this.m_indexA].v, d = a.velocities[this.m_indexA].w, e = a.positions[this.m_indexB].a, f = a.velocities[this.m_indexB].v, g = a.velocities[this.m_indexB].w, h = a.positions[this.m_indexC].a, i = a.velocities[this.m_indexC].v, j = a.velocities[this.m_indexC].w, k = a.positions[this.m_indexD].a, l = a.velocities[this.m_indexD].v, m = a.velocities[this.m_indexD].w, n = this.m_qA.SetAngleRadians(b), o = this.m_qB.SetAngleRadians(e), p = this.m_qC.SetAngleRadians(h), q = this.m_qD.SetAngleRadians(k); if (this.m_mass = 0, this.m_typeA === box2d.b2JointType.e_revoluteJoint) this.m_JvAC.SetZero(), this.m_JwA = 1, this.m_JwC = 1, this.m_mass += this.m_iA + this.m_iC; else { var r = box2d.b2MulRV(p, this.m_localAxisC, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_u); box2d.b2SubVV(this.m_localAnchorC, this.m_lcC, this.m_lalcC); var s = box2d.b2MulRV(p, this.m_lalcC, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_rC); box2d.b2SubVV(this.m_localAnchorA, this.m_lcA, this.m_lalcA); var t = box2d.b2MulRV(n, this.m_lalcA, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_rA); this.m_JvAC.Copy(r), this.m_JwC = box2d.b2CrossVV(s, r), this.m_JwA = box2d.b2CrossVV(t, r), this.m_mass += this.m_mC + this.m_mA + this.m_iC * this.m_JwC * this.m_JwC + this.m_iA * this.m_JwA * this.m_JwA } if (this.m_typeB === box2d.b2JointType.e_revoluteJoint) this.m_JvBD.SetZero(), this.m_JwB = this.m_ratio, this.m_JwD = this.m_ratio, this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD); else { var r = box2d.b2MulRV(q, this.m_localAxisD, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_u); box2d.b2SubVV(this.m_localAnchorD, this.m_lcD, this.m_lalcD); var u = box2d.b2MulRV(q, this.m_lalcD, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_rD); box2d.b2SubVV(this.m_localAnchorB, this.m_lcB, this.m_lalcB); var v = box2d.b2MulRV(o, this.m_lalcB, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_rB); box2d.b2MulSV(this.m_ratio, r, this.m_JvBD), this.m_JwD = this.m_ratio * box2d.b2CrossVV(u, r), this.m_JwB = this.m_ratio * box2d.b2CrossVV(v, r), this.m_mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * this.m_JwD * this.m_JwD + this.m_iB * this.m_JwB * this.m_JwB } this.m_mass = this.m_mass > 0 ? 1 / this.m_mass : 0, a.step.warmStarting ? (c.SelfMulAdd(this.m_mA * this.m_impulse, this.m_JvAC), d += this.m_iA * this.m_impulse * this.m_JwA, f.SelfMulAdd(this.m_mB * this.m_impulse, this.m_JvBD), g += this.m_iB * this.m_impulse * this.m_JwB, i.SelfMulSub(this.m_mC * this.m_impulse, this.m_JvAC), j -= this.m_iC * this.m_impulse * this.m_JwC, l.SelfMulSub(this.m_mD * this.m_impulse, this.m_JvBD), m -= this.m_iD * this.m_impulse * this.m_JwD) : this.m_impulse = 0, a.velocities[this.m_indexA].w = d, a.velocities[this.m_indexB].w = g, a.velocities[this.m_indexC].w = j, a.velocities[this.m_indexD].w = m }, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_u = new box2d.b2Vec2, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_rA = new box2d.b2Vec2, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_rB = new box2d.b2Vec2, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_rC = new box2d.b2Vec2, box2d.b2GearJoint.prototype.InitVelocityConstraints.s_rD = new box2d.b2Vec2, box2d.b2GearJoint.prototype.SolveVelocityConstraints = function(a) { var b = a.velocities[this.m_indexA].v, c = a.velocities[this.m_indexA].w, d = a.velocities[this.m_indexB].v, e = a.velocities[this.m_indexB].w, f = a.velocities[this.m_indexC].v, g = a.velocities[this.m_indexC].w, h = a.velocities[this.m_indexD].v, i = a.velocities[this.m_indexD].w, j = box2d.b2DotVV(this.m_JvAC, box2d.b2SubVV(b, f, box2d.b2Vec2.s_t0)) + box2d.b2DotVV(this.m_JvBD, box2d.b2SubVV(d, h, box2d.b2Vec2.s_t0)); j += this.m_JwA * c - this.m_JwC * g + (this.m_JwB * e - this.m_JwD * i); var k = -this.m_mass * j; this.m_impulse += k, b.SelfMulAdd(this.m_mA * k, this.m_JvAC), c += this.m_iA * k * this.m_JwA, d.SelfMulAdd(this.m_mB * k, this.m_JvBD), e += this.m_iB * k * this.m_JwB, f.SelfMulSub(this.m_mC * k, this.m_JvAC), g -= this.m_iC * k * this.m_JwC, h.SelfMulSub(this.m_mD * k, this.m_JvBD), i -= this.m_iD * k * this.m_JwD, a.velocities[this.m_indexA].w = c, a.velocities[this.m_indexB].w = e, a.velocities[this.m_indexC].w = g, a.velocities[this.m_indexD].w = i }, box2d.b2GearJoint.prototype.SolvePositionConstraints = function(a) { var b, c, d, e, f, g, h = a.positions[this.m_indexA].c, i = a.positions[this.m_indexA].a, j = a.positions[this.m_indexB].c, k = a.positions[this.m_indexB].a, l = a.positions[this.m_indexC].c, m = a.positions[this.m_indexC].a, n = a.positions[this.m_indexD].c, o = a.positions[this.m_indexD].a, p = this.m_qA.SetAngleRadians(i), q = this.m_qB.SetAngleRadians(k), r = this.m_qC.SetAngleRadians(m), s = this.m_qD.SetAngleRadians(o), t = this.m_JvAC, u = this.m_JvBD, v = 0; if (this.m_typeA === box2d.b2JointType.e_revoluteJoint) t.SetZero(), d = 1, f = 1, v += this.m_iA + this.m_iC, b = i - m - this.m_referenceAngleA; else { var w = box2d.b2MulRV(r, this.m_localAxisC, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_u), x = box2d.b2MulRV(r, this.m_lalcC, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_rC), y = box2d.b2MulRV(p, this.m_lalcA, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_rA); t.Copy(w), f = box2d.b2CrossVV(x, w), d = box2d.b2CrossVV(y, w), v += this.m_mC + this.m_mA + this.m_iC * f * f + this.m_iA * d * d; var z = this.m_lalcC, A = box2d.b2MulTRV(r, box2d.b2AddVV(y, box2d.b2SubVV(h, l, box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t0); b = box2d.b2DotVV(box2d.b2SubVV(A, z, box2d.b2Vec2.s_t0), this.m_localAxisC) } if (this.m_typeB === box2d.b2JointType.e_revoluteJoint) u.SetZero(), e = this.m_ratio, g = this.m_ratio, v += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD), c = k - o - this.m_referenceAngleB; else { var w = box2d.b2MulRV(s, this.m_localAxisD, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_u), B = box2d.b2MulRV(s, this.m_lalcD, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_rD), C = box2d.b2MulRV(q, this.m_lalcB, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_rB); box2d.b2MulSV(this.m_ratio, w, u), g = this.m_ratio * box2d.b2CrossVV(B, w), e = this.m_ratio * box2d.b2CrossVV(C, w), v += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * g * g + this.m_iB * e * e; var D = this.m_lalcD, E = box2d.b2MulTRV(s, box2d.b2AddVV(C, box2d.b2SubVV(j, n, box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t0); c = box2d.b2DotVV(box2d.b2SubVV(E, D, box2d.b2Vec2.s_t0), this.m_localAxisD) } var F = b + this.m_ratio * c - this.m_constant, G = 0; return v > 0 && (G = -F / v), h.SelfMulAdd(this.m_mA * G, t), i += this.m_iA * G * d, j.SelfMulAdd(this.m_mB * G, u), k += this.m_iB * G * e, l.SelfMulSub(this.m_mC * G, t), m -= this.m_iC * G * f, n.SelfMulSub(this.m_mD * G, u), o -= this.m_iD * G * g, a.positions[this.m_indexA].a = i, a.positions[this.m_indexB].a = k, a.positions[this.m_indexC].a = m, a.positions[this.m_indexD].a = o, 0 < box2d.b2_linearSlop }, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_u = new box2d.b2Vec2, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_rA = new box2d.b2Vec2, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_rB = new box2d.b2Vec2, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_rC = new box2d.b2Vec2, box2d.b2GearJoint.prototype.SolvePositionConstraints.s_rD = new box2d.b2Vec2, box2d.b2GearJoint.prototype.GetAnchorA = function(a) { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, a) }, box2d.b2GearJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, a) }, box2d.b2GearJoint.prototype.GetReactionForce = function(a, b) { return box2d.b2MulSV(a * this.m_impulse, this.m_JvAC, b) }, box2d.b2GearJoint.prototype.GetReactionTorque = function(a) { return a * this.m_impulse * this.m_JwA }, box2d.b2GearJoint.prototype.GetJoint1 = function() { return this.m_joint1 }, box2d.b2GearJoint.prototype.GetJoint2 = function() { return this.m_joint2 }, box2d.b2GearJoint.prototype.GetRatio = function() { return this.m_ratio }, box2d.b2GearJoint.prototype.SetRatio = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a)), this.m_ratio = a }, box2d.b2GearJoint.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_bodyA.m_islandIndex, b = this.m_bodyB.m_islandIndex, c = this.m_joint1.m_index, d = this.m_joint2.m_index; box2d.b2Log(" /*box2d.b2GearJointDef*/ var jd = new box2d.b2GearJointDef();\n"), box2d.b2Log(" jd.bodyA = bodies[%d];\n", a), box2d.b2Log(" jd.bodyB = bodies[%d];\n", b), box2d.b2Log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), box2d.b2Log(" jd.joint1 = joints[%d];\n", c), box2d.b2Log(" jd.joint2 = joints[%d];\n", d), box2d.b2Log(" jd.ratio = %.15f;\n", this.m_ratio), box2d.b2Log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index) } }, goog.provide("box2d.b2Distance"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Math"), box2d.b2DistanceProxy = function() { this.m_buffer = box2d.b2Vec2.MakeArray(2) }, box2d.b2DistanceProxy.prototype.m_buffer = null, box2d.b2DistanceProxy.prototype.m_vertices = null, box2d.b2DistanceProxy.prototype.m_count = 0, box2d.b2DistanceProxy.prototype.m_radius = 0, box2d.b2DistanceProxy.prototype.Reset = function() { return this.m_vertices = null, this.m_count = 0, this.m_radius = 0, this }, box2d.b2DistanceProxy.prototype.SetShape = function(a, b) { a.SetupDistanceProxy(this, b) }, box2d.b2DistanceProxy.prototype.GetSupport = function(a) { for (var b = 0, c = box2d.b2DotVV(this.m_vertices[0], a), d = 1; d < this.m_count; ++d) { var e = box2d.b2DotVV(this.m_vertices[d], a); e > c && (b = d, c = e) } return b }, box2d.b2DistanceProxy.prototype.GetSupportVertex = function(a, b) { for (var c = 0, d = box2d.b2DotVV(this.m_vertices[0], a), e = 1; e < this.m_count; ++e) { var f = box2d.b2DotVV(this.m_vertices[e], a); f > d && (c = e, d = f) } return b.Copy(this.m_vertices[c]) }, box2d.b2DistanceProxy.prototype.GetVertexCount = function() { return this.m_count }, box2d.b2DistanceProxy.prototype.GetVertex = function(a) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= a && a < this.m_count), this.m_vertices[a] }, box2d.b2SimplexCache = function() { this.indexA = box2d.b2MakeNumberArray(3), this.indexB = box2d.b2MakeNumberArray(3) }, box2d.b2SimplexCache.prototype.metric = 0, box2d.b2SimplexCache.prototype.count = 0, box2d.b2SimplexCache.prototype.indexA = null, box2d.b2SimplexCache.prototype.indexB = null, box2d.b2SimplexCache.prototype.Reset = function() { return this.metric = 0, this.count = 0, this }, box2d.b2DistanceInput = function() { this.proxyA = new box2d.b2DistanceProxy, this.proxyB = new box2d.b2DistanceProxy, this.transformA = new box2d.b2Transform, this.transformB = new box2d.b2Transform }, box2d.b2DistanceInput.prototype.proxyA = null, box2d.b2DistanceInput.prototype.proxyB = null, box2d.b2DistanceInput.prototype.transformA = null, box2d.b2DistanceInput.prototype.transformB = null, box2d.b2DistanceInput.prototype.useRadii = !1, box2d.b2DistanceInput.prototype.Reset = function() { return this.proxyA.Reset(), this.proxyB.Reset(), this.transformA.SetIdentity(), this.transformB.SetIdentity(), this.useRadii = !1, this }, box2d.b2DistanceOutput = function() { this.pointA = new box2d.b2Vec2, this.pointB = new box2d.b2Vec2 }, box2d.b2DistanceOutput.prototype.pointA = null, box2d.b2DistanceOutput.prototype.pointB = null, box2d.b2DistanceOutput.prototype.distance = 0, box2d.b2DistanceOutput.prototype.iterations = 0, box2d.b2DistanceOutput.prototype.Reset = function() { return this.pointA.SetZero(), this.pointB.SetZero(), this.distance = 0, this.iterations = 0, this }, box2d.b2_gjkCalls = 0, box2d.b2_gjkIters = 0, box2d.b2_gjkMaxIters = 0, box2d.b2SimplexVertex = function() { this.wA = new box2d.b2Vec2, this.wB = new box2d.b2Vec2, this.w = new box2d.b2Vec2 }, box2d.b2SimplexVertex.prototype.wA = null, box2d.b2SimplexVertex.prototype.wB = null, box2d.b2SimplexVertex.prototype.w = null, box2d.b2SimplexVertex.prototype.a = 0, box2d.b2SimplexVertex.prototype.indexA = 0, box2d.b2SimplexVertex.prototype.indexB = 0, box2d.b2SimplexVertex.prototype.Copy = function(a) { return this.wA.Copy(a.wA), this.wB.Copy(a.wB), this.w.Copy(a.w), this.a = a.a, this.indexA = a.indexA, this.indexB = a.indexB, this }, box2d.b2Simplex = function() { this.m_v1 = new box2d.b2SimplexVertex, this.m_v2 = new box2d.b2SimplexVertex, this.m_v3 = new box2d.b2SimplexVertex, this.m_vertices = new Array(3), this.m_vertices[0] = this.m_v1, this.m_vertices[1] = this.m_v2, this.m_vertices[2] = this.m_v3 }, box2d.b2Simplex.prototype.m_v1 = null, box2d.b2Simplex.prototype.m_v2 = null, box2d.b2Simplex.prototype.m_v3 = null, box2d.b2Simplex.prototype.m_vertices = null, box2d.b2Simplex.prototype.m_count = 0, box2d.b2Simplex.prototype.ReadCache = function(a, b, c, d, e) { box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= a.count && a.count <= 3), this.m_count = a.count; for (var f = this.m_vertices, g = 0; g < this.m_count; ++g) { var h = f[g]; h.indexA = a.indexA[g], h.indexB = a.indexB[g]; var i = b.GetVertex(h.indexA), j = d.GetVertex(h.indexB); box2d.b2MulXV(c, i, h.wA), box2d.b2MulXV(e, j, h.wB), box2d.b2SubVV(h.wB, h.wA, h.w), h.a = 0 } if (this.m_count > 1) { var k = a.metric, l = this.GetMetric(); (l < .5 * k || 2 * k < l || l < box2d.b2_epsilon) && (this.m_count = 0) } if (0 === this.m_count) { var h = f[0]; h.indexA = 0, h.indexB = 0; var i = b.GetVertex(0), j = d.GetVertex(0); box2d.b2MulXV(c, i, h.wA), box2d.b2MulXV(e, j, h.wB), box2d.b2SubVV(h.wB, h.wA, h.w), h.a = 1, this.m_count = 1 } }, box2d.b2Simplex.prototype.WriteCache = function(a) { a.metric = this.GetMetric(), a.count = this.m_count; for (var b = this.m_vertices, c = 0; c < this.m_count; ++c) a.indexA[c] = b[c].indexA, a.indexB[c] = b[c].indexB }, box2d.b2Simplex.prototype.GetSearchDirection = function(a) { switch (this.m_count) { case 1: return box2d.b2NegV(this.m_v1.w, a); case 2: var b = box2d.b2SubVV(this.m_v2.w, this.m_v1.w, a); return box2d.b2CrossVV(b, box2d.b2NegV(this.m_v1.w, box2d.b2Vec2.s_t0)) > 0 ? box2d.b2CrossOneV(b, a) : box2d.b2CrossVOne(b, a); default: return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1), a.SetZero() } }, box2d.b2Simplex.prototype.GetClosestPoint = function(a) { switch (this.m_count) { case 0: return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1), a.SetZero(); case 1: return a.Copy(this.m_v1.w); case 2: return a.SetXY(this.m_v1.a * this.m_v1.w.x + this.m_v2.a * this.m_v2.w.x, this.m_v1.a * this.m_v1.w.y + this.m_v2.a * this.m_v2.w.y); case 3: return a.SetZero(); default: return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1), a.SetZero() } }, box2d.b2Simplex.prototype.GetWitnessPoints = function(a, b) { switch (this.m_count) { case 0: box2d.ENABLE_ASSERTS && box2d.b2Assert(!1); break; case 1: a.Copy(this.m_v1.wA), b.Copy(this.m_v1.wB); break; case 2: a.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x, a.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y, b.x = this.m_v1.a * this.m_v1.wB.x + this.m_v2.a * this.m_v2.wB.x, b.y = this.m_v1.a * this.m_v1.wB.y + this.m_v2.a * this.m_v2.wB.y; break; case 3: b.x = a.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x + this.m_v3.a * this.m_v3.wA.x, b.y = a.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y + this.m_v3.a * this.m_v3.wA.y; break; default: box2d.ENABLE_ASSERTS && box2d.b2Assert(!1) } }, box2d.b2Simplex.prototype.GetMetric = function() { switch (this.m_count) { case 0: return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1), 0; case 1: return 0; case 2: return box2d.b2DistanceVV(this.m_v1.w, this.m_v2.w); case 3: return box2d.b2CrossVV(box2d.b2SubVV(this.m_v2.w, this.m_v1.w, box2d.b2Vec2.s_t0), box2d.b2SubVV(this.m_v3.w, this.m_v1.w, box2d.b2Vec2.s_t1)); default: return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1), 0 } }, box2d.b2Simplex.prototype.Solve2 = function() { var a = this.m_v1.w, b = this.m_v2.w, c = box2d.b2SubVV(b, a, box2d.b2Simplex.s_e12), d = -box2d.b2DotVV(a, c); if (d <= 0) return this.m_v1.a = 1, void(this.m_count = 1); var e = box2d.b2DotVV(b, c); if (e <= 0) return this.m_v2.a = 1, this.m_count = 1, void this.m_v1.Copy(this.m_v2); var f = 1 / (e + d); this.m_v1.a = e * f, this.m_v2.a = d * f, this.m_count = 2 }, box2d.b2Simplex.prototype.Solve3 = function() { var a = this.m_v1.w, b = this.m_v2.w, c = this.m_v3.w, d = box2d.b2SubVV(b, a, box2d.b2Simplex.s_e12), e = box2d.b2DotVV(a, d), f = box2d.b2DotVV(b, d), g = f, h = -e, i = box2d.b2SubVV(c, a, box2d.b2Simplex.s_e13), j = box2d.b2DotVV(a, i), k = box2d.b2DotVV(c, i), l = k, m = -j, n = box2d.b2SubVV(c, b, box2d.b2Simplex.s_e23), o = box2d.b2DotVV(b, n), p = box2d.b2DotVV(c, n), q = p, r = -o, s = box2d.b2CrossVV(d, i), t = s * box2d.b2CrossVV(b, c), u = s * box2d.b2CrossVV(c, a), v = s * box2d.b2CrossVV(a, b); if (h <= 0 && m <= 0) return this.m_v1.a = 1, void(this.m_count = 1); if (g > 0 && h > 0 && v <= 0) { var w = 1 / (g + h); return this.m_v1.a = g * w, this.m_v2.a = h * w, void(this.m_count = 2) } if (l > 0 && m > 0 && u <= 0) { var x = 1 / (l + m); return this.m_v1.a = l * x, this.m_v3.a = m * x, this.m_count = 2, void this.m_v2.Copy(this.m_v3) } if (g <= 0 && r <= 0) return this.m_v2.a = 1, this.m_count = 1, void this.m_v1.Copy(this.m_v2); if (l <= 0 && q <= 0) return this.m_v3.a = 1, this.m_count = 1, void this.m_v1.Copy(this.m_v3); if (q > 0 && r > 0 && t <= 0) { var y = 1 / (q + r); return this.m_v2.a = q * y, this.m_v3.a = r * y, this.m_count = 2, void this.m_v1.Copy(this.m_v3) } var z = 1 / (t + u + v); this.m_v1.a = t * z, this.m_v2.a = u * z, this.m_v3.a = v * z, this.m_count = 3 }, box2d.b2Simplex.s_e12 = new box2d.b2Vec2, box2d.b2Simplex.s_e13 = new box2d.b2Vec2, box2d.b2Simplex.s_e23 = new box2d.b2Vec2, box2d.b2Distance = function(a, b, c) {++box2d.b2_gjkCalls; var d = c.proxyA, e = c.proxyB, f = c.transformA, g = c.transformB, h = box2d.b2Distance.s_simplex; h.ReadCache(b, d, f, e, g); for (var i = h.m_vertices, j = box2d.b2Distance.s_saveA, k = box2d.b2Distance.s_saveB, l = 0, m = box2d.b2_maxFloat, n = m, o = 0; o < 20;) { l = h.m_count; for (var p = 0; p < l; ++p) j[p] = i[p].indexA, k[p] = i[p].indexB; switch (h.m_count) { case 1: break; case 2: h.Solve2(); break; case 3: h.Solve3(); break; default: box2d.ENABLE_ASSERTS && box2d.b2Assert(!1) } if (3 === h.m_count) break; var q = h.GetClosestPoint(box2d.b2Distance.s_p); n = q.GetLengthSquared(), m = n; var r = h.GetSearchDirection(box2d.b2Distance.s_d); if (r.GetLengthSquared() < box2d.b2_epsilon_sq) break; var s = i[h.m_count]; s.indexA = d.GetSupport(box2d.b2MulTRV(f.q, box2d.b2NegV(r, box2d.b2Vec2.s_t0), box2d.b2Distance.s_supportA)), box2d.b2MulXV(f, d.GetVertex(s.indexA), s.wA), s.indexB = e.GetSupport(box2d.b2MulTRV(g.q, r, box2d.b2Distance.s_supportB)), box2d.b2MulXV(g, e.GetVertex(s.indexB), s.wB), box2d.b2SubVV(s.wB, s.wA, s.w), ++o, ++box2d.b2_gjkIters; for (var t = !1, p = 0; p < l; ++p) if (s.indexA === j[p] && s.indexB === k[p]) { t = !0; break } if (t) break;++h.m_count } if (box2d.b2_gjkMaxIters = box2d.b2Max(box2d.b2_gjkMaxIters, o), h.GetWitnessPoints(a.pointA, a.pointB), a.distance = box2d.b2DistanceVV(a.pointA, a.pointB), a.iterations = o, h.WriteCache(b), c.useRadii) { var u = d.m_radius, v = e.m_radius; if (a.distance > u + v && a.distance > box2d.b2_epsilon) { a.distance -= u + v; var w = box2d.b2SubVV(a.pointB, a.pointA, box2d.b2Distance.s_normal); w.Normalize(), a.pointA.SelfMulAdd(u, w), a.pointB.SelfMulSub(v, w) } else { var q = box2d.b2MidVV(a.pointA, a.pointB, box2d.b2Distance.s_p); a.pointA.Copy(q), a.pointB.Copy(q), a.distance = 0 } } }, box2d.b2Distance.s_simplex = new box2d.b2Simplex, box2d.b2Distance.s_saveA = box2d.b2MakeNumberArray(3), box2d.b2Distance.s_saveB = box2d.b2MakeNumberArray(3), box2d.b2Distance.s_p = new box2d.b2Vec2, box2d.b2Distance.s_d = new box2d.b2Vec2, box2d.b2Distance.s_normal = new box2d.b2Vec2, box2d.b2Distance.s_supportA = new box2d.b2Vec2, box2d.b2Distance.s_supportB = new box2d.b2Vec2, goog.provide("box2d.b2WeldJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Joint"), goog.require("box2d.b2Math"), box2d.b2WeldJointDef = function() { goog.base(this, box2d.b2JointType.e_weldJoint), this.localAnchorA = new box2d.b2Vec2, this.localAnchorB = new box2d.b2Vec2 }, goog.inherits(box2d.b2WeldJointDef, box2d.b2JointDef), box2d.b2WeldJointDef.prototype.localAnchorA = null, box2d.b2WeldJointDef.prototype.localAnchorB = null, box2d.b2WeldJointDef.prototype.referenceAngle = 0, box2d.b2WeldJointDef.prototype.frequencyHz = 0, box2d.b2WeldJointDef.prototype.dampingRatio = 0, box2d.b2WeldJointDef.prototype.Initialize = function(a, b, c) { this.bodyA = a, this.bodyB = b, this.bodyA.GetLocalPoint(c, this.localAnchorA), this.bodyB.GetLocalPoint(c, this.localAnchorB), this.referenceAngle = this.bodyB.GetAngleRadians() - this.bodyA.GetAngleRadians() }, box2d.b2WeldJoint = function(a) { goog.base(this, a), this.m_frequencyHz = a.frequencyHz, this.m_dampingRatio = a.dampingRatio, this.m_localAnchorA = a.localAnchorA.Clone(), this.m_localAnchorB = a.localAnchorB.Clone(), this.m_referenceAngle = a.referenceAngle, this.m_impulse = new box2d.b2Vec3(0, 0, 0), this.m_rA = new box2d.b2Vec2, this.m_rB = new box2d.b2Vec2, this.m_localCenterA = new box2d.b2Vec2, this.m_localCenterB = new box2d.b2Vec2, this.m_mass = new box2d.b2Mat33, this.m_qA = new box2d.b2Rot, this.m_qB = new box2d.b2Rot, this.m_lalcA = new box2d.b2Vec2, this.m_lalcB = new box2d.b2Vec2, this.m_K = new box2d.b2Mat33 }, goog.inherits(box2d.b2WeldJoint, box2d.b2Joint), box2d.b2WeldJoint.prototype.m_frequencyHz = 0, box2d.b2WeldJoint.prototype.m_dampingRatio = 0, box2d.b2WeldJoint.prototype.m_bias = 0, box2d.b2WeldJoint.prototype.m_localAnchorA = null, box2d.b2WeldJoint.prototype.m_localAnchorB = null, box2d.b2WeldJoint.prototype.m_referenceAngle = 0, box2d.b2WeldJoint.prototype.m_gamma = 0, box2d.b2WeldJoint.prototype.m_impulse = null, box2d.b2WeldJoint.prototype.m_indexA = 0, box2d.b2WeldJoint.prototype.m_indexB = 0, box2d.b2WeldJoint.prototype.m_rA = null, box2d.b2WeldJoint.prototype.m_rB = null, box2d.b2WeldJoint.prototype.m_localCenterA = null, box2d.b2WeldJoint.prototype.m_localCenterB = null, box2d.b2WeldJoint.prototype.m_invMassA = 0; box2d.b2WeldJoint.prototype.m_invMassB = 0, box2d.b2WeldJoint.prototype.m_invIA = 0, box2d.b2WeldJoint.prototype.m_invIB = 0, box2d.b2WeldJoint.prototype.m_mass = null, box2d.b2WeldJoint.prototype.m_qA = null, box2d.b2WeldJoint.prototype.m_qB = null, box2d.b2WeldJoint.prototype.m_lalcA = null, box2d.b2WeldJoint.prototype.m_lalcB = null, box2d.b2WeldJoint.prototype.m_K = null, box2d.b2WeldJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI; var b = a.positions[this.m_indexA].a, c = a.velocities[this.m_indexA].v, d = a.velocities[this.m_indexA].w, e = a.positions[this.m_indexB].a, f = a.velocities[this.m_indexB].v, g = a.velocities[this.m_indexB].w, h = this.m_qA.SetAngleRadians(b), i = this.m_qB.SetAngleRadians(e); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA), box2d.b2MulRV(h, this.m_lalcA, this.m_rA), box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), box2d.b2MulRV(i, this.m_lalcB, this.m_rB); var j = this.m_invMassA, k = this.m_invMassB, l = this.m_invIA, m = this.m_invIB, n = this.m_K; if (n.ex.x = j + k + this.m_rA.y * this.m_rA.y * l + this.m_rB.y * this.m_rB.y * m, n.ey.x = -this.m_rA.y * this.m_rA.x * l - this.m_rB.y * this.m_rB.x * m, n.ez.x = -this.m_rA.y * l - this.m_rB.y * m, n.ex.y = n.ey.x, n.ey.y = j + k + this.m_rA.x * this.m_rA.x * l + this.m_rB.x * this.m_rB.x * m, n.ez.y = this.m_rA.x * l + this.m_rB.x * m, n.ex.z = n.ez.x, n.ey.z = n.ez.y, n.ez.z = l + m, this.m_frequencyHz > 0) { n.GetInverse22(this.m_mass); var o = l + m, p = o > 0 ? 1 / o : 0, q = e - b - this.m_referenceAngle, r = 2 * box2d.b2_pi * this.m_frequencyHz, s = 2 * p * this.m_dampingRatio * r, t = p * r * r, u = a.step.dt; this.m_gamma = u * (s + u * t), this.m_gamma = 0 !== this.m_gamma ? 1 / this.m_gamma : 0, this.m_bias = q * u * t * this.m_gamma, o += this.m_gamma, this.m_mass.ez.z = 0 !== o ? 1 / o : 0 } else n.GetSymInverse33(this.m_mass), this.m_gamma = 0, this.m_bias = 0; if (a.step.warmStarting) { this.m_impulse.SelfMul(a.step.dtRatio); var v = box2d.b2WeldJoint.prototype.InitVelocityConstraints.s_P.SetXY(this.m_impulse.x, this.m_impulse.y); c.SelfMulSub(j, v), d -= l * (box2d.b2CrossVV(this.m_rA, v) + this.m_impulse.z), f.SelfMulAdd(k, v), g += m * (box2d.b2CrossVV(this.m_rB, v) + this.m_impulse.z) } else this.m_impulse.SetZero(); a.velocities[this.m_indexA].w = d, a.velocities[this.m_indexB].w = g }, box2d.b2WeldJoint.prototype.InitVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2WeldJoint.prototype.SolveVelocityConstraints = function(a) { var b = a.velocities[this.m_indexA].v, c = a.velocities[this.m_indexA].w, d = a.velocities[this.m_indexB].v, e = a.velocities[this.m_indexB].w, f = this.m_invMassA, g = this.m_invMassB, h = this.m_invIA, i = this.m_invIB; if (this.m_frequencyHz > 0) { var j = e - c, k = -this.m_mass.ez.z * (j + this.m_bias + this.m_gamma * this.m_impulse.z); this.m_impulse.z += k, c -= h * k, e += i * k; var l = box2d.b2SubVV(box2d.b2AddVCrossSV(d, e, this.m_rB, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(b, c, this.m_rA, box2d.b2Vec2.s_t1), box2d.b2WeldJoint.prototype.SolveVelocityConstraints.s_Cdot1), m = box2d.b2MulM33XY(this.m_mass, l.x, l.y, box2d.b2WeldJoint.prototype.SolveVelocityConstraints.s_impulse1).SelfNeg(); this.m_impulse.x += m.x, this.m_impulse.y += m.y; var n = m; b.SelfMulSub(f, n), c -= h * box2d.b2CrossVV(this.m_rA, n), d.SelfMulAdd(g, n), e += i * box2d.b2CrossVV(this.m_rB, n) } else { var l = box2d.b2SubVV(box2d.b2AddVCrossSV(d, e, this.m_rB, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(b, c, this.m_rA, box2d.b2Vec2.s_t1), box2d.b2WeldJoint.prototype.SolveVelocityConstraints.s_Cdot1), j = e - c, o = box2d.b2MulM33XYZ(this.m_mass, l.x, l.y, j, box2d.b2WeldJoint.prototype.SolveVelocityConstraints.s_impulse).SelfNeg(); this.m_impulse.SelfAdd(o); var n = box2d.b2WeldJoint.prototype.SolveVelocityConstraints.s_P.SetXY(o.x, o.y); b.SelfMulSub(f, n), c -= h * (box2d.b2CrossVV(this.m_rA, n) + o.z), d.SelfMulAdd(g, n), e += i * (box2d.b2CrossVV(this.m_rB, n) + o.z) } a.velocities[this.m_indexA].w = c, a.velocities[this.m_indexB].w = e }, box2d.b2WeldJoint.prototype.SolveVelocityConstraints.s_Cdot1 = new box2d.b2Vec2, box2d.b2WeldJoint.prototype.SolveVelocityConstraints.s_impulse1 = new box2d.b2Vec2, box2d.b2WeldJoint.prototype.SolveVelocityConstraints.s_impulse = new box2d.b2Vec3, box2d.b2WeldJoint.prototype.SolveVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2WeldJoint.prototype.SolvePositionConstraints = function(a) { var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.positions[this.m_indexB].c, e = a.positions[this.m_indexB].a, f = this.m_qA.SetAngleRadians(c), g = this.m_qB.SetAngleRadians(e), h = this.m_invMassA, i = this.m_invMassB, j = this.m_invIA, k = this.m_invIB; box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); var l = box2d.b2MulRV(f, this.m_lalcA, this.m_rA); box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); var m, n, o = box2d.b2MulRV(g, this.m_lalcB, this.m_rB), p = this.m_K; if (p.ex.x = h + i + l.y * l.y * j + o.y * o.y * k, p.ey.x = -l.y * l.x * j - o.y * o.x * k, p.ez.x = -l.y * j - o.y * k, p.ex.y = p.ey.x, p.ey.y = h + i + l.x * l.x * j + o.x * o.x * k, p.ez.y = l.x * j + o.x * k, p.ex.z = p.ez.x, p.ey.z = p.ez.y, p.ez.z = j + k, this.m_frequencyHz > 0) { var q = box2d.b2SubVV(box2d.b2AddVV(d, o, box2d.b2Vec2.s_t0), box2d.b2AddVV(b, l, box2d.b2Vec2.s_t1), box2d.b2WeldJoint.prototype.SolvePositionConstraints.s_C1); m = q.GetLength(), n = 0; var r = p.Solve22(q.x, q.y, box2d.b2WeldJoint.prototype.SolvePositionConstraints.s_P).SelfNeg(); b.SelfMulSub(h, r), c -= j * box2d.b2CrossVV(l, r), d.SelfMulAdd(i, r), e += k * box2d.b2CrossVV(o, r) } else { var q = box2d.b2SubVV(box2d.b2AddVV(d, o, box2d.b2Vec2.s_t0), box2d.b2AddVV(b, l, box2d.b2Vec2.s_t1), box2d.b2WeldJoint.prototype.SolvePositionConstraints.s_C1), s = e - c - this.m_referenceAngle; m = q.GetLength(), n = box2d.b2Abs(s); var t = p.Solve33(q.x, q.y, s, box2d.b2WeldJoint.prototype.SolvePositionConstraints.s_impulse).SelfNeg(), r = box2d.b2WeldJoint.prototype.SolvePositionConstraints.s_P.SetXY(t.x, t.y); b.SelfMulSub(h, r), c -= j * (box2d.b2CrossVV(this.m_rA, r) + t.z), d.SelfMulAdd(i, r), e += k * (box2d.b2CrossVV(this.m_rB, r) + t.z) } return a.positions[this.m_indexA].a = c, a.positions[this.m_indexB].a = e, m <= box2d.b2_linearSlop && n <= box2d.b2_angularSlop }, box2d.b2WeldJoint.prototype.SolvePositionConstraints.s_C1 = new box2d.b2Vec2, box2d.b2WeldJoint.prototype.SolvePositionConstraints.s_P = new box2d.b2Vec2, box2d.b2WeldJoint.prototype.SolvePositionConstraints.s_impulse = new box2d.b2Vec3, box2d.b2WeldJoint.prototype.GetAnchorA = function(a) { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, a) }, box2d.b2WeldJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, a) }, box2d.b2WeldJoint.prototype.GetReactionForce = function(a, b) { return b.SetXY(a * this.m_impulse.x, a * this.m_impulse.y) }, box2d.b2WeldJoint.prototype.GetReactionTorque = function(a) { return a * this.m_impulse.z }, box2d.b2WeldJoint.prototype.GetLocalAnchorA = function(a) { return a.Copy(this.m_localAnchorA) }, box2d.b2WeldJoint.prototype.GetLocalAnchorB = function(a) { return a.Copy(this.m_localAnchorB) }, box2d.b2WeldJoint.prototype.GetReferenceAngle = function() { return this.m_referenceAngle }, box2d.b2WeldJoint.prototype.SetFrequency = function(a) { this.m_frequencyHz = a }, box2d.b2WeldJoint.prototype.GetFrequency = function() { return this.m_frequencyHz }, box2d.b2WeldJoint.prototype.SetDampingRatio = function(a) { this.m_dampingRatio = a }, box2d.b2WeldJoint.prototype.GetDampingRatio = function() { return this.m_dampingRatio }, box2d.b2WeldJoint.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_bodyA.m_islandIndex, b = this.m_bodyB.m_islandIndex; box2d.b2Log(" /*box2d.b2WeldJointDef*/ var jd = new box2d.b2WeldJointDef();\n"), box2d.b2Log(" jd.bodyA = bodies[%d];\n", a), box2d.b2Log(" jd.bodyB = bodies[%d];\n", b), box2d.b2Log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), box2d.b2Log(" jd.localAnchorA.SetXY(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), box2d.b2Log(" jd.localAnchorB.SetXY(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), box2d.b2Log(" jd.referenceAngle = %.15f;\n", this.m_referenceAngle), box2d.b2Log(" jd.frequencyHz = %.15f;\n", this.m_frequencyHz), box2d.b2Log(" jd.dampingRatio = %.15f;\n", this.m_dampingRatio), box2d.b2Log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index) } }, goog.provide("box2d.b2RopeJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Joint"), goog.require("box2d.b2Math"), box2d.b2RopeJointDef = function() { goog.base(this, box2d.b2JointType.e_ropeJoint), this.localAnchorA = new box2d.b2Vec2(-1, 0), this.localAnchorB = new box2d.b2Vec2(1, 0) }, goog.inherits(box2d.b2RopeJointDef, box2d.b2JointDef), box2d.b2RopeJointDef.prototype.localAnchorA = null, box2d.b2RopeJointDef.prototype.localAnchorB = null, box2d.b2RopeJointDef.prototype.maxLength = 0, box2d.b2RopeJoint = function(a) { goog.base(this, a), this.m_localAnchorA = a.localAnchorA.Clone(), this.m_localAnchorB = a.localAnchorB.Clone(), this.m_maxLength = a.maxLength, this.m_u = new box2d.b2Vec2, this.m_rA = new box2d.b2Vec2, this.m_rB = new box2d.b2Vec2, this.m_localCenterA = new box2d.b2Vec2, this.m_localCenterB = new box2d.b2Vec2, this.m_qA = new box2d.b2Rot, this.m_qB = new box2d.b2Rot, this.m_lalcA = new box2d.b2Vec2, this.m_lalcB = new box2d.b2Vec2 }, goog.inherits(box2d.b2RopeJoint, box2d.b2Joint), box2d.b2RopeJoint.prototype.m_localAnchorA = null, box2d.b2RopeJoint.prototype.m_localAnchorB = null, box2d.b2RopeJoint.prototype.m_maxLength = 0, box2d.b2RopeJoint.prototype.m_length = 0, box2d.b2RopeJoint.prototype.m_impulse = 0, box2d.b2RopeJoint.prototype.m_indexA = 0, box2d.b2RopeJoint.prototype.m_indexB = 0, box2d.b2RopeJoint.prototype.m_u = null, box2d.b2RopeJoint.prototype.m_rA = null, box2d.b2RopeJoint.prototype.m_rB = null, box2d.b2RopeJoint.prototype.m_localCenterA = null, box2d.b2RopeJoint.prototype.m_localCenterB = null, box2d.b2RopeJoint.prototype.m_invMassA = 0, box2d.b2RopeJoint.prototype.m_invMassB = 0, box2d.b2RopeJoint.prototype.m_invIA = 0, box2d.b2RopeJoint.prototype.m_invIB = 0, box2d.b2RopeJoint.prototype.m_mass = 0, box2d.b2RopeJoint.prototype.m_state = box2d.b2LimitState.e_inactiveLimit, box2d.b2RopeJoint.prototype.m_qA = null, box2d.b2RopeJoint.prototype.m_qB = null, box2d.b2RopeJoint.prototype.m_lalcA = null, box2d.b2RopeJoint.prototype.m_lalcB = null, box2d.b2RopeJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI; var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.velocities[this.m_indexA].v, e = a.velocities[this.m_indexA].w, f = a.positions[this.m_indexB].c, g = a.positions[this.m_indexB].a, h = a.velocities[this.m_indexB].v, i = a.velocities[this.m_indexB].w, j = this.m_qA.SetAngleRadians(c), k = this.m_qB.SetAngleRadians(g); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA), box2d.b2MulRV(j, this.m_lalcA, this.m_rA), box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), box2d.b2MulRV(k, this.m_lalcB, this.m_rB), this.m_u.Copy(f).SelfAdd(this.m_rB).SelfSub(b).SelfSub(this.m_rA), this.m_length = this.m_u.GetLength(); var l = this.m_length - this.m_maxLength; if (this.m_state = l > 0 ? box2d.b2LimitState.e_atUpperLimit : box2d.b2LimitState.e_inactiveLimit, !(this.m_length > box2d.b2_linearSlop)) return this.m_u.SetZero(), this.m_mass = 0, void(this.m_impulse = 0); this.m_u.SelfMul(1 / this.m_length); var m = box2d.b2CrossVV(this.m_rA, this.m_u), n = box2d.b2CrossVV(this.m_rB, this.m_u), o = this.m_invMassA + this.m_invIA * m * m + this.m_invMassB + this.m_invIB * n * n; if (this.m_mass = 0 !== o ? 1 / o : 0, a.step.warmStarting) { this.m_impulse *= a.step.dtRatio; var p = box2d.b2MulSV(this.m_impulse, this.m_u, box2d.b2RopeJoint.prototype.InitVelocityConstraints.s_P); d.SelfMulSub(this.m_invMassA, p), e -= this.m_invIA * box2d.b2CrossVV(this.m_rA, p), h.SelfMulAdd(this.m_invMassB, p), i += this.m_invIB * box2d.b2CrossVV(this.m_rB, p) } else this.m_impulse = 0; a.velocities[this.m_indexA].w = e, a.velocities[this.m_indexB].w = i }, box2d.b2RopeJoint.prototype.InitVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2RopeJoint.prototype.SolveVelocityConstraints = function(a) { var b = a.velocities[this.m_indexA].v, c = a.velocities[this.m_indexA].w, d = a.velocities[this.m_indexB].v, e = a.velocities[this.m_indexB].w, f = box2d.b2AddVCrossSV(b, c, this.m_rA, box2d.b2RopeJoint.prototype.SolveVelocityConstraints.s_vpA), g = box2d.b2AddVCrossSV(d, e, this.m_rB, box2d.b2RopeJoint.prototype.SolveVelocityConstraints.s_vpB), h = this.m_length - this.m_maxLength, i = box2d.b2DotVV(this.m_u, box2d.b2SubVV(g, f, box2d.b2Vec2.s_t0)); h < 0 && (i += a.step.inv_dt * h); var j = -this.m_mass * i, k = this.m_impulse; this.m_impulse = box2d.b2Min(0, this.m_impulse + j), j = this.m_impulse - k; var l = box2d.b2MulSV(j, this.m_u, box2d.b2RopeJoint.prototype.SolveVelocityConstraints.s_P); b.SelfMulSub(this.m_invMassA, l), c -= this.m_invIA * box2d.b2CrossVV(this.m_rA, l), d.SelfMulAdd(this.m_invMassB, l), e += this.m_invIB * box2d.b2CrossVV(this.m_rB, l), a.velocities[this.m_indexA].w = c, a.velocities[this.m_indexB].w = e }, box2d.b2RopeJoint.prototype.SolveVelocityConstraints.s_vpA = new box2d.b2Vec2, box2d.b2RopeJoint.prototype.SolveVelocityConstraints.s_vpB = new box2d.b2Vec2, box2d.b2RopeJoint.prototype.SolveVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2RopeJoint.prototype.SolvePositionConstraints = function(a) { var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.positions[this.m_indexB].c, e = a.positions[this.m_indexB].a, f = this.m_qA.SetAngleRadians(c), g = this.m_qB.SetAngleRadians(e); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); var h = box2d.b2MulRV(f, this.m_lalcA, this.m_rA); box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); var i = box2d.b2MulRV(g, this.m_lalcB, this.m_rB), j = this.m_u.Copy(d).SelfAdd(i).SelfSub(b).SelfSub(h), k = j.Normalize(), l = k - this.m_maxLength; l = box2d.b2Clamp(l, 0, box2d.b2_maxLinearCorrection); var m = -this.m_mass * l, n = box2d.b2MulSV(m, j, box2d.b2RopeJoint.prototype.SolvePositionConstraints.s_P); return b.SelfMulSub(this.m_invMassA, n), c -= this.m_invIA * box2d.b2CrossVV(h, n), d.SelfMulAdd(this.m_invMassB, n), e += this.m_invIB * box2d.b2CrossVV(i, n), a.positions[this.m_indexA].a = c, a.positions[this.m_indexB].a = e, k - this.m_maxLength < box2d.b2_linearSlop }, box2d.b2RopeJoint.prototype.SolvePositionConstraints.s_P = new box2d.b2Vec2, box2d.b2RopeJoint.prototype.GetAnchorA = function(a) { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, a) }, box2d.b2RopeJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, a) }, box2d.b2RopeJoint.prototype.GetReactionForce = function(a, b) { return box2d.b2MulSV(a * this.m_impulse, this.m_u, b) }, box2d.b2RopeJoint.prototype.GetReactionTorque = function(a) { return 0 }, box2d.b2RopeJoint.prototype.GetLocalAnchorA = function(a) { return a.Copy(this.m_localAnchorA) }, box2d.b2RopeJoint.prototype.GetLocalAnchorB = function(a) { return a.Copy(this.m_localAnchorB) }, box2d.b2RopeJoint.prototype.SetMaxLength = function(a) { this.m_maxLength = a }, box2d.b2RopeJoint.prototype.GetMaxLength = function() { return this.m_maxLength }, box2d.b2RopeJoint.prototype.GetLimitState = function() { return this.m_state }, box2d.b2RopeJoint.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_bodyA.m_islandIndex, b = this.m_bodyB.m_islandIndex; box2d.b2Log(" /*box2d.b2RopeJointDef*/ var jd = new box2d.b2RopeJointDef();\n"), box2d.b2Log(" jd.bodyA = bodies[%d];\n", a), box2d.b2Log(" jd.bodyB = bodies[%d];\n", b), box2d.b2Log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), box2d.b2Log(" jd.localAnchorA.SetXY(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), box2d.b2Log(" jd.localAnchorB.SetXY(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), box2d.b2Log(" jd.maxLength = %.15f;\n", this.m_maxLength), box2d.b2Log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index) } }, goog.provide("box2d.b2GravityController"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Controller"), goog.require("box2d.b2Math"), box2d.b2GravityController = function() { goog.base(this) }, goog.inherits(box2d.b2GravityController, box2d.b2Controller), box2d.b2GravityController.prototype.G = 1, box2d.b2GravityController.prototype.invSqr = !0, box2d.b2GravityController.prototype.Step = function(a) { if (this.invSqr) for (var b = this.m_bodyList; b; b = b.nextBody) for (var c = b.body, d = c.GetWorldCenter(), e = c.GetMass(), f = this.m_bodyList; f !== b; f = f.nextBody) { var g = f.body, h = g.GetWorldCenter(), i = g.GetMass(), j = h.x - d.x, k = h.y - d.y, l = j * j + k * k; if (!(l < box2d.b2_epsilon)) { var m = box2d.b2GravityController.prototype.Step.s_f.SetXY(j, k); m.SelfMul(this.G / l / box2d.b2Sqrt(l) * e * i), c.IsAwake() && c.ApplyForce(m, d), g.IsAwake() && g.ApplyForce(m.SelfMul(-1), h) } } else for (var b = this.m_bodyList; b; b = b.nextBody) for (var c = b.body, d = c.GetWorldCenter(), e = c.GetMass(), f = this.m_bodyList; f !== b; f = f.nextBody) { var g = f.body, h = g.GetWorldCenter(), i = g.GetMass(), j = h.x - d.x, k = h.y - d.y, l = j * j + k * k; if (!(l < box2d.b2_epsilon)) { var m = box2d.b2GravityController.prototype.Step.s_f.SetXY(j, k); m.SelfMul(this.G / l * e * i), c.IsAwake() && c.ApplyForce(m, d), g.IsAwake() && g.ApplyForce(m.SelfMul(-1), h) } } }, box2d.b2GravityController.prototype.Step.s_f = new box2d.b2Vec2, goog.provide("box2d.b2TimeStep"), goog.require("box2d.b2Settings"), box2d.b2Profile = function() {}, box2d.b2Profile.prototype.step = 0, box2d.b2Profile.prototype.collide = 0, box2d.b2Profile.prototype.solve = 0, box2d.b2Profile.prototype.solveInit = 0, box2d.b2Profile.prototype.solveVelocity = 0, box2d.b2Profile.prototype.solvePosition = 0, box2d.b2Profile.prototype.broadphase = 0, box2d.b2Profile.prototype.solveTOI = 0, box2d.b2Profile.prototype.Reset = function() { return this.step = 0, this.collide = 0, this.solve = 0, this.solveInit = 0, this.solveVelocity = 0, this.solvePosition = 0, this.broadphase = 0, this.solveTOI = 0, this }, box2d.b2TimeStep = function() {}, box2d.b2TimeStep.prototype.dt = 0, box2d.b2TimeStep.prototype.inv_dt = 0, box2d.b2TimeStep.prototype.dtRatio = 0, box2d.b2TimeStep.prototype.velocityIterations = 0, box2d.b2TimeStep.prototype.positionIterations = 0, box2d.b2TimeStep.prototype.warmStarting = !1, box2d.b2TimeStep.prototype.Copy = function(a) { return this.dt = a.dt, this.inv_dt = a.inv_dt, this.dtRatio = a.dtRatio, this.positionIterations = a.positionIterations, this.velocityIterations = a.velocityIterations, this.warmStarting = a.warmStarting, this }, box2d.b2Position = function() { this.c = new box2d.b2Vec2 }, box2d.b2Position.prototype.c = null, box2d.b2Position.prototype.a = 0, box2d.b2Position.MakeArray = function(a) { return box2d.b2MakeArray(a, function(a) { return new box2d.b2Position }) }, box2d.b2Velocity = function() { this.v = new box2d.b2Vec2 }, box2d.b2Velocity.prototype.v = null, box2d.b2Velocity.prototype.w = 0, box2d.b2Velocity.MakeArray = function(a) { return box2d.b2MakeArray(a, function(a) { return new box2d.b2Velocity }) }, box2d.b2SolverData = function() { this.step = new box2d.b2TimeStep }, box2d.b2SolverData.prototype.step = null, box2d.b2SolverData.prototype.positions = null, box2d.b2SolverData.prototype.velocities = null, goog.provide("box2d.b2Collision"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Math"), goog.require("box2d.b2Distance"), box2d.b2ContactFeatureType = { e_vertex: 0, e_face: 1 }, goog.exportProperty(box2d.b2ContactFeatureType, "e_vertex", box2d.b2ContactFeatureType.e_vertex), goog.exportProperty(box2d.b2ContactFeatureType, "e_face", box2d.b2ContactFeatureType.e_face), box2d.b2ContactFeature = function(a) { this._id = a }, box2d.b2ContactFeature.prototype._id = null, box2d.b2ContactFeature.prototype._indexA = 0, box2d.b2ContactFeature.prototype._indexB = 0, box2d.b2ContactFeature.prototype._typeA = 0, box2d.b2ContactFeature.prototype._typeB = 0, Object.defineProperty(box2d.b2ContactFeature.prototype, "indexA", { enumerable: !1, configurable: !0, get: function() { return this._indexA }, set: function(a) { this._indexA = a, this._id._key = 4294967040 & this._id._key | 255 & this._indexA } }), Object.defineProperty(box2d.b2ContactFeature.prototype, "indexB", { enumerable: !1, configurable: !0, get: function() { return this._indexB }, set: function(a) { this._indexB = a, this._id._key = 4294902015 & this._id._key | this._indexB << 8 & 65280 } }), Object.defineProperty(box2d.b2ContactFeature.prototype, "typeA", { enumerable: !1, configurable: !0, get: function() { return this._typeA }, set: function(a) { this._typeA = a, this._id._key = 4278255615 & this._id._key | this._typeA << 16 & 16711680 } }), Object.defineProperty(box2d.b2ContactFeature.prototype, "typeB", { enumerable: !1, configurable: !0, get: function() { return this._typeB }, set: function(a) { this._typeB = a, this._id._key = 16777215 & this._id._key | this._typeB << 24 & 4278190080 } }), box2d.b2ContactID = function() { this.cf = new box2d.b2ContactFeature(this) }, box2d.b2ContactID.prototype.cf = null, box2d.b2ContactID.prototype.key = 0, box2d.b2ContactID.prototype.Copy = function(a) { return this.key = a.key, this }, box2d.b2ContactID.prototype.Clone = function() { return (new box2d.b2ContactID).Copy(this) }, Object.defineProperty(box2d.b2ContactID.prototype, "key", { enumerable: !1, configurable: !0, get: function() { return this._key }, set: function(a) { this._key = a, this.cf._indexA = 255 & this._key, this.cf._indexB = this._key >> 8 & 255, this.cf._typeA = this._key >> 16 & 255, this.cf._typeB = this._key >> 24 & 255 } }), box2d.b2ManifoldPoint = function() { this.localPoint = new box2d.b2Vec2, this.id = new box2d.b2ContactID }, box2d.b2ManifoldPoint.prototype.localPoint = null, box2d.b2ManifoldPoint.prototype.normalImpulse = 0, box2d.b2ManifoldPoint.prototype.tangentImpulse = 0, box2d.b2ManifoldPoint.prototype.id = null, box2d.b2ManifoldPoint.MakeArray = function(a) { return box2d.b2MakeArray(a, function(a) { return new box2d.b2ManifoldPoint }) }, box2d.b2ManifoldPoint.prototype.Reset = function() { this.localPoint.SetZero(), this.normalImpulse = 0, this.tangentImpulse = 0, this.id.key = 0 }, box2d.b2ManifoldPoint.prototype.Copy = function(a) { return this.localPoint.Copy(a.localPoint), this.normalImpulse = a.normalImpulse, this.tangentImpulse = a.tangentImpulse, this.id.Copy(a.id), this }, box2d.b2ManifoldType = { e_unknown: -1, e_circles: 0, e_faceA: 1, e_faceB: 2 }, goog.exportProperty(box2d.b2ManifoldType, "e_unknown", box2d.b2ManifoldType.e_unknown), goog.exportProperty(box2d.b2ManifoldType, "e_circles", box2d.b2ManifoldType.e_circles), goog.exportProperty(box2d.b2ManifoldType, "e_faceA", box2d.b2ManifoldType.e_faceA), goog.exportProperty(box2d.b2ManifoldType, "e_faceB", box2d.b2ManifoldType.e_faceB), box2d.b2Manifold = function() { this.points = box2d.b2ManifoldPoint.MakeArray(box2d.b2_maxManifoldPoints), this.localNormal = new box2d.b2Vec2, this.localPoint = new box2d.b2Vec2, this.type = box2d.b2ManifoldType.e_unknown, this.pointCount = 0 }, box2d.b2Manifold.prototype.points = null, box2d.b2Manifold.prototype.localNormal = null, box2d.b2Manifold.prototype.localPoint = null, box2d.b2Manifold.prototype.type = box2d.b2ManifoldType.e_unknown, box2d.b2Manifold.prototype.pointCount = 0, box2d.b2Manifold.prototype.Reset = function() { for (var a = 0, b = box2d.b2_maxManifoldPoints; a < b; ++a) this.points[a].Reset(); this.localNormal.SetZero(), this.localPoint.SetZero(), this.type = box2d.b2ManifoldType.e_unknown, this.pointCount = 0 }, box2d.b2Manifold.prototype.Copy = function(a) { this.pointCount = a.pointCount; for (var b = 0, c = box2d.b2_maxManifoldPoints; b < c; ++b) this.points[b].Copy(a.points[b]); return this.localNormal.Copy(a.localNormal), this.localPoint.Copy(a.localPoint), this.type = a.type, this }, box2d.b2Manifold.prototype.Clone = function() { return (new box2d.b2Manifold).Copy(this) }, box2d.b2WorldManifold = function() { this.normal = new box2d.b2Vec2, this.points = box2d.b2Vec2.MakeArray(box2d.b2_maxManifoldPoints), this.separations = box2d.b2MakeNumberArray(box2d.b2_maxManifoldPoints) }, box2d.b2WorldManifold.prototype.normal = null, box2d.b2WorldManifold.prototype.points = null, box2d.b2WorldManifold.prototype.separations = null, box2d.b2WorldManifold.prototype.Initialize = function(a, b, c, d, e) { if (0 !== a.pointCount) switch (a.type) { case box2d.b2ManifoldType.e_circles: this.normal.SetXY(1, 0); var f = box2d.b2MulXV(b, a.localPoint, box2d.b2WorldManifold.prototype.Initialize.s_pointA), g = box2d.b2MulXV(d, a.points[0].localPoint, box2d.b2WorldManifold.prototype.Initialize.s_pointB); box2d.b2DistanceSquaredVV(f, g) > box2d.b2_epsilon_sq && box2d.b2SubVV(g, f, this.normal).SelfNormalize(); var h = box2d.b2AddVMulSV(f, c, this.normal, box2d.b2WorldManifold.prototype.Initialize.s_cA), i = box2d.b2SubVMulSV(g, e, this.normal, box2d.b2WorldManifold.prototype.Initialize.s_cB); box2d.b2MidVV(h, i, this.points[0]), this.separations[0] = box2d.b2DotVV(box2d.b2SubVV(i, h, box2d.b2Vec2.s_t0), this.normal); break; case box2d.b2ManifoldType.e_faceA: box2d.b2MulRV(b.q, a.localNormal, this.normal); for (var j = box2d.b2MulXV(b, a.localPoint, box2d.b2WorldManifold.prototype.Initialize.s_planePoint), k = 0, l = a.pointCount; k < l; ++k) { var m = box2d.b2MulXV(d, a.points[k].localPoint, box2d.b2WorldManifold.prototype.Initialize.s_clipPoint), n = c - box2d.b2DotVV(box2d.b2SubVV(m, j, box2d.b2Vec2.s_t0), this.normal), h = box2d.b2AddVMulSV(m, n, this.normal, box2d.b2WorldManifold.prototype.Initialize.s_cA), i = box2d.b2SubVMulSV(m, e, this.normal, box2d.b2WorldManifold.prototype.Initialize.s_cB); box2d.b2MidVV(h, i, this.points[k]), this.separations[k] = box2d.b2DotVV(box2d.b2SubVV(i, h, box2d.b2Vec2.s_t0), this.normal) } break; case box2d.b2ManifoldType.e_faceB: box2d.b2MulRV(d.q, a.localNormal, this.normal); for (var j = box2d.b2MulXV(d, a.localPoint, box2d.b2WorldManifold.prototype.Initialize.s_planePoint), k = 0, l = a.pointCount; k < l; ++k) { var m = box2d.b2MulXV(b, a.points[k].localPoint, box2d.b2WorldManifold.prototype.Initialize.s_clipPoint), n = e - box2d.b2DotVV(box2d.b2SubVV(m, j, box2d.b2Vec2.s_t0), this.normal), i = box2d.b2AddVMulSV(m, n, this.normal, box2d.b2WorldManifold.prototype.Initialize.s_cB), h = box2d.b2SubVMulSV(m, c, this.normal, box2d.b2WorldManifold.prototype.Initialize.s_cA); box2d.b2MidVV(h, i, this.points[k]), this.separations[k] = box2d.b2DotVV(box2d.b2SubVV(h, i, box2d.b2Vec2.s_t0), this.normal) } this.normal.SelfNeg() } }, box2d.b2WorldManifold.prototype.Initialize.s_pointA = new box2d.b2Vec2, box2d.b2WorldManifold.prototype.Initialize.s_pointB = new box2d.b2Vec2, box2d.b2WorldManifold.prototype.Initialize.s_cA = new box2d.b2Vec2, box2d.b2WorldManifold.prototype.Initialize.s_cB = new box2d.b2Vec2, box2d.b2WorldManifold.prototype.Initialize.s_planePoint = new box2d.b2Vec2, box2d.b2WorldManifold.prototype.Initialize.s_clipPoint = new box2d.b2Vec2, box2d.b2PointState = { b2_nullState: 0, b2_addState: 1, b2_persistState: 2, b2_removeState: 3 }, goog.exportProperty(box2d.b2PointState, "b2_nullState ", box2d.b2PointState.b2_nullState), goog.exportProperty(box2d.b2PointState, "b2_addState ", box2d.b2PointState.b2_addState), goog.exportProperty(box2d.b2PointState, "b2_persistState", box2d.b2PointState.b2_persistState), goog.exportProperty(box2d.b2PointState, "b2_removeState ", box2d.b2PointState.b2_removeState), box2d.b2GetPointStates = function(a, b, c, d) { for (var e = 0, f = c.pointCount; e < f; ++e) { var g = c.points[e].id, h = g.key; a[e] = box2d.b2PointState.b2_removeState; for (var i = 0, j = d.pointCount; i < j; ++i) if (d.points[i].id.key === h) { a[e] = box2d.b2PointState.b2_persistState; break } } for (var f = box2d.b2_maxManifoldPoints; e < f; ++e) a[e] = box2d.b2PointState.b2_nullState; for (var e = 0, f = d.pointCount; e < f; ++e) { var g = d.points[e].id, h = g.key; b[e] = box2d.b2PointState.b2_addState; for (var i = 0, j = c.pointCount; i < j; ++i) if (c.points[i].id.key === h) { b[e] = box2d.b2PointState.b2_persistState; break } } for (var f = box2d.b2_maxManifoldPoints; e < f; ++e) b[e] = box2d.b2PointState.b2_nullState }, box2d.b2ClipVertex = function() { this.v = new box2d.b2Vec2, this.id = new box2d.b2ContactID }, box2d.b2ClipVertex.prototype.v = null, box2d.b2ClipVertex.prototype.id = null, box2d.b2ClipVertex.MakeArray = function(a) { return box2d.b2MakeArray(a, function(a) { return new box2d.b2ClipVertex }) }, box2d.b2ClipVertex.prototype.Copy = function(a) { return this.v.Copy(a.v), this.id.Copy(a.id), this }, box2d.b2RayCastInput = function() { this.p1 = new box2d.b2Vec2, this.p2 = new box2d.b2Vec2, this.maxFraction = 1 }, box2d.b2RayCastInput.prototype.p1 = null, box2d.b2RayCastInput.prototype.p2 = null, box2d.b2RayCastInput.prototype.maxFraction = 1, box2d.b2RayCastInput.prototype.Copy = function(a) { return this.p1.Copy(a.p1), this.p2.Copy(a.p2), this.maxFraction = a.maxFraction, this }, box2d.b2RayCastOutput = function() { this.normal = new box2d.b2Vec2, this.fraction = 0 }, box2d.b2RayCastOutput.prototype.normal = null, box2d.b2RayCastOutput.prototype.fraction = 0; box2d.b2RayCastOutput.prototype.Copy = function(a) { return this.normal.Copy(a.normal), this.fraction = a.fraction, this }, box2d.b2AABB = function() { this.lowerBound = new box2d.b2Vec2, this.upperBound = new box2d.b2Vec2, this.m_out_center = new box2d.b2Vec2, this.m_out_extent = new box2d.b2Vec2 }, box2d.b2AABB.prototype.lowerBound = null, box2d.b2AABB.prototype.upperBound = null, box2d.b2AABB.prototype.m_out_center = null, box2d.b2AABB.prototype.m_out_extent = null, box2d.b2AABB.prototype.Copy = function(a) { return this.lowerBound.Copy(a.lowerBound), this.upperBound.Copy(a.upperBound), this }, box2d.b2AABB.prototype.IsValid = function() { var a = this.upperBound.x - this.lowerBound.x, b = this.upperBound.y - this.lowerBound.y, c = a >= 0 && b >= 0; return c = c && this.lowerBound.IsValid() && this.upperBound.IsValid() }, box2d.b2AABB.prototype.GetCenter = function() { return box2d.b2MidVV(this.lowerBound, this.upperBound, this.m_out_center) }, box2d.b2AABB.prototype.GetExtents = function() { return box2d.b2ExtVV(this.lowerBound, this.upperBound, this.m_out_extent) }, box2d.b2AABB.prototype.GetPerimeter = function() { return 2 * (this.upperBound.x - this.lowerBound.x + (this.upperBound.y - this.lowerBound.y)) }, box2d.b2AABB.prototype.Combine1 = function(a) { return this.lowerBound.x = box2d.b2Min(this.lowerBound.x, a.lowerBound.x), this.lowerBound.y = box2d.b2Min(this.lowerBound.y, a.lowerBound.y), this.upperBound.x = box2d.b2Max(this.upperBound.x, a.upperBound.x), this.upperBound.y = box2d.b2Max(this.upperBound.y, a.upperBound.y), this }, box2d.b2AABB.prototype.Combine2 = function(a, b) { return this.lowerBound.x = box2d.b2Min(a.lowerBound.x, b.lowerBound.x), this.lowerBound.y = box2d.b2Min(a.lowerBound.y, b.lowerBound.y), this.upperBound.x = box2d.b2Max(a.upperBound.x, b.upperBound.x), this.upperBound.y = box2d.b2Max(a.upperBound.y, b.upperBound.y), this }, box2d.b2AABB.Combine = function(a, b, c) { return c.Combine2(a, b), c }, box2d.b2AABB.prototype.Contains = function(a) { var b = !0; return b = b && this.lowerBound.x <= a.lowerBound.x, b = b && this.lowerBound.y <= a.lowerBound.y, b = b && a.upperBound.x <= this.upperBound.x, b = b && a.upperBound.y <= this.upperBound.y }, box2d.b2AABB.prototype.RayCast = function(a, b) { var c = -box2d.b2_maxFloat, d = box2d.b2_maxFloat, e = b.p1.x, f = b.p1.y, g = b.p2.x - b.p1.x, h = b.p2.y - b.p1.y, i = box2d.b2Abs(g), j = box2d.b2Abs(h), k = a.normal; if (i < box2d.b2_epsilon) { if (e < this.lowerBound.x || this.upperBound.x < e) return !1 } else { var l = 1 / g, m = (this.lowerBound.x - e) * l, n = (this.upperBound.x - e) * l, o = -1; if (m > n) { var p = m; m = n, n = p, o = 1 } if (m > c && (k.x = o, k.y = 0, c = m), d = box2d.b2Min(d, n), c > d) return !1 } if (j < box2d.b2_epsilon) { if (f < this.lowerBound.y || this.upperBound.y < f) return !1 } else { var l = 1 / h, m = (this.lowerBound.y - f) * l, n = (this.upperBound.y - f) * l, o = -1; if (m > n) { var p = m; m = n, n = p, o = 1 } if (m > c && (k.x = 0, k.y = o, c = m), d = box2d.b2Min(d, n), c > d) return !1 } return !(c < 0 || b.maxFraction < c) && (a.fraction = c, !0) }, box2d.b2AABB.prototype.TestOverlap = function(a) { var b = a.lowerBound.x - this.upperBound.x, c = a.lowerBound.y - this.upperBound.y, d = this.lowerBound.x - a.upperBound.x, e = this.lowerBound.y - a.upperBound.y; return !(b > 0 || c > 0) && !(d > 0 || e > 0) }, box2d.b2TestOverlapAABB = function(a, b) { var c = b.lowerBound.x - a.upperBound.x, d = b.lowerBound.y - a.upperBound.y, e = a.lowerBound.x - b.upperBound.x, f = a.lowerBound.y - b.upperBound.y; return !(c > 0 || d > 0) && !(e > 0 || f > 0) }, box2d.b2ClipSegmentToLine = function(a, b, c, d, e) { var f = 0, g = b[0], h = b[1], i = box2d.b2DotVV(c, g.v) - d, j = box2d.b2DotVV(c, h.v) - d; if (i <= 0 && a[f++].Copy(g), j <= 0 && a[f++].Copy(h), i * j < 0) { var k = i / (i - j), l = a[f].v; l.x = g.v.x + k * (h.v.x - g.v.x), l.y = g.v.y + k * (h.v.y - g.v.y); var m = a[f].id; m.cf.indexA = e, m.cf.indexB = g.id.cf.indexB, m.cf.typeA = box2d.b2ContactFeatureType.e_vertex, m.cf.typeB = box2d.b2ContactFeatureType.e_face, ++f } return f }, box2d.b2TestOverlapShape = function(a, b, c, d, e, f) { var g = box2d.b2TestOverlapShape.s_input.Reset(); g.proxyA.SetShape(a, b), g.proxyB.SetShape(c, d), g.transformA.Copy(e), g.transformB.Copy(f), g.useRadii = !0; var h = box2d.b2TestOverlapShape.s_simplexCache.Reset(); h.count = 0; var i = box2d.b2TestOverlapShape.s_output.Reset(); return box2d.b2Distance(i, h, g), i.distance < 10 * box2d.b2_epsilon }, box2d.b2TestOverlapShape.s_input = new box2d.b2DistanceInput, box2d.b2TestOverlapShape.s_simplexCache = new box2d.b2SimplexCache, box2d.b2TestOverlapShape.s_output = new box2d.b2DistanceOutput, goog.provide("box2d.b2Timer"), goog.require("box2d.b2Settings"), box2d.b2Timer = function() { this.m_start = (new Date).getTime() }, box2d.b2Timer.prototype.m_start = 0, box2d.b2Timer.prototype.Reset = function() { return this.m_start = (new Date).getTime(), this }, box2d.b2Timer.prototype.GetMilliseconds = function() { return (new Date).getTime() - this.m_start }, box2d.b2Counter = function() {}, box2d.b2Counter.prototype.m_count = 0, box2d.b2Counter.prototype.m_min_count = 0, box2d.b2Counter.prototype.m_max_count = 0, box2d.b2Counter.prototype.GetCount = function() { return this.m_count }, box2d.b2Counter.prototype.GetMinCount = function() { return this.m_min_count }, box2d.b2Counter.prototype.GetMaxCount = function() { return this.m_max_count }, box2d.b2Counter.prototype.ResetCount = function() { var a = this.m_count; return this.m_count = 0, a }, box2d.b2Counter.prototype.ResetMinCount = function() { this.m_min_count = 0 }, box2d.b2Counter.prototype.ResetMaxCount = function() { this.m_max_count = 0 }, box2d.b2Counter.prototype.Increment = function() { this.m_count++, this.m_max_count < this.m_count && (this.m_max_count = this.m_count) }, box2d.b2Counter.prototype.Decrement = function() { this.m_count--, this.m_min_count > this.m_count && (this.m_min_count = this.m_count) }, goog.provide("box2d.b2TimeOfImpact"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Distance"), goog.require("box2d.b2Math"), goog.require("box2d.b2Timer"), box2d.b2_toiTime = 0, box2d.b2_toiMaxTime = 0, box2d.b2_toiCalls = 0, box2d.b2_toiIters = 0, box2d.b2_toiMaxIters = 0, box2d.b2_toiRootIters = 0, box2d.b2_toiMaxRootIters = 0, box2d.b2TOIInput = function() { this.proxyA = new box2d.b2DistanceProxy, this.proxyB = new box2d.b2DistanceProxy, this.sweepA = new box2d.b2Sweep, this.sweepB = new box2d.b2Sweep }, box2d.b2TOIInput.prototype.proxyA = null, box2d.b2TOIInput.prototype.proxyB = null, box2d.b2TOIInput.prototype.sweepA = null, box2d.b2TOIInput.prototype.sweepB = null, box2d.b2TOIInput.prototype.tMax = 0, box2d.b2TOIOutputState = { e_unknown: 0, e_failed: 1, e_overlapped: 2, e_touching: 3, e_separated: 4 }, goog.exportProperty(box2d.b2TOIOutputState, "e_unknown", box2d.b2TOIOutputState.e_unknown), goog.exportProperty(box2d.b2TOIOutputState, "e_failed", box2d.b2TOIOutputState.e_failed), goog.exportProperty(box2d.b2TOIOutputState, "e_overlapped", box2d.b2TOIOutputState.e_overlapped), goog.exportProperty(box2d.b2TOIOutputState, "e_touching", box2d.b2TOIOutputState.e_touching), goog.exportProperty(box2d.b2TOIOutputState, "e_separated", box2d.b2TOIOutputState.e_separated), box2d.b2TOIOutput = function() {}, box2d.b2TOIOutput.prototype.state = box2d.b2TOIOutputState.e_unknown, box2d.b2TOIOutput.prototype.t = 0, box2d.b2SeparationFunctionType = { e_unknown: -1, e_points: 0, e_faceA: 1, e_faceB: 2 }, goog.exportProperty(box2d.b2SeparationFunctionType, "e_unknown", box2d.b2SeparationFunctionType.e_unknown), goog.exportProperty(box2d.b2SeparationFunctionType, "e_points", box2d.b2SeparationFunctionType.e_points), goog.exportProperty(box2d.b2SeparationFunctionType, "e_faceA", box2d.b2SeparationFunctionType.e_faceA), goog.exportProperty(box2d.b2SeparationFunctionType, "e_faceB", box2d.b2SeparationFunctionType.e_faceB), box2d.b2SeparationFunction = function() { this.m_sweepA = new box2d.b2Sweep, this.m_sweepB = new box2d.b2Sweep, this.m_localPoint = new box2d.b2Vec2, this.m_axis = new box2d.b2Vec2 }, box2d.b2SeparationFunction.prototype.m_proxyA = null, box2d.b2SeparationFunction.prototype.m_proxyB = null, box2d.b2SeparationFunction.prototype.m_sweepA = null, box2d.b2SeparationFunction.prototype.m_sweepB = null, box2d.b2SeparationFunction.prototype.m_type = box2d.b2SeparationFunctionType.e_unknown, box2d.b2SeparationFunction.prototype.m_localPoint = null, box2d.b2SeparationFunction.prototype.m_axis = null, box2d.b2SeparationFunction.prototype.Initialize = function(a, b, c, d, e, f) { this.m_proxyA = b, this.m_proxyB = d; var g = a.count; box2d.ENABLE_ASSERTS && box2d.b2Assert(0 < g && g < 3), this.m_sweepA.Copy(c), this.m_sweepB.Copy(e); var h = box2d.b2TimeOfImpact.s_xfA, i = box2d.b2TimeOfImpact.s_xfB; if (this.m_sweepA.GetTransform(h, f), this.m_sweepB.GetTransform(i, f), 1 === g) { this.m_type = box2d.b2SeparationFunctionType.e_points; var j = this.m_proxyA.GetVertex(a.indexA[0]), k = this.m_proxyB.GetVertex(a.indexB[0]), l = box2d.b2MulXV(h, j, box2d.b2TimeOfImpact.s_pointA), m = box2d.b2MulXV(i, k, box2d.b2TimeOfImpact.s_pointB); box2d.b2SubVV(m, l, this.m_axis); var n = this.m_axis.Normalize(); return n } if (a.indexA[0] === a.indexA[1]) { this.m_type = box2d.b2SeparationFunctionType.e_faceB; var o = this.m_proxyB.GetVertex(a.indexB[0]), p = this.m_proxyB.GetVertex(a.indexB[1]); box2d.b2CrossVOne(box2d.b2SubVV(p, o, box2d.b2Vec2.s_t0), this.m_axis).SelfNormalize(); var q = box2d.b2MulRV(i.q, this.m_axis, box2d.b2TimeOfImpact.s_normal); box2d.b2MidVV(o, p, this.m_localPoint); var m = box2d.b2MulXV(i, this.m_localPoint, box2d.b2TimeOfImpact.s_pointB), j = this.m_proxyA.GetVertex(a.indexA[0]), l = box2d.b2MulXV(h, j, box2d.b2TimeOfImpact.s_pointA), n = box2d.b2DotVV(box2d.b2SubVV(l, m, box2d.b2Vec2.s_t0), q); return n < 0 && (this.m_axis.SelfNeg(), n = -n), n } this.m_type = box2d.b2SeparationFunctionType.e_faceA; var r = this.m_proxyA.GetVertex(a.indexA[0]), s = this.m_proxyA.GetVertex(a.indexA[1]); box2d.b2CrossVOne(box2d.b2SubVV(s, r, box2d.b2Vec2.s_t0), this.m_axis).SelfNormalize(); var q = box2d.b2MulRV(h.q, this.m_axis, box2d.b2TimeOfImpact.s_normal); box2d.b2MidVV(r, s, this.m_localPoint); var l = box2d.b2MulXV(h, this.m_localPoint, box2d.b2TimeOfImpact.s_pointA), k = this.m_proxyB.GetVertex(a.indexB[0]), m = box2d.b2MulXV(i, k, box2d.b2TimeOfImpact.s_pointB), n = box2d.b2DotVV(box2d.b2SubVV(m, l, box2d.b2Vec2.s_t0), q); return n < 0 && (this.m_axis.SelfNeg(), n = -n), n }, box2d.b2SeparationFunction.prototype.FindMinSeparation = function(a, b, c) { var d = box2d.b2TimeOfImpact.s_xfA, e = box2d.b2TimeOfImpact.s_xfB; switch (this.m_sweepA.GetTransform(d, c), this.m_sweepB.GetTransform(e, c), this.m_type) { case box2d.b2SeparationFunctionType.e_points: var f = box2d.b2MulTRV(d.q, this.m_axis, box2d.b2TimeOfImpact.s_axisA), g = box2d.b2MulTRV(e.q, box2d.b2NegV(this.m_axis, box2d.b2Vec2.s_t0), box2d.b2TimeOfImpact.s_axisB); a[0] = this.m_proxyA.GetSupport(f), b[0] = this.m_proxyB.GetSupport(g); var h = this.m_proxyA.GetVertex(a[0]), i = this.m_proxyB.GetVertex(b[0]), j = box2d.b2MulXV(d, h, box2d.b2TimeOfImpact.s_pointA), k = box2d.b2MulXV(e, i, box2d.b2TimeOfImpact.s_pointB), l = box2d.b2DotVV(box2d.b2SubVV(k, j, box2d.b2Vec2.s_t0), this.m_axis); return l; case box2d.b2SeparationFunctionType.e_faceA: var m = box2d.b2MulRV(d.q, this.m_axis, box2d.b2TimeOfImpact.s_normal), j = box2d.b2MulXV(d, this.m_localPoint, box2d.b2TimeOfImpact.s_pointA), g = box2d.b2MulTRV(e.q, box2d.b2NegV(m, box2d.b2Vec2.s_t0), box2d.b2TimeOfImpact.s_axisB); a[0] = -1, b[0] = this.m_proxyB.GetSupport(g); var i = this.m_proxyB.GetVertex(b[0]), k = box2d.b2MulXV(e, i, box2d.b2TimeOfImpact.s_pointB), l = box2d.b2DotVV(box2d.b2SubVV(k, j, box2d.b2Vec2.s_t0), m); return l; case box2d.b2SeparationFunctionType.e_faceB: var m = box2d.b2MulRV(e.q, this.m_axis, box2d.b2TimeOfImpact.s_normal), k = box2d.b2MulXV(e, this.m_localPoint, box2d.b2TimeOfImpact.s_pointB), f = box2d.b2MulTRV(d.q, box2d.b2NegV(m, box2d.b2Vec2.s_t0), box2d.b2TimeOfImpact.s_axisA); b[0] = -1, a[0] = this.m_proxyA.GetSupport(f); var h = this.m_proxyA.GetVertex(a[0]), j = box2d.b2MulXV(d, h, box2d.b2TimeOfImpact.s_pointA), l = box2d.b2DotVV(box2d.b2SubVV(j, k, box2d.b2Vec2.s_t0), m); return l; default: return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1), a[0] = -1, b[0] = -1, 0 } }, box2d.b2SeparationFunction.prototype.Evaluate = function(a, b, c) { var d = box2d.b2TimeOfImpact.s_xfA, e = box2d.b2TimeOfImpact.s_xfB; switch (this.m_sweepA.GetTransform(d, c), this.m_sweepB.GetTransform(e, c), this.m_type) { case box2d.b2SeparationFunctionType.e_points: var f = this.m_proxyA.GetVertex(a), g = this.m_proxyB.GetVertex(b), h = box2d.b2MulXV(d, f, box2d.b2TimeOfImpact.s_pointA), i = box2d.b2MulXV(e, g, box2d.b2TimeOfImpact.s_pointB), j = box2d.b2DotVV(box2d.b2SubVV(i, h, box2d.b2Vec2.s_t0), this.m_axis); return j; case box2d.b2SeparationFunctionType.e_faceA: var k = box2d.b2MulRV(d.q, this.m_axis, box2d.b2TimeOfImpact.s_normal), h = box2d.b2MulXV(d, this.m_localPoint, box2d.b2TimeOfImpact.s_pointA), g = this.m_proxyB.GetVertex(b), i = box2d.b2MulXV(e, g, box2d.b2TimeOfImpact.s_pointB), j = box2d.b2DotVV(box2d.b2SubVV(i, h, box2d.b2Vec2.s_t0), k); return j; case box2d.b2SeparationFunctionType.e_faceB: var k = box2d.b2MulRV(e.q, this.m_axis, box2d.b2TimeOfImpact.s_normal), i = box2d.b2MulXV(e, this.m_localPoint, box2d.b2TimeOfImpact.s_pointB), f = this.m_proxyA.GetVertex(a), h = box2d.b2MulXV(d, f, box2d.b2TimeOfImpact.s_pointA), j = box2d.b2DotVV(box2d.b2SubVV(h, i, box2d.b2Vec2.s_t0), k); return j; default: return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1), 0 } }, box2d.b2TimeOfImpact = function(a, b) { var c = box2d.b2TimeOfImpact.s_timer.Reset();++box2d.b2_toiCalls, a.state = box2d.b2TOIOutputState.e_unknown, a.t = b.tMax; var d = b.proxyA, e = b.proxyB, f = box2d.b2TimeOfImpact.s_sweepA.Copy(b.sweepA), g = box2d.b2TimeOfImpact.s_sweepB.Copy(b.sweepB); f.Normalize(), g.Normalize(); var h = b.tMax, i = d.m_radius + e.m_radius, j = box2d.b2Max(box2d.b2_linearSlop, i - 3 * box2d.b2_linearSlop), k = .25 * box2d.b2_linearSlop; box2d.ENABLE_ASSERTS && box2d.b2Assert(j > k); var l = 0, m = 0, n = box2d.b2TimeOfImpact.s_cache; n.count = 0; var o = box2d.b2TimeOfImpact.s_distanceInput; for (o.proxyA = b.proxyA, o.proxyB = b.proxyB, o.useRadii = !1;;) { var p = box2d.b2TimeOfImpact.s_xfA, q = box2d.b2TimeOfImpact.s_xfB; f.GetTransform(p, l), g.GetTransform(q, l), o.transformA.Copy(p), o.transformB.Copy(q); var r = box2d.b2TimeOfImpact.s_distanceOutput; if (box2d.b2Distance(r, n, o), r.distance <= 0) { a.state = box2d.b2TOIOutputState.e_overlapped, a.t = 0; break } if (r.distance < j + k) { a.state = box2d.b2TOIOutputState.e_touching, a.t = l; break } var s = box2d.b2TimeOfImpact.s_fcn; s.Initialize(n, d, f, e, g, l); for (var t = !1, u = h, v = 0;;) { var w = box2d.b2TimeOfImpact.s_indexA, x = box2d.b2TimeOfImpact.s_indexB, y = s.FindMinSeparation(w, x, u); if (y > j + k) { a.state = box2d.b2TOIOutputState.e_separated, a.t = h, t = !0; break } if (y > j - k) { l = u; break } var z = s.Evaluate(w[0], x[0], l); if (z < j - k) { a.state = box2d.b2TOIOutputState.e_failed, a.t = l, t = !0; break } if (z <= j + k) { a.state = box2d.b2TOIOutputState.e_touching, a.t = l, t = !0; break } for (var A = 0, B = l, C = u;;) { var D = 0; D = 1 & A ? B + (j - z) * (C - B) / (y - z) : .5 * (B + C), ++A, ++box2d.b2_toiRootIters; var E = s.Evaluate(w[0], x[0], D); if (box2d.b2Abs(E - j) < k) { u = D; break } if (E > j ? (B = D, z = E) : (C = D, y = E), 50 === A) break } if (box2d.b2_toiMaxRootIters = box2d.b2Max(box2d.b2_toiMaxRootIters, A), ++v === box2d.b2_maxPolygonVertices) break } if (++m, ++box2d.b2_toiIters, t) break; if (20 === m) { a.state = box2d.b2TOIOutputState.e_failed, a.t = l; break } } box2d.b2_toiMaxIters = box2d.b2Max(box2d.b2_toiMaxIters, m); var F = c.GetMilliseconds(); box2d.b2_toiMaxTime = box2d.b2Max(box2d.b2_toiMaxTime, F), box2d.b2_toiTime += F }, box2d.b2TimeOfImpact.s_timer = new box2d.b2Timer, box2d.b2TimeOfImpact.s_cache = new box2d.b2SimplexCache, box2d.b2TimeOfImpact.s_distanceInput = new box2d.b2DistanceInput, box2d.b2TimeOfImpact.s_distanceOutput = new box2d.b2DistanceOutput, box2d.b2TimeOfImpact.s_xfA = new box2d.b2Transform, box2d.b2TimeOfImpact.s_xfB = new box2d.b2Transform, box2d.b2TimeOfImpact.s_indexA = box2d.b2MakeNumberArray(1), box2d.b2TimeOfImpact.s_indexB = box2d.b2MakeNumberArray(1), box2d.b2TimeOfImpact.s_fcn = new box2d.b2SeparationFunction, box2d.b2TimeOfImpact.s_sweepA = new box2d.b2Sweep, box2d.b2TimeOfImpact.s_sweepB = new box2d.b2Sweep, box2d.b2TimeOfImpact.s_pointA = new box2d.b2Vec2, box2d.b2TimeOfImpact.s_pointB = new box2d.b2Vec2, box2d.b2TimeOfImpact.s_normal = new box2d.b2Vec2, box2d.b2TimeOfImpact.s_axisA = new box2d.b2Vec2, box2d.b2TimeOfImpact.s_axisB = new box2d.b2Vec2, goog.provide("box2d.b2Contact"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Collision"), goog.require("box2d.b2TimeOfImpact"), box2d.b2MixFriction = function(a, b) { return box2d.b2Sqrt(a * b) }, box2d.b2MixRestitution = function(a, b) { return a > b ? a : b }, box2d.b2ContactEdge = function() {}, box2d.b2ContactEdge.prototype.other = null, box2d.b2ContactEdge.prototype.contact = null, box2d.b2ContactEdge.prototype.prev = null, box2d.b2ContactEdge.prototype.next = null, box2d.b2ContactFlag = { e_none: 0, e_islandFlag: 1, e_touchingFlag: 2, e_enabledFlag: 4, e_filterFlag: 8, e_bulletHitFlag: 16, e_toiFlag: 32 }, goog.exportProperty(box2d.b2ContactFlag, "e_none", box2d.b2ContactFlag.e_none), goog.exportProperty(box2d.b2ContactFlag, "e_islandFlag", box2d.b2ContactFlag.e_islandFlag), goog.exportProperty(box2d.b2ContactFlag, "e_touchingFlag", box2d.b2ContactFlag.e_touchingFlag), goog.exportProperty(box2d.b2ContactFlag, "e_enabledFlag", box2d.b2ContactFlag.e_enabledFlag), goog.exportProperty(box2d.b2ContactFlag, "e_filterFlag", box2d.b2ContactFlag.e_filterFlag), goog.exportProperty(box2d.b2ContactFlag, "e_bulletHitFlag", box2d.b2ContactFlag.e_bulletHitFlag), goog.exportProperty(box2d.b2ContactFlag, "e_toiFlag", box2d.b2ContactFlag.e_toiFlag), box2d.b2Contact = function() { this.m_nodeA = new box2d.b2ContactEdge, this.m_nodeB = new box2d.b2ContactEdge, this.m_manifold = new box2d.b2Manifold, this.m_oldManifold = new box2d.b2Manifold }, box2d.b2Contact.prototype.m_flags = box2d.b2ContactFlag.e_none, box2d.b2Contact.prototype.m_prev = null, box2d.b2Contact.prototype.m_next = null, box2d.b2Contact.prototype.m_nodeA = null, box2d.b2Contact.prototype.m_nodeB = null, box2d.b2Contact.prototype.m_fixtureA = null, box2d.b2Contact.prototype.m_fixtureB = null, box2d.b2Contact.prototype.m_indexA = 0, box2d.b2Contact.prototype.m_indexB = 0, box2d.b2Contact.prototype.m_manifold = null, box2d.b2Contact.prototype.m_toiCount = 0, box2d.b2Contact.prototype.m_toi = 0, box2d.b2Contact.prototype.m_friction = 0, box2d.b2Contact.prototype.m_restitution = 0, box2d.b2Contact.prototype.m_tangentSpeed = 0, box2d.b2Contact.prototype.m_oldManifold = null, box2d.b2Contact.prototype.GetManifold = function() { return this.m_manifold }, box2d.b2Contact.prototype.GetWorldManifold = function(a) { var b = this.m_fixtureA.GetBody(), c = this.m_fixtureB.GetBody(), d = this.m_fixtureA.GetShape(), e = this.m_fixtureB.GetShape(); a.Initialize(this.m_manifold, b.GetTransform(), d.m_radius, c.GetTransform(), e.m_radius) }, box2d.b2Contact.prototype.IsTouching = function() { return (this.m_flags & box2d.b2ContactFlag.e_touchingFlag) === box2d.b2ContactFlag.e_touchingFlag }, box2d.b2Contact.prototype.SetEnabled = function(a) { a ? this.m_flags |= box2d.b2ContactFlag.e_enabledFlag : this.m_flags &= ~box2d.b2ContactFlag.e_enabledFlag }, box2d.b2Contact.prototype.IsEnabled = function() { return (this.m_flags & box2d.b2ContactFlag.e_enabledFlag) === box2d.b2ContactFlag.e_enabledFlag }, box2d.b2Contact.prototype.GetNext = function() { return this.m_next }, box2d.b2Contact.prototype.GetFixtureA = function() { return this.m_fixtureA }, box2d.b2Contact.prototype.GetChildIndexA = function() { return this.m_indexA }, box2d.b2Contact.prototype.GetFixtureB = function() { return this.m_fixtureB }, box2d.b2Contact.prototype.GetChildIndexB = function() { return this.m_indexB }, box2d.b2Contact.prototype.Evaluate = function(a, b, c) {}, box2d.b2Contact.prototype.FlagForFiltering = function() { this.m_flags |= box2d.b2ContactFlag.e_filterFlag }, box2d.b2Contact.prototype.SetFriction = function(a) { this.m_friction = a }, box2d.b2Contact.prototype.GetFriction = function() { return this.m_friction }, box2d.b2Contact.prototype.ResetFriction = function() { this.m_friction = box2d.b2MixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction) }, box2d.b2Contact.prototype.SetRestitution = function(a) { this.m_restitution = a }, box2d.b2Contact.prototype.GetRestitution = function() { return this.m_restitution }, box2d.b2Contact.prototype.ResetRestitution = function() { this.m_restitution = box2d.b2MixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution) }, box2d.b2Contact.prototype.SetTangentSpeed = function(a) { this.m_tangentSpeed = a }, box2d.b2Contact.prototype.GetTangentSpeed = function() { return this.m_tangentSpeed }, box2d.b2Contact.prototype.Reset = function(a, b, c, d) { this.m_flags = box2d.b2ContactFlag.e_enabledFlag, this.m_fixtureA = a, this.m_fixtureB = c, this.m_indexA = b, this.m_indexB = d, this.m_manifold.pointCount = 0, this.m_prev = null, this.m_next = null, this.m_nodeA.contact = null, this.m_nodeA.prev = null, this.m_nodeA.next = null, this.m_nodeA.other = null, this.m_nodeB.contact = null, this.m_nodeB.prev = null, this.m_nodeB.next = null, this.m_nodeB.other = null, this.m_toiCount = 0, this.m_friction = box2d.b2MixFriction(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction), this.m_restitution = box2d.b2MixRestitution(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution) }, box2d.b2Contact.prototype.Update = function(a) { var b = this.m_oldManifold; this.m_oldManifold = this.m_manifold, this.m_manifold = b, this.m_flags |= box2d.b2ContactFlag.e_enabledFlag; var c = !1, d = (this.m_flags & box2d.b2ContactFlag.e_touchingFlag) === box2d.b2ContactFlag.e_touchingFlag, e = this.m_fixtureA.IsSensor(), f = this.m_fixtureB.IsSensor(), g = e || f, h = this.m_fixtureA.GetBody(), i = this.m_fixtureB.GetBody(), j = h.GetTransform(), k = i.GetTransform(); if (g) { var l = this.m_fixtureA.GetShape(), m = this.m_fixtureB.GetShape(); c = box2d.b2TestOverlapShape(l, this.m_indexA, m, this.m_indexB, j, k), this.m_manifold.pointCount = 0 } else { this.Evaluate(this.m_manifold, j, k), c = this.m_manifold.pointCount > 0; for (var n = 0; n < this.m_manifold.pointCount; ++n) { var o = this.m_manifold.points[n]; o.normalImpulse = 0, o.tangentImpulse = 0; for (var p = o.id, q = 0; q < this.m_oldManifold.pointCount; ++q) { var r = this.m_oldManifold.points[q]; if (r.id.key === p.key) { o.normalImpulse = r.normalImpulse, o.tangentImpulse = r.tangentImpulse; break } } } c !== d && (h.SetAwake(!0), i.SetAwake(!0)) } c ? this.m_flags |= box2d.b2ContactFlag.e_touchingFlag : this.m_flags &= ~box2d.b2ContactFlag.e_touchingFlag, !1 === d && !0 === c && a && a.BeginContact(this), !0 === d && !1 === c && a && a.EndContact(this), !1 === g && c && a && a.PreSolve(this, this.m_oldManifold) }, box2d.b2Contact.prototype.ComputeTOI = function(a, b) { var c = box2d.b2Contact.prototype.ComputeTOI.s_input; c.proxyA.SetShape(this.m_fixtureA.GetShape(), this.m_indexA), c.proxyB.SetShape(this.m_fixtureB.GetShape(), this.m_indexB), c.sweepA.Copy(a), c.sweepB.Copy(b), c.tMax = box2d.b2_linearSlop; var d = box2d.b2Contact.prototype.ComputeTOI.s_output; return box2d.b2TimeOfImpact(d, c), d.t }, box2d.b2Contact.prototype.ComputeTOI.s_input = new box2d.b2TOIInput, box2d.b2Contact.prototype.ComputeTOI.s_output = new box2d.b2TOIOutput, goog.provide("box2d.b2PolygonAndCircleContact"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Contact"), box2d.b2PolygonAndCircleContact = function() { goog.base(this) }, goog.inherits(box2d.b2PolygonAndCircleContact, box2d.b2Contact), box2d.b2PolygonAndCircleContact.Create = function(a) { return new box2d.b2PolygonAndCircleContact }, box2d.b2PolygonAndCircleContact.Destroy = function(a, b) {}, box2d.b2PolygonAndCircleContact.prototype.Reset = function(a, b, c, d) { goog.base(this, "Reset", a, b, c, d), box2d.ENABLE_ASSERTS && box2d.b2Assert(a.GetType() === box2d.b2ShapeType.e_polygonShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(c.GetType() === box2d.b2ShapeType.e_circleShape) }, box2d.b2PolygonAndCircleContact.prototype.Evaluate = function(a, b, c) { var d = this.m_fixtureA.GetShape(), e = this.m_fixtureB.GetShape(); box2d.ENABLE_ASSERTS && box2d.b2Assert(d instanceof box2d.b2PolygonShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(e instanceof box2d.b2CircleShape), box2d.b2CollidePolygonAndCircle(a, d instanceof box2d.b2PolygonShape ? d : null, b, e instanceof box2d.b2CircleShape ? e : null, c) }, goog.provide("box2d.b2EdgeAndPolygonContact"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Contact"), box2d.b2EdgeAndPolygonContact = function() { goog.base(this) }, goog.inherits(box2d.b2EdgeAndPolygonContact, box2d.b2Contact), box2d.b2EdgeAndPolygonContact.Create = function(a) { return new box2d.b2EdgeAndPolygonContact }, box2d.b2EdgeAndPolygonContact.Destroy = function(a, b) {}, box2d.b2EdgeAndPolygonContact.prototype.Reset = function(a, b, c, d) { goog.base(this, "Reset", a, b, c, d), box2d.ENABLE_ASSERTS && box2d.b2Assert(a.GetType() === box2d.b2ShapeType.e_edgeShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(c.GetType() === box2d.b2ShapeType.e_polygonShape) }, box2d.b2EdgeAndPolygonContact.prototype.Evaluate = function(a, b, c) { var d = this.m_fixtureA.GetShape(), e = this.m_fixtureB.GetShape(); box2d.ENABLE_ASSERTS && box2d.b2Assert(d instanceof box2d.b2EdgeShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(e instanceof box2d.b2PolygonShape), box2d.b2CollideEdgeAndPolygon(a, d instanceof box2d.b2EdgeShape ? d : null, b, e instanceof box2d.b2PolygonShape ? e : null, c) }, goog.provide("box2d.b2Shape"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Math"), goog.require("box2d.b2Distance"), box2d.b2MassData = function() { this.center = new box2d.b2Vec2(0, 0) }, box2d.b2MassData.prototype.mass = 0, box2d.b2MassData.prototype.center = null, box2d.b2MassData.prototype.I = 0, box2d.b2ShapeType = { e_unknown: -1, e_circleShape: 0, e_edgeShape: 1, e_polygonShape: 2, e_chainShape: 3, e_shapeTypeCount: 4 }, goog.exportProperty(box2d.b2ShapeType, "e_unknown", box2d.b2ShapeType.e_unknown), goog.exportProperty(box2d.b2ShapeType, "e_circleShape", box2d.b2ShapeType.e_circleShape), goog.exportProperty(box2d.b2ShapeType, "e_edgeShape", box2d.b2ShapeType.e_edgeShape), goog.exportProperty(box2d.b2ShapeType, "e_polygonShape", box2d.b2ShapeType.e_polygonShape), goog.exportProperty(box2d.b2ShapeType, "e_chainShape", box2d.b2ShapeType.e_chainShape), goog.exportProperty(box2d.b2ShapeType, "e_shapeTypeCount", box2d.b2ShapeType.e_shapeTypeCount), box2d.b2Shape = function(a, b) { this.m_type = a, this.m_radius = b }, box2d.b2Shape.prototype.m_type = box2d.b2ShapeType.e_unknown, box2d.b2Shape.prototype.m_radius = 0, box2d.b2Shape.prototype.Clone = function() { return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1), null }, box2d.b2Shape.prototype.Copy = function(a) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_type === a.m_type), this.m_radius = a.m_radius, this }; box2d.b2Shape.prototype.GetType = function() { return this.m_type }, box2d.b2Shape.prototype.GetChildCount = function() { return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1, "pure virtual"), 0 }, box2d.b2Shape.prototype.TestPoint = function(a, b) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1, "pure virtual"), !1 }, box2d.b2Shape.prototype.RayCast = function(a, b, c, d) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1, "pure virtual"), !1 }, box2d.b2Shape.prototype.ComputeAABB = function(a, b, c) { box2d.ENABLE_ASSERTS && box2d.b2Assert(!1, "pure virtual") }, box2d.b2Shape.prototype.ComputeMass = function(a, b) { box2d.ENABLE_ASSERTS && box2d.b2Assert(!1, "pure virtual") }, box2d.b2Shape.prototype.SetupDistanceProxy = function(a, b) { box2d.ENABLE_ASSERTS && box2d.b2Assert(!1, "pure virtual") }, box2d.b2Shape.prototype.ComputeSubmergedArea = function(a, b, c, d) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1, "pure virtual"), 0 }, box2d.b2Shape.prototype.Dump = function() { box2d.ENABLE_ASSERTS && box2d.b2Assert(!1, "pure virtual") }, goog.provide("box2d.b2PolygonShape"), goog.require("box2d.b2Shape"), box2d.b2PolygonShape = function() { goog.base(this, box2d.b2ShapeType.e_polygonShape, box2d.b2_polygonRadius), this.m_centroid = new box2d.b2Vec2(0, 0), this.m_vertices = box2d.b2Vec2.MakeArray(box2d.b2_maxPolygonVertices), this.m_normals = box2d.b2Vec2.MakeArray(box2d.b2_maxPolygonVertices) }, goog.inherits(box2d.b2PolygonShape, box2d.b2Shape), box2d.b2PolygonShape.prototype.m_centroid = null, box2d.b2PolygonShape.prototype.m_vertices = null, box2d.b2PolygonShape.prototype.m_normals = null, box2d.b2PolygonShape.prototype.m_count = 0, box2d.b2PolygonShape.prototype.Clone = function() { return (new box2d.b2PolygonShape).Copy(this) }, box2d.b2PolygonShape.prototype.Copy = function(a) { goog.base(this, "Copy", a), box2d.ENABLE_ASSERTS && box2d.b2Assert(a instanceof box2d.b2PolygonShape), this.m_centroid.Copy(a.m_centroid), this.m_count = a.m_count; for (var b = 0, c = this.m_count; b < c; ++b) this.m_vertices[b].Copy(a.m_vertices[b]), this.m_normals[b].Copy(a.m_normals[b]); return this }, box2d.b2PolygonShape.prototype.SetAsBox = function(a, b) { return this.m_count = 4, this.m_vertices[0].SetXY(-a, -b), this.m_vertices[1].SetXY(a, -b), this.m_vertices[2].SetXY(a, b), this.m_vertices[3].SetXY(-a, b), this.m_normals[0].SetXY(0, -1), this.m_normals[1].SetXY(1, 0), this.m_normals[2].SetXY(0, 1), this.m_normals[3].SetXY(-1, 0), this.m_centroid.SetZero(), this }, box2d.b2PolygonShape.prototype.SetAsOrientedBox = function(a, b, c, d) { this.m_count = 4, this.m_vertices[0].SetXY(-a, -b), this.m_vertices[1].SetXY(a, -b), this.m_vertices[2].SetXY(a, b), this.m_vertices[3].SetXY(-a, b), this.m_normals[0].SetXY(0, -1), this.m_normals[1].SetXY(1, 0), this.m_normals[2].SetXY(0, 1), this.m_normals[3].SetXY(-1, 0), this.m_centroid.Copy(c); var e = new box2d.b2Transform; e.SetPosition(c), e.SetRotationAngleRadians(d); for (var f = 0, g = this.m_count; f < g; ++f) box2d.b2MulXV(e, this.m_vertices[f], this.m_vertices[f]), box2d.b2MulRV(e.q, this.m_normals[f], this.m_normals[f]); return this }, box2d.b2PolygonShape.prototype.Set = function(a, b) { if (void 0 === b && (b = a.length), box2d.ENABLE_ASSERTS && box2d.b2Assert(3 <= b && b <= box2d.b2_maxPolygonVertices), b < 3) return this.SetAsBox(1, 1); for (var c = box2d.b2Min(b, box2d.b2_maxPolygonVertices), d = box2d.b2PolygonShape.prototype.Set.s_ps, e = 0, f = 0; f < c; ++f) { for (var g = a[f], h = !0, i = 0; i < e; ++i) if (box2d.b2DistanceSquaredVV(g, d[i]) < .5 * box2d.b2_linearSlop) { h = !1; break } h && d[e++].Copy(g) } if ((c = e) < 3) return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1), this.SetAsBox(1, 1); for (var j = 0, k = d[0].x, f = 1; f < c; ++f) { var l = d[f].x; (l > k || l === k && d[f].y < d[j].y) && (j = f, k = l) } for (var m = box2d.b2PolygonShape.prototype.Set.s_hull, n = 0, o = j;;) { m[n] = o; for (var p = 0, i = 1; i < c; ++i) if (p !== o) { var q = box2d.b2SubVV(d[p], d[m[n]], box2d.b2PolygonShape.prototype.Set.s_r), g = box2d.b2SubVV(d[i], d[m[n]], box2d.b2PolygonShape.prototype.Set.s_v), r = box2d.b2CrossVV(q, g); r < 0 && (p = i), 0 === r && g.GetLengthSquared() > q.GetLengthSquared() && (p = i) } else p = i; if (++n, o = p, p === j) break } this.m_count = n; for (var f = 0; f < n; ++f) this.m_vertices[f].Copy(d[m[f]]); for (var f = 0, s = n; f < s; ++f) { var t = this.m_vertices[f], u = this.m_vertices[(f + 1) % s], v = box2d.b2SubVV(u, t, box2d.b2Vec2.s_t0); box2d.ENABLE_ASSERTS && box2d.b2Assert(v.GetLengthSquared() > box2d.b2_epsilon_sq), box2d.b2CrossVOne(v, this.m_normals[f]).SelfNormalize() } return box2d.b2PolygonShape.ComputeCentroid(this.m_vertices, n, this.m_centroid), this }, box2d.b2PolygonShape.prototype.Set.s_ps = box2d.b2Vec2.MakeArray(box2d.b2_maxPolygonVertices), box2d.b2PolygonShape.prototype.Set.s_hull = box2d.b2MakeNumberArray(box2d.b2_maxPolygonVertices), box2d.b2PolygonShape.prototype.Set.s_r = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.Set.s_v = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.SetAsVector = function(a, b) { return this.Set(a, b), this }, box2d.b2PolygonShape.prototype.SetAsArray = function(a, b) { return this.Set(a, b), this }, box2d.b2PolygonShape.prototype.GetChildCount = function() { return 1 }, box2d.b2PolygonShape.prototype.TestPoint = function(a, b) { for (var c = box2d.b2MulTXV(a, b, box2d.b2PolygonShape.prototype.TestPoint.s_pLocal), d = 0, e = this.m_count; d < e; ++d) { if (box2d.b2DotVV(this.m_normals[d], box2d.b2SubVV(c, this.m_vertices[d], box2d.b2Vec2.s_t0)) > 0) return !1 } return !0 }, box2d.b2PolygonShape.prototype.TestPoint.s_pLocal = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.RayCast = function(a, b, c, d) { for (var e = box2d.b2MulTXV(c, b.p1, box2d.b2PolygonShape.prototype.RayCast.s_p1), f = box2d.b2MulTXV(c, b.p2, box2d.b2PolygonShape.prototype.RayCast.s_p2), g = box2d.b2SubVV(f, e, box2d.b2PolygonShape.prototype.RayCast.s_d), h = 0, i = b.maxFraction, j = -1, k = 0, l = this.m_count; k < l; ++k) { var m = box2d.b2DotVV(this.m_normals[k], box2d.b2SubVV(this.m_vertices[k], e, box2d.b2Vec2.s_t0)), n = box2d.b2DotVV(this.m_normals[k], g); if (0 === n) { if (m < 0) return !1 } else n < 0 && m < h * n ? (h = m / n, j = k) : n > 0 && m < i * n && (i = m / n); if (i < h) return !1 } return box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= h && h <= b.maxFraction), j >= 0 && (a.fraction = h, box2d.b2MulRV(c.q, this.m_normals[j], a.normal), !0) }, box2d.b2PolygonShape.prototype.RayCast.s_p1 = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.RayCast.s_p2 = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.RayCast.s_d = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.ComputeAABB = function(a, b, c) { for (var d = box2d.b2MulXV(b, this.m_vertices[0], a.lowerBound), e = a.upperBound.Copy(d), f = 0, g = this.m_count; f < g; ++f) { var h = box2d.b2MulXV(b, this.m_vertices[f], box2d.b2PolygonShape.prototype.ComputeAABB.s_v); box2d.b2MinV(h, d, d), box2d.b2MaxV(h, e, e) } var i = this.m_radius; d.SelfSubXY(i, i), e.SelfAddXY(i, i) }, box2d.b2PolygonShape.prototype.ComputeAABB.s_v = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.ComputeMass = function(a, b) { box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_count >= 3); for (var c = box2d.b2PolygonShape.prototype.ComputeMass.s_center.SetZero(), d = 0, e = 0, f = box2d.b2PolygonShape.prototype.ComputeMass.s_s.SetZero(), g = 0, h = this.m_count; g < h; ++g) f.SelfAdd(this.m_vertices[g]); f.SelfMul(1 / this.m_count); for (var g = 0, h = this.m_count; g < h; ++g) { var i = box2d.b2SubVV(this.m_vertices[g], f, box2d.b2PolygonShape.prototype.ComputeMass.s_e1), j = box2d.b2SubVV(this.m_vertices[(g + 1) % h], f, box2d.b2PolygonShape.prototype.ComputeMass.s_e2), k = box2d.b2CrossVV(i, j), l = .5 * k; d += l, c.SelfAdd(box2d.b2MulSV(l * (1 / 3), box2d.b2AddVV(i, j, box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t1)); var m = i.x, n = i.y, o = j.x, p = j.y; e += 1 / 3 * .25 * k * (m * m + o * m + o * o + (n * n + p * n + p * p)) } a.mass = b * d, box2d.ENABLE_ASSERTS && box2d.b2Assert(d > box2d.b2_epsilon), c.SelfMul(1 / d), box2d.b2AddVV(c, f, a.center), a.I = b * e, a.I += a.mass * (box2d.b2DotVV(a.center, a.center) - box2d.b2DotVV(c, c)) }, box2d.b2PolygonShape.prototype.ComputeMass.s_center = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.ComputeMass.s_s = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.ComputeMass.s_e1 = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.ComputeMass.s_e2 = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.Validate = function() { for (var a = 0; a < this.m_count; ++a) for (var b = a, c = (a + 1) % this.m_count, d = this.m_vertices[b], e = box2d.b2SubVV(this.m_vertices[c], d, box2d.b2PolygonShape.prototype.Validate.s_e), f = 0; f < this.m_count; ++f) if (f !== b && f !== c) { var g = box2d.b2SubVV(this.m_vertices[f], d, box2d.b2PolygonShape.prototype.Validate.s_v), h = box2d.b2CrossVV(e, g); if (h < 0) return !1 } return !0 }, box2d.b2PolygonShape.prototype.Validate.s_e = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.Validate.s_v = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.SetupDistanceProxy = function(a, b) { a.m_vertices = this.m_vertices, a.m_count = this.m_count, a.m_radius = this.m_radius }, box2d.b2PolygonShape.prototype.ComputeSubmergedArea = function(a, b, c, d) { for (var e = box2d.b2MulTRV(c.q, a, box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_normalL), f = b - box2d.b2DotVV(a, c.p), g = box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_depths, h = 0, i = -1, j = -1, k = !1, l = 0, m = this.m_count; l < m; ++l) { g[l] = box2d.b2DotVV(e, this.m_vertices[l]) - f; var n = g[l] < -box2d.b2_epsilon; l > 0 && (n ? k || (i = l - 1, h++) : k && (j = l - 1, h++)), k = n } switch (h) { case 0: if (k) { var o = box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_md; return this.ComputeMass(o, 1), box2d.b2MulXV(c, o.center, d), o.mass } return 0; case 1: -1 === i ? i = this.m_count - 1 : j = this.m_count - 1 } for (var p = (i + 1) % this.m_count, q = (j + 1) % this.m_count, r = (0 - g[i]) / (g[p] - g[i]), s = (0 - g[j]) / (g[q] - g[j]), t = box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_intoVec.SetXY(this.m_vertices[i].x * (1 - r) + this.m_vertices[p].x * r, this.m_vertices[i].y * (1 - r) + this.m_vertices[p].y * r), u = box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_outoVec.SetXY(this.m_vertices[j].x * (1 - s) + this.m_vertices[q].x * s, this.m_vertices[j].y * (1 - s) + this.m_vertices[q].y * s), v = 0, w = box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_center.SetZero(), x = this.m_vertices[p], y = null, l = p; l !== q;) { l = (l + 1) % this.m_count, y = l === q ? u : this.m_vertices[l]; var z = .5 * ((x.x - t.x) * (y.y - t.y) - (x.y - t.y) * (y.x - t.x)); v += z, w.x += z * (t.x + x.x + y.x) / 3, w.y += z * (t.y + x.y + y.y) / 3, x = y } return w.SelfMul(1 / v), box2d.b2MulXV(c, w, d), v }, box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_normalL = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_depths = box2d.b2MakeNumberArray(box2d.b2_maxPolygonVertices), box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_md = new box2d.b2MassData, box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_intoVec = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_outoVec = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.ComputeSubmergedArea.s_center = new box2d.b2Vec2, box2d.b2PolygonShape.prototype.Dump = function() { box2d.b2Log(" /*box2d.b2PolygonShape*/ var shape = new box2d.b2PolygonShape();\n"), box2d.b2Log(" /*box2d.b2Vec2[]*/ var vs = box2d.b2Vec2.MakeArray(%d);\n", box2d.b2_maxPolygonVertices); for (var a = 0; a < this.m_count; ++a) box2d.b2Log(" vs[%d].SetXY(%.15f, %.15f);\n", a, this.m_vertices[a].x, this.m_vertices[a].y); box2d.b2Log(" shape.Set(vs, %d);\n", this.m_count) }, box2d.b2PolygonShape.ComputeCentroid = function(a, b, c) { box2d.ENABLE_ASSERTS && box2d.b2Assert(b >= 3); var d = c; d.SetZero(); for (var e = 0, f = box2d.b2PolygonShape.ComputeCentroid.s_pRef.SetZero(), g = 0; g < b; ++g) { var h = f, i = a[g], j = a[(g + 1) % b], k = box2d.b2SubVV(i, h, box2d.b2PolygonShape.ComputeCentroid.s_e1), l = box2d.b2SubVV(j, h, box2d.b2PolygonShape.ComputeCentroid.s_e2), m = box2d.b2CrossVV(k, l), n = .5 * m; e += n, d.x += n * (1 / 3) * (h.x + i.x + j.x), d.y += n * (1 / 3) * (h.y + i.y + j.y) } return box2d.ENABLE_ASSERTS && box2d.b2Assert(e > box2d.b2_epsilon), d.SelfMul(1 / e), d }, box2d.b2PolygonShape.ComputeCentroid.s_pRef = new box2d.b2Vec2, box2d.b2PolygonShape.ComputeCentroid.s_e1 = new box2d.b2Vec2, box2d.b2PolygonShape.ComputeCentroid.s_e2 = new box2d.b2Vec2, goog.provide("box2d.b2CollideEdge"), goog.require("box2d.b2Collision"), box2d.b2CollideEdgeAndCircle = function(a, b, c, d, e) { a.pointCount = 0; var f = box2d.b2MulTXV(c, box2d.b2MulXV(e, d.m_p, box2d.b2Vec2.s_t0), box2d.b2CollideEdgeAndCircle.s_Q), g = b.m_vertex1, h = b.m_vertex2, i = box2d.b2SubVV(h, g, box2d.b2CollideEdgeAndCircle.s_e), j = box2d.b2DotVV(i, box2d.b2SubVV(h, f, box2d.b2Vec2.s_t0)), k = box2d.b2DotVV(i, box2d.b2SubVV(f, g, box2d.b2Vec2.s_t0)), l = b.m_radius + d.m_radius, m = box2d.b2CollideEdgeAndCircle.s_id; if (m.cf.indexB = 0, m.cf.typeB = box2d.b2ContactFeatureType.e_vertex, k <= 0) { var n = g, o = box2d.b2SubVV(f, n, box2d.b2CollideEdgeAndCircle.s_d), p = box2d.b2DotVV(o, o); if (p > l * l) return; if (b.m_hasVertex0) { var q = b.m_vertex0, r = g, s = box2d.b2SubVV(r, q, box2d.b2CollideEdgeAndCircle.s_e1); if (box2d.b2DotVV(s, box2d.b2SubVV(r, f, box2d.b2Vec2.s_t0)) > 0) return } return m.cf.indexA = 0, m.cf.typeA = box2d.b2ContactFeatureType.e_vertex, a.pointCount = 1, a.type = box2d.b2ManifoldType.e_circles, a.localNormal.SetZero(), a.localPoint.Copy(n), a.points[0].id.Copy(m), void a.points[0].localPoint.Copy(d.m_p) } if (j <= 0) { var n = h, o = box2d.b2SubVV(f, n, box2d.b2CollideEdgeAndCircle.s_d), p = box2d.b2DotVV(o, o); if (p > l * l) return; if (b.m_hasVertex3) { var t = b.m_vertex3, u = h, v = box2d.b2SubVV(t, u, box2d.b2CollideEdgeAndCircle.s_e2); if (box2d.b2DotVV(v, box2d.b2SubVV(f, u, box2d.b2Vec2.s_t0)) > 0) return } return m.cf.indexA = 1, m.cf.typeA = box2d.b2ContactFeatureType.e_vertex, a.pointCount = 1, a.type = box2d.b2ManifoldType.e_circles, a.localNormal.SetZero(), a.localPoint.Copy(n), a.points[0].id.Copy(m), void a.points[0].localPoint.Copy(d.m_p) } var w = box2d.b2DotVV(i, i); box2d.ENABLE_ASSERTS && box2d.b2Assert(w > 0); var n = box2d.b2CollideEdgeAndCircle.s_P; n.x = 1 / w * (j * g.x + k * h.x), n.y = 1 / w * (j * g.y + k * h.y); var o = box2d.b2SubVV(f, n, box2d.b2CollideEdgeAndCircle.s_d), p = box2d.b2DotVV(o, o); if (!(p > l * l)) { var x = box2d.b2CollideEdgeAndCircle.s_n.SetXY(-i.y, i.x); box2d.b2DotVV(x, box2d.b2SubVV(f, g, box2d.b2Vec2.s_t0)) < 0 && x.SetXY(-x.x, -x.y), x.Normalize(), m.cf.indexA = 0, m.cf.typeA = box2d.b2ContactFeatureType.e_face, a.pointCount = 1, a.type = box2d.b2ManifoldType.e_faceA, a.localNormal.Copy(x), a.localPoint.Copy(g), a.points[0].id.Copy(m), a.points[0].localPoint.Copy(d.m_p) } }, box2d.b2CollideEdgeAndCircle.s_Q = new box2d.b2Vec2, box2d.b2CollideEdgeAndCircle.s_e = new box2d.b2Vec2, box2d.b2CollideEdgeAndCircle.s_d = new box2d.b2Vec2, box2d.b2CollideEdgeAndCircle.s_e1 = new box2d.b2Vec2, box2d.b2CollideEdgeAndCircle.s_e2 = new box2d.b2Vec2, box2d.b2CollideEdgeAndCircle.s_P = new box2d.b2Vec2, box2d.b2CollideEdgeAndCircle.s_n = new box2d.b2Vec2, box2d.b2CollideEdgeAndCircle.s_id = new box2d.b2ContactID, box2d.b2EPAxisType = { e_unknown: 0, e_edgeA: 1, e_edgeB: 2 }, goog.exportProperty(box2d.b2EPAxisType, "e_unknown", box2d.b2EPAxisType.e_unknown), goog.exportProperty(box2d.b2EPAxisType, "e_edgeA", box2d.b2EPAxisType.e_edgeA), goog.exportProperty(box2d.b2EPAxisType, "e_edgeB", box2d.b2EPAxisType.e_edgeB), box2d.b2EPAxis = function() {}, box2d.b2EPAxis.prototype.type = box2d.b2EPAxisType.e_unknown, box2d.b2EPAxis.prototype.index = 0, box2d.b2EPAxis.prototype.separation = 0, box2d.b2TempPolygon = function() { this.vertices = box2d.b2Vec2.MakeArray(box2d.b2_maxPolygonVertices), this.normals = box2d.b2Vec2.MakeArray(box2d.b2_maxPolygonVertices), this.count = 0 }, box2d.b2TempPolygon.prototype.vertices = null, box2d.b2TempPolygon.prototype.normals = null, box2d.b2TempPolygon.prototype.count = 0, box2d.b2ReferenceFace = function() { this.i1 = 0, this.i2 = 0, this.v1 = new box2d.b2Vec2, this.v2 = new box2d.b2Vec2, this.normal = new box2d.b2Vec2, this.sideNormal1 = new box2d.b2Vec2, this.sideOffset1 = 0, this.sideNormal2 = new box2d.b2Vec2, this.sideOffset2 = 0 }, box2d.b2ReferenceFace.prototype.i1 = 0, box2d.b2ReferenceFace.prototype.i2 = 0, box2d.b2ReferenceFace.prototype.v1 = null, box2d.b2ReferenceFace.prototype.v2 = null, box2d.b2ReferenceFace.prototype.normal = null, box2d.b2ReferenceFace.prototype.sideNormal1 = null, box2d.b2ReferenceFace.prototype.sideOffset1 = 0, box2d.b2ReferenceFace.prototype.sideNormal2 = null, box2d.b2ReferenceFace.prototype.sideOffset2 = 0, box2d.b2EPColliderVertexType = { e_isolated: 0, e_concave: 1, e_convex: 2 }, goog.exportProperty(box2d.b2EPColliderVertexType, "e_isolated", box2d.b2EPColliderVertexType.e_isolated), goog.exportProperty(box2d.b2EPColliderVertexType, "e_concave", box2d.b2EPColliderVertexType.e_concave), goog.exportProperty(box2d.b2EPColliderVertexType, "e_convex", box2d.b2EPColliderVertexType.e_convex), box2d.b2EPCollider = function() { this.m_polygonB = new box2d.b2TempPolygon, this.m_xf = new box2d.b2Transform, this.m_centroidB = new box2d.b2Vec2, this.m_v0 = new box2d.b2Vec2, this.m_v1 = new box2d.b2Vec2, this.m_v2 = new box2d.b2Vec2, this.m_v3 = new box2d.b2Vec2, this.m_normal0 = new box2d.b2Vec2, this.m_normal1 = new box2d.b2Vec2, this.m_normal2 = new box2d.b2Vec2, this.m_normal = new box2d.b2Vec2, this.m_type1 = box2d.b2EPColliderVertexType.e_isolated, this.m_type2 = box2d.b2EPColliderVertexType.e_isolated, this.m_lowerLimit = new box2d.b2Vec2, this.m_upperLimit = new box2d.b2Vec2, this.m_radius = 0, this.m_front = !1 }, box2d.b2EPCollider.prototype.m_polygonB = null, box2d.b2EPCollider.prototype.m_xf = null, box2d.b2EPCollider.prototype.m_centroidB = null, box2d.b2EPCollider.prototype.m_v0 = null, box2d.b2EPCollider.prototype.m_v1 = null, box2d.b2EPCollider.prototype.m_v2 = null, box2d.b2EPCollider.prototype.m_v3 = null, box2d.b2EPCollider.prototype.m_normal0 = null, box2d.b2EPCollider.prototype.m_normal1 = null, box2d.b2EPCollider.prototype.m_normal2 = null, box2d.b2EPCollider.prototype.m_normal = null, box2d.b2EPCollider.prototype.m_type1 = box2d.b2EPColliderVertexType.e_isolated, box2d.b2EPCollider.prototype.m_type2 = box2d.b2EPColliderVertexType.e_isolated, box2d.b2EPCollider.prototype.m_lowerLimit = null, box2d.b2EPCollider.prototype.m_upperLimit = null, box2d.b2EPCollider.prototype.m_radius = 0, box2d.b2EPCollider.prototype.m_front = !1, box2d.b2EPCollider.prototype.Collide = function(a, b, c, d, e) { box2d.b2MulTXX(c, e, this.m_xf), box2d.b2MulXV(this.m_xf, d.m_centroid, this.m_centroidB), this.m_v0.Copy(b.m_vertex0), this.m_v1.Copy(b.m_vertex1), this.m_v2.Copy(b.m_vertex2), this.m_v3.Copy(b.m_vertex3); var f = b.m_hasVertex0, g = b.m_hasVertex3, h = box2d.b2SubVV(this.m_v2, this.m_v1, box2d.b2EPCollider.s_edge1); h.Normalize(), this.m_normal1.SetXY(h.y, -h.x); var i = box2d.b2DotVV(this.m_normal1, box2d.b2SubVV(this.m_centroidB, this.m_v1, box2d.b2Vec2.s_t0)), j = 0, k = 0, l = !1, m = !1; if (f) { var n = box2d.b2SubVV(this.m_v1, this.m_v0, box2d.b2EPCollider.s_edge0); n.Normalize(), this.m_normal0.SetXY(n.y, -n.x), l = box2d.b2CrossVV(n, h) >= 0, j = box2d.b2DotVV(this.m_normal0, box2d.b2SubVV(this.m_centroidB, this.m_v0, box2d.b2Vec2.s_t0)) } if (g) { var o = box2d.b2SubVV(this.m_v3, this.m_v2, box2d.b2EPCollider.s_edge2); o.Normalize(), this.m_normal2.SetXY(o.y, -o.x), m = box2d.b2CrossVV(h, o) > 0, k = box2d.b2DotVV(this.m_normal2, box2d.b2SubVV(this.m_centroidB, this.m_v2, box2d.b2Vec2.s_t0)) } f && g ? l && m ? (this.m_front = j >= 0 || i >= 0 || k >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal0), this.m_upperLimit.Copy(this.m_normal2)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1).SelfNeg())) : l ? (this.m_front = j >= 0 || i >= 0 && k >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal0), this.m_upperLimit.Copy(this.m_normal1)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1).SelfNeg())) : m ? (this.m_front = k >= 0 || j >= 0 && i >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal2)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal0).SelfNeg())) : (this.m_front = j >= 0 && i >= 0 && k >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal1)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(), this.m_upperLimit.Copy(this.m_normal0).SelfNeg())) : f ? l ? (this.m_front = j >= 0 || i >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal0), this.m_upperLimit.Copy(this.m_normal1).SelfNeg()) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal1).SelfNeg())) : (this.m_front = j >= 0 && i >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal1).SelfNeg()) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal0).SelfNeg())) : g ? m ? (this.m_front = i >= 0 || k >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal2)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1))) : (this.m_front = i >= 0 && k >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1))) : (this.m_front = i >= 0, this.m_front ? (this.m_normal.Copy(this.m_normal1), this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(), this.m_upperLimit.Copy(this.m_normal1).SelfNeg()) : (this.m_normal.Copy(this.m_normal1).SelfNeg(), this.m_lowerLimit.Copy(this.m_normal1), this.m_upperLimit.Copy(this.m_normal1))), this.m_polygonB.count = d.m_count; for (var p = 0, q = d.m_count; p < q; ++p) box2d.b2MulXV(this.m_xf, d.m_vertices[p], this.m_polygonB.vertices[p]), box2d.b2MulRV(this.m_xf.q, d.m_normals[p], this.m_polygonB.normals[p]); this.m_radius = 2 * box2d.b2_polygonRadius, a.pointCount = 0; var r = this.ComputeEdgeSeparation(box2d.b2EPCollider.s_edgeAxis); if (r.type !== box2d.b2EPAxisType.e_unknown && !(r.separation > this.m_radius)) { var s = this.ComputePolygonSeparation(box2d.b2EPCollider.s_polygonAxis); if (!(s.type !== box2d.b2EPAxisType.e_unknown && s.separation > this.m_radius)) { var t; t = s.type === box2d.b2EPAxisType.e_unknown ? r : s.separation > .98 * r.separation + .001 ? s : r; var u = box2d.b2EPCollider.s_ie, v = box2d.b2EPCollider.s_rf; if (t.type === box2d.b2EPAxisType.e_edgeA) { a.type = box2d.b2ManifoldType.e_faceA; for (var w = 0, x = box2d.b2DotVV(this.m_normal, this.m_polygonB.normals[0]), p = 1, q = this.m_polygonB.count; p < q; ++p) { var y = box2d.b2DotVV(this.m_normal, this.m_polygonB.normals[p]); y < x && (x = y, w = p) } var z = w, A = (z + 1) % this.m_polygonB.count, B = u[0]; B.v.Copy(this.m_polygonB.vertices[z]), B.id.cf.indexA = 0, B.id.cf.indexB = z, B.id.cf.typeA = box2d.b2ContactFeatureType.e_face, B.id.cf.typeB = box2d.b2ContactFeatureType.e_vertex; var C = u[1]; C.v.Copy(this.m_polygonB.vertices[A]), C.id.cf.indexA = 0, C.id.cf.indexB = A, C.id.cf.typeA = box2d.b2ContactFeatureType.e_face, C.id.cf.typeB = box2d.b2ContactFeatureType.e_vertex, this.m_front ? (v.i1 = 0, v.i2 = 1, v.v1.Copy(this.m_v1), v.v2.Copy(this.m_v2), v.normal.Copy(this.m_normal1)) : (v.i1 = 1, v.i2 = 0, v.v1.Copy(this.m_v2), v.v2.Copy(this.m_v1), v.normal.Copy(this.m_normal1).SelfNeg()) } else { a.type = box2d.b2ManifoldType.e_faceB; var B = u[0]; B.v.Copy(this.m_v1), B.id.cf.indexA = 0, B.id.cf.indexB = t.index, B.id.cf.typeA = box2d.b2ContactFeatureType.e_vertex, B.id.cf.typeB = box2d.b2ContactFeatureType.e_face; var C = u[1]; C.v.Copy(this.m_v2), C.id.cf.indexA = 0, C.id.cf.indexB = t.index, C.id.cf.typeA = box2d.b2ContactFeatureType.e_vertex, C.id.cf.typeB = box2d.b2ContactFeatureType.e_face, v.i1 = t.index, v.i2 = (v.i1 + 1) % this.m_polygonB.count, v.v1.Copy(this.m_polygonB.vertices[v.i1]), v.v2.Copy(this.m_polygonB.vertices[v.i2]), v.normal.Copy(this.m_polygonB.normals[v.i1]) } v.sideNormal1.SetXY(v.normal.y, -v.normal.x), v.sideNormal2.Copy(v.sideNormal1).SelfNeg(), v.sideOffset1 = box2d.b2DotVV(v.sideNormal1, v.v1), v.sideOffset2 = box2d.b2DotVV(v.sideNormal2, v.v2); var D = box2d.b2EPCollider.s_clipPoints1, E = box2d.b2EPCollider.s_clipPoints2; if (!(box2d.b2ClipSegmentToLine(D, u, v.sideNormal1, v.sideOffset1, v.i1) < box2d.b2_maxManifoldPoints || box2d.b2ClipSegmentToLine(E, D, v.sideNormal2, v.sideOffset2, v.i2) < box2d.b2_maxManifoldPoints)) { t.type === box2d.b2EPAxisType.e_edgeA ? (a.localNormal.Copy(v.normal), a.localPoint.Copy(v.v1)) : (a.localNormal.Copy(d.m_normals[v.i1]), a.localPoint.Copy(d.m_vertices[v.i1])); for (var F = 0, p = 0, q = box2d.b2_maxManifoldPoints; p < q; ++p) { if (box2d.b2DotVV(v.normal, box2d.b2SubVV(E[p].v, v.v1, box2d.b2Vec2.s_t0)) <= this.m_radius) { var G = a.points[F]; t.type === box2d.b2EPAxisType.e_edgeA ? (box2d.b2MulTXV(this.m_xf, E[p].v, G.localPoint), G.id = E[p].id) : (G.localPoint.Copy(E[p].v), G.id.cf.typeA = E[p].id.cf.typeB, G.id.cf.typeB = E[p].id.cf.typeA, G.id.cf.indexA = E[p].id.cf.indexB, G.id.cf.indexB = E[p].id.cf.indexA), ++F } } a.pointCount = F } } } }, box2d.b2EPCollider.s_edge1 = new box2d.b2Vec2, box2d.b2EPCollider.s_edge0 = new box2d.b2Vec2, box2d.b2EPCollider.s_edge2 = new box2d.b2Vec2, box2d.b2EPCollider.s_ie = box2d.b2ClipVertex.MakeArray(2), box2d.b2EPCollider.s_rf = new box2d.b2ReferenceFace, box2d.b2EPCollider.s_clipPoints1 = box2d.b2ClipVertex.MakeArray(2), box2d.b2EPCollider.s_clipPoints2 = box2d.b2ClipVertex.MakeArray(2), box2d.b2EPCollider.s_edgeAxis = new box2d.b2EPAxis, box2d.b2EPCollider.s_polygonAxis = new box2d.b2EPAxis, box2d.b2EPCollider.prototype.ComputeEdgeSeparation = function(a) { var b = a; b.type = box2d.b2EPAxisType.e_edgeA, b.index = this.m_front ? 0 : 1, b.separation = box2d.b2_maxFloat; for (var c = 0, d = this.m_polygonB.count; c < d; ++c) { var e = box2d.b2DotVV(this.m_normal, box2d.b2SubVV(this.m_polygonB.vertices[c], this.m_v1, box2d.b2Vec2.s_t0)); e < b.separation && (b.separation = e) } return b }, box2d.b2EPCollider.prototype.ComputePolygonSeparation = function(a) { var b = a; b.type = box2d.b2EPAxisType.e_unknown, b.index = -1, b.separation = -box2d.b2_maxFloat; for (var c = box2d.b2EPCollider.s_perp.SetXY(-this.m_normal.y, this.m_normal.x), d = 0, e = this.m_polygonB.count; d < e; ++d) { var f = box2d.b2NegV(this.m_polygonB.normals[d], box2d.b2EPCollider.s_n), g = box2d.b2DotVV(f, box2d.b2SubVV(this.m_polygonB.vertices[d], this.m_v1, box2d.b2Vec2.s_t0)), h = box2d.b2DotVV(f, box2d.b2SubVV(this.m_polygonB.vertices[d], this.m_v2, box2d.b2Vec2.s_t0)), i = box2d.b2Min(g, h); if (i > this.m_radius) return b.type = box2d.b2EPAxisType.e_edgeB, b.index = d, b.separation = i, b; if (box2d.b2DotVV(f, c) >= 0) { if (box2d.b2DotVV(box2d.b2SubVV(f, this.m_upperLimit, box2d.b2Vec2.s_t0), this.m_normal) < -box2d.b2_angularSlop) continue } else if (box2d.b2DotVV(box2d.b2SubVV(f, this.m_lowerLimit, box2d.b2Vec2.s_t0), this.m_normal) < -box2d.b2_angularSlop) continue; i > b.separation && (b.type = box2d.b2EPAxisType.e_edgeB, b.index = d, b.separation = i) } return b }, box2d.b2EPCollider.s_n = new box2d.b2Vec2, box2d.b2EPCollider.s_perp = new box2d.b2Vec2, box2d.b2CollideEdgeAndPolygon = function(a, b, c, d, e) { box2d.b2CollideEdgeAndPolygon.s_collider.Collide(a, b, c, d, e) }, box2d.b2CollideEdgeAndPolygon.s_collider = new box2d.b2EPCollider, goog.provide("box2d.b2EdgeShape"), goog.require("box2d.b2Shape"), box2d.b2EdgeShape = function() { goog.base(this, box2d.b2ShapeType.e_edgeShape, box2d.b2_polygonRadius), this.m_vertex1 = new box2d.b2Vec2, this.m_vertex2 = new box2d.b2Vec2, this.m_vertex0 = new box2d.b2Vec2, this.m_vertex3 = new box2d.b2Vec2 }, goog.inherits(box2d.b2EdgeShape, box2d.b2Shape), box2d.b2EdgeShape.prototype.m_vertex1 = null, box2d.b2EdgeShape.prototype.m_vertex2 = null, box2d.b2EdgeShape.prototype.m_vertex0 = null, box2d.b2EdgeShape.prototype.m_vertex3 = null, box2d.b2EdgeShape.prototype.m_hasVertex0 = !1, box2d.b2EdgeShape.prototype.m_hasVertex3 = !1, box2d.b2EdgeShape.prototype.Set = function(a, b) { return this.m_vertex1.Copy(a), this.m_vertex2.Copy(b), this.m_hasVertex0 = !1, this.m_hasVertex3 = !1, this }, box2d.b2EdgeShape.prototype.SetAsEdge = box2d.b2EdgeShape.prototype.Set, box2d.b2EdgeShape.prototype.Clone = function() { return (new box2d.b2EdgeShape).Copy(this) }, box2d.b2EdgeShape.prototype.Copy = function(a) { return goog.base(this, "Copy", a), box2d.ENABLE_ASSERTS && box2d.b2Assert(a instanceof box2d.b2EdgeShape), this.m_vertex1.Copy(a.m_vertex1), this.m_vertex2.Copy(a.m_vertex2), this.m_vertex0.Copy(a.m_vertex0), this.m_vertex3.Copy(a.m_vertex3), this.m_hasVertex0 = a.m_hasVertex0, this.m_hasVertex3 = a.m_hasVertex3, this }, box2d.b2EdgeShape.prototype.GetChildCount = function() { return 1 }, box2d.b2EdgeShape.prototype.TestPoint = function(a, b) { return !1 }, box2d.b2EdgeShape.prototype.RayCast = function(a, b, c, d) { var e = box2d.b2MulTXV(c, b.p1, box2d.b2EdgeShape.prototype.RayCast.s_p1), f = box2d.b2MulTXV(c, b.p2, box2d.b2EdgeShape.prototype.RayCast.s_p2), g = box2d.b2SubVV(f, e, box2d.b2EdgeShape.prototype.RayCast.s_d), h = this.m_vertex1, i = this.m_vertex2, j = box2d.b2SubVV(i, h, box2d.b2EdgeShape.prototype.RayCast.s_e), k = a.normal.SetXY(j.y, -j.x).SelfNormalize(), l = box2d.b2DotVV(k, box2d.b2SubVV(h, e, box2d.b2Vec2.s_t0)), m = box2d.b2DotVV(k, g); if (0 === m) return !1; var n = l / m; if (n < 0 || b.maxFraction < n) return !1; var o = box2d.b2AddVMulSV(e, n, g, box2d.b2EdgeShape.prototype.RayCast.s_q), p = box2d.b2SubVV(i, h, box2d.b2EdgeShape.prototype.RayCast.s_r), q = box2d.b2DotVV(p, p); if (0 === q) return !1; var r = box2d.b2DotVV(box2d.b2SubVV(o, h, box2d.b2Vec2.s_t0), p) / q; return !(r < 0 || 1 < r) && (a.fraction = n, box2d.b2MulRV(c.q, a.normal, a.normal), l > 0 && a.normal.SelfNeg(), !0) }, box2d.b2EdgeShape.prototype.RayCast.s_p1 = new box2d.b2Vec2, box2d.b2EdgeShape.prototype.RayCast.s_p2 = new box2d.b2Vec2, box2d.b2EdgeShape.prototype.RayCast.s_d = new box2d.b2Vec2, box2d.b2EdgeShape.prototype.RayCast.s_e = new box2d.b2Vec2, box2d.b2EdgeShape.prototype.RayCast.s_q = new box2d.b2Vec2, box2d.b2EdgeShape.prototype.RayCast.s_r = new box2d.b2Vec2, box2d.b2EdgeShape.prototype.ComputeAABB = function(a, b, c) { var d = box2d.b2MulXV(b, this.m_vertex1, box2d.b2EdgeShape.prototype.ComputeAABB.s_v1), e = box2d.b2MulXV(b, this.m_vertex2, box2d.b2EdgeShape.prototype.ComputeAABB.s_v2); box2d.b2MinV(d, e, a.lowerBound), box2d.b2MaxV(d, e, a.upperBound); var f = this.m_radius; a.lowerBound.SelfSubXY(f, f), a.upperBound.SelfAddXY(f, f) }, box2d.b2EdgeShape.prototype.ComputeAABB.s_v1 = new box2d.b2Vec2, box2d.b2EdgeShape.prototype.ComputeAABB.s_v2 = new box2d.b2Vec2, box2d.b2EdgeShape.prototype.ComputeMass = function(a, b) { a.mass = 0, box2d.b2MidVV(this.m_vertex1, this.m_vertex2, a.center), a.I = 0 }, box2d.b2EdgeShape.prototype.SetupDistanceProxy = function(a, b) { a.m_vertices = new Array(2), a.m_vertices[0] = this.m_vertex1, a.m_vertices[1] = this.m_vertex2, a.m_count = 2, a.m_radius = this.m_radius }, box2d.b2EdgeShape.prototype.ComputeSubmergedArea = function(a, b, c, d) { return d.SetZero(), 0 }, box2d.b2EdgeShape.prototype.Dump = function() { box2d.b2Log(" /*box2d.b2EdgeShape*/ var shape = new box2d.b2EdgeShape();\n"), box2d.b2Log(" shape.m_radius = %.15f;\n", this.m_radius), box2d.b2Log(" shape.m_vertex0.SetXY(%.15f, %.15f);\n", this.m_vertex0.x, this.m_vertex0.y), box2d.b2Log(" shape.m_vertex1.SetXY(%.15f, %.15f);\n", this.m_vertex1.x, this.m_vertex1.y), box2d.b2Log(" shape.m_vertex2.SetXY(%.15f, %.15f);\n", this.m_vertex2.x, this.m_vertex2.y), box2d.b2Log(" shape.m_vertex3.SetXY(%.15f, %.15f);\n", this.m_vertex3.x, this.m_vertex3.y), box2d.b2Log(" shape.m_hasVertex0 = %s;\n", this.m_hasVertex0), box2d.b2Log(" shape.m_hasVertex3 = %s;\n", this.m_hasVertex3) }, goog.provide("box2d.b2ChainShape"), goog.require("box2d.b2Shape"), goog.require("box2d.b2EdgeShape"), box2d.b2ChainShape = function() { goog.base(this, box2d.b2ShapeType.e_chainShape, box2d.b2_polygonRadius), this.m_prevVertex = new box2d.b2Vec2, this.m_nextVertex = new box2d.b2Vec2 }, goog.inherits(box2d.b2ChainShape, box2d.b2Shape), box2d.b2ChainShape.prototype.m_vertices = null, box2d.b2ChainShape.prototype.m_count = 0, box2d.b2ChainShape.prototype.m_prevVertex = null, box2d.b2ChainShape.prototype.m_nextVertex = null, box2d.b2ChainShape.prototype.m_hasPrevVertex = !1, box2d.b2ChainShape.prototype.m_hasNextVertex = !1, box2d.b2ChainShape.prototype.CreateLoop = function(a, b) { if (b = b || a.length, box2d.ENABLE_ASSERTS && box2d.b2Assert(null === this.m_vertices && 0 === this.m_count), box2d.ENABLE_ASSERTS && box2d.b2Assert(b >= 3), box2d.ENABLE_ASSERTS) for (var c = 1; c < b; ++c) { var d = a[c - 1], e = a[c]; box2d.b2Assert(box2d.b2DistanceSquaredVV(d, e) > box2d.b2_linearSlop * box2d.b2_linearSlop) } this.m_count = b + 1, this.m_vertices = box2d.b2Vec2.MakeArray(this.m_count); for (var c = 0; c < b; ++c) this.m_vertices[c].Copy(a[c]); return this.m_vertices[b].Copy(this.m_vertices[0]), this.m_prevVertex.Copy(this.m_vertices[this.m_count - 2]), this.m_nextVertex.Copy(this.m_vertices[1]), this.m_hasPrevVertex = !0, this.m_hasNextVertex = !0, this }, box2d.b2ChainShape.prototype.CreateChain = function(a, b) { if (b = b || a.length, box2d.ENABLE_ASSERTS && box2d.b2Assert(null === this.m_vertices && 0 === this.m_count), box2d.ENABLE_ASSERTS && box2d.b2Assert(b >= 2), box2d.ENABLE_ASSERTS) for (var c = 1; c < b; ++c) { var d = a[c - 1], e = a[c]; box2d.b2Assert(box2d.b2DistanceSquaredVV(d, e) > box2d.b2_linearSlop * box2d.b2_linearSlop) } this.m_count = b, this.m_vertices = box2d.b2Vec2.MakeArray(b); for (var c = 0; c < b; ++c) this.m_vertices[c].Copy(a[c]); return this.m_hasPrevVertex = !1, this.m_hasNextVertex = !1, this.m_prevVertex.SetZero(), this.m_nextVertex.SetZero(), this }, box2d.b2ChainShape.prototype.SetPrevVertex = function(a) { return this.m_prevVertex.Copy(a), this.m_hasPrevVertex = !0, this }, box2d.b2ChainShape.prototype.SetNextVertex = function(a) { return this.m_nextVertex.Copy(a), this.m_hasNextVertex = !0, this }, box2d.b2ChainShape.prototype.Clone = function() { return (new box2d.b2ChainShape).Copy(this) }, box2d.b2ChainShape.prototype.Copy = function(a) { return goog.base(this, "Copy", a), box2d.ENABLE_ASSERTS && box2d.b2Assert(a instanceof box2d.b2ChainShape), this.CreateChain(a.m_vertices, a.m_count), this.m_prevVertex.Copy(a.m_prevVertex), this.m_nextVertex.Copy(a.m_nextVertex), this.m_hasPrevVertex = a.m_hasPrevVertex, this.m_hasNextVertex = a.m_hasNextVertex, this }, box2d.b2ChainShape.prototype.GetChildCount = function() { return this.m_count - 1 }, box2d.b2ChainShape.prototype.GetChildEdge = function(a, b) { box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= b && b < this.m_count - 1), a.m_type = box2d.b2ShapeType.e_edgeShape, a.m_radius = this.m_radius, a.m_vertex1.Copy(this.m_vertices[b]), a.m_vertex2.Copy(this.m_vertices[b + 1]), b > 0 ? (a.m_vertex0.Copy(this.m_vertices[b - 1]), a.m_hasVertex0 = !0) : (a.m_vertex0.Copy(this.m_prevVertex), a.m_hasVertex0 = this.m_hasPrevVertex), b < this.m_count - 2 ? (a.m_vertex3.Copy(this.m_vertices[b + 2]), a.m_hasVertex3 = !0) : (a.m_vertex3.Copy(this.m_nextVertex), a.m_hasVertex3 = this.m_hasNextVertex) }, box2d.b2ChainShape.prototype.TestPoint = function(a, b) { return !1 }, box2d.b2ChainShape.prototype.RayCast = function(a, b, c, d) { box2d.ENABLE_ASSERTS && box2d.b2Assert(d < this.m_count); var e = box2d.b2ChainShape.s_edgeShape; return e.m_vertex1.Copy(this.m_vertices[d]), e.m_vertex2.Copy(this.m_vertices[(d + 1) % this.m_count]), e.RayCast(a, b, c, 0) }, box2d.b2ChainShape.s_edgeShape = new box2d.b2EdgeShape, box2d.b2ChainShape.prototype.ComputeAABB = function(a, b, c) { box2d.ENABLE_ASSERTS && box2d.b2Assert(c < this.m_count); var d = this.m_vertices[c], e = this.m_vertices[(c + 1) % this.m_count], f = box2d.b2MulXV(b, d, box2d.b2ChainShape.prototype.ComputeAABB.s_v1), g = box2d.b2MulXV(b, e, box2d.b2ChainShape.prototype.ComputeAABB.s_v2); box2d.b2MinV(f, g, a.lowerBound), box2d.b2MaxV(f, g, a.upperBound) }, box2d.b2ChainShape.prototype.ComputeAABB.s_v1 = new box2d.b2Vec2, box2d.b2ChainShape.prototype.ComputeAABB.s_v2 = new box2d.b2Vec2, box2d.b2ChainShape.prototype.ComputeMass = function(a, b) { a.mass = 0, a.center.SetZero(), a.I = 0 }, box2d.b2ChainShape.prototype.SetupDistanceProxy = function(a, b) { box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= b && b < this.m_count), a.m_buffer[0].Copy(this.m_vertices[b]), b + 1 < this.m_count ? a.m_buffer[1].Copy(this.m_vertices[b + 1]) : a.m_buffer[1].Copy(this.m_vertices[0]), a.m_vertices = a.m_buffer, a.m_count = 2, a.m_radius = this.m_radius }, box2d.b2ChainShape.prototype.ComputeSubmergedArea = function(a, b, c, d) { return d.SetZero(), 0 }, box2d.b2ChainShape.prototype.Dump = function() { box2d.b2Log(" /*box2d.b2ChainShape*/ var shape = new box2d.b2ChainShape();\n"), box2d.b2Log(" /*box2d.b2Vec2[]*/ var vs = box2d.b2Vec2.MakeArray(%d);\n", box2d.b2_maxPolygonVertices); for (var a = 0; a < this.m_count; ++a) box2d.b2Log(" vs[%d].SetXY(%.15f, %.15f);\n", a, this.m_vertices[a].x, this.m_vertices[a].y); box2d.b2Log(" shape.CreateChain(vs, %d);\n", this.m_count), box2d.b2Log(" shape.m_prevVertex.SetXY(%.15f, %.15f);\n", this.m_prevVertex.x, this.m_prevVertex.y), box2d.b2Log(" shape.m_nextVertex.SetXY(%.15f, %.15f);\n", this.m_nextVertex.x, this.m_nextVertex.y), box2d.b2Log(" shape.m_hasPrevVertex = %s;\n", this.m_hasPrevVertex ? "true" : "false"), box2d.b2Log(" shape.m_hasNextVertex = %s;\n", this.m_hasNextVertex ? "true" : "false") }, goog.provide("box2d.b2ChainAndPolygonContact"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Contact"), goog.require("box2d.b2CollideEdge"), goog.require("box2d.b2ChainShape"), goog.require("box2d.b2PolygonShape"), box2d.b2ChainAndPolygonContact = function() { goog.base(this) }, goog.inherits(box2d.b2ChainAndPolygonContact, box2d.b2Contact), box2d.b2ChainAndPolygonContact.Create = function(a) { return new box2d.b2ChainAndPolygonContact }, box2d.b2ChainAndPolygonContact.Destroy = function(a, b) {}, box2d.b2ChainAndPolygonContact.prototype.Reset = function(a, b, c, d) { goog.base(this, "Reset", a, b, c, d), box2d.ENABLE_ASSERTS && box2d.b2Assert(a.GetType() === box2d.b2ShapeType.e_chainShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(c.GetType() === box2d.b2ShapeType.e_polygonShape) }, box2d.b2ChainAndPolygonContact.prototype.Evaluate = function(a, b, c) { var d = this.m_fixtureA.GetShape(), e = this.m_fixtureB.GetShape(); box2d.ENABLE_ASSERTS && box2d.b2Assert(d instanceof box2d.b2ChainShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(e instanceof box2d.b2PolygonShape); var f = d instanceof box2d.b2ChainShape ? d : null, g = box2d.b2ChainAndPolygonContact.prototype.Evaluate.s_edge; f.GetChildEdge(g, this.m_indexA), box2d.b2CollideEdgeAndPolygon(a, g, b, e instanceof box2d.b2PolygonShape ? e : null, c) }; box2d.b2ChainAndPolygonContact.prototype.Evaluate.s_edge = new box2d.b2EdgeShape, goog.provide("box2d.b2CollidePolygon"), goog.require("box2d.b2Collision"), box2d.b2FindMaxSeparation = function(a, b, c, d, e) { for (var f = b.m_count, g = d.m_count, h = b.m_normals, i = b.m_vertices, j = d.m_vertices, k = box2d.b2MulTXX(e, c, box2d.b2FindMaxSeparation.s_xf), l = 0, m = -box2d.b2_maxFloat, n = 0; n < f; ++n) { for (var o = box2d.b2MulRV(k.q, h[n], box2d.b2FindMaxSeparation.s_n), p = box2d.b2MulXV(k, i[n], box2d.b2FindMaxSeparation.s_v1), q = box2d.b2_maxFloat, r = 0; r < g; ++r) { var s = box2d.b2DotVV(o, box2d.b2SubVV(j[r], p, box2d.b2Vec2.s_t0)); s < q && (q = s) } q > m && (m = q, l = n) } return a[0] = l, m }, box2d.b2FindMaxSeparation.s_xf = new box2d.b2Transform, box2d.b2FindMaxSeparation.s_n = new box2d.b2Vec2, box2d.b2FindMaxSeparation.s_v1 = new box2d.b2Vec2, box2d.b2FindIncidentEdge = function(a, b, c, d, e, f) { var g = b.m_count, h = b.m_normals, i = e.m_count, j = e.m_vertices, k = e.m_normals; box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= d && d < g); for (var l = box2d.b2MulTRV(f.q, box2d.b2MulRV(c.q, h[d], box2d.b2Vec2.s_t0), box2d.b2FindIncidentEdge.s_normal1), m = 0, n = box2d.b2_maxFloat, o = 0; o < i; ++o) { var p = box2d.b2DotVV(l, k[o]); p < n && (n = p, m = o) } var q = m, r = (q + 1) % i, s = a[0]; box2d.b2MulXV(f, j[q], s.v); var t = s.id.cf; t.indexA = d, t.indexB = q, t.typeA = box2d.b2ContactFeatureType.e_face, t.typeB = box2d.b2ContactFeatureType.e_vertex; var u = a[1]; box2d.b2MulXV(f, j[r], u.v); var v = u.id.cf; v.indexA = d, v.indexB = r, v.typeA = box2d.b2ContactFeatureType.e_face, v.typeB = box2d.b2ContactFeatureType.e_vertex }, box2d.b2FindIncidentEdge.s_normal1 = new box2d.b2Vec2, box2d.b2CollidePolygons = function(a, b, c, d, e) { a.pointCount = 0; var f = b.m_radius + d.m_radius, g = box2d.b2CollidePolygons.s_edgeA; g[0] = 0; var h = box2d.b2FindMaxSeparation(g, b, c, d, e); if (!(h > f)) { var i = box2d.b2CollidePolygons.s_edgeB; i[0] = 0; var j = box2d.b2FindMaxSeparation(i, d, e, b, c); if (!(j > f)) { var k, l, m, n, o = 0, p = 0; j > .98 * h + .001 ? (k = d, l = b, m = e, n = c, o = i[0], a.type = box2d.b2ManifoldType.e_faceB, p = 1) : (k = b, l = d, m = c, n = e, o = g[0], a.type = box2d.b2ManifoldType.e_faceA, p = 0); var q = box2d.b2CollidePolygons.s_incidentEdge; box2d.b2FindIncidentEdge(q, k, m, o, l, n); var r = k.m_count, s = k.m_vertices, t = o, u = (o + 1) % r, v = s[t], w = s[u], x = box2d.b2SubVV(w, v, box2d.b2CollidePolygons.s_localTangent); x.Normalize(); var y = box2d.b2CrossVOne(x, box2d.b2CollidePolygons.s_localNormal), z = box2d.b2MidVV(v, w, box2d.b2CollidePolygons.s_planePoint), A = box2d.b2MulRV(m.q, x, box2d.b2CollidePolygons.s_tangent), B = box2d.b2CrossVOne(A, box2d.b2CollidePolygons.s_normal), C = box2d.b2MulXV(m, v, box2d.b2CollidePolygons.s_v11), D = box2d.b2MulXV(m, w, box2d.b2CollidePolygons.s_v12), E = box2d.b2DotVV(B, C), F = -box2d.b2DotVV(A, C) + f, G = box2d.b2DotVV(A, D) + f, H = box2d.b2CollidePolygons.s_clipPoints1, I = box2d.b2CollidePolygons.s_clipPoints2, J = box2d.b2NegV(A, box2d.b2CollidePolygons.s_ntangent); if (!(box2d.b2ClipSegmentToLine(H, q, J, F, t) < 2 || box2d.b2ClipSegmentToLine(I, H, A, G, u) < 2)) { a.localNormal.Copy(y), a.localPoint.Copy(z); for (var K = 0, L = 0; L < box2d.b2_maxManifoldPoints; ++L) { var M = I[L]; if (box2d.b2DotVV(B, M.v) - E <= f) { var N = a.points[K]; if (box2d.b2MulTXV(n, M.v, N.localPoint), N.id.Copy(M.id), p) { var O = N.id.cf; N.id.cf.indexA = O.indexB, N.id.cf.indexB = O.indexA, N.id.cf.typeA = O.typeB, N.id.cf.typeB = O.typeA }++K } } a.pointCount = K } } } }, box2d.b2CollidePolygons.s_incidentEdge = box2d.b2ClipVertex.MakeArray(2), box2d.b2CollidePolygons.s_clipPoints1 = box2d.b2ClipVertex.MakeArray(2), box2d.b2CollidePolygons.s_clipPoints2 = box2d.b2ClipVertex.MakeArray(2), box2d.b2CollidePolygons.s_edgeA = box2d.b2MakeNumberArray(1), box2d.b2CollidePolygons.s_edgeB = box2d.b2MakeNumberArray(1), box2d.b2CollidePolygons.s_localTangent = new box2d.b2Vec2, box2d.b2CollidePolygons.s_localNormal = new box2d.b2Vec2, box2d.b2CollidePolygons.s_planePoint = new box2d.b2Vec2, box2d.b2CollidePolygons.s_normal = new box2d.b2Vec2, box2d.b2CollidePolygons.s_tangent = new box2d.b2Vec2, box2d.b2CollidePolygons.s_ntangent = new box2d.b2Vec2, box2d.b2CollidePolygons.s_v11 = new box2d.b2Vec2, box2d.b2CollidePolygons.s_v12 = new box2d.b2Vec2, goog.provide("box2d.b2PolygonContact"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Contact"), goog.require("box2d.b2CollidePolygon"), box2d.b2PolygonContact = function() { goog.base(this) }, goog.inherits(box2d.b2PolygonContact, box2d.b2Contact), box2d.b2PolygonContact.Create = function(a) { return new box2d.b2PolygonContact }, box2d.b2PolygonContact.Destroy = function(a, b) {}, box2d.b2PolygonContact.prototype.Reset = function(a, b, c, d) { goog.base(this, "Reset", a, b, c, d) }, box2d.b2PolygonContact.prototype.Evaluate = function(a, b, c) { var d = this.m_fixtureA.GetShape(), e = this.m_fixtureB.GetShape(); box2d.ENABLE_ASSERTS && box2d.b2Assert(d instanceof box2d.b2PolygonShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(e instanceof box2d.b2PolygonShape), box2d.b2CollidePolygons(a, d instanceof box2d.b2PolygonShape ? d : null, b, e instanceof box2d.b2PolygonShape ? e : null, c) }, goog.provide("box2d.b2CollideCircle"), goog.require("box2d.b2Collision"), box2d.b2CollideCircles = function(a, b, c, d, e) { a.pointCount = 0; var f = box2d.b2MulXV(c, b.m_p, box2d.b2CollideCircles.s_pA), g = box2d.b2MulXV(e, d.m_p, box2d.b2CollideCircles.s_pB), h = box2d.b2DistanceSquaredVV(f, g), i = b.m_radius + d.m_radius; h > i * i || (a.type = box2d.b2ManifoldType.e_circles, a.localPoint.Copy(b.m_p), a.localNormal.SetZero(), a.pointCount = 1, a.points[0].localPoint.Copy(d.m_p), a.points[0].id.key = 0) }, box2d.b2CollideCircles.s_pA = new box2d.b2Vec2, box2d.b2CollideCircles.s_pB = new box2d.b2Vec2, box2d.b2CollidePolygonAndCircle = function(a, b, c, d, e) { a.pointCount = 0; for (var f = box2d.b2MulXV(e, d.m_p, box2d.b2CollidePolygonAndCircle.s_c), g = box2d.b2MulTXV(c, f, box2d.b2CollidePolygonAndCircle.s_cLocal), h = 0, i = -box2d.b2_maxFloat, j = b.m_radius + d.m_radius, k = b.m_count, l = b.m_vertices, m = b.m_normals, n = 0; n < k; ++n) { var o = box2d.b2DotVV(m[n], box2d.b2SubVV(g, l[n], box2d.b2Vec2.s_t0)); if (o > j) return; o > i && (i = o, h = n) } var p = h, q = (p + 1) % k, r = l[p], s = l[q]; if (i < box2d.b2_epsilon) return a.pointCount = 1, a.type = box2d.b2ManifoldType.e_faceA, a.localNormal.Copy(m[h]), box2d.b2MidVV(r, s, a.localPoint), a.points[0].localPoint.Copy(d.m_p), void(a.points[0].id.key = 0); var t = box2d.b2DotVV(box2d.b2SubVV(g, r, box2d.b2Vec2.s_t0), box2d.b2SubVV(s, r, box2d.b2Vec2.s_t1)), u = box2d.b2DotVV(box2d.b2SubVV(g, s, box2d.b2Vec2.s_t0), box2d.b2SubVV(r, s, box2d.b2Vec2.s_t1)); if (t <= 0) { if (box2d.b2DistanceSquaredVV(g, r) > j * j) return; a.pointCount = 1, a.type = box2d.b2ManifoldType.e_faceA, box2d.b2SubVV(g, r, a.localNormal).SelfNormalize(), a.localPoint.Copy(r), a.points[0].localPoint.Copy(d.m_p), a.points[0].id.key = 0 } else if (u <= 0) { if (box2d.b2DistanceSquaredVV(g, s) > j * j) return; a.pointCount = 1, a.type = box2d.b2ManifoldType.e_faceA, box2d.b2SubVV(g, s, a.localNormal).SelfNormalize(), a.localPoint.Copy(s), a.points[0].localPoint.Copy(d.m_p), a.points[0].id.key = 0 } else { var v = box2d.b2MidVV(r, s, box2d.b2CollidePolygonAndCircle.s_faceCenter); if ((i = box2d.b2DotVV(box2d.b2SubVV(g, v, box2d.b2Vec2.s_t1), m[p])) > j) return; a.pointCount = 1, a.type = box2d.b2ManifoldType.e_faceA, a.localNormal.Copy(m[p]).SelfNormalize(), a.localPoint.Copy(v), a.points[0].localPoint.Copy(d.m_p), a.points[0].id.key = 0 } }, box2d.b2CollidePolygonAndCircle.s_c = new box2d.b2Vec2, box2d.b2CollidePolygonAndCircle.s_cLocal = new box2d.b2Vec2, box2d.b2CollidePolygonAndCircle.s_faceCenter = new box2d.b2Vec2, goog.provide("box2d.b2CircleContact"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Contact"), goog.require("box2d.b2CollideCircle"), box2d.b2CircleContact = function() { goog.base(this) }, goog.inherits(box2d.b2CircleContact, box2d.b2Contact), box2d.b2CircleContact.Create = function(a) { return new box2d.b2CircleContact }, box2d.b2CircleContact.Destroy = function(a, b) {}, box2d.b2CircleContact.prototype.Reset = function(a, b, c, d) { goog.base(this, "Reset", a, b, c, d) }, box2d.b2CircleContact.prototype.Evaluate = function(a, b, c) { var d = this.m_fixtureA.GetShape(), e = this.m_fixtureB.GetShape(); box2d.ENABLE_ASSERTS && box2d.b2Assert(d instanceof box2d.b2CircleShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(e instanceof box2d.b2CircleShape), box2d.b2CollideCircles(a, d instanceof box2d.b2CircleShape ? d : null, b, e instanceof box2d.b2CircleShape ? e : null, c) }, goog.provide("box2d.b2ChainAndCircleContact"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Contact"), goog.require("box2d.b2CollideEdge"), box2d.b2ChainAndCircleContact = function() { goog.base(this) }, goog.inherits(box2d.b2ChainAndCircleContact, box2d.b2Contact), box2d.b2ChainAndCircleContact.Create = function(a) { return new box2d.b2ChainAndCircleContact }, box2d.b2ChainAndCircleContact.Destroy = function(a, b) {}, box2d.b2ChainAndCircleContact.prototype.Reset = function(a, b, c, d) { goog.base(this, "Reset", a, b, c, d), box2d.ENABLE_ASSERTS && box2d.b2Assert(a.GetType() === box2d.b2ShapeType.e_chainShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(c.GetType() === box2d.b2ShapeType.e_circleShape) }, box2d.b2ChainAndCircleContact.prototype.Evaluate = function(a, b, c) { var d = this.m_fixtureA.GetShape(), e = this.m_fixtureB.GetShape(); box2d.ENABLE_ASSERTS && box2d.b2Assert(d instanceof box2d.b2ChainShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(e instanceof box2d.b2CircleShape); var f = d instanceof box2d.b2ChainShape ? d : null, g = box2d.b2ChainAndCircleContact.prototype.Evaluate.s_edge; f.GetChildEdge(g, this.m_indexA), box2d.b2CollideEdgeAndCircle(a, g, b, e instanceof box2d.b2CircleShape ? e : null, c) }, box2d.b2ChainAndCircleContact.prototype.Evaluate.s_edge = new box2d.b2EdgeShape, goog.provide("box2d.b2EdgeAndCircleContact"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Contact"), goog.require("box2d.b2CollideEdge"), box2d.b2EdgeAndCircleContact = function() { goog.base(this) }, goog.inherits(box2d.b2EdgeAndCircleContact, box2d.b2Contact), box2d.b2EdgeAndCircleContact.Create = function(a) { return new box2d.b2EdgeAndCircleContact }, box2d.b2EdgeAndCircleContact.Destroy = function(a, b) {}, box2d.b2EdgeAndCircleContact.prototype.Reset = function(a, b, c, d) { goog.base(this, "Reset", a, b, c, d), box2d.ENABLE_ASSERTS && box2d.b2Assert(a.GetType() === box2d.b2ShapeType.e_edgeShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(c.GetType() === box2d.b2ShapeType.e_circleShape) }, box2d.b2EdgeAndCircleContact.prototype.Evaluate = function(a, b, c) { var d = this.m_fixtureA.GetShape(), e = this.m_fixtureB.GetShape(); box2d.ENABLE_ASSERTS && box2d.b2Assert(d instanceof box2d.b2EdgeShape), box2d.ENABLE_ASSERTS && box2d.b2Assert(e instanceof box2d.b2CircleShape), box2d.b2CollideEdgeAndCircle(a, d instanceof box2d.b2EdgeShape ? d : null, b, e instanceof box2d.b2CircleShape ? e : null, c) }, goog.provide("box2d.b2ContactSolver"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Math"), goog.require("box2d.b2Collision"), goog.require("box2d.b2CircleContact"), goog.require("box2d.b2PolygonAndCircleContact"), goog.require("box2d.b2PolygonContact"), goog.require("box2d.b2EdgeAndCircleContact"), goog.require("box2d.b2EdgeAndPolygonContact"), goog.require("box2d.b2ChainAndCircleContact"), goog.require("box2d.b2ChainAndPolygonContact"), box2d.b2VelocityConstraintPoint = function() { this.rA = new box2d.b2Vec2, this.rB = new box2d.b2Vec2 }, box2d.b2VelocityConstraintPoint.prototype.rA = null, box2d.b2VelocityConstraintPoint.prototype.rB = null, box2d.b2VelocityConstraintPoint.prototype.normalImpulse = 0, box2d.b2VelocityConstraintPoint.prototype.tangentImpulse = 0, box2d.b2VelocityConstraintPoint.prototype.normalMass = 0, box2d.b2VelocityConstraintPoint.prototype.tangentMass = 0, box2d.b2VelocityConstraintPoint.prototype.velocityBias = 0, box2d.b2VelocityConstraintPoint.MakeArray = function(a) { return box2d.b2MakeArray(a, function(a) { return new box2d.b2VelocityConstraintPoint }) }, box2d.b2ContactVelocityConstraint = function() { this.points = box2d.b2VelocityConstraintPoint.MakeArray(box2d.b2_maxManifoldPoints), this.normal = new box2d.b2Vec2, this.tangent = new box2d.b2Vec2, this.normalMass = new box2d.b2Mat22, this.K = new box2d.b2Mat22 }, box2d.b2ContactVelocityConstraint.prototype.points = null, box2d.b2ContactVelocityConstraint.prototype.normal = null, box2d.b2ContactVelocityConstraint.prototype.tangent = null, box2d.b2ContactVelocityConstraint.prototype.normalMass = null, box2d.b2ContactVelocityConstraint.prototype.K = null, box2d.b2ContactVelocityConstraint.prototype.indexA = 0, box2d.b2ContactVelocityConstraint.prototype.indexB = 0, box2d.b2ContactVelocityConstraint.prototype.invMassA = 0, box2d.b2ContactVelocityConstraint.prototype.invMassB = 0, box2d.b2ContactVelocityConstraint.prototype.invIA = 0, box2d.b2ContactVelocityConstraint.prototype.invIB = 0, box2d.b2ContactVelocityConstraint.prototype.friction = 0, box2d.b2ContactVelocityConstraint.prototype.restitution = 0, box2d.b2ContactVelocityConstraint.prototype.tangentSpeed = 0, box2d.b2ContactVelocityConstraint.prototype.pointCount = 0, box2d.b2ContactVelocityConstraint.prototype.contactIndex = 0, box2d.b2ContactVelocityConstraint.MakeArray = function(a) { return box2d.b2MakeArray(a, function(a) { return new box2d.b2ContactVelocityConstraint }) }, box2d.b2ContactPositionConstraint = function() { this.localPoints = box2d.b2Vec2.MakeArray(box2d.b2_maxManifoldPoints), this.localNormal = new box2d.b2Vec2, this.localPoint = new box2d.b2Vec2, this.localCenterA = new box2d.b2Vec2, this.localCenterB = new box2d.b2Vec2 }, box2d.b2ContactPositionConstraint.prototype.localPoints = null, box2d.b2ContactPositionConstraint.prototype.localNormal = null, box2d.b2ContactPositionConstraint.prototype.localPoint = null, box2d.b2ContactPositionConstraint.prototype.indexA = 0, box2d.b2ContactPositionConstraint.prototype.indexB = 0, box2d.b2ContactPositionConstraint.prototype.invMassA = 0, box2d.b2ContactPositionConstraint.prototype.invMassB = 0, box2d.b2ContactPositionConstraint.prototype.localCenterA = null, box2d.b2ContactPositionConstraint.prototype.localCenterB = null, box2d.b2ContactPositionConstraint.prototype.invIA = 0, box2d.b2ContactPositionConstraint.prototype.invIB = 0, box2d.b2ContactPositionConstraint.prototype.type = box2d.b2ManifoldType.e_unknown, box2d.b2ContactPositionConstraint.prototype.radiusA = 0, box2d.b2ContactPositionConstraint.prototype.radiusB = 0, box2d.b2ContactPositionConstraint.prototype.pointCount = 0, box2d.b2ContactPositionConstraint.MakeArray = function(a) { return box2d.b2MakeArray(a, function(a) { return new box2d.b2ContactPositionConstraint }) }, box2d.b2ContactSolverDef = function() { this.step = new box2d.b2TimeStep }, box2d.b2ContactSolverDef.prototype.step = null, box2d.b2ContactSolverDef.prototype.contacts = null, box2d.b2ContactSolverDef.prototype.count = 0, box2d.b2ContactSolverDef.prototype.positions = null, box2d.b2ContactSolverDef.prototype.velocities = null, box2d.b2ContactSolverDef.prototype.allocator = null, box2d.b2ContactSolver = function() { this.m_step = new box2d.b2TimeStep, this.m_positionConstraints = box2d.b2ContactPositionConstraint.MakeArray(1024), this.m_velocityConstraints = box2d.b2ContactVelocityConstraint.MakeArray(1024) }, box2d.b2ContactSolver.prototype.m_step = null, box2d.b2ContactSolver.prototype.m_positions = null, box2d.b2ContactSolver.prototype.m_velocities = null, box2d.b2ContactSolver.prototype.m_allocator = null, box2d.b2ContactSolver.prototype.m_positionConstraints = null, box2d.b2ContactSolver.prototype.m_velocityConstraints = null, box2d.b2ContactSolver.prototype.m_contacts = null, box2d.b2ContactSolver.prototype.m_count = 0, box2d.b2ContactSolver.prototype.Initialize = function(a) { if (this.m_step.Copy(a.step), this.m_allocator = a.allocator, this.m_count = a.count, this.m_positionConstraints.length < this.m_count) { var b = box2d.b2Max(2 * this.m_positionConstraints.length, this.m_count); for (box2d.DEBUG && window.console.log("box2d.b2ContactSolver.m_positionConstraints: " + b); this.m_positionConstraints.length < b;) this.m_positionConstraints[this.m_positionConstraints.length] = new box2d.b2ContactPositionConstraint } if (this.m_velocityConstraints.length < this.m_count) { var b = box2d.b2Max(2 * this.m_velocityConstraints.length, this.m_count); for (box2d.DEBUG && window.console.log("box2d.b2ContactSolver.m_velocityConstraints: " + b); this.m_velocityConstraints.length < b;) this.m_velocityConstraints[this.m_velocityConstraints.length] = new box2d.b2ContactVelocityConstraint } this.m_positions = a.positions, this.m_velocities = a.velocities, this.m_contacts = a.contacts; var c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u; for (c = 0, d = this.m_count; c < d; ++c) for (g = this.m_contacts[c], h = g.m_fixtureA, i = g.m_fixtureB, j = h.GetShape(), k = i.GetShape(), l = j.m_radius, m = k.m_radius, n = h.GetBody(), o = i.GetBody(), p = g.GetManifold(), q = p.pointCount, box2d.ENABLE_ASSERTS && box2d.b2Assert(q > 0), r = this.m_velocityConstraints[c], r.friction = g.m_friction, r.restitution = g.m_restitution, r.tangentSpeed = g.m_tangentSpeed, r.indexA = n.m_islandIndex, r.indexB = o.m_islandIndex, r.invMassA = n.m_invMass, r.invMassB = o.m_invMass, r.invIA = n.m_invI, r.invIB = o.m_invI, r.contactIndex = c, r.pointCount = q, r.K.SetZero(), r.normalMass.SetZero(), s = this.m_positionConstraints[c], s.indexA = n.m_islandIndex, s.indexB = o.m_islandIndex, s.invMassA = n.m_invMass, s.invMassB = o.m_invMass, s.localCenterA.Copy(n.m_sweep.localCenter), s.localCenterB.Copy(o.m_sweep.localCenter), s.invIA = n.m_invI, s.invIB = o.m_invI, s.localNormal.Copy(p.localNormal), s.localPoint.Copy(p.localPoint), s.pointCount = q, s.radiusA = l, s.radiusB = m, s.type = p.type, e = 0, f = q; e < f; ++e) t = p.points[e], u = r.points[e], this.m_step.warmStarting ? (u.normalImpulse = this.m_step.dtRatio * t.normalImpulse, u.tangentImpulse = this.m_step.dtRatio * t.tangentImpulse) : (u.normalImpulse = 0, u.tangentImpulse = 0), u.rA.SetZero(), u.rB.SetZero(), u.normalMass = 0, u.tangentMass = 0, u.velocityBias = 0, s.localPoints[e].Copy(t.localPoint); return this }, box2d.b2ContactSolver.prototype.InitializeVelocityConstraints = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S = box2d.b2ContactSolver.prototype.InitializeVelocityConstraints.s_xfA, T = box2d.b2ContactSolver.prototype.InitializeVelocityConstraints.s_xfB, U = box2d.b2ContactSolver.prototype.InitializeVelocityConstraints.s_worldManifold; for (a = 0, b = this.m_count; a < b; ++a) { for (e = this.m_velocityConstraints[a], f = this.m_positionConstraints[a], g = f.radiusA, h = f.radiusB, i = this.m_contacts[e.contactIndex].GetManifold(), j = e.indexA, k = e.indexB, l = e.invMassA, m = e.invMassB, n = e.invIA, o = e.invIB, p = f.localCenterA, q = f.localCenterB, r = this.m_positions[j].c, s = this.m_positions[j].a, t = this.m_velocities[j].v, u = this.m_velocities[j].w, v = this.m_positions[k].c, w = this.m_positions[k].a, x = this.m_velocities[k].v, y = this.m_velocities[k].w, box2d.ENABLE_ASSERTS && box2d.b2Assert(i.pointCount > 0), S.q.SetAngleRadians(s), T.q.SetAngleRadians(w), box2d.b2SubVV(r, box2d.b2MulRV(S.q, p, box2d.b2Vec2.s_t0), S.p), box2d.b2SubVV(v, box2d.b2MulRV(T.q, q, box2d.b2Vec2.s_t0), T.p), U.Initialize(i, S, g, T, h), e.normal.Copy(U.normal), box2d.b2CrossVOne(e.normal, e.tangent), z = e.pointCount, c = 0, d = z; c < d; ++c) A = e.points[c], box2d.b2SubVV(U.points[c], r, A.rA), box2d.b2SubVV(U.points[c], v, A.rB), B = box2d.b2CrossVV(A.rA, e.normal), C = box2d.b2CrossVV(A.rB, e.normal), D = l + m + n * B * B + o * C * C, A.normalMass = D > 0 ? 1 / D : 0, E = e.tangent, F = box2d.b2CrossVV(A.rA, E), G = box2d.b2CrossVV(A.rB, E), H = l + m + n * F * F + o * G * G, A.tangentMass = H > 0 ? 1 / H : 0, A.velocityBias = 0, (I = box2d.b2DotVV(e.normal, box2d.b2SubVV(box2d.b2AddVCrossSV(x, y, A.rB, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(t, u, A.rA, box2d.b2Vec2.s_t1), box2d.b2Vec2.s_t0))) < -box2d.b2_velocityThreshold && (A.velocityBias += -e.restitution * I); 2 === e.pointCount && (J = e.points[0], K = e.points[1], L = box2d.b2CrossVV(J.rA, e.normal), M = box2d.b2CrossVV(J.rB, e.normal), N = box2d.b2CrossVV(K.rA, e.normal), O = box2d.b2CrossVV(K.rB, e.normal), P = l + m + n * L * L + o * M * M, Q = l + m + n * N * N + o * O * O, R = l + m + n * L * N + o * M * O, P * P < 1e3 * (P * Q - R * R) ? (e.K.ex.SetXY(P, R), e.K.ey.SetXY(R, Q), e.K.GetInverse(e.normalMass)) : e.pointCount = 1) } }, box2d.b2ContactSolver.prototype.InitializeVelocityConstraints.s_xfA = new box2d.b2Transform, box2d.b2ContactSolver.prototype.InitializeVelocityConstraints.s_xfB = new box2d.b2Transform, box2d.b2ContactSolver.prototype.InitializeVelocityConstraints.s_worldManifold = new box2d.b2WorldManifold, box2d.b2ContactSolver.prototype.WarmStart = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t = box2d.b2ContactSolver.prototype.WarmStart.s_P; for (a = 0, b = this.m_count; a < b; ++a) { for (e = this.m_velocityConstraints[a], f = e.indexA, g = e.indexB, h = e.invMassA, i = e.invIA, j = e.invMassB, k = e.invIB, l = e.pointCount, m = this.m_velocities[f].v, n = this.m_velocities[f].w, o = this.m_velocities[g].v, p = this.m_velocities[g].w, q = e.normal, r = e.tangent, c = 0, d = l; c < d; ++c) s = e.points[c], box2d.b2AddVV(box2d.b2MulSV(s.normalImpulse, q, box2d.b2Vec2.s_t0), box2d.b2MulSV(s.tangentImpulse, r, box2d.b2Vec2.s_t1), t), n -= i * box2d.b2CrossVV(s.rA, t), m.SelfMulSub(h, t), p += k * box2d.b2CrossVV(s.rB, t), o.SelfMulAdd(j, t); this.m_velocities[f].w = n, this.m_velocities[g].w = p } }, box2d.b2ContactSolver.prototype.WarmStart.s_P = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_dv, E = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_dv1, F = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_dv2, G = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_P, H = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_a, I = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_b, J = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_x, K = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_d, L = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_P1, M = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_P2, N = box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_P1P2; for (a = 0, b = this.m_count; a < b; ++a) { for (e = this.m_velocityConstraints[a], f = e.indexA, g = e.indexB, h = e.invMassA, i = e.invIA, j = e.invMassB, k = e.invIB, l = e.pointCount, m = this.m_velocities[f].v, n = this.m_velocities[f].w, o = this.m_velocities[g].v, p = this.m_velocities[g].w, q = e.normal, r = e.tangent, s = e.friction, box2d.ENABLE_ASSERTS && box2d.b2Assert(1 === l || 2 === l), c = 0, d = l; c < d; ++c) t = e.points[c], box2d.b2SubVV(box2d.b2AddVCrossSV(o, p, t.rB, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(m, n, t.rA, box2d.b2Vec2.s_t1), D), u = box2d.b2DotVV(D, r) - e.tangentSpeed, w = t.tangentMass * -u, x = s * t.normalImpulse, y = box2d.b2Clamp(t.tangentImpulse + w, -x, x), w = y - t.tangentImpulse, t.tangentImpulse = y, box2d.b2MulSV(w, r, G), m.SelfMulSub(h, G), n -= i * box2d.b2CrossVV(t.rA, G), o.SelfMulAdd(j, G), p += k * box2d.b2CrossVV(t.rB, G); if (1 === e.pointCount) t = e.points[0], box2d.b2SubVV(box2d.b2AddVCrossSV(o, p, t.rB, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(m, n, t.rA, box2d.b2Vec2.s_t1), D), v = box2d.b2DotVV(D, q), w = -t.normalMass * (v - t.velocityBias), y = box2d.b2Max(t.normalImpulse + w, 0), w = y - t.normalImpulse, t.normalImpulse = y, box2d.b2MulSV(w, q, G), m.SelfMulSub(h, G), n -= i * box2d.b2CrossVV(t.rA, G), o.SelfMulAdd(j, G), p += k * box2d.b2CrossVV(t.rB, G); else for (z = e.points[0], A = e.points[1], H.SetXY(z.normalImpulse, A.normalImpulse), box2d.ENABLE_ASSERTS && box2d.b2Assert(H.x >= 0 && H.y >= 0), box2d.b2SubVV(box2d.b2AddVCrossSV(o, p, z.rB, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(m, n, z.rA, box2d.b2Vec2.s_t1), E), box2d.b2SubVV(box2d.b2AddVCrossSV(o, p, A.rB, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(m, n, A.rA, box2d.b2Vec2.s_t1), F), B = box2d.b2DotVV(E, q), C = box2d.b2DotVV(F, q), I.x = B - z.velocityBias, I.y = C - A.velocityBias, I.SelfSub(box2d.b2MulMV(e.K, H, box2d.b2Vec2.s_t0));;) { if (box2d.b2MulMV(e.normalMass, I, J).SelfNeg(), J.x >= 0 && J.y >= 0) { box2d.b2SubVV(J, H, K), box2d.b2MulSV(K.x, q, L), box2d.b2MulSV(K.y, q, M), box2d.b2AddVV(L, M, N), m.SelfMulSub(h, N), n -= i * (box2d.b2CrossVV(z.rA, L) + box2d.b2CrossVV(A.rA, M)), o.SelfMulAdd(j, N), p += k * (box2d.b2CrossVV(z.rB, L) + box2d.b2CrossVV(A.rB, M)), z.normalImpulse = J.x, A.normalImpulse = J.y; break } if (J.x = -z.normalMass * I.x, J.y = 0, B = 0, C = e.K.ex.y * J.x + I.y, J.x >= 0 && C >= 0) { box2d.b2SubVV(J, H, K), box2d.b2MulSV(K.x, q, L), box2d.b2MulSV(K.y, q, M), box2d.b2AddVV(L, M, N), m.SelfMulSub(h, N), n -= i * (box2d.b2CrossVV(z.rA, L) + box2d.b2CrossVV(A.rA, M)), o.SelfMulAdd(j, N), p += k * (box2d.b2CrossVV(z.rB, L) + box2d.b2CrossVV(A.rB, M)), z.normalImpulse = J.x, A.normalImpulse = J.y; break } if (J.x = 0, J.y = -A.normalMass * I.y, B = e.K.ey.x * J.y + I.x, C = 0, J.y >= 0 && B >= 0) { box2d.b2SubVV(J, H, K), box2d.b2MulSV(K.x, q, L), box2d.b2MulSV(K.y, q, M), box2d.b2AddVV(L, M, N), m.SelfMulSub(h, N), n -= i * (box2d.b2CrossVV(z.rA, L) + box2d.b2CrossVV(A.rA, M)), o.SelfMulAdd(j, N), p += k * (box2d.b2CrossVV(z.rB, L) + box2d.b2CrossVV(A.rB, M)), z.normalImpulse = J.x, A.normalImpulse = J.y; break } if (J.x = 0, J.y = 0, B = I.x, C = I.y, B >= 0 && C >= 0) { box2d.b2SubVV(J, H, K), box2d.b2MulSV(K.x, q, L), box2d.b2MulSV(K.y, q, M), box2d.b2AddVV(L, M, N), m.SelfMulSub(h, N), n -= i * (box2d.b2CrossVV(z.rA, L) + box2d.b2CrossVV(A.rA, M)), o.SelfMulAdd(j, N), p += k * (box2d.b2CrossVV(z.rB, L) + box2d.b2CrossVV(A.rB, M)), z.normalImpulse = J.x, A.normalImpulse = J.y; break } break } this.m_velocities[f].w = n, this.m_velocities[g].w = p } }, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_dv = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_dv1 = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_dv2 = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_a = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_b = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_x = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_d = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_P1 = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_P2 = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveVelocityConstraints.s_P1P2 = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.StoreImpulses = function() { var a, b, c, d, e, f; for (a = 0, b = this.m_count; a < b; ++a) for (e = this.m_velocityConstraints[a], f = this.m_contacts[e.contactIndex].GetManifold(), c = 0, d = e.pointCount; c < d; ++c) f.points[c].normalImpulse = e.points[c].normalImpulse, f.points[c].tangentImpulse = e.points[c].tangentImpulse }, box2d.b2PositionSolverManifold = function() { this.normal = new box2d.b2Vec2, this.point = new box2d.b2Vec2 }, box2d.b2PositionSolverManifold.prototype.normal = null, box2d.b2PositionSolverManifold.prototype.point = null, box2d.b2PositionSolverManifold.prototype.separation = 0, box2d.b2PositionSolverManifold.prototype.Initialize = function(a, b, c, d) { var e = box2d.b2PositionSolverManifold.prototype.Initialize.s_pointA, f = box2d.b2PositionSolverManifold.prototype.Initialize.s_pointB, g = box2d.b2PositionSolverManifold.prototype.Initialize.s_planePoint, h = box2d.b2PositionSolverManifold.prototype.Initialize.s_clipPoint; switch (box2d.ENABLE_ASSERTS && box2d.b2Assert(a.pointCount > 0), a.type) { case box2d.b2ManifoldType.e_circles: box2d.b2MulXV(b, a.localPoint, e), box2d.b2MulXV(c, a.localPoints[0], f), box2d.b2SubVV(f, e, this.normal).SelfNormalize(), box2d.b2MidVV(e, f, this.point), this.separation = box2d.b2DotVV(box2d.b2SubVV(f, e, box2d.b2Vec2.s_t0), this.normal) - a.radiusA - a.radiusB; break; case box2d.b2ManifoldType.e_faceA: box2d.b2MulRV(b.q, a.localNormal, this.normal), box2d.b2MulXV(b, a.localPoint, g), box2d.b2MulXV(c, a.localPoints[d], h), this.separation = box2d.b2DotVV(box2d.b2SubVV(h, g, box2d.b2Vec2.s_t0), this.normal) - a.radiusA - a.radiusB, this.point.Copy(h); break; case box2d.b2ManifoldType.e_faceB: box2d.b2MulRV(c.q, a.localNormal, this.normal), box2d.b2MulXV(c, a.localPoint, g), box2d.b2MulXV(b, a.localPoints[d], h), this.separation = box2d.b2DotVV(box2d.b2SubVV(h, g, box2d.b2Vec2.s_t0), this.normal) - a.radiusA - a.radiusB, this.point.Copy(h), this.normal.SelfNeg() } }, box2d.b2PositionSolverManifold.prototype.Initialize.s_pointA = new box2d.b2Vec2, box2d.b2PositionSolverManifold.prototype.Initialize.s_pointB = new box2d.b2Vec2, box2d.b2PositionSolverManifold.prototype.Initialize.s_planePoint = new box2d.b2Vec2, box2d.b2PositionSolverManifold.prototype.Initialize.s_clipPoint = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolvePositionConstraints = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A = box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_xfA, B = box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_xfB, C = box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_psm, D = box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_rA, E = box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_rB, F = box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_P, G = 0; for (a = 0, b = this.m_count; a < b; ++a) { for (e = this.m_positionConstraints[a], f = e.indexA, g = e.indexB, h = e.localCenterA, i = e.invMassA, j = e.invIA, k = e.localCenterB, l = e.invMassB, m = e.invIB, n = e.pointCount, o = this.m_positions[f].c, p = this.m_positions[f].a, q = this.m_positions[g].c, r = this.m_positions[g].a, c = 0, d = n; c < d; ++c) A.q.SetAngleRadians(p), B.q.SetAngleRadians(r), box2d.b2SubVV(o, box2d.b2MulRV(A.q, h, box2d.b2Vec2.s_t0), A.p), box2d.b2SubVV(q, box2d.b2MulRV(B.q, k, box2d.b2Vec2.s_t0), B.p), C.Initialize(e, A, B, c), s = C.normal, t = C.point, u = C.separation, box2d.b2SubVV(t, o, D), box2d.b2SubVV(t, q, E), G = box2d.b2Min(G, u), v = box2d.b2Clamp(box2d.b2_baumgarte * (u + box2d.b2_linearSlop), -box2d.b2_maxLinearCorrection, 0), w = box2d.b2CrossVV(D, s), x = box2d.b2CrossVV(E, s), y = i + l + j * w * w + m * x * x, z = y > 0 ? -v / y : 0, box2d.b2MulSV(z, s, F), o.SelfMulSub(i, F), p -= j * box2d.b2CrossVV(D, F), q.SelfMulAdd(l, F), r += m * box2d.b2CrossVV(E, F); this.m_positions[f].a = p, this.m_positions[g].a = r } return G > -3 * box2d.b2_linearSlop }, box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_xfA = new box2d.b2Transform, box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_xfB = new box2d.b2Transform, box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_psm = new box2d.b2PositionSolverManifold, box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_rA = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_rB = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolvePositionConstraints.s_P = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints = function(a, b) { var c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C = box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_xfA, D = box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_xfB, E = box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_psm, F = box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_rA, G = box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_rB, H = box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_P, I = 0; for (c = 0, d = this.m_count; c < d; ++c) { for (g = this.m_positionConstraints[c], h = g.indexA, i = g.indexB, j = g.localCenterA, k = g.localCenterB, l = g.pointCount, m = 0, n = 0, h !== a && h !== b || (m = g.invMassA, n = g.invIA), o = 0, p = 0, i !== a && i !== b || (o = g.invMassB, p = g.invIB), q = this.m_positions[h].c, r = this.m_positions[h].a, s = this.m_positions[i].c, t = this.m_positions[i].a, e = 0, f = l; e < f; ++e) C.q.SetAngleRadians(r), D.q.SetAngleRadians(t), box2d.b2SubVV(q, box2d.b2MulRV(C.q, j, box2d.b2Vec2.s_t0), C.p), box2d.b2SubVV(s, box2d.b2MulRV(D.q, k, box2d.b2Vec2.s_t0), D.p), E.Initialize(g, C, D, e), u = E.normal, v = E.point, w = E.separation, box2d.b2SubVV(v, q, F), box2d.b2SubVV(v, s, G), I = box2d.b2Min(I, w), x = box2d.b2Clamp(box2d.b2_toiBaumgarte * (w + box2d.b2_linearSlop), -box2d.b2_maxLinearCorrection, 0), y = box2d.b2CrossVV(F, u), z = box2d.b2CrossVV(G, u), A = m + o + n * y * y + p * z * z, B = A > 0 ? -x / A : 0, box2d.b2MulSV(B, u, H), q.SelfMulSub(m, H), r -= n * box2d.b2CrossVV(F, H), s.SelfMulAdd(o, H), t += p * box2d.b2CrossVV(G, H); this.m_positions[h].a = r, this.m_positions[i].a = t } return I >= -1.5 * box2d.b2_linearSlop }, box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_xfA = new box2d.b2Transform, box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_xfB = new box2d.b2Transform, box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_psm = new box2d.b2PositionSolverManifold, box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_rA = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_rB = new box2d.b2Vec2, box2d.b2ContactSolver.prototype.SolveTOIPositionConstraints.s_P = new box2d.b2Vec2, goog.provide("box2d.b2WorldCallbacks"), goog.require("box2d.b2Settings"), box2d.b2DestructionListener = function() {}, box2d.b2DestructionListener.prototype.SayGoodbyeJoint = function(a) {}, box2d.b2DestructionListener.prototype.SayGoodbyeFixture = function(a) {}, box2d.b2ContactFilter = function() {}, box2d.b2ContactFilter.prototype.ShouldCollide = function(a, b) { var c = a.GetFilterData(), d = b.GetFilterData(); return c.groupIndex === d.groupIndex && 0 !== c.groupIndex ? c.groupIndex > 0 : 0 != (c.maskBits & d.categoryBits) && 0 != (c.categoryBits & d.maskBits) }, box2d.b2ContactFilter.b2_defaultFilter = new box2d.b2ContactFilter, box2d.b2ContactImpulse = function() { this.normalImpulses = box2d.b2MakeNumberArray(box2d.b2_maxManifoldPoints), this.tangentImpulses = box2d.b2MakeNumberArray(box2d.b2_maxManifoldPoints) }, box2d.b2ContactImpulse.prototype.normalImpulses = null, box2d.b2ContactImpulse.prototype.tangentImpulses = null, box2d.b2ContactImpulse.prototype.count = 0, box2d.b2ContactListener = function() {}; box2d.b2ContactListener.prototype.BeginContact = function(a) {}, box2d.b2ContactListener.prototype.EndContact = function(a) {}, box2d.b2ContactListener.prototype.PreSolve = function(a, b) {}, box2d.b2ContactListener.prototype.PostSolve = function(a, b) {}, box2d.b2ContactListener.b2_defaultListener = new box2d.b2ContactListener, box2d.b2QueryCallback = function() {}, box2d.b2QueryCallback.prototype.ReportFixture = function(a) { return !0 }, box2d.b2RayCastCallback = function() {}, box2d.b2RayCastCallback.prototype.ReportFixture = function(a, b, c, d) { return d }, goog.provide("box2d.b2Island"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Timer"), goog.require("box2d.b2TimeStep"), goog.require("box2d.b2WorldCallbacks"), goog.require("box2d.b2ContactSolver"), box2d.b2Island = function() { this.m_bodies = new Array(1024), this.m_contacts = new Array(1024), this.m_joints = new Array(1024), this.m_positions = box2d.b2Position.MakeArray(1024), this.m_velocities = box2d.b2Velocity.MakeArray(1024) }, box2d.b2Island.prototype.m_allocator = null, box2d.b2Island.prototype.m_listener = null, box2d.b2Island.prototype.m_bodies = null, box2d.b2Island.prototype.m_contacts = null, box2d.b2Island.prototype.m_joints = null, box2d.b2Island.prototype.m_positions = null, box2d.b2Island.prototype.m_velocities = null, box2d.b2Island.prototype.m_bodyCount = 0, box2d.b2Island.prototype.m_jointCount = 0, box2d.b2Island.prototype.m_contactCount = 0, box2d.b2Island.prototype.m_bodyCapacity = 0, box2d.b2Island.prototype.m_contactCapacity = 0, box2d.b2Island.prototype.m_jointCapacity = 0, box2d.b2Island.prototype.Initialize = function(a, b, c, d, e) { for (this.m_bodyCapacity = a, this.m_contactCapacity = b, this.m_jointCapacity = c, this.m_bodyCount = 0, this.m_contactCount = 0, this.m_jointCount = 0, this.m_allocator = d, this.m_listener = e; this.m_bodies.length < a;) this.m_bodies[this.m_bodies.length] = null; for (; this.m_contacts.length < b;) this.m_contacts[this.m_contacts.length] = null; for (; this.m_joints.length < c;) this.m_joints[this.m_joints.length] = null; if (this.m_positions.length < a) { var f = box2d.b2Max(2 * this.m_positions.length, a); for (box2d.DEBUG && window.console.log("box2d.b2Island.m_positions: " + f); this.m_positions.length < f;) this.m_positions[this.m_positions.length] = new box2d.b2Position } if (this.m_velocities.length < a) { var f = box2d.b2Max(2 * this.m_velocities.length, a); for (box2d.DEBUG && window.console.log("box2d.b2Island.m_velocities: " + f); this.m_velocities.length < f;) this.m_velocities[this.m_velocities.length] = new box2d.b2Velocity } }, box2d.b2Island.prototype.Clear = function() { this.m_bodyCount = 0, this.m_contactCount = 0, this.m_jointCount = 0 }, box2d.b2Island.prototype.AddBody = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_bodyCount < this.m_bodyCapacity), a.m_islandIndex = this.m_bodyCount, this.m_bodies[this.m_bodyCount++] = a }, box2d.b2Island.prototype.AddContact = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_contactCount < this.m_contactCapacity), this.m_contacts[this.m_contactCount++] = a }, box2d.b2Island.prototype.AddJoint = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_jointCount < this.m_jointCapacity), this.m_joints[this.m_jointCount++] = a }, box2d.b2Island.prototype.Solve = function(a, b, c, d) { for (var e = box2d.b2Island.s_timer.Reset(), f = b.dt, g = 0; g < this.m_bodyCount; ++g) { var h = this.m_bodies[g], i = this.m_positions[g].c.Copy(h.m_sweep.c), j = h.m_sweep.a, k = this.m_velocities[g].v.Copy(h.m_linearVelocity), l = h.m_angularVelocity; h.m_sweep.c0.Copy(h.m_sweep.c), h.m_sweep.a0 = h.m_sweep.a, h.m_type === box2d.b2BodyType.b2_dynamicBody && (k.x += f * (h.m_gravityScale * c.x + h.m_invMass * h.m_force.x), k.y += f * (h.m_gravityScale * c.y + h.m_invMass * h.m_force.y), l += f * h.m_invI * h.m_torque, k.SelfMul(1 / (1 + f * h.m_linearDamping)), l *= 1 / (1 + f * h.m_angularDamping)), this.m_positions[g].a = j, this.m_velocities[g].w = l } e.Reset(); var m = box2d.b2Island.s_solverData; m.step.Copy(b), m.positions = this.m_positions, m.velocities = this.m_velocities; var n = box2d.b2Island.s_contactSolverDef; n.step.Copy(b), n.contacts = this.m_contacts, n.count = this.m_contactCount, n.positions = this.m_positions, n.velocities = this.m_velocities, n.allocator = this.m_allocator; var o = box2d.b2Island.s_contactSolver.Initialize(n); o.InitializeVelocityConstraints(), b.warmStarting && o.WarmStart(); for (var g = 0; g < this.m_jointCount; ++g) this.m_joints[g].InitVelocityConstraints(m); a.solveInit = e.GetMilliseconds(), e.Reset(); for (var g = 0; g < b.velocityIterations; ++g) { for (var p = 0; p < this.m_jointCount; ++p) this.m_joints[p].SolveVelocityConstraints(m); o.SolveVelocityConstraints() } o.StoreImpulses(), a.solveVelocity = e.GetMilliseconds(); for (var g = 0; g < this.m_bodyCount; ++g) { var i = this.m_positions[g].c, j = this.m_positions[g].a, k = this.m_velocities[g].v, l = this.m_velocities[g].w, q = box2d.b2MulSV(f, k, box2d.b2Island.s_translation); if (box2d.b2DotVV(q, q) > box2d.b2_maxTranslationSquared) { var r = box2d.b2_maxTranslation / q.GetLength(); k.SelfMul(r) } var s = f * l; if (s * s > box2d.b2_maxRotationSquared) { var r = box2d.b2_maxRotation / box2d.b2Abs(s); l *= r } i.x += f * k.x, i.y += f * k.y, j += f * l, this.m_positions[g].a = j, this.m_velocities[g].w = l } e.Reset(); for (var t = !1, g = 0; g < b.positionIterations; ++g) { for (var u = o.SolvePositionConstraints(), v = !0, p = 0; p < this.m_jointCount; ++p) { var w = this.m_joints[p].SolvePositionConstraints(m); v = v && w } if (u && v) { t = !0; break } } for (var g = 0; g < this.m_bodyCount; ++g) { var x = this.m_bodies[g]; x.m_sweep.c.Copy(this.m_positions[g].c), x.m_sweep.a = this.m_positions[g].a, x.m_linearVelocity.Copy(this.m_velocities[g].v), x.m_angularVelocity = this.m_velocities[g].w, x.SynchronizeTransform() } if (a.solvePosition = e.GetMilliseconds(), this.Report(o.m_velocityConstraints), d) { for (var y = box2d.b2_maxFloat, z = box2d.b2_linearSleepTolerance * box2d.b2_linearSleepTolerance, A = box2d.b2_angularSleepTolerance * box2d.b2_angularSleepTolerance, g = 0; g < this.m_bodyCount; ++g) { var h = this.m_bodies[g]; h.GetType() !== box2d.b2BodyType.b2_staticBody && (0 == (h.m_flags & box2d.b2BodyFlag.e_autoSleepFlag) || h.m_angularVelocity * h.m_angularVelocity > A || box2d.b2DotVV(h.m_linearVelocity, h.m_linearVelocity) > z ? (h.m_sleepTime = 0, y = 0) : (h.m_sleepTime += f, y = box2d.b2Min(y, h.m_sleepTime))) } if (y >= box2d.b2_timeToSleep && t) for (var g = 0; g < this.m_bodyCount; ++g) { var h = this.m_bodies[g]; h.SetAwake(!1) } } }, box2d.b2Island.prototype.SolveTOI = function(a, b, c) { box2d.ENABLE_ASSERTS && box2d.b2Assert(b < this.m_bodyCount), box2d.ENABLE_ASSERTS && box2d.b2Assert(c < this.m_bodyCount); for (var d = 0; d < this.m_bodyCount; ++d) { var e = this.m_bodies[d]; this.m_positions[d].c.Copy(e.m_sweep.c), this.m_positions[d].a = e.m_sweep.a, this.m_velocities[d].v.Copy(e.m_linearVelocity), this.m_velocities[d].w = e.m_angularVelocity } var f = box2d.b2Island.s_contactSolverDef; f.contacts = this.m_contacts, f.count = this.m_contactCount, f.allocator = this.m_allocator, f.step.Copy(a), f.positions = this.m_positions, f.velocities = this.m_velocities; for (var g = box2d.b2Island.s_contactSolver.Initialize(f), d = 0; d < a.positionIterations; ++d) { if (g.SolveTOIPositionConstraints(b, c)) break } this.m_bodies[b].m_sweep.c0.Copy(this.m_positions[b].c), this.m_bodies[b].m_sweep.a0 = this.m_positions[b].a, this.m_bodies[c].m_sweep.c0.Copy(this.m_positions[c].c), this.m_bodies[c].m_sweep.a0 = this.m_positions[c].a, g.InitializeVelocityConstraints(); for (var d = 0; d < a.velocityIterations; ++d) g.SolveVelocityConstraints(); for (var h = a.dt, d = 0; d < this.m_bodyCount; ++d) { var i = this.m_positions[d].c, j = this.m_positions[d].a, k = this.m_velocities[d].v, l = this.m_velocities[d].w, m = box2d.b2MulSV(h, k, box2d.b2Island.s_translation); if (box2d.b2DotVV(m, m) > box2d.b2_maxTranslationSquared) { var n = box2d.b2_maxTranslation / m.GetLength(); k.SelfMul(n) } var o = h * l; if (o * o > box2d.b2_maxRotationSquared) { var n = box2d.b2_maxRotation / box2d.b2Abs(o); l *= n } i.SelfMulAdd(h, k), j += h * l, this.m_positions[d].a = j, this.m_velocities[d].w = l; var p = this.m_bodies[d]; p.m_sweep.c.Copy(i), p.m_sweep.a = j, p.m_linearVelocity.Copy(k), p.m_angularVelocity = l, p.SynchronizeTransform() } this.Report(g.m_velocityConstraints) }, box2d.b2Island.prototype.Report = function(a) { if (null !== this.m_listener) for (var b = 0; b < this.m_contactCount; ++b) { var c = this.m_contacts[b]; if (c) { var d = a[b], e = box2d.b2Island.s_impulse; e.count = d.pointCount; for (var f = 0; f < d.pointCount; ++f) e.normalImpulses[f] = d.points[f].normalImpulse, e.tangentImpulses[f] = d.points[f].tangentImpulse; this.m_listener.PostSolve(c, e) } } }, box2d.b2Island.s_timer = new box2d.b2Timer, box2d.b2Island.s_solverData = new box2d.b2SolverData, box2d.b2Island.s_contactSolverDef = new box2d.b2ContactSolverDef, box2d.b2Island.s_contactSolver = new box2d.b2ContactSolver, box2d.b2Island.s_translation = new box2d.b2Vec2, box2d.b2Island.s_impulse = new box2d.b2ContactImpulse, goog.provide("box2d.b2ContactFactory"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Contact"), box2d.b2ContactRegister = function() {}, box2d.b2ContactRegister.prototype.createFcn = null, box2d.b2ContactRegister.prototype.destroyFcn = null, box2d.b2ContactRegister.prototype.primary = !1, box2d.b2ContactFactory = function(a) { this.m_allocator = a, this.InitializeRegisters() }, box2d.b2ContactFactory.prototype.m_allocator = null, box2d.b2ContactFactory.prototype.AddType = function(a, b, c, d) { var e = box2d.b2MakeArray(256, function(b) { return a() }), f = function(b) { return e.length > 0 ? e.pop() : a(b) }, g = function(a, b) { e.push(a) }; this.m_registers[c][d].pool = e, this.m_registers[c][d].createFcn = f, this.m_registers[c][d].destroyFcn = g, this.m_registers[c][d].primary = !0, c !== d && (this.m_registers[d][c].pool = e, this.m_registers[d][c].createFcn = f, this.m_registers[d][c].destroyFcn = g, this.m_registers[d][c].primary = !1) }, box2d.b2ContactFactory.prototype.InitializeRegisters = function() { this.m_registers = new Array(box2d.b2ShapeType.e_shapeTypeCount); for (var a = 0; a < box2d.b2ShapeType.e_shapeTypeCount; a++) { this.m_registers[a] = new Array(box2d.b2ShapeType.e_shapeTypeCount); for (var b = 0; b < box2d.b2ShapeType.e_shapeTypeCount; b++) this.m_registers[a][b] = new box2d.b2ContactRegister } this.AddType(box2d.b2CircleContact.Create, box2d.b2CircleContact.Destroy, box2d.b2ShapeType.e_circleShape, box2d.b2ShapeType.e_circleShape), this.AddType(box2d.b2PolygonAndCircleContact.Create, box2d.b2PolygonAndCircleContact.Destroy, box2d.b2ShapeType.e_polygonShape, box2d.b2ShapeType.e_circleShape), this.AddType(box2d.b2PolygonContact.Create, box2d.b2PolygonContact.Destroy, box2d.b2ShapeType.e_polygonShape, box2d.b2ShapeType.e_polygonShape), this.AddType(box2d.b2EdgeAndCircleContact.Create, box2d.b2EdgeAndCircleContact.Destroy, box2d.b2ShapeType.e_edgeShape, box2d.b2ShapeType.e_circleShape), this.AddType(box2d.b2EdgeAndPolygonContact.Create, box2d.b2EdgeAndPolygonContact.Destroy, box2d.b2ShapeType.e_edgeShape, box2d.b2ShapeType.e_polygonShape), this.AddType(box2d.b2ChainAndCircleContact.Create, box2d.b2ChainAndCircleContact.Destroy, box2d.b2ShapeType.e_chainShape, box2d.b2ShapeType.e_circleShape), this.AddType(box2d.b2ChainAndPolygonContact.Create, box2d.b2ChainAndPolygonContact.Destroy, box2d.b2ShapeType.e_chainShape, box2d.b2ShapeType.e_polygonShape) }, box2d.b2ContactFactory.prototype.Create = function(a, b, c, d) { var e = a.GetType(), f = c.GetType(); box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= e && e < box2d.b2ShapeType.e_shapeTypeCount), box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= f && f < box2d.b2ShapeType.e_shapeTypeCount); var g = this.m_registers[e][f], h = g.createFcn; if (null !== h) { if (g.primary) { var i = h(this.m_allocator); return i.Reset(a, b, c, d), i } var i = h(this.m_allocator); return i.Reset(c, d, a, b), i } return null }, box2d.b2ContactFactory.prototype.Destroy = function(a) { var b = a.m_fixtureA, c = a.m_fixtureB; a.m_manifold.pointCount > 0 && !1 === b.IsSensor() && !1 === c.IsSensor() && (b.GetBody().SetAwake(!0), c.GetBody().SetAwake(!0)); var d = b.GetType(), e = c.GetType(); box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= d && e < box2d.b2ShapeType.e_shapeTypeCount), box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= d && e < box2d.b2ShapeType.e_shapeTypeCount), (0, this.m_registers[d][e].destroyFcn)(a, this.m_allocator) }, goog.provide("box2d.b2GrowableStack"), goog.require("box2d.b2Settings"), box2d.b2GrowableStack = function(a) { this.m_stack = new Array(a) }, box2d.b2GrowableStack.prototype.m_stack = null, box2d.b2GrowableStack.prototype.m_count = 0, box2d.b2GrowableStack.prototype.Reset = function() { return this.m_count = 0, this }, box2d.b2GrowableStack.prototype.Push = function(a) { this.m_stack[this.m_count] = a, ++this.m_count }, box2d.b2GrowableStack.prototype.Pop = function() { box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_count > 0), --this.m_count; var a = this.m_stack[this.m_count]; return this.m_stack[this.m_count] = null, a }, box2d.b2GrowableStack.prototype.GetCount = function() { return this.m_count }, goog.provide("box2d.b2DynamicTree"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Collision"), goog.require("box2d.b2GrowableStack"), box2d.b2TreeNode = function(a) { this.m_id = a || 0, this.aabb = new box2d.b2AABB }, box2d.b2TreeNode.prototype.m_id = 0, box2d.b2TreeNode.prototype.aabb = null, box2d.b2TreeNode.prototype.userData = null, box2d.b2TreeNode.prototype.parent = null, box2d.b2TreeNode.prototype.child1 = null, box2d.b2TreeNode.prototype.child2 = null, box2d.b2TreeNode.prototype.height = 0, box2d.b2TreeNode.prototype.IsLeaf = function() { return null === this.child1 }, box2d.b2DynamicTree = function() {}, box2d.b2DynamicTree.prototype.m_root = null, box2d.b2DynamicTree.prototype.m_freeList = null, box2d.b2DynamicTree.prototype.m_path = 0, box2d.b2DynamicTree.prototype.m_insertionCount = 0, box2d.b2DynamicTree.s_stack = new box2d.b2GrowableStack(256), box2d.b2DynamicTree.s_r = new box2d.b2Vec2, box2d.b2DynamicTree.s_v = new box2d.b2Vec2, box2d.b2DynamicTree.s_abs_v = new box2d.b2Vec2, box2d.b2DynamicTree.s_segmentAABB = new box2d.b2AABB, box2d.b2DynamicTree.s_subInput = new box2d.b2RayCastInput, box2d.b2DynamicTree.s_combinedAABB = new box2d.b2AABB, box2d.b2DynamicTree.s_aabb = new box2d.b2AABB, box2d.b2DynamicTree.prototype.GetUserData = function(a) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(null !== a), a.userData }, box2d.b2DynamicTree.prototype.GetFatAABB = function(a) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(null !== a), a.aabb }, box2d.b2DynamicTree.prototype.Query = function(a, b) { if (null !== this.m_root) { var c = box2d.b2DynamicTree.s_stack.Reset(); for (c.Push(this.m_root); c.GetCount() > 0;) { var d = c.Pop(); if (null !== d && d.aabb.TestOverlap(b)) if (d.IsLeaf()) { var e = a(d); if (!1 === e) return } else c.Push(d.child1), c.Push(d.child2) } } }, box2d.b2DynamicTree.prototype.RayCast = function(a, b) { if (null !== this.m_root) { var c = b.p1, d = b.p2, e = box2d.b2SubVV(d, c, box2d.b2DynamicTree.s_r); box2d.ENABLE_ASSERTS && box2d.b2Assert(e.GetLengthSquared() > 0), e.Normalize(); var f = box2d.b2CrossOneV(e, box2d.b2DynamicTree.s_v), g = box2d.b2AbsV(f, box2d.b2DynamicTree.s_abs_v), h = b.maxFraction, i = box2d.b2DynamicTree.s_segmentAABB, j = c.x + h * (d.x - c.x), k = c.y + h * (d.y - c.y); i.lowerBound.x = box2d.b2Min(c.x, j), i.lowerBound.y = box2d.b2Min(c.y, k), i.upperBound.x = box2d.b2Max(c.x, j), i.upperBound.y = box2d.b2Max(c.y, k); var l = box2d.b2DynamicTree.s_stack.Reset(); for (l.Push(this.m_root); l.GetCount() > 0;) { var m = l.Pop(); if (null !== m && !1 !== box2d.b2TestOverlapAABB(m.aabb, i)) { var n = m.aabb.GetCenter(), o = m.aabb.GetExtents(); if (!(box2d.b2Abs(box2d.b2DotVV(f, box2d.b2SubVV(c, n, box2d.b2Vec2.s_t0))) - box2d.b2DotVV(g, o) > 0)) if (m.IsLeaf()) { var p = box2d.b2DynamicTree.s_subInput; p.p1.Copy(b.p1), p.p2.Copy(b.p2), p.maxFraction = h; var q = a(p, m); if (0 === q) return; q > 0 && (h = q, j = c.x + h * (d.x - c.x), k = c.y + h * (d.y - c.y), i.lowerBound.x = box2d.b2Min(c.x, j), i.lowerBound.y = box2d.b2Min(c.y, k), i.upperBound.x = box2d.b2Max(c.x, j), i.upperBound.y = box2d.b2Max(c.y, k)) } else l.Push(m.child1), l.Push(m.child2) } } } }, box2d.b2DynamicTree.prototype.AllocateNode = function() { if (this.m_freeList) { var a = this.m_freeList; return this.m_freeList = a.parent, a.parent = null, a.child1 = null, a.child2 = null, a.height = 0, a.userData = null, a } return new box2d.b2TreeNode(box2d.b2DynamicTree.prototype.s_node_id++) }, box2d.b2DynamicTree.prototype.s_node_id = 0, box2d.b2DynamicTree.prototype.FreeNode = function(a) { a.parent = this.m_freeList, a.height = -1, this.m_freeList = a }, box2d.b2DynamicTree.prototype.CreateProxy = function(a, b) { var c = this.AllocateNode(), d = box2d.b2_aabbExtension, e = box2d.b2_aabbExtension; return c.aabb.lowerBound.x = a.lowerBound.x - d, c.aabb.lowerBound.y = a.lowerBound.y - e, c.aabb.upperBound.x = a.upperBound.x + d, c.aabb.upperBound.y = a.upperBound.y + e, c.userData = b, c.height = 0, this.InsertLeaf(c), c }, box2d.b2DynamicTree.prototype.DestroyProxy = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(a.IsLeaf()), this.RemoveLeaf(a), this.FreeNode(a) }, box2d.b2DynamicTree.prototype.MoveProxy = function(a, b, c) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(a.IsLeaf()), a.aabb.Contains(b)) return !1; this.RemoveLeaf(a); var d = box2d.b2_aabbExtension + box2d.b2_aabbMultiplier * (c.x > 0 ? c.x : -c.x), e = box2d.b2_aabbExtension + box2d.b2_aabbMultiplier * (c.y > 0 ? c.y : -c.y); return a.aabb.lowerBound.x = b.lowerBound.x - d, a.aabb.lowerBound.y = b.lowerBound.y - e, a.aabb.upperBound.x = b.upperBound.x + d, a.aabb.upperBound.y = b.upperBound.y + e, this.InsertLeaf(a), !0 }, box2d.b2DynamicTree.prototype.InsertLeaf = function(a) { if (++this.m_insertionCount, null === this.m_root) return this.m_root = a, void(this.m_root.parent = null); for (var b, c, d = a.aabb, e = (d.GetCenter(), this.m_root); !1 === e.IsLeaf();) { b = e.child1, c = e.child2; var f = e.aabb.GetPerimeter(), g = box2d.b2DynamicTree.s_combinedAABB; g.Combine2(e.aabb, d); var h, i, j, k = g.GetPerimeter(), l = 2 * k, m = 2 * (k - f), n = box2d.b2DynamicTree.s_aabb; b.IsLeaf() ? (n.Combine2(d, b.aabb), h = n.GetPerimeter() + m) : (n.Combine2(d, b.aabb), i = b.aabb.GetPerimeter(), j = n.GetPerimeter(), h = j - i + m); var o; if (c.IsLeaf() ? (n.Combine2(d, c.aabb), o = n.GetPerimeter() + m) : (n.Combine2(d, c.aabb), i = c.aabb.GetPerimeter(), j = n.GetPerimeter(), o = j - i + m), l < h && l < o) break; e = h < o ? b : c } var p = e, q = p.parent, r = this.AllocateNode(); for (r.parent = q, r.userData = null, r.aabb.Combine2(d, p.aabb), r.height = p.height + 1, q ? (q.child1 === p ? q.child1 = r : q.child2 = r, r.child1 = p, r.child2 = a, p.parent = r, a.parent = r) : (r.child1 = p, r.child2 = a, p.parent = r, a.parent = r, this.m_root = r), e = a.parent; null !== e;) e = this.Balance(e), b = e.child1, c = e.child2, box2d.ENABLE_ASSERTS && box2d.b2Assert(null !== b), box2d.ENABLE_ASSERTS && box2d.b2Assert(null !== c), e.height = 1 + box2d.b2Max(b.height, c.height), e.aabb.Combine2(b.aabb, c.aabb), e = e.parent }, box2d.b2DynamicTree.prototype.RemoveLeaf = function(a) { if (a === this.m_root) return void(this.m_root = null); var b, c = a.parent, d = c.parent; if (b = c.child1 === a ? c.child2 : c.child1, d) { d.child1 === c ? d.child1 = b : d.child2 = b, b.parent = d, this.FreeNode(c); for (var e = d; e;) { e = this.Balance(e); var f = e.child1, g = e.child2; e.aabb.Combine2(f.aabb, g.aabb), e.height = 1 + box2d.b2Max(f.height, g.height), e = e.parent } } else this.m_root = b, b.parent = null, this.FreeNode(c) }, box2d.b2DynamicTree.prototype.Balance = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(null !== a), a.IsLeaf() || a.height < 2) return a; var b = a.child1, c = a.child2, d = c.height - b.height; if (d > 1) { var e = c.child1, f = c.child2; return c.child1 = a, c.parent = a.parent, a.parent = c, null !== c.parent ? c.parent.child1 === a ? c.parent.child1 = c : (box2d.ENABLE_ASSERTS && box2d.b2Assert(c.parent.child2 === a), c.parent.child2 = c) : this.m_root = c, e.height > f.height ? (c.child2 = e, a.child2 = f, f.parent = a, a.aabb.Combine2(b.aabb, f.aabb), c.aabb.Combine2(a.aabb, e.aabb), a.height = 1 + box2d.b2Max(b.height, f.height), c.height = 1 + box2d.b2Max(a.height, e.height)) : (c.child2 = f, a.child2 = e, e.parent = a, a.aabb.Combine2(b.aabb, e.aabb), c.aabb.Combine2(a.aabb, f.aabb), a.height = 1 + box2d.b2Max(b.height, e.height), c.height = 1 + box2d.b2Max(a.height, f.height)), c } if (d < -1) { var g = b.child1, h = b.child2; return b.child1 = a, b.parent = a.parent, a.parent = b, null !== b.parent ? b.parent.child1 === a ? b.parent.child1 = b : (box2d.ENABLE_ASSERTS && box2d.b2Assert(b.parent.child2 === a), b.parent.child2 = b) : this.m_root = b, g.height > h.height ? (b.child2 = g, a.child1 = h, h.parent = a, a.aabb.Combine2(c.aabb, h.aabb), b.aabb.Combine2(a.aabb, g.aabb), a.height = 1 + box2d.b2Max(c.height, h.height), b.height = 1 + box2d.b2Max(a.height, g.height)) : (b.child2 = h, a.child1 = g, g.parent = a, a.aabb.Combine2(c.aabb, g.aabb), b.aabb.Combine2(a.aabb, h.aabb), a.height = 1 + box2d.b2Max(c.height, g.height), b.height = 1 + box2d.b2Max(a.height, h.height)), b } return a }, box2d.b2DynamicTree.prototype.GetHeight = function() { return null === this.m_root ? 0 : this.m_root.height }, box2d.b2DynamicTree.prototype.GetAreaRatio = function() { if (null === this.m_root) return 0; var a = this.m_root, b = a.aabb.GetPerimeter(), c = function(a) { if (null === a) return 0; if (a.IsLeaf()) return 0; var b = a.aabb.GetPerimeter(); return b += c(a.child1), b += c(a.child2) }; return c(this.m_root) / b }, box2d.b2DynamicTree.prototype.ComputeHeightNode = function(a) { if (a.IsLeaf()) return 0; var b = this.ComputeHeightNode(a.child1), c = this.ComputeHeightNode(a.child2); return 1 + box2d.b2Max(b, c) }, box2d.b2DynamicTree.prototype.ComputeHeight = function() { return this.ComputeHeightNode(this.m_root) }, box2d.b2DynamicTree.prototype.ValidateStructure = function(a) { if (null !== a) { a === this.m_root && box2d.ENABLE_ASSERTS && box2d.b2Assert(null === a.parent); var b = a, c = b.child1, d = b.child2; if (b.IsLeaf()) return box2d.ENABLE_ASSERTS && box2d.b2Assert(null === c), box2d.ENABLE_ASSERTS && box2d.b2Assert(null === d), void(box2d.ENABLE_ASSERTS && box2d.b2Assert(0 === b.height)); box2d.ENABLE_ASSERTS && box2d.b2Assert(c.parent === a), box2d.ENABLE_ASSERTS && box2d.b2Assert(d.parent === a), this.ValidateStructure(c), this.ValidateStructure(d) } }, box2d.b2DynamicTree.prototype.ValidateMetrics = function(a) { if (null !== a) { var b = a, c = b.child1, d = b.child2; if (b.IsLeaf()) return box2d.ENABLE_ASSERTS && box2d.b2Assert(null === c), box2d.ENABLE_ASSERTS && box2d.b2Assert(null === d), void(box2d.ENABLE_ASSERTS && box2d.b2Assert(0 === b.height)); var e, f = c.height, g = d.height; e = 1 + box2d.b2Max(f, g), box2d.ENABLE_ASSERTS && box2d.b2Assert(b.height === e); var h = box2d.b2DynamicTree.s_aabb; h.Combine2(c.aabb, d.aabb), box2d.ENABLE_ASSERTS && box2d.b2Assert(h.lowerBound === b.aabb.lowerBound), box2d.ENABLE_ASSERTS && box2d.b2Assert(h.upperBound === b.aabb.upperBound), this.ValidateMetrics(c), this.ValidateMetrics(d) } }, box2d.b2DynamicTree.prototype.Validate = function() { this.ValidateStructure(this.m_root), this.ValidateMetrics(this.m_root); for (var a = 0, b = this.m_freeList; null !== b;) b = b.parent, ++a; box2d.ENABLE_ASSERTS && box2d.b2Assert(this.GetHeight() === this.ComputeHeight()) }, box2d.b2DynamicTree.prototype.GetMaxBalance = function() { return function(a, b) { if (null === a) return b; if (a.height <= 1) return b; box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === a.IsLeaf()); var c = a.child1, d = a.child2, e = box2d.b2Abs(d.height - c.height); return box2d.b2Max(b, e) }(this.m_root, 0) }, box2d.b2DynamicTree.prototype.RebuildBottomUp = function() { this.Validate() }, box2d.b2DynamicTree.prototype.ShiftOrigin = function(a) { var b = function(a, c) { if (null !== a && !(a.height <= 1)) { box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === a.IsLeaf()); var d = a.child1, e = a.child2; b(d, c), b(e, c), a.aabb.lowerBound.SelfSub(c), a.aabb.upperBound.SelfSub(c) } }; b(this.m_root, a) }, goog.provide("box2d.b2BroadPhase"), goog.require("box2d.b2Settings"), goog.require("box2d.b2DynamicTree"), box2d.b2Pair = function() {}, box2d.b2Pair.prototype.proxyA = null, box2d.b2Pair.prototype.proxyB = null, box2d.b2BroadPhase = function() { this.m_tree = new box2d.b2DynamicTree, this.m_moveBuffer = new Array, this.m_pairBuffer = new Array }, box2d.b2BroadPhase.prototype.m_tree = null, box2d.b2BroadPhase.prototype.m_proxyCount = 0, box2d.b2BroadPhase.prototype.m_moveCount = 0, box2d.b2BroadPhase.prototype.m_moveBuffer = null, box2d.b2BroadPhase.prototype.m_pairCount = 0, box2d.b2BroadPhase.prototype.m_pairBuffer = null, box2d.b2BroadPhase.prototype.CreateProxy = function(a, b) { var c = this.m_tree.CreateProxy(a, b); return ++this.m_proxyCount, this.BufferMove(c), c }, box2d.b2BroadPhase.prototype.DestroyProxy = function(a) { this.UnBufferMove(a), --this.m_proxyCount, this.m_tree.DestroyProxy(a) }, box2d.b2BroadPhase.prototype.MoveProxy = function(a, b, c) { this.m_tree.MoveProxy(a, b, c) && this.BufferMove(a) }, box2d.b2BroadPhase.prototype.TouchProxy = function(a) { this.BufferMove(a) }, box2d.b2BroadPhase.prototype.GetFatAABB = function(a) { return this.m_tree.GetFatAABB(a) }, box2d.b2BroadPhase.prototype.GetUserData = function(a) { return this.m_tree.GetUserData(a) }, box2d.b2BroadPhase.prototype.TestOverlap = function(a, b) { var c = this.m_tree.GetFatAABB(a), d = this.m_tree.GetFatAABB(b); return box2d.b2TestOverlapAABB(c, d) }, box2d.b2BroadPhase.prototype.GetProxyCount = function() { return this.m_proxyCount }, box2d.b2BroadPhase.prototype.GetTreeHeight = function() { return this.m_tree.GetHeight() }, box2d.b2BroadPhase.prototype.GetTreeBalance = function() { return this.m_tree.GetMaxBalance() }, box2d.b2BroadPhase.prototype.GetTreeQuality = function() { return this.m_tree.GetAreaRatio() }, box2d.b2BroadPhase.prototype.ShiftOrigin = function(a) { this.m_tree.ShiftOrigin(a) }, box2d.b2BroadPhase.prototype.UpdatePairs = function(a) { this.m_pairCount = 0; for (var b = 0; b < this.m_moveCount; ++b) { var c = this.m_moveBuffer[b]; if (null !== c) { var d = this, e = function(a) { if (a.m_id === c.m_id) return !0; d.m_pairCount === d.m_pairBuffer.length && (d.m_pairBuffer[d.m_pairCount] = new box2d.b2Pair); var b = d.m_pairBuffer[d.m_pairCount]; return a.m_id < c.m_id ? (b.proxyA = a, b.proxyB = c) : (b.proxyA = c, b.proxyB = a), ++d.m_pairCount, !0 }, f = this.m_tree.GetFatAABB(c); this.m_tree.Query(e, f) } } this.m_moveCount = 0, this.m_pairBuffer.length = this.m_pairCount, this.m_pairBuffer.sort(box2d.b2PairLessThan); for (var b = 0; b < this.m_pairCount;) { var g = this.m_pairBuffer[b], h = this.m_tree.GetUserData(g.proxyA), i = this.m_tree.GetUserData(g.proxyB); for (a.AddPair(h, i), ++b; b < this.m_pairCount;) { var j = this.m_pairBuffer[b]; if (j.proxyA.m_id !== g.proxyA.m_id || j.proxyB.m_id !== g.proxyB.m_id) break;++b } } }, box2d.b2BroadPhase.prototype.Query = function(a, b) { this.m_tree.Query(a, b) }, box2d.b2BroadPhase.prototype.RayCast = function(a, b) { this.m_tree.RayCast(a, b) }, box2d.b2BroadPhase.prototype.BufferMove = function(a) { this.m_moveBuffer[this.m_moveCount] = a, ++this.m_moveCount }, box2d.b2BroadPhase.prototype.UnBufferMove = function(a) { var b = this.m_moveBuffer.indexOf(a); this.m_moveBuffer[b] = null }, box2d.b2PairLessThan = function(a, b) { return a.proxyA.m_id === b.proxyA.m_id ? a.proxyB.m_id - b.proxyB.m_id : a.proxyA.m_id - b.proxyA.m_id }, goog.provide("box2d.b2ContactManager"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Math"), goog.require("box2d.b2Collision"), goog.require("box2d.b2BroadPhase"), goog.require("box2d.b2ContactFactory"), box2d.b2ContactManager = function() { this.m_broadPhase = new box2d.b2BroadPhase, this.m_contactFactory = new box2d.b2ContactFactory(this.m_allocator) }, box2d.b2ContactManager.prototype.m_broadPhase = null, box2d.b2ContactManager.prototype.m_contactList = null, box2d.b2ContactManager.prototype.m_contactCount = 0, box2d.b2ContactManager.prototype.m_contactFilter = box2d.b2ContactFilter.b2_defaultFilter, box2d.b2ContactManager.prototype.m_contactListener = box2d.b2ContactListener.b2_defaultListener, box2d.b2ContactManager.prototype.m_allocator = null, box2d.b2ContactManager.prototype.m_contactFactory = null, box2d.b2ContactManager.prototype.Destroy = function(a) { var b = a.GetFixtureA(), c = a.GetFixtureB(), d = b.GetBody(), e = c.GetBody(); this.m_contactListener && a.IsTouching() && this.m_contactListener.EndContact(a), a.m_prev && (a.m_prev.m_next = a.m_next), a.m_next && (a.m_next.m_prev = a.m_prev), a === this.m_contactList && (this.m_contactList = a.m_next), a.m_nodeA.prev && (a.m_nodeA.prev.next = a.m_nodeA.next), a.m_nodeA.next && (a.m_nodeA.next.prev = a.m_nodeA.prev), a.m_nodeA === d.m_contactList && (d.m_contactList = a.m_nodeA.next), a.m_nodeB.prev && (a.m_nodeB.prev.next = a.m_nodeB.next), a.m_nodeB.next && (a.m_nodeB.next.prev = a.m_nodeB.prev), a.m_nodeB === e.m_contactList && (e.m_contactList = a.m_nodeB.next), this.m_contactFactory.Destroy(a), --this.m_contactCount }, box2d.b2ContactManager.prototype.Collide = function() { for (var a = this.m_contactList; a;) { var b = a.GetFixtureA(), c = a.GetFixtureB(), d = a.GetChildIndexA(), e = a.GetChildIndexB(), f = b.GetBody(), g = c.GetBody(); if (a.m_flags & box2d.b2ContactFlag.e_filterFlag) { if (!1 === g.ShouldCollide(f)) { var h = a; a = h.m_next, this.Destroy(h); continue } if (this.m_contactFilter && !1 === this.m_contactFilter.ShouldCollide(b, c)) { h = a, a = h.m_next, this.Destroy(h); continue } a.m_flags &= ~box2d.b2ContactFlag.e_filterFlag } var i = f.IsAwake() && f.m_type !== box2d.b2BodyType.b2_staticBody, j = g.IsAwake() && g.m_type !== box2d.b2BodyType.b2_staticBody; if (!1 !== i || !1 !== j) { var k = b.m_proxies[d].proxy, l = c.m_proxies[e].proxy;!1 !== this.m_broadPhase.TestOverlap(k, l) ? (a.Update(this.m_contactListener), a = a.m_next) : (h = a, a = h.m_next, this.Destroy(h)) } else a = a.m_next } }, box2d.b2ContactManager.prototype.FindNewContacts = function() { this.m_broadPhase.UpdatePairs(this) }, box2d.b2ContactManager.prototype.AddPair = function(a, b) { box2d.ENABLE_ASSERTS && box2d.b2Assert(a instanceof box2d.b2FixtureProxy), box2d.ENABLE_ASSERTS && box2d.b2Assert(b instanceof box2d.b2FixtureProxy); var c = a, d = b, e = c.fixture, f = d.fixture, g = c.childIndex, h = d.childIndex, i = e.GetBody(), j = f.GetBody(); if (i !== j) { for (var k = j.GetContactList(); k;) { if (k.other === i) { var l = k.contact.GetFixtureA(), m = k.contact.GetFixtureB(), n = k.contact.GetChildIndexA(), o = k.contact.GetChildIndexB(); if (l === e && m === f && n === g && o === h) return; if (l === f && m === e && n === h && o === g) return } k = k.next } if (!1 !== j.ShouldCollide(i) && (!this.m_contactFilter || !1 !== this.m_contactFilter.ShouldCollide(e, f))) { var p = this.m_contactFactory.Create(e, g, f, h); null !== p && (e = p.GetFixtureA(), f = p.GetFixtureB(), g = p.GetChildIndexA(), h = p.GetChildIndexB(), i = e.m_body, j = f.m_body, p.m_prev = null, p.m_next = this.m_contactList, null !== this.m_contactList && (this.m_contactList.m_prev = p), this.m_contactList = p, p.m_nodeA.contact = p, p.m_nodeA.other = j, p.m_nodeA.prev = null, p.m_nodeA.next = i.m_contactList, null !== i.m_contactList && (i.m_contactList.prev = p.m_nodeA), i.m_contactList = p.m_nodeA, p.m_nodeB.contact = p, p.m_nodeB.other = i, p.m_nodeB.prev = null, p.m_nodeB.next = j.m_contactList, null !== j.m_contactList && (j.m_contactList.prev = p.m_nodeB), j.m_contactList = p.m_nodeB, !1 === e.IsSensor() && !1 === f.IsSensor() && (i.SetAwake(!0), j.SetAwake(!0)), ++this.m_contactCount) } } }, goog.provide("box2d.b2JointFactory"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Math"), goog.require("box2d.b2Joint"), box2d.b2JointFactory.Create = function(a, b) { var c = null; switch (a.type) { case box2d.b2JointType.e_distanceJoint: c = new box2d.b2DistanceJoint(a instanceof box2d.b2DistanceJointDef ? a : null); break; case box2d.b2JointType.e_mouseJoint: c = new box2d.b2MouseJoint(a instanceof box2d.b2MouseJointDef ? a : null); break; case box2d.b2JointType.e_prismaticJoint: c = new box2d.b2PrismaticJoint(a instanceof box2d.b2PrismaticJointDef ? a : null); break; case box2d.b2JointType.e_revoluteJoint: c = new box2d.b2RevoluteJoint(a instanceof box2d.b2RevoluteJointDef ? a : null); break; case box2d.b2JointType.e_pulleyJoint: c = new box2d.b2PulleyJoint(a instanceof box2d.b2PulleyJointDef ? a : null); break; case box2d.b2JointType.e_gearJoint: c = new box2d.b2GearJoint(a instanceof box2d.b2GearJointDef ? a : null); break; case box2d.b2JointType.e_wheelJoint: c = new box2d.b2WheelJoint(a instanceof box2d.b2WheelJointDef ? a : null); break; case box2d.b2JointType.e_weldJoint: c = new box2d.b2WeldJoint(a instanceof box2d.b2WeldJointDef ? a : null); break; case box2d.b2JointType.e_frictionJoint: c = new box2d.b2FrictionJoint(a instanceof box2d.b2FrictionJointDef ? a : null); break; case box2d.b2JointType.e_ropeJoint: c = new box2d.b2RopeJoint(a instanceof box2d.b2RopeJointDef ? a : null); break; case box2d.b2JointType.e_motorJoint: c = new box2d.b2MotorJoint(a instanceof box2d.b2MotorJointDef ? a : null); break; case box2d.b2JointType.e_areaJoint: c = new box2d.b2AreaJoint(a instanceof box2d.b2AreaJointDef ? a : null); break; default: box2d.ENABLE_ASSERTS && box2d.b2Assert(!1) } return c }, box2d.b2JointFactory.Destroy = function(a, b) {}, goog.provide("box2d.b2Draw"), goog.require("box2d.b2Settings"), box2d.b2Color = function(a, b, c) { this.r = a, this.g = b, this.b = c }, box2d.b2Color.prototype.r = .5, box2d.b2Color.prototype.g = .5, box2d.b2Color.prototype.b = .5, box2d.b2Color.prototype.SetRGB = function(a, b, c) { return this.r = a, this.g = b, this.b = c, this }, box2d.b2Color.prototype.MakeStyleString = function(a) { var b = Math.round(Math.max(0, Math.min(255, 255 * this.r))), c = Math.round(Math.max(0, Math.min(255, 255 * this.g))), d = Math.round(Math.max(0, Math.min(255, 255 * this.b))), e = void 0 === a ? 1 : Math.max(0, Math.min(1, a)); return box2d.b2Color.MakeStyleString(b, c, d, e) }, box2d.b2Color.MakeStyleString = function(a, b, c, d) { return d < 1 ? "rgba(" + a + "," + b + "," + c + "," + d + ")" : "rgb(" + a + "," + b + "," + c + ")" }, box2d.b2Color.RED = new box2d.b2Color(1, 0, 0), box2d.b2Color.GREEN = new box2d.b2Color(0, 1, 0), box2d.b2Color.BLUE = new box2d.b2Color(0, 0, 1), box2d.b2DrawFlags = { e_none: 0, e_shapeBit: 1, e_jointBit: 2, e_aabbBit: 4, e_pairBit: 8, e_centerOfMassBit: 16, e_controllerBit: 32, e_all: 63 }, goog.exportProperty(box2d.b2DrawFlags, "e_none", box2d.b2DrawFlags.e_none), goog.exportProperty(box2d.b2DrawFlags, "e_shapeBit", box2d.b2DrawFlags.e_shapeBit), goog.exportProperty(box2d.b2DrawFlags, "e_jointBit", box2d.b2DrawFlags.e_jointBit), goog.exportProperty(box2d.b2DrawFlags, "e_aabbBit", box2d.b2DrawFlags.e_aabbBit), goog.exportProperty(box2d.b2DrawFlags, "e_pairBit", box2d.b2DrawFlags.e_pairBit), goog.exportProperty(box2d.b2DrawFlags, "e_centerOfMassBit", box2d.b2DrawFlags.e_centerOfMassBit), goog.exportProperty(box2d.b2DrawFlags, "e_controllerBit", box2d.b2DrawFlags.e_controllerBit), goog.exportProperty(box2d.b2DrawFlags, "e_all", box2d.b2DrawFlags.e_all), box2d.b2Draw = function() {}, box2d.b2Draw.prototype.m_drawFlags = box2d.b2DrawFlags.e_none, box2d.b2Draw.prototype.SetFlags = function(a) { this.m_drawFlags = a }, box2d.b2Draw.prototype.GetFlags = function() { return this.m_drawFlags }, box2d.b2Draw.prototype.AppendFlags = function(a) { this.m_drawFlags |= a }, box2d.b2Draw.prototype.ClearFlags = function(a) { this.m_drawFlags &= ~a }, box2d.b2Draw.prototype.PushTransform = function(a) {}, box2d.b2Draw.prototype.PopTransform = function(a) {}, box2d.b2Draw.prototype.DrawPolygon = function(a, b, c) {}, box2d.b2Draw.prototype.DrawSolidPolygon = function(a, b, c) {}; box2d.b2Draw.prototype.DrawCircle = function(a, b, c) {}, box2d.b2Draw.prototype.DrawSolidCircle = function(a, b, c, d) {}, box2d.b2Draw.prototype.DrawSegment = function(a, b, c) {}, box2d.b2Draw.prototype.DrawTransform = function(a) {}, goog.provide("box2d.b2Fixture"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Collision"), goog.require("box2d.b2Shape"), box2d.b2Filter = function() {}, box2d.b2Filter.prototype.categoryBits = 1, box2d.b2Filter.prototype.maskBits = 65535, box2d.b2Filter.prototype.groupIndex = 0, box2d.b2Filter.prototype.Clone = function() { return (new box2d.b2Filter).Copy(this) }, box2d.b2Filter.prototype.Copy = function(a) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(this !== a), this.categoryBits = a.categoryBits, this.maskBits = a.maskBits, this.groupIndex = a.groupIndex, this }, box2d.b2FixtureDef = function() { this.filter = new box2d.b2Filter }, box2d.b2FixtureDef.prototype.shape = null, box2d.b2FixtureDef.prototype.userData = null, box2d.b2FixtureDef.prototype.friction = .2, box2d.b2FixtureDef.prototype.restitution = 0, box2d.b2FixtureDef.prototype.density = 0, box2d.b2FixtureDef.prototype.isSensor = !1, box2d.b2FixtureDef.prototype.filter = null, box2d.b2FixtureProxy = function() { this.aabb = new box2d.b2AABB }, box2d.b2FixtureProxy.prototype.aabb = null, box2d.b2FixtureProxy.prototype.fixture = null, box2d.b2FixtureProxy.prototype.childIndex = 0, box2d.b2FixtureProxy.prototype.proxy = null, box2d.b2FixtureProxy.MakeArray = function(a) { return box2d.b2MakeArray(a, function(a) { return new box2d.b2FixtureProxy }) }, box2d.b2Fixture = function() { this.m_proxyCount = 0, this.m_filter = new box2d.b2Filter }, box2d.b2Fixture.prototype.m_density = 0, box2d.b2Fixture.prototype.m_next = null, box2d.b2Fixture.prototype.m_body = null, box2d.b2Fixture.prototype.m_shape = null, box2d.b2Fixture.prototype.m_friction = 0, box2d.b2Fixture.prototype.m_restitution = 0, box2d.b2Fixture.prototype.m_proxies = null, box2d.b2Fixture.prototype.m_proxyCount = 0, box2d.b2Fixture.prototype.m_filter = null, box2d.b2Fixture.prototype.m_isSensor = !1, box2d.b2Fixture.prototype.m_userData = null, box2d.b2Fixture.prototype.GetType = function() { return this.m_shape.GetType() }, box2d.b2Fixture.prototype.GetShape = function() { return this.m_shape }, box2d.b2Fixture.prototype.IsSensor = function() { return this.m_isSensor }, box2d.b2Fixture.prototype.GetFilterData = function() { return this.m_filter }, box2d.b2Fixture.prototype.GetUserData = function() { return this.m_userData }, box2d.b2Fixture.prototype.SetUserData = function(a) { this.m_userData = a }, box2d.b2Fixture.prototype.GetBody = function() { return this.m_body }, box2d.b2Fixture.prototype.GetNext = function() { return this.m_next }, box2d.b2Fixture.prototype.SetDensity = function(a) { this.m_density = a }, box2d.b2Fixture.prototype.GetDensity = function() { return this.m_density }, box2d.b2Fixture.prototype.GetFriction = function() { return this.m_friction }, box2d.b2Fixture.prototype.SetFriction = function(a) { this.m_friction = a }, box2d.b2Fixture.prototype.GetRestitution = function() { return this.m_restitution }, box2d.b2Fixture.prototype.SetRestitution = function(a) { this.m_restitution = a }, box2d.b2Fixture.prototype.TestPoint = function(a) { return this.m_shape.TestPoint(this.m_body.GetTransform(), a) }, box2d.b2Fixture.prototype.RayCast = function(a, b, c) { return this.m_shape.RayCast(a, b, this.m_body.GetTransform(), c) }, box2d.b2Fixture.prototype.GetMassData = function(a) { return a = a || new box2d.b2MassData, this.m_shape.ComputeMass(a, this.m_density), a }, box2d.b2Fixture.prototype.GetAABB = function(a) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(0 <= a && a < this.m_proxyCount), this.m_proxies[a].aabb }, box2d.b2Fixture.prototype.Create = function(a, b) { this.m_userData = b.userData, this.m_friction = b.friction, this.m_restitution = b.restitution, this.m_body = a, this.m_next = null, this.m_filter.Copy(b.filter), this.m_isSensor = b.isSensor, this.m_shape = b.shape.Clone(), this.m_proxies = box2d.b2FixtureProxy.MakeArray(this.m_shape.GetChildCount()), this.m_proxyCount = 0, this.m_density = b.density }, box2d.b2Fixture.prototype.Destroy = function() { box2d.ENABLE_ASSERTS && box2d.b2Assert(0 === this.m_proxyCount), this.m_shape = null }, box2d.b2Fixture.prototype.CreateProxies = function(a, b) { box2d.ENABLE_ASSERTS && box2d.b2Assert(0 === this.m_proxyCount), this.m_proxyCount = this.m_shape.GetChildCount(); for (var c = 0; c < this.m_proxyCount; ++c) { var d = this.m_proxies[c]; this.m_shape.ComputeAABB(d.aabb, b, c), d.proxy = a.CreateProxy(d.aabb, d), d.fixture = this, d.childIndex = c } }, box2d.b2Fixture.prototype.DestroyProxies = function(a) { for (var b = 0; b < this.m_proxyCount; ++b) { var c = this.m_proxies[b]; a.DestroyProxy(c.proxy), c.proxy = null } this.m_proxyCount = 0 }, box2d.b2Fixture.prototype.Synchronize = function(a, b, c) { if (0 !== this.m_proxyCount) for (var d = 0; d < this.m_proxyCount; ++d) { var e = this.m_proxies[d], f = box2d.b2Fixture.prototype.Synchronize.s_aabb1, g = box2d.b2Fixture.prototype.Synchronize.s_aabb2; this.m_shape.ComputeAABB(f, b, d), this.m_shape.ComputeAABB(g, c, d), e.aabb.Combine2(f, g); var h = box2d.b2SubVV(c.p, b.p, box2d.b2Fixture.prototype.Synchronize.s_displacement); a.MoveProxy(e.proxy, e.aabb, h) } }, box2d.b2Fixture.prototype.Synchronize.s_aabb1 = new box2d.b2AABB, box2d.b2Fixture.prototype.Synchronize.s_aabb2 = new box2d.b2AABB, box2d.b2Fixture.prototype.Synchronize.s_displacement = new box2d.b2Vec2, box2d.b2Fixture.prototype.SetFilterData = function(a) { this.m_filter.Copy(a), this.Refilter() }, box2d.b2Fixture.prototype.Refilter = function() { if (null != this.m_body) { for (var a = this.m_body.GetContactList(); a;) { var b = a.contact, c = b.GetFixtureA(), d = b.GetFixtureB(); c !== this && d !== this || b.FlagForFiltering(), a = a.next } var e = this.m_body.GetWorld(); if (null !== e) for (var f = e.m_contactManager.m_broadPhase, g = 0; g < this.m_proxyCount; ++g) f.TouchProxy(this.m_proxies[g].proxy) } }, box2d.b2Fixture.prototype.SetSensor = function(a) { a !== this.m_isSensor && (this.m_body.SetAwake(!0), this.m_isSensor = a) }, box2d.b2Fixture.prototype.Dump = function(a) { box2d.DEBUG && (box2d.b2Log(" /*box2d.b2FixtureDef*/ var fd = new box2d.b2FixtureDef();\n"), box2d.b2Log(" fd.friction = %.15f;\n", this.m_friction), box2d.b2Log(" fd.restitution = %.15f;\n", this.m_restitution), box2d.b2Log(" fd.density = %.15f;\n", this.m_density), box2d.b2Log(" fd.isSensor = %s;\n", this.m_isSensor ? "true" : "false"), box2d.b2Log(" fd.filter.categoryBits = %d;\n", this.m_filter.categoryBits), box2d.b2Log(" fd.filter.maskBits = %d;\n", this.m_filter.maskBits), box2d.b2Log(" fd.filter.groupIndex = %d;\n", this.m_filter.groupIndex), this.m_shape.Dump(), box2d.b2Log("\n"), box2d.b2Log(" fd.shape = shape;\n"), box2d.b2Log("\n"), box2d.b2Log(" bodies[%d].CreateFixture(fd);\n", a)) }, goog.provide("box2d.b2Body"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Math"), goog.require("box2d.b2Fixture"), box2d.b2BodyType = { b2_unknown: -1, b2_staticBody: 0, b2_kinematicBody: 1, b2_dynamicBody: 2, b2_bulletBody: 3 }, goog.exportProperty(box2d.b2BodyType, "b2_unknown", box2d.b2BodyType.b2_unknown), goog.exportProperty(box2d.b2BodyType, "b2_staticBody", box2d.b2BodyType.b2_staticBody), goog.exportProperty(box2d.b2BodyType, "b2_kinematicBody", box2d.b2BodyType.b2_kinematicBody), goog.exportProperty(box2d.b2BodyType, "b2_dynamicBody", box2d.b2BodyType.b2_dynamicBody), goog.exportProperty(box2d.b2BodyType, "b2_bulletBody", box2d.b2BodyType.b2_bulletBody), box2d.b2BodyDef = function() { this.position = new box2d.b2Vec2(0, 0), this.linearVelocity = new box2d.b2Vec2(0, 0) }, box2d.b2BodyDef.prototype.type = box2d.b2BodyType.b2_staticBody, box2d.b2BodyDef.prototype.position = null, box2d.b2BodyDef.prototype.angle = 0, box2d.b2BodyDef.prototype.linearVelocity = null, box2d.b2BodyDef.prototype.angularVelocity = 0, box2d.b2BodyDef.prototype.linearDamping = 0, box2d.b2BodyDef.prototype.angularDamping = 0, box2d.b2BodyDef.prototype.allowSleep = !0, box2d.b2BodyDef.prototype.awake = !0, box2d.b2BodyDef.prototype.fixedRotation = !1, box2d.b2BodyDef.prototype.bullet = !1, box2d.b2BodyDef.prototype.active = !0, box2d.b2BodyDef.prototype.userData = null, box2d.b2BodyDef.prototype.gravityScale = 1, box2d.b2BodyFlag = { e_none: 0, e_islandFlag: 1, e_awakeFlag: 2, e_autoSleepFlag: 4, e_bulletFlag: 8, e_fixedRotationFlag: 16, e_activeFlag: 32, e_toiFlag: 64 }, goog.exportProperty(box2d.b2BodyFlag, "e_none", box2d.b2BodyFlag.e_none), goog.exportProperty(box2d.b2BodyFlag, "e_islandFlag", box2d.b2BodyFlag.e_islandFlag), goog.exportProperty(box2d.b2BodyFlag, "e_awakeFlag", box2d.b2BodyFlag.e_awakeFlag), goog.exportProperty(box2d.b2BodyFlag, "e_autoSleepFlag", box2d.b2BodyFlag.e_autoSleepFlag), goog.exportProperty(box2d.b2BodyFlag, "e_bulletFlag", box2d.b2BodyFlag.e_bulletFlag), goog.exportProperty(box2d.b2BodyFlag, "e_fixedRotationFlag", box2d.b2BodyFlag.e_fixedRotationFlag), goog.exportProperty(box2d.b2BodyFlag, "e_activeFlag", box2d.b2BodyFlag.e_activeFlag), goog.exportProperty(box2d.b2BodyFlag, "e_toiFlag", box2d.b2BodyFlag.e_toiFlag), box2d.b2Body = function(a, b) { this.m_xf = new box2d.b2Transform, this.m_out_xf = new box2d.b2Transform, this.m_sweep = new box2d.b2Sweep, this.m_out_sweep = new box2d.b2Sweep, this.m_linearVelocity = new box2d.b2Vec2, this.m_out_linearVelocity = new box2d.b2Vec2, this.m_force = new box2d.b2Vec2, box2d.ENABLE_ASSERTS && box2d.b2Assert(a.position.IsValid()), box2d.ENABLE_ASSERTS && box2d.b2Assert(a.linearVelocity.IsValid()), box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a.angle)), box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a.angularVelocity)), box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a.gravityScale) && a.gravityScale >= 0), box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a.angularDamping) && a.angularDamping >= 0), box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a.linearDamping) && a.linearDamping >= 0), this.m_flags = box2d.b2BodyFlag.e_none, a.bullet && (this.m_flags |= box2d.b2BodyFlag.e_bulletFlag), a.fixedRotation && (this.m_flags |= box2d.b2BodyFlag.e_fixedRotationFlag), a.allowSleep && (this.m_flags |= box2d.b2BodyFlag.e_autoSleepFlag), a.awake && (this.m_flags |= box2d.b2BodyFlag.e_awakeFlag), a.active && (this.m_flags |= box2d.b2BodyFlag.e_activeFlag), this.m_world = b, this.m_xf.p.Copy(a.position), this.m_xf.q.SetAngleRadians(a.angle), this.m_sweep.localCenter.SetZero(), this.m_sweep.c0.Copy(this.m_xf.p), this.m_sweep.c.Copy(this.m_xf.p), this.m_sweep.a0 = a.angle, this.m_sweep.a = a.angle, this.m_sweep.alpha0 = 0, this.m_linearVelocity.Copy(a.linearVelocity), this.m_angularVelocity = a.angularVelocity, this.m_linearDamping = a.linearDamping, this.m_angularDamping = a.angularDamping, this.m_gravityScale = a.gravityScale, this.m_force.SetZero(), this.m_torque = 0, this.m_sleepTime = 0, this.m_type = a.type, a.type === box2d.b2BodyType.b2_dynamicBody ? (this.m_mass = 1, this.m_invMass = 1) : (this.m_mass = 0, this.m_invMass = 0), this.m_I = 0, this.m_invI = 0, this.m_userData = a.userData, this.m_fixtureList = null, this.m_fixtureCount = 0, this.m_controllerList = null, this.m_controllerCount = 0 }, box2d.b2Body.prototype.m_flags = box2d.b2BodyFlag.e_none, box2d.b2Body.prototype.m_islandIndex = 0, box2d.b2Body.prototype.m_world = null, box2d.b2Body.prototype.m_xf = null, box2d.b2Body.prototype.m_out_xf = null, box2d.b2Body.prototype.m_sweep = null, box2d.b2Body.prototype.m_out_sweep = null, box2d.b2Body.prototype.m_jointList = null, box2d.b2Body.prototype.m_contactList = null, box2d.b2Body.prototype.m_prev = null, box2d.b2Body.prototype.m_next = null, box2d.b2Body.prototype.m_linearVelocity = null, box2d.b2Body.prototype.m_out_linearVelocity = null, box2d.b2Body.prototype.m_angularVelocity = 0, box2d.b2Body.prototype.m_linearDamping = 0, box2d.b2Body.prototype.m_angularDamping = 0, box2d.b2Body.prototype.m_gravityScale = 1, box2d.b2Body.prototype.m_force = null, box2d.b2Body.prototype.m_torque = 0, box2d.b2Body.prototype.m_sleepTime = 0, box2d.b2Body.prototype.m_type = box2d.b2BodyType.b2_staticBody, box2d.b2Body.prototype.m_mass = 1, box2d.b2Body.prototype.m_invMass = 1, box2d.b2Body.prototype.m_I = 0, box2d.b2Body.prototype.m_invI = 0, box2d.b2Body.prototype.m_userData = null, box2d.b2Body.prototype.m_fixtureList = null, box2d.b2Body.prototype.m_fixtureCount = 0, box2d.b2Body.prototype.m_controllerList = null, box2d.b2Body.prototype.m_controllerCount = 0, box2d.b2Body.prototype.CreateFixture = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.m_world.IsLocked()), !0 === this.m_world.IsLocked()) return null; var b = new box2d.b2Fixture; if (b.Create(this, a), this.m_flags & box2d.b2BodyFlag.e_activeFlag) { var c = this.m_world.m_contactManager.m_broadPhase; b.CreateProxies(c, this.m_xf) } return b.m_next = this.m_fixtureList, this.m_fixtureList = b, ++this.m_fixtureCount, b.m_body = this, b.m_density > 0 && this.ResetMassData(), this.m_world.m_flags |= box2d.b2WorldFlag.e_newFixture, b }, box2d.b2Body.prototype.CreateFixture2 = function(a, b) { void 0 === b && (b = 0); var c = box2d.b2Body.prototype.CreateFixture2.s_def; return c.shape = a, c.density = b, this.CreateFixture(c) }, box2d.b2Body.prototype.CreateFixture2.s_def = new box2d.b2FixtureDef, box2d.b2Body.prototype.DestroyFixture = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.m_world.IsLocked()), !0 !== this.m_world.IsLocked()) { box2d.ENABLE_ASSERTS && box2d.b2Assert(a.m_body === this), box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_fixtureCount > 0); for (var b = this.m_fixtureList, c = null, d = !1; null !== b;) { if (b === a) { c ? c.m_next = a.m_next : this.m_fixtureList = a.m_next, d = !0; break } c = b, b = b.m_next } box2d.ENABLE_ASSERTS && box2d.b2Assert(d); for (var e = this.m_contactList; e;) { var f = e.contact; e = e.next; var g = f.GetFixtureA(), h = f.GetFixtureB(); a !== g && a !== h || this.m_world.m_contactManager.Destroy(f) } if (this.m_flags & box2d.b2BodyFlag.e_activeFlag) { var i = this.m_world.m_contactManager.m_broadPhase; a.DestroyProxies(i) } a.Destroy(), a.m_body = null, a.m_next = null, --this.m_fixtureCount, this.ResetMassData() } }, box2d.b2Body.prototype.SetTransformVecRadians = function(a, b) { this.SetTransformXYRadians(a.x, a.y, b) }, box2d.b2Body.prototype.SetTransformXYRadians = function(a, b, c) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.m_world.IsLocked()), !0 !== this.m_world.IsLocked() && (this.m_xf.p.x !== a || this.m_xf.p.y !== b || this.m_xf.q.GetAngleRadians() !== c)) { this.m_xf.q.SetAngleRadians(c), this.m_xf.p.SetXY(a, b), box2d.b2MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c), this.m_sweep.a = c, this.m_sweep.c0.Copy(this.m_sweep.c), this.m_sweep.a0 = c; for (var d = this.m_world.m_contactManager.m_broadPhase, e = this.m_fixtureList; e; e = e.m_next) e.Synchronize(d, this.m_xf, this.m_xf) } }, box2d.b2Body.prototype.SetTransform = function(a) { this.SetTransformVecRadians(a.p, a.GetAngleRadians()) }, box2d.b2Body.prototype.GetTransform = function(a) { return a = a || this.m_out_xf, a.Copy(this.m_xf) }, box2d.b2Body.prototype.GetPosition = function(a) { return a = a || this.m_out_xf.p, a.Copy(this.m_xf.p) }, box2d.b2Body.prototype.SetPosition = function(a) { this.SetTransformVecRadians(a, this.GetAngleRadians()) }, box2d.b2Body.prototype.SetPositionXY = function(a, b) { this.SetTransformXYRadians(a, b, this.GetAngleRadians()) }, box2d.b2Body.prototype.GetAngle = function() { return this.m_sweep.a }, box2d.b2Body.prototype.GetAngleRadians = box2d.b2Body.prototype.GetAngle, box2d.b2Body.prototype.GetAngleDegrees = function() { return box2d.b2RadToDeg(this.GetAngle()) }, box2d.b2Body.prototype.SetAngle = function(a) { this.SetTransformVecRadians(this.GetPosition(), a) }, box2d.b2Body.prototype.SetAngleRadians = box2d.b2Body.prototype.SetAngle, box2d.b2Body.prototype.SetAngleDegrees = function(a) { this.SetAngle(box2d.b2DegToRad(a)) }, box2d.b2Body.prototype.GetWorldCenter = function(a) { return a = a || this.m_out_sweep.c, a.Copy(this.m_sweep.c) }, box2d.b2Body.prototype.GetLocalCenter = function(a) { return a = a || this.m_out_sweep.localCenter, a.Copy(this.m_sweep.localCenter) }, box2d.b2Body.prototype.SetLinearVelocity = function(a) { this.m_type !== box2d.b2BodyType.b2_staticBody && (box2d.b2DotVV(a, a) > 0 && this.SetAwake(!0), this.m_linearVelocity.Copy(a)) }, box2d.b2Body.prototype.GetLinearVelocity = function(a) { return a = a || this.m_out_linearVelocity, a.Copy(this.m_linearVelocity) }, box2d.b2Body.prototype.SetAngularVelocity = function(a) { this.m_type !== box2d.b2BodyType.b2_staticBody && (a * a > 0 && this.SetAwake(!0), this.m_angularVelocity = a) }, box2d.b2Body.prototype.GetAngularVelocity = function() { return this.m_angularVelocity }, box2d.b2Body.prototype.GetDefinition = function(a) { return a.type = this.GetType(), a.allowSleep = (this.m_flags & box2d.b2BodyFlag.e_autoSleepFlag) === box2d.b2BodyFlag.e_autoSleepFlag, a.angle = this.GetAngleRadians(), a.angularDamping = this.m_angularDamping, a.gravityScale = this.m_gravityScale, a.angularVelocity = this.m_angularVelocity, a.fixedRotation = (this.m_flags & box2d.b2BodyFlag.e_fixedRotationFlag) === box2d.b2BodyFlag.e_fixedRotationFlag, a.bullet = (this.m_flags & box2d.b2BodyFlag.e_bulletFlag) === box2d.b2BodyFlag.e_bulletFlag, a.awake = (this.m_flags & box2d.b2BodyFlag.e_awakeFlag) === box2d.b2BodyFlag.e_awakeFlag, a.linearDamping = this.m_linearDamping, a.linearVelocity.Copy(this.GetLinearVelocity()), a.position.Copy(this.GetPosition()), a.userData = this.GetUserData(), a }, box2d.b2Body.prototype.ApplyForce = function(a, b, c) { c = c || !0, this.m_type === box2d.b2BodyType.b2_dynamicBody && (c && 0 == (this.m_flags & box2d.b2BodyFlag.e_awakeFlag) && this.SetAwake(!0), this.m_flags & box2d.b2BodyFlag.e_awakeFlag && (this.m_force.x += a.x, this.m_force.y += a.y, this.m_torque += (b.x - this.m_sweep.c.x) * a.y - (b.y - this.m_sweep.c.y) * a.x)) }, box2d.b2Body.prototype.ApplyForceToCenter = function(a, b) { b = b || !0, this.m_type === box2d.b2BodyType.b2_dynamicBody && (b && 0 == (this.m_flags & box2d.b2BodyFlag.e_awakeFlag) && this.SetAwake(!0), this.m_flags & box2d.b2BodyFlag.e_awakeFlag && (this.m_force.x += a.x, this.m_force.y += a.y)) }, box2d.b2Body.prototype.ApplyTorque = function(a, b) { b = b || !0, this.m_type === box2d.b2BodyType.b2_dynamicBody && (b && 0 == (this.m_flags & box2d.b2BodyFlag.e_awakeFlag) && this.SetAwake(!0), this.m_flags & box2d.b2BodyFlag.e_awakeFlag && (this.m_torque += a)) }, box2d.b2Body.prototype.ApplyLinearImpulse = function(a, b, c) { c = c || !0, this.m_type === box2d.b2BodyType.b2_dynamicBody && (c && 0 == (this.m_flags & box2d.b2BodyFlag.e_awakeFlag) && this.SetAwake(!0), this.m_flags & box2d.b2BodyFlag.e_awakeFlag && (this.m_linearVelocity.x += this.m_invMass * a.x, this.m_linearVelocity.y += this.m_invMass * a.y, this.m_angularVelocity += this.m_invI * ((b.x - this.m_sweep.c.x) * a.y - (b.y - this.m_sweep.c.y) * a.x))) }, box2d.b2Body.prototype.ApplyAngularImpulse = function(a, b) { b = b || !0, this.m_type === box2d.b2BodyType.b2_dynamicBody && (b && 0 == (this.m_flags & box2d.b2BodyFlag.e_awakeFlag) && this.SetAwake(!0), this.m_flags & box2d.b2BodyFlag.e_awakeFlag && (this.m_angularVelocity += this.m_invI * a)) }, box2d.b2Body.prototype.GetMass = function() { return this.m_mass }, box2d.b2Body.prototype.GetInertia = function() { return this.m_I + this.m_mass * box2d.b2DotVV(this.m_sweep.localCenter, this.m_sweep.localCenter) }, box2d.b2Body.prototype.GetMassData = function(a) { return a.mass = this.m_mass, a.I = this.m_I + this.m_mass * box2d.b2DotVV(this.m_sweep.localCenter, this.m_sweep.localCenter), a.center.Copy(this.m_sweep.localCenter), a }, box2d.b2Body.prototype.SetMassData = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.m_world.IsLocked()), !0 !== this.m_world.IsLocked() && this.m_type === box2d.b2BodyType.b2_dynamicBody) { this.m_invMass = 0, this.m_I = 0, this.m_invI = 0, this.m_mass = a.mass, this.m_mass <= 0 && (this.m_mass = 1), this.m_invMass = 1 / this.m_mass, a.I > 0 && 0 == (this.m_flags & box2d.b2BodyFlag.e_fixedRotationFlag) && (this.m_I = a.I - this.m_mass * box2d.b2DotVV(a.center, a.center), box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_I > 0), this.m_invI = 1 / this.m_I); var b = box2d.b2Body.prototype.SetMassData.s_oldCenter.Copy(this.m_sweep.c); this.m_sweep.localCenter.Copy(a.center), box2d.b2MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c), this.m_sweep.c0.Copy(this.m_sweep.c), box2d.b2AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, box2d.b2SubVV(this.m_sweep.c, b, box2d.b2Vec2.s_t0), this.m_linearVelocity) } }, box2d.b2Body.prototype.SetMassData.s_oldCenter = new box2d.b2Vec2, box2d.b2Body.prototype.ResetMassData = function() { if (this.m_mass = 0, this.m_invMass = 0, this.m_I = 0, this.m_invI = 0, this.m_sweep.localCenter.SetZero(), this.m_type === box2d.b2BodyType.b2_staticBody || this.m_type === box2d.b2BodyType.b2_kinematicBody) return this.m_sweep.c0.Copy(this.m_xf.p), this.m_sweep.c.Copy(this.m_xf.p), void(this.m_sweep.a0 = this.m_sweep.a); box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_type === box2d.b2BodyType.b2_dynamicBody); for (var a = box2d.b2Body.prototype.ResetMassData.s_localCenter.SetZero(), b = this.m_fixtureList; b; b = b.m_next) if (0 !== b.m_density) { var c = b.GetMassData(box2d.b2Body.prototype.ResetMassData.s_massData); this.m_mass += c.mass, a.x += c.center.x * c.mass, a.y += c.center.y * c.mass, this.m_I += c.I } this.m_mass > 0 ? (this.m_invMass = 1 / this.m_mass, a.x *= this.m_invMass, a.y *= this.m_invMass) : (this.m_mass = 1, this.m_invMass = 1), this.m_I > 0 && 0 == (this.m_flags & box2d.b2BodyFlag.e_fixedRotationFlag) ? (this.m_I -= this.m_mass * box2d.b2DotVV(a, a), box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_I > 0), this.m_invI = 1 / this.m_I) : (this.m_I = 0, this.m_invI = 0); var d = box2d.b2Body.prototype.ResetMassData.s_oldCenter.Copy(this.m_sweep.c); this.m_sweep.localCenter.Copy(a), box2d.b2MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c), this.m_sweep.c0.Copy(this.m_sweep.c), box2d.b2AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, box2d.b2SubVV(this.m_sweep.c, d, box2d.b2Vec2.s_t0), this.m_linearVelocity) }, box2d.b2Body.prototype.ResetMassData.s_localCenter = new box2d.b2Vec2, box2d.b2Body.prototype.ResetMassData.s_oldCenter = new box2d.b2Vec2, box2d.b2Body.prototype.ResetMassData.s_massData = new box2d.b2MassData, box2d.b2Body.prototype.GetWorldPoint = function(a, b) { return box2d.b2MulXV(this.m_xf, a, b) }, box2d.b2Body.prototype.GetWorldVector = function(a, b) { return box2d.b2MulRV(this.m_xf.q, a, b) }, box2d.b2Body.prototype.GetLocalPoint = function(a, b) { return box2d.b2MulTXV(this.m_xf, a, b) }, box2d.b2Body.prototype.GetLocalVector = function(a, b) { return box2d.b2MulTRV(this.m_xf.q, a, b) }, box2d.b2Body.prototype.GetLinearVelocityFromWorldPoint = function(a, b) { return box2d.b2AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, box2d.b2SubVV(a, this.m_sweep.c, box2d.b2Vec2.s_t0), b) }, box2d.b2Body.prototype.GetLinearVelocityFromLocalPoint = function(a, b) { return this.GetLinearVelocityFromWorldPoint(this.GetWorldPoint(a, b), b) }, box2d.b2Body.prototype.GetLinearDamping = function() { return this.m_linearDamping }, box2d.b2Body.prototype.SetLinearDamping = function(a) { this.m_linearDamping = a }, box2d.b2Body.prototype.GetAngularDamping = function() { return this.m_angularDamping }, box2d.b2Body.prototype.SetAngularDamping = function(a) { this.m_angularDamping = a }, box2d.b2Body.prototype.GetGravityScale = function() { return this.m_gravityScale }, box2d.b2Body.prototype.SetGravityScale = function(a) { this.m_gravityScale = a }, box2d.b2Body.prototype.SetType = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.m_world.IsLocked()), !0 !== this.m_world.IsLocked() && this.m_type !== a) { this.m_type = a, this.ResetMassData(), this.m_type === box2d.b2BodyType.b2_staticBody && (this.m_linearVelocity.SetZero(), this.m_angularVelocity = 0, this.m_sweep.a0 = this.m_sweep.a, this.m_sweep.c0.Copy(this.m_sweep.c), this.SynchronizeFixtures()), this.SetAwake(!0), this.m_force.SetZero(), this.m_torque = 0; for (var b = this.m_contactList; b;) { var c = b; b = b.next, this.m_world.m_contactManager.Destroy(c.contact) } this.m_contactList = null; for (var d = this.m_world.m_contactManager.m_broadPhase, e = this.m_fixtureList; e; e = e.m_next) for (var f = e.m_proxyCount, g = 0; g < f; ++g) d.TouchProxy(e.m_proxies[g].proxy) } }, box2d.b2Body.prototype.GetType = function() { return this.m_type }, box2d.b2Body.prototype.SetBullet = function(a) { a ? this.m_flags |= box2d.b2BodyFlag.e_bulletFlag : this.m_flags &= ~box2d.b2BodyFlag.e_bulletFlag }, box2d.b2Body.prototype.IsBullet = function() { return (this.m_flags & box2d.b2BodyFlag.e_bulletFlag) === box2d.b2BodyFlag.e_bulletFlag }, box2d.b2Body.prototype.SetSleepingAllowed = function(a) { a ? this.m_flags |= box2d.b2BodyFlag.e_autoSleepFlag : (this.m_flags &= ~box2d.b2BodyFlag.e_autoSleepFlag, this.SetAwake(!0)) }, box2d.b2Body.prototype.IsSleepingAllowed = function() { return (this.m_flags & box2d.b2BodyFlag.e_autoSleepFlag) === box2d.b2BodyFlag.e_autoSleepFlag }, box2d.b2Body.prototype.SetAwake = function(a) { a ? 0 == (this.m_flags & box2d.b2BodyFlag.e_awakeFlag) && (this.m_flags |= box2d.b2BodyFlag.e_awakeFlag, this.m_sleepTime = 0) : (this.m_flags &= ~box2d.b2BodyFlag.e_awakeFlag, this.m_sleepTime = 0, this.m_linearVelocity.SetZero(), this.m_angularVelocity = 0, this.m_force.SetZero(), this.m_torque = 0) }, box2d.b2Body.prototype.IsAwake = function() { return (this.m_flags & box2d.b2BodyFlag.e_awakeFlag) === box2d.b2BodyFlag.e_awakeFlag }, box2d.b2Body.prototype.SetActive = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.m_world.IsLocked()), a !== this.IsActive()) if (a) { this.m_flags |= box2d.b2BodyFlag.e_activeFlag; for (var b = this.m_world.m_contactManager.m_broadPhase, c = this.m_fixtureList; c; c = c.m_next) c.CreateProxies(b, this.m_xf) } else { this.m_flags &= ~box2d.b2BodyFlag.e_activeFlag; for (var b = this.m_world.m_contactManager.m_broadPhase, c = this.m_fixtureList; c; c = c.m_next) c.DestroyProxies(b); for (var d = this.m_contactList; d;) { var e = d; d = d.next, this.m_world.m_contactManager.Destroy(e.contact) } this.m_contactList = null } }, box2d.b2Body.prototype.IsActive = function() { return (this.m_flags & box2d.b2BodyFlag.e_activeFlag) === box2d.b2BodyFlag.e_activeFlag }, box2d.b2Body.prototype.SetFixedRotation = function(a) { (this.m_flags & box2d.b2BodyFlag.e_fixedRotationFlag) === box2d.b2BodyFlag.e_fixedRotationFlag !== a && (a ? this.m_flags |= box2d.b2BodyFlag.e_fixedRotationFlag : this.m_flags &= ~box2d.b2BodyFlag.e_fixedRotationFlag, this.m_angularVelocity = 0, this.ResetMassData()) }, box2d.b2Body.prototype.IsFixedRotation = function() { return (this.m_flags & box2d.b2BodyFlag.e_fixedRotationFlag) === box2d.b2BodyFlag.e_fixedRotationFlag }, box2d.b2Body.prototype.GetFixtureList = function() { return this.m_fixtureList }, box2d.b2Body.prototype.GetJointList = function() { return this.m_jointList }, box2d.b2Body.prototype.GetContactList = function() { return this.m_contactList }; box2d.b2Body.prototype.GetNext = function() { return this.m_next }, box2d.b2Body.prototype.GetUserData = function() { return this.m_userData }, box2d.b2Body.prototype.SetUserData = function(a) { this.m_userData = a }, box2d.b2Body.prototype.GetWorld = function() { return this.m_world }, box2d.b2Body.prototype.SynchronizeFixtures = function() { var a = box2d.b2Body.prototype.SynchronizeFixtures.s_xf1; a.q.SetAngleRadians(this.m_sweep.a0), box2d.b2MulRV(a.q, this.m_sweep.localCenter, a.p), box2d.b2SubVV(this.m_sweep.c0, a.p, a.p); for (var b = this.m_world.m_contactManager.m_broadPhase, c = this.m_fixtureList; c; c = c.m_next) c.Synchronize(b, a, this.m_xf) }, box2d.b2Body.prototype.SynchronizeFixtures.s_xf1 = new box2d.b2Transform, box2d.b2Body.prototype.SynchronizeTransform = function() { this.m_xf.q.SetAngleRadians(this.m_sweep.a), box2d.b2MulRV(this.m_xf.q, this.m_sweep.localCenter, this.m_xf.p), box2d.b2SubVV(this.m_sweep.c, this.m_xf.p, this.m_xf.p) }, box2d.b2Body.prototype.ShouldCollide = function(a) { if (this.m_type !== box2d.b2BodyType.b2_dynamicBody && a.m_type !== box2d.b2BodyType.b2_dynamicBody) return !1; for (var b = this.m_jointList; b; b = b.next) if (b.other === a && !1 === b.joint.m_collideConnected) return !1; return !0 }, box2d.b2Body.prototype.Advance = function(a) { this.m_sweep.Advance(a), this.m_sweep.c.Copy(this.m_sweep.c0), this.m_sweep.a = this.m_sweep.a0, this.m_xf.q.SetAngleRadians(this.m_sweep.a), box2d.b2MulRV(this.m_xf.q, this.m_sweep.localCenter, this.m_xf.p), box2d.b2SubVV(this.m_sweep.c, this.m_xf.p, this.m_xf.p) }, box2d.b2Body.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_islandIndex; box2d.b2Log("if (true)\n"), box2d.b2Log("{\n"), box2d.b2Log(" /*box2d.b2BodyDef*/ var bd = new box2d.b2BodyDef();\n"); var b = ""; switch (this.m_type) { case box2d.b2BodyType.b2_staticBody: b = "box2d.b2BodyType.b2_staticBody"; break; case box2d.b2BodyType.b2_kinematicBody: b = "box2d.b2BodyType.b2_kinematicBody"; break; case box2d.b2BodyType.b2_dynamicBody: b = "box2d.b2BodyType.b2_dynamicBody"; break; default: box2d.ENABLE_ASSERTS && box2d.b2Assert(!1) } box2d.b2Log(" bd.type = %s;\n", b), box2d.b2Log(" bd.position.SetXY(%.15f, %.15f);\n", this.m_xf.p.x, this.m_xf.p.y), box2d.b2Log(" bd.angle = %.15f;\n", this.m_sweep.a), box2d.b2Log(" bd.linearVelocity.SetXY(%.15f, %.15f);\n", this.m_linearVelocity.x, this.m_linearVelocity.y), box2d.b2Log(" bd.angularVelocity = %.15f;\n", this.m_angularVelocity), box2d.b2Log(" bd.linearDamping = %.15f;\n", this.m_linearDamping), box2d.b2Log(" bd.angularDamping = %.15f;\n", this.m_angularDamping), box2d.b2Log(" bd.allowSleep = %s;\n", this.m_flags & box2d.b2BodyFlag.e_autoSleepFlag ? "true" : "false"), box2d.b2Log(" bd.awake = %s;\n", this.m_flags & box2d.b2BodyFlag.e_awakeFlag ? "true" : "false"), box2d.b2Log(" bd.fixedRotation = %s;\n", this.m_flags & box2d.b2BodyFlag.e_fixedRotationFlag ? "true" : "false"), box2d.b2Log(" bd.bullet = %s;\n", this.m_flags & box2d.b2BodyFlag.e_bulletFlag ? "true" : "false"), box2d.b2Log(" bd.active = %s;\n", this.m_flags & box2d.b2BodyFlag.e_activeFlag ? "true" : "false"), box2d.b2Log(" bd.gravityScale = %.15f;\n", this.m_gravityScale), box2d.b2Log("\n"), box2d.b2Log(" bodies[%d] = this.m_world.CreateBody(bd);\n", this.m_islandIndex), box2d.b2Log("\n"); for (var c = this.m_fixtureList; c; c = c.m_next) box2d.b2Log(" if (true)\n"), box2d.b2Log(" {\n"), c.Dump(a), box2d.b2Log(" }\n"); box2d.b2Log("}\n") } }, box2d.b2Body.prototype.GetControllerList = function() { return this.m_controllerList }, box2d.b2Body.prototype.GetControllerCount = function() { return this.m_controllerCount }, goog.provide("box2d.b2World"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Draw"), goog.require("box2d.b2ContactManager"), goog.require("box2d.b2ContactSolver"), goog.require("box2d.b2Island"), goog.require("box2d.b2Body"), goog.require("box2d.b2Math"), goog.require("box2d.b2Collision"), goog.require("box2d.b2TimeStep"), goog.require("box2d.b2WorldCallbacks"), goog.require("box2d.b2JointFactory"), box2d.b2WorldFlag = { e_none: 0, e_newFixture: 1, e_locked: 2, e_clearForces: 4 }, goog.exportProperty(box2d.b2WorldFlag, "e_none", box2d.b2WorldFlag.e_none), goog.exportProperty(box2d.b2WorldFlag, "e_newFixture", box2d.b2WorldFlag.e_newFixture), goog.exportProperty(box2d.b2WorldFlag, "e_locked", box2d.b2WorldFlag.e_locked), goog.exportProperty(box2d.b2WorldFlag, "e_clearForces", box2d.b2WorldFlag.e_clearForces), box2d.b2World = function(a) { this.m_flags = box2d.b2WorldFlag.e_clearForces, this.m_contactManager = new box2d.b2ContactManager, this.m_gravity = a.Clone(), this.m_out_gravity = new box2d.b2Vec2, this.m_allowSleep = !0, this.m_destructionListener = null, this.m_debugDraw = null, this.m_warmStarting = !0, this.m_continuousPhysics = !0, this.m_subStepping = !1, this.m_stepComplete = !0, this.m_profile = new box2d.b2Profile, this.m_island = new box2d.b2Island, this.s_stack = new Array }, box2d.b2World.prototype.m_flags = box2d.b2WorldFlag.e_none, box2d.b2World.prototype.m_contactManager = null, box2d.b2World.prototype.m_bodyList = null, box2d.b2World.prototype.m_jointList = null, box2d.b2World.prototype.m_bodyCount = 0, box2d.b2World.prototype.m_jointCount = 0, box2d.b2World.prototype.m_gravity = null, box2d.b2World.prototype.m_out_gravity = null, box2d.b2World.prototype.m_allowSleep = !0, box2d.b2World.prototype.m_destructionListener = null, box2d.b2World.prototype.m_debugDraw = null, box2d.b2World.prototype.m_inv_dt0 = 0, box2d.b2World.prototype.m_warmStarting = !0, box2d.b2World.prototype.m_continuousPhysics = !0, box2d.b2World.prototype.m_subStepping = !1, box2d.b2World.prototype.m_stepComplete = !0, box2d.b2World.prototype.m_profile = null, box2d.b2World.prototype.m_island = null, box2d.b2World.prototype.s_stack = null, box2d.b2World.prototype.m_controllerList = null, box2d.b2World.prototype.m_controllerCount = 0, box2d.b2World.prototype.SetAllowSleeping = function(a) { if (a !== this.m_allowSleep && (this.m_allowSleep = a, !1 === this.m_allowSleep)) for (var b = this.m_bodyList; b; b = b.m_next) b.SetAwake(!0) }, box2d.b2World.prototype.GetAllowSleeping = function() { return this.m_allowSleep }, box2d.b2World.prototype.SetWarmStarting = function(a) { this.m_warmStarting = a }, box2d.b2World.prototype.GetWarmStarting = function() { return this.m_warmStarting }, box2d.b2World.prototype.SetContinuousPhysics = function(a) { this.m_continuousPhysics = a }, box2d.b2World.prototype.GetContinuousPhysics = function() { return this.m_continuousPhysics }, box2d.b2World.prototype.SetSubStepping = function(a) { this.m_subStepping = a }, box2d.b2World.prototype.GetSubStepping = function() { return this.m_subStepping }, box2d.b2World.prototype.GetBodyList = function() { return this.m_bodyList }, box2d.b2World.prototype.GetJointList = function() { return this.m_jointList }, box2d.b2World.prototype.GetContactList = function() { return this.m_contactManager.m_contactList }, box2d.b2World.prototype.GetBodyCount = function() { return this.m_bodyCount }, box2d.b2World.prototype.GetJointCount = function() { return this.m_jointCount }, box2d.b2World.prototype.GetContactCount = function() { return this.m_contactManager.m_contactCount }, box2d.b2World.prototype.SetGravity = function(a, b) { if (b = b || !0, (this.m_gravity.x !== a.x || this.m_gravity.y !== a.y) && (this.m_gravity.Copy(a), b)) for (var c = this.m_bodyList; c; c = c.m_next) c.SetAwake(!0) }, box2d.b2World.prototype.GetGravity = function(a) { return a = a || this.m_out_gravity, a.Copy(this.m_gravity) }, box2d.b2World.prototype.IsLocked = function() { return (this.m_flags & box2d.b2WorldFlag.e_locked) > 0 }, box2d.b2World.prototype.SetAutoClearForces = function(a) { a ? this.m_flags |= box2d.b2WorldFlag.e_clearForces : this.m_flags &= ~box2d.b2WorldFlag.e_clearForces }, box2d.b2World.prototype.GetAutoClearForces = function() { return (this.m_flags & box2d.b2WorldFlag.e_clearForces) === box2d.b2WorldFlag.e_clearForces }, box2d.b2World.prototype.GetContactManager = function() { return this.m_contactManager }, box2d.b2World.prototype.GetProfile = function() { return this.m_profile }, box2d.b2World.prototype.SetDestructionListener = function(a) { this.m_destructionListener = a }, box2d.b2World.prototype.SetContactFilter = function(a) { this.m_contactManager.m_contactFilter = a }, box2d.b2World.prototype.SetContactListener = function(a) { this.m_contactManager.m_contactListener = a }, box2d.b2World.prototype.SetDebugDraw = function(a) { this.m_debugDraw = a }, box2d.b2World.prototype.CreateBody = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.IsLocked()), this.IsLocked()) return null; var b = new box2d.b2Body(a, this); return b.m_prev = null, b.m_next = this.m_bodyList, this.m_bodyList && (this.m_bodyList.m_prev = b), this.m_bodyList = b, ++this.m_bodyCount, b }, box2d.b2World.prototype.DestroyBody = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_bodyCount > 0), box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.IsLocked()), !this.IsLocked()) { for (var b = a.m_jointList; b;) { var c = b; b = b.next, this.m_destructionListener && this.m_destructionListener.SayGoodbyeJoint(c.joint), this.DestroyJoint(c.joint), a.m_jointList = b } a.m_jointList = null; for (var d = a.m_controllerList; d;) { var e = d; d = d.nextController, e.controller.RemoveBody(a) } for (var f = a.m_contactList; f;) { var g = f; f = f.next, this.m_contactManager.Destroy(g.contact) } a.m_contactList = null; for (var h = a.m_fixtureList; h;) { var i = h; h = h.m_next, this.m_destructionListener && this.m_destructionListener.SayGoodbyeFixture(i), i.DestroyProxies(this.m_contactManager.m_broadPhase), i.Destroy(), a.m_fixtureList = h, a.m_fixtureCount -= 1 } a.m_fixtureList = null, a.m_fixtureCount = 0, a.m_prev && (a.m_prev.m_next = a.m_next), a.m_next && (a.m_next.m_prev = a.m_prev), a === this.m_bodyList && (this.m_bodyList = a.m_next), --this.m_bodyCount } }, box2d.b2World.prototype.CreateJoint = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.IsLocked()), this.IsLocked()) return null; var b = box2d.b2JointFactory.Create(a, null); b.m_prev = null, b.m_next = this.m_jointList, this.m_jointList && (this.m_jointList.m_prev = b), this.m_jointList = b, ++this.m_jointCount, b.m_edgeA.joint = b, b.m_edgeA.other = b.m_bodyB, b.m_edgeA.prev = null, b.m_edgeA.next = b.m_bodyA.m_jointList, b.m_bodyA.m_jointList && (b.m_bodyA.m_jointList.prev = b.m_edgeA), b.m_bodyA.m_jointList = b.m_edgeA, b.m_edgeB.joint = b, b.m_edgeB.other = b.m_bodyA, b.m_edgeB.prev = null, b.m_edgeB.next = b.m_bodyB.m_jointList, b.m_bodyB.m_jointList && (b.m_bodyB.m_jointList.prev = b.m_edgeB), b.m_bodyB.m_jointList = b.m_edgeB; var c = a.bodyA, d = a.bodyB; if (!1 === a.collideConnected) for (var e = d.GetContactList(); e;) e.other === c && e.contact.FlagForFiltering(), e = e.next; return b }, box2d.b2World.prototype.DestroyJoint = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.IsLocked()), !this.IsLocked()) { var b = a.m_collideConnected; a.m_prev && (a.m_prev.m_next = a.m_next), a.m_next && (a.m_next.m_prev = a.m_prev), a === this.m_jointList && (this.m_jointList = a.m_next); var c = a.m_bodyA, d = a.m_bodyB; if (c.SetAwake(!0), d.SetAwake(!0), a.m_edgeA.prev && (a.m_edgeA.prev.next = a.m_edgeA.next), a.m_edgeA.next && (a.m_edgeA.next.prev = a.m_edgeA.prev), a.m_edgeA === c.m_jointList && (c.m_jointList = a.m_edgeA.next), a.m_edgeA.prev = null, a.m_edgeA.next = null, a.m_edgeB.prev && (a.m_edgeB.prev.next = a.m_edgeB.next), a.m_edgeB.next && (a.m_edgeB.next.prev = a.m_edgeB.prev), a.m_edgeB === d.m_jointList && (d.m_jointList = a.m_edgeB.next), a.m_edgeB.prev = null, a.m_edgeB.next = null, box2d.b2JointFactory.Destroy(a, null), box2d.ENABLE_ASSERTS && box2d.b2Assert(this.m_jointCount > 0), --this.m_jointCount, !1 === b) for (var e = d.GetContactList(); e;) e.other === c && e.contact.FlagForFiltering(), e = e.next } }, box2d.b2World.prototype.Solve = function(a) { for (var b = this.m_controllerList; b; b = b.m_next) b.Step(a); this.m_profile.solveInit = 0, this.m_profile.solveVelocity = 0, this.m_profile.solvePosition = 0; var c = this.m_island; c.Initialize(this.m_bodyCount, this.m_contactManager.m_contactCount, this.m_jointCount, null, this.m_contactManager.m_contactListener); for (var d = this.m_bodyList; d; d = d.m_next) d.m_flags &= ~box2d.b2BodyFlag.e_islandFlag; for (var e = this.m_contactManager.m_contactList; e; e = e.m_next) e.m_flags &= ~box2d.b2ContactFlag.e_islandFlag; for (var f = this.m_jointList; f; f = f.m_next) f.m_islandFlag = !1; for (var g = this.m_bodyCount, h = this.s_stack, i = this.m_bodyList; i; i = i.m_next) if (!(i.m_flags & box2d.b2BodyFlag.e_islandFlag) && !1 !== i.IsAwake() && !1 !== i.IsActive() && i.GetType() !== box2d.b2BodyType.b2_staticBody) { c.Clear(); var j = 0; for (h[j++] = i, i.m_flags |= box2d.b2BodyFlag.e_islandFlag; j > 0;) { var d = h[--j]; if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!0 === d.IsActive()), c.AddBody(d), d.SetAwake(!0), d.GetType() !== box2d.b2BodyType.b2_staticBody) { for (var k = d.m_contactList; k; k = k.next) { var l = k.contact; if (!(l.m_flags & box2d.b2ContactFlag.e_islandFlag) && (!1 !== l.IsEnabled() && !1 !== l.IsTouching())) { var m = l.m_fixtureA.m_isSensor, n = l.m_fixtureB.m_isSensor; if (!m && !n) { c.AddContact(l), l.m_flags |= box2d.b2ContactFlag.e_islandFlag; var o = k.other; o.m_flags & box2d.b2BodyFlag.e_islandFlag || (box2d.ENABLE_ASSERTS && box2d.b2Assert(j < g), h[j++] = o, o.m_flags |= box2d.b2BodyFlag.e_islandFlag) } } } for (var p = d.m_jointList; p; p = p.next) if (!0 !== p.joint.m_islandFlag) { var o = p.other;!1 !== o.IsActive() && (c.AddJoint(p.joint), p.joint.m_islandFlag = !0, o.m_flags & box2d.b2BodyFlag.e_islandFlag || (box2d.ENABLE_ASSERTS && box2d.b2Assert(j < g), h[j++] = o, o.m_flags |= box2d.b2BodyFlag.e_islandFlag)) } } } var q = new box2d.b2Profile; c.Solve(q, a, this.m_gravity, this.m_allowSleep), this.m_profile.solveInit += q.solveInit, this.m_profile.solveVelocity += q.solveVelocity, this.m_profile.solvePosition += q.solvePosition; for (var r = 0; r < c.m_bodyCount; ++r) { var d = c.m_bodies[r]; d.GetType() === box2d.b2BodyType.b2_staticBody && (d.m_flags &= ~box2d.b2BodyFlag.e_islandFlag) } } for (var r = 0; r < h.length && h[r]; ++r) h[r] = null; for (var s = new box2d.b2Timer, d = this.m_bodyList; d; d = d.m_next) 0 != (d.m_flags & box2d.b2BodyFlag.e_islandFlag) && d.GetType() !== box2d.b2BodyType.b2_staticBody && d.SynchronizeFixtures(); this.m_contactManager.FindNewContacts(), this.m_profile.broadphase = s.GetMilliseconds() }, box2d.b2World.prototype.SolveTOI = function(a) { var b = this.m_island; if (b.Initialize(2 * box2d.b2_maxTOIContacts, box2d.b2_maxTOIContacts, 0, null, this.m_contactManager.m_contactListener), this.m_stepComplete) { for (var c = this.m_bodyList; c; c = c.m_next) c.m_flags &= ~box2d.b2BodyFlag.e_islandFlag, c.m_sweep.alpha0 = 0; for (var d = this.m_contactManager.m_contactList; d; d = d.m_next) d.m_flags &= ~(box2d.b2ContactFlag.e_toiFlag | box2d.b2ContactFlag.e_islandFlag), d.m_toiCount = 0, d.m_toi = 1 } for (;;) { for (var e = null, f = 1, d = this.m_contactManager.m_contactList; d; d = d.m_next) if (!1 !== d.IsEnabled() && !(d.m_toiCount > box2d.b2_maxSubSteps)) { var g = 1; if (d.m_flags & box2d.b2ContactFlag.e_toiFlag) g = d.m_toi; else { var h = d.GetFixtureA(), i = d.GetFixtureB(); if (h.IsSensor() || i.IsSensor()) continue; var j = h.GetBody(), k = i.GetBody(), l = j.m_type, m = k.m_type; box2d.ENABLE_ASSERTS && box2d.b2Assert(l === box2d.b2BodyType.b2_dynamicBody || m === box2d.b2BodyType.b2_dynamicBody); var n = j.IsAwake() && l !== box2d.b2BodyType.b2_staticBody, o = k.IsAwake() && m !== box2d.b2BodyType.b2_staticBody; if (!1 === n && !1 === o) continue; var p = j.IsBullet() || l !== box2d.b2BodyType.b2_dynamicBody, q = k.IsBullet() || m !== box2d.b2BodyType.b2_dynamicBody; if (!1 === p && !1 === q) continue; var r = j.m_sweep.alpha0; j.m_sweep.alpha0 < k.m_sweep.alpha0 ? (r = k.m_sweep.alpha0, j.m_sweep.Advance(r)) : k.m_sweep.alpha0 < j.m_sweep.alpha0 && (r = j.m_sweep.alpha0, k.m_sweep.Advance(r)), box2d.ENABLE_ASSERTS && box2d.b2Assert(r < 1); var s = d.GetChildIndexA(), t = d.GetChildIndexB(), u = box2d.b2World.prototype.SolveTOI.s_toi_input; u.proxyA.SetShape(h.GetShape(), s), u.proxyB.SetShape(i.GetShape(), t), u.sweepA.Copy(j.m_sweep), u.sweepB.Copy(k.m_sweep), u.tMax = 1; var v = box2d.b2World.prototype.SolveTOI.s_toi_output; box2d.b2TimeOfImpact(v, u); var w = v.t; g = v.state === box2d.b2TOIOutputState.e_touching ? box2d.b2Min(r + (1 - r) * w, 1) : 1, d.m_toi = g, d.m_flags |= box2d.b2ContactFlag.e_toiFlag } g < f && (e = d, f = g) } if (null === e || 1 - 10 * box2d.b2_epsilon < f) { this.m_stepComplete = !0; break } var h = e.GetFixtureA(), i = e.GetFixtureB(), j = h.GetBody(), k = i.GetBody(), x = box2d.b2World.prototype.SolveTOI.s_backup1.Copy(j.m_sweep), y = box2d.b2World.prototype.SolveTOI.s_backup2.Copy(k.m_sweep); if (j.Advance(f), k.Advance(f), e.Update(this.m_contactManager.m_contactListener), e.m_flags &= ~box2d.b2ContactFlag.e_toiFlag, ++e.m_toiCount, !1 !== e.IsEnabled() && !1 !== e.IsTouching()) { j.SetAwake(!0), k.SetAwake(!0), b.Clear(), b.AddBody(j), b.AddBody(k), b.AddContact(e), j.m_flags |= box2d.b2BodyFlag.e_islandFlag, k.m_flags |= box2d.b2BodyFlag.e_islandFlag, e.m_flags |= box2d.b2ContactFlag.e_islandFlag; for (var z = 0; z < 2; ++z) { var A = 0 === z ? j : k; if (A.m_type === box2d.b2BodyType.b2_dynamicBody) for (var B = A.m_contactList; B && b.m_bodyCount !== b.m_bodyCapacity && b.m_contactCount !== b.m_contactCapacity; B = B.next) { var C = B.contact; if (!(C.m_flags & box2d.b2ContactFlag.e_islandFlag)) { var D = B.other; if (D.m_type !== box2d.b2BodyType.b2_dynamicBody || !1 !== A.IsBullet() || !1 !== D.IsBullet()) { var E = C.m_fixtureA.m_isSensor, F = C.m_fixtureB.m_isSensor; if (!E && !F) { var G = box2d.b2World.prototype.SolveTOI.s_backup.Copy(D.m_sweep); 0 == (D.m_flags & box2d.b2BodyFlag.e_islandFlag) && D.Advance(f), C.Update(this.m_contactManager.m_contactListener), !1 !== C.IsEnabled() && !1 !== C.IsTouching() ? (C.m_flags |= box2d.b2ContactFlag.e_islandFlag, b.AddContact(C), D.m_flags & box2d.b2BodyFlag.e_islandFlag || (D.m_flags |= box2d.b2BodyFlag.e_islandFlag, D.m_type !== box2d.b2BodyType.b2_staticBody && D.SetAwake(!0), b.AddBody(D))) : (D.m_sweep.Copy(G), D.SynchronizeTransform()) } } } } } var H = box2d.b2World.prototype.SolveTOI.s_subStep; H.dt = (1 - f) * a.dt, H.inv_dt = 1 / H.dt, H.dtRatio = 1, H.positionIterations = 20, H.velocityIterations = a.velocityIterations, H.warmStarting = !1, b.SolveTOI(H, j.m_islandIndex, k.m_islandIndex); for (var z = 0; z < b.m_bodyCount; ++z) { var A = b.m_bodies[z]; if (A.m_flags &= ~box2d.b2BodyFlag.e_islandFlag, A.m_type === box2d.b2BodyType.b2_dynamicBody) { A.SynchronizeFixtures(); for (var B = A.m_contactList; B; B = B.next) B.contact.m_flags &= ~(box2d.b2ContactFlag.e_toiFlag | box2d.b2ContactFlag.e_islandFlag) } } if (this.m_contactManager.FindNewContacts(), this.m_subStepping) { this.m_stepComplete = !1; break } } else e.SetEnabled(!1), j.m_sweep.Copy(x), k.m_sweep.Copy(y), j.SynchronizeTransform(), k.SynchronizeTransform() } }, box2d.b2World.prototype.SolveTOI.s_subStep = new box2d.b2TimeStep, box2d.b2World.prototype.SolveTOI.s_backup = new box2d.b2Sweep, box2d.b2World.prototype.SolveTOI.s_backup1 = new box2d.b2Sweep, box2d.b2World.prototype.SolveTOI.s_backup2 = new box2d.b2Sweep, box2d.b2World.prototype.SolveTOI.s_toi_input = new box2d.b2TOIInput, box2d.b2World.prototype.SolveTOI.s_toi_output = new box2d.b2TOIOutput, box2d.b2World.prototype.Step = function(a, b, c) { var d = new box2d.b2Timer; this.m_flags & box2d.b2WorldFlag.e_newFixture && (this.m_contactManager.FindNewContacts(), this.m_flags &= ~box2d.b2WorldFlag.e_newFixture), this.m_flags |= box2d.b2WorldFlag.e_locked; var e = box2d.b2World.prototype.Step.s_step; e.dt = a, e.velocityIterations = b, e.positionIterations = c, e.inv_dt = a > 0 ? 1 / a : 0, e.dtRatio = this.m_inv_dt0 * a, e.warmStarting = this.m_warmStarting; var f = new box2d.b2Timer; if (this.m_contactManager.Collide(), this.m_profile.collide = f.GetMilliseconds(), this.m_stepComplete && e.dt > 0) { var f = new box2d.b2Timer; this.Solve(e), this.m_profile.solve = f.GetMilliseconds() } if (this.m_continuousPhysics && e.dt > 0) { var f = new box2d.b2Timer; this.SolveTOI(e), this.m_profile.solveTOI = f.GetMilliseconds() } e.dt > 0 && (this.m_inv_dt0 = e.inv_dt), this.m_flags & box2d.b2WorldFlag.e_clearForces && this.ClearForces(), this.m_flags &= ~box2d.b2WorldFlag.e_locked, this.m_profile.step = d.GetMilliseconds() }, box2d.b2World.prototype.Step.s_step = new box2d.b2TimeStep, box2d.b2World.prototype.ClearForces = function() { for (var a = this.m_bodyList; a; a = a.m_next) a.m_force.SetZero(), a.m_torque = 0 }, box2d.b2World.prototype.QueryAABB = function(a, b) { var c = this.m_contactManager.m_broadPhase, d = function(b) { var d = c.GetUserData(b); box2d.ENABLE_ASSERTS && box2d.b2Assert(d instanceof box2d.b2FixtureProxy); var e = d.fixture; d.childIndex; return a instanceof box2d.b2QueryCallback ? a.ReportFixture(e) : a(e) }; c.Query(d, b) }, box2d.b2World.prototype.QueryShape = function(a, b, c) { var d = this.m_contactManager.m_broadPhase, e = function(e) { var f = d.GetUserData(e); box2d.ENABLE_ASSERTS && box2d.b2Assert(f instanceof box2d.b2FixtureProxy); var g = f.fixture; f.childIndex; return !box2d.b2TestOverlapShape(b, 0, g.GetShape(), 0, c, g.GetBody().GetTransform()) || (a instanceof box2d.b2QueryCallback ? a.ReportFixture(g) : a(g)) }, f = box2d.b2World.prototype.QueryShape.s_aabb; b.ComputeAABB(f, c, 0), d.Query(e, f) }, box2d.b2World.prototype.QueryShape.s_aabb = new box2d.b2AABB, box2d.b2World.prototype.QueryPoint = function(a, b) { var c = this.m_contactManager.m_broadPhase, d = function(d) { var e = c.GetUserData(d); box2d.ENABLE_ASSERTS && box2d.b2Assert(e instanceof box2d.b2FixtureProxy); var f = e.fixture; e.childIndex; return !f.TestPoint(b) || (a instanceof box2d.b2QueryCallback ? a.ReportFixture(f) : a(f)) }, e = box2d.b2World.prototype.QueryPoint.s_aabb; e.lowerBound.SetXY(b.x - box2d.b2_linearSlop, b.y - box2d.b2_linearSlop), e.upperBound.SetXY(b.x + box2d.b2_linearSlop, b.y + box2d.b2_linearSlop), c.Query(d, e) }, box2d.b2World.prototype.QueryPoint.s_aabb = new box2d.b2AABB, box2d.b2World.prototype.RayCast = function(a, b, c) { var d = this.m_contactManager.m_broadPhase, e = function(e, f) { var g = d.GetUserData(f); box2d.ENABLE_ASSERTS && box2d.b2Assert(g instanceof box2d.b2FixtureProxy); var h = g.fixture, i = g.childIndex, j = box2d.b2World.prototype.RayCast.s_output; if (h.RayCast(j, e, i)) { var k = j.fraction, l = box2d.b2World.prototype.RayCast.s_point; return l.SetXY((1 - k) * b.x + k * c.x, (1 - k) * b.y + k * c.y), a instanceof box2d.b2RayCastCallback ? a.ReportFixture(h, l, j.normal, k) : a(h, l, j.normal, k) } return e.maxFraction }, f = box2d.b2World.prototype.RayCast.s_input; f.maxFraction = 1, f.p1.Copy(b), f.p2.Copy(c), d.RayCast(e, f) }, box2d.b2World.prototype.RayCast.s_input = new box2d.b2RayCastInput, box2d.b2World.prototype.RayCast.s_output = new box2d.b2RayCastOutput, box2d.b2World.prototype.RayCast.s_point = new box2d.b2Vec2, box2d.b2World.prototype.RayCastOne = function(a, b) { function c(a, b, c, f) { return f < e && (e = f, d = a), e } var d = null, e = 1; return this.RayCast(c, a, b), d }, box2d.b2World.prototype.RayCastAll = function(a, b, c) { function d(a, b, d, e) { return c.push(a), 1 } return c.length = 0, this.RayCast(d, a, b), c }, box2d.b2World.prototype.DrawShape = function(a, b) { var c = a.GetShape(); switch (c.m_type) { case box2d.b2ShapeType.e_circleShape: var d = c instanceof box2d.b2CircleShape ? c : null, e = d.m_p, f = d.m_radius, g = box2d.b2Vec2.UNITX; this.m_debugDraw.DrawSolidCircle(e, f, g, b); break; case box2d.b2ShapeType.e_edgeShape: var h = c instanceof box2d.b2EdgeShape ? c : null, i = h.m_vertex1, j = h.m_vertex2; this.m_debugDraw.DrawSegment(i, j, b); break; case box2d.b2ShapeType.e_chainShape: for (var k = c instanceof box2d.b2ChainShape ? c : null, l = k.m_count, m = k.m_vertices, i = m[0], n = 0; n < l; ++n) { var j = m[n]; this.m_debugDraw.DrawSegment(i, j, b), this.m_debugDraw.DrawCircle(j, .05, b), i = j } break; case box2d.b2ShapeType.e_polygonShape: var o = c instanceof box2d.b2PolygonShape ? c : null, p = o.m_count, m = o.m_vertices; this.m_debugDraw.DrawSolidPolygon(m, p, b) } }, box2d.b2World.prototype.DrawJoint = function(a) { var b = a.GetBodyA(), c = a.GetBodyB(), d = b.m_xf, e = c.m_xf, f = d.p, g = e.p, h = a.GetAnchorA(box2d.b2World.prototype.DrawJoint.s_p1), i = a.GetAnchorB(box2d.b2World.prototype.DrawJoint.s_p2), j = box2d.b2World.prototype.DrawJoint.s_color.SetRGB(.5, .8, .8); switch (a.m_type) { case box2d.b2JointType.e_distanceJoint: this.m_debugDraw.DrawSegment(h, i, j); break; case box2d.b2JointType.e_pulleyJoint: var k = a instanceof box2d.b2PulleyJoint ? a : null, l = k.GetGroundAnchorA(box2d.b2World.prototype.DrawJoint.s_s1), m = k.GetGroundAnchorB(box2d.b2World.prototype.DrawJoint.s_s2); this.m_debugDraw.DrawSegment(l, h, j), this.m_debugDraw.DrawSegment(m, i, j), this.m_debugDraw.DrawSegment(l, m, j); break; case box2d.b2JointType.e_mouseJoint: this.m_debugDraw.DrawSegment(h, i, j); break; default: this.m_debugDraw.DrawSegment(f, h, j), this.m_debugDraw.DrawSegment(h, i, j), this.m_debugDraw.DrawSegment(g, i, j) } }, box2d.b2World.prototype.DrawJoint.s_p1 = new box2d.b2Vec2, box2d.b2World.prototype.DrawJoint.s_p2 = new box2d.b2Vec2, box2d.b2World.prototype.DrawJoint.s_color = new box2d.b2Color(.5, .8, .8), box2d.b2World.prototype.DrawJoint.s_s1 = new box2d.b2Vec2, box2d.b2World.prototype.DrawJoint.s_s2 = new box2d.b2Vec2, box2d.b2World.prototype.DrawDebugData = function() { if (null !== this.m_debugDraw) { var a = this.m_debugDraw.GetFlags(), b = box2d.b2World.prototype.DrawDebugData.s_color.SetRGB(0, 0, 0); if (a & box2d.b2DrawFlags.e_shapeBit) for (var c = this.m_bodyList; c; c = c.m_next) { var d = c.m_xf; this.m_debugDraw.PushTransform(d); for (var e = c.GetFixtureList(); e; e = e.m_next) !1 === c.IsActive() ? (b.SetRGB(.5, .5, .3), this.DrawShape(e, b)) : c.GetType() === box2d.b2BodyType.b2_staticBody ? (b.SetRGB(.5, .9, .5), this.DrawShape(e, b)) : c.GetType() === box2d.b2BodyType.b2_kinematicBody ? (b.SetRGB(.5, .5, .9), this.DrawShape(e, b)) : !1 === c.IsAwake() ? (b.SetRGB(.6, .6, .6), this.DrawShape(e, b)) : (b.SetRGB(.9, .7, .7), this.DrawShape(e, b)); this.m_debugDraw.PopTransform(d) } if (a & box2d.b2DrawFlags.e_jointBit) for (var f = this.m_jointList; f; f = f.m_next) this.DrawJoint(f); if (a & box2d.b2DrawFlags.e_aabbBit) { b.SetRGB(.9, .3, .9); for (var g = this.m_contactManager.m_broadPhase, h = box2d.b2World.prototype.DrawDebugData.s_vs, c = this.m_bodyList; c; c = c.m_next) if (!1 !== c.IsActive()) for (var e = c.GetFixtureList(); e; e = e.m_next) for (var i = 0; i < e.m_proxyCount; ++i) { var j = e.m_proxies[i], k = g.GetFatAABB(j.proxy); h[0].SetXY(k.lowerBound.x, k.lowerBound.y), h[1].SetXY(k.upperBound.x, k.lowerBound.y), h[2].SetXY(k.upperBound.x, k.upperBound.y), h[3].SetXY(k.lowerBound.x, k.upperBound.y), this.m_debugDraw.DrawPolygon(h, 4, b) } } if (a & box2d.b2DrawFlags.e_centerOfMassBit) for (var c = this.m_bodyList; c; c = c.m_next) { var d = box2d.b2World.prototype.DrawDebugData.s_xf; d.q.Copy(c.m_xf.q), d.p.Copy(c.GetWorldCenter()), this.m_debugDraw.DrawTransform(d) } if (a & box2d.b2DrawFlags.e_controllerBit) for (var l = this.m_controllerList; l; l = l.m_next) l.Draw(this.m_debugDraw) } }, box2d.b2World.prototype.DrawDebugData.s_color = new box2d.b2Color(0, 0, 0), box2d.b2World.prototype.DrawDebugData.s_vs = box2d.b2Vec2.MakeArray(4), box2d.b2World.prototype.DrawDebugData.s_xf = new box2d.b2Transform, box2d.b2World.prototype.SetBroadPhase = function(a) { var b = this.m_contactManager.m_broadPhase; this.m_contactManager.m_broadPhase = a; for (var c = this.m_bodyList; c; c = c.m_next) for (var d = c.m_fixtureList; d; d = d.m_next) d.m_proxy = a.CreateProxy(b.GetFatAABB(d.m_proxy), d) }, box2d.b2World.prototype.GetProxyCount = function() { return this.m_contactManager.m_broadPhase.GetProxyCount() }, box2d.b2World.prototype.GetTreeHeight = function() { return this.m_contactManager.m_broadPhase.GetTreeHeight() }, box2d.b2World.prototype.GetTreeBalance = function() { return this.m_contactManager.m_broadPhase.GetTreeBalance() }, box2d.b2World.prototype.GetTreeQuality = function() { return this.m_contactManager.m_broadPhase.GetTreeQuality() }, box2d.b2World.prototype.ShiftOrigin = function(a) { if (box2d.ENABLE_ASSERTS && box2d.b2Assert(!1 === this.IsLocked()), !this.IsLocked()) { for (var b = this.m_bodyList; b; b = b.m_next) b.m_xf.p.SelfSub(a), b.m_sweep.c0.SelfSub(a), b.m_sweep.c.SelfSub(a); for (var c = this.m_jointList; c; c = c.m_next) c.ShiftOrigin(a); this.m_contactManager.m_broadPhase.ShiftOrigin(a) } }, box2d.b2World.prototype.Dump = function() { if (box2d.DEBUG) { if ((this.m_flags & box2d.b2WorldFlag.e_locked) === box2d.b2WorldFlag.e_locked) return; box2d.b2Log("/** @type {box2d.b2Vec2} */ var g = new box2d.b2Vec2(%.15f, %.15f);\n", this.m_gravity.x, this.m_gravity.y), box2d.b2Log("this.m_world.SetGravity(g);\n"), box2d.b2Log("/** @type {Array.<box2d.b2Body>} */ var bodies = new Array(%d);\n", this.m_bodyCount), box2d.b2Log("/** @type {Array.<box2d.b2Joint>} */ var joints = new Array(%d);\n", this.m_jointCount); for (var a = 0, b = this.m_bodyList; b; b = b.m_next) b.m_islandIndex = a, b.Dump(), ++a; a = 0; for (var c = this.m_jointList; c; c = c.m_next) c.m_index = a, ++a; for (var c = this.m_jointList; c; c = c.m_next) c.m_type !== box2d.b2JointType.e_gearJoint && (box2d.b2Log("if (true)\n"), box2d.b2Log("{\n"), c.Dump(), box2d.b2Log("}\n")); for (var c = this.m_jointList; c; c = c.m_next) c.m_type === box2d.b2JointType.e_gearJoint && (box2d.b2Log("if (true)\n"), box2d.b2Log("{\n"), c.Dump(), box2d.b2Log("}\n")) } }, box2d.b2World.prototype.AddController = function(a) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(null === a.m_world, "Controller can only be a member of one world"), a.m_world = this, a.m_next = this.m_controllerList, a.m_prev = null, this.m_controllerList && (this.m_controllerList.m_prev = a), this.m_controllerList = a, ++this.m_controllerCount, a }, box2d.b2World.prototype.RemoveController = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(a.m_world === this, "Controller is not a member of this world"), a.m_prev && (a.m_prev.m_next = a.m_next), a.m_next && (a.m_next.m_prev = a.m_prev), this.m_controllerList === a && (this.m_controllerList = a.m_next), --this.m_controllerCount, a.m_prev = null, a.m_next = null, a.m_world = null }, goog.provide("box2d.b2AreaJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Joint"), goog.require("box2d.b2Math"), box2d.b2AreaJointDef = function() { goog.base(this, box2d.b2JointType.e_areaJoint), this.bodies = new Array }, goog.inherits(box2d.b2AreaJointDef, box2d.b2JointDef), box2d.b2AreaJointDef.prototype.world = null, box2d.b2AreaJointDef.prototype.bodies = null, box2d.b2AreaJointDef.prototype.frequencyHz = 0, box2d.b2AreaJointDef.prototype.dampingRatio = 0, box2d.b2AreaJointDef.prototype.AddBody = function(a) { this.bodies.push(a), 1 === this.bodies.length ? this.bodyA = a : 2 === this.bodies.length && (this.bodyB = a) }, box2d.b2AreaJoint = function(a) { goog.base(this, a), box2d.ENABLE_ASSERTS && box2d.b2Assert(a.bodies.length >= 3, "You cannot create an area joint with less than three bodies."), this.m_bodies = a.bodies, this.m_frequencyHz = a.frequencyHz, this.m_dampingRatio = a.dampingRatio, this.m_targetLengths = box2d.b2MakeNumberArray(a.bodies.length), this.m_normals = box2d.b2Vec2.MakeArray(a.bodies.length), this.m_joints = new Array(a.bodies.length), this.m_deltas = box2d.b2Vec2.MakeArray(a.bodies.length), this.m_delta = new box2d.b2Vec2; var b = new box2d.b2DistanceJointDef; b.frequencyHz = a.frequencyHz, b.dampingRatio = a.dampingRatio, this.m_targetArea = 0; for (var c = 0, d = this.m_bodies.length; c < d; ++c) { var e = this.m_bodies[c], f = this.m_bodies[(c + 1) % d], g = e.GetWorldCenter(), h = f.GetWorldCenter(); this.m_targetLengths[c] = box2d.b2DistanceVV(g, h), this.m_targetArea += box2d.b2CrossVV(g, h), b.Initialize(e, f, g, h), this.m_joints[c] = a.world.CreateJoint(b) } this.m_targetArea *= .5 }, goog.inherits(box2d.b2AreaJoint, box2d.b2Joint), box2d.b2AreaJoint.prototype.m_bodies = null, box2d.b2AreaJoint.prototype.m_frequencyHz = 0, box2d.b2AreaJoint.prototype.m_dampingRatio = 0, box2d.b2AreaJoint.prototype.m_impulse = 0, box2d.b2AreaJoint.prototype.m_targetLengths = null, box2d.b2AreaJoint.prototype.m_targetArea = 0, box2d.b2AreaJoint.prototype.m_normals = null, box2d.b2AreaJoint.prototype.m_joints = null, box2d.b2AreaJoint.prototype.m_deltas = null, box2d.b2AreaJoint.prototype.m_delta = null, box2d.b2AreaJoint.prototype.GetAnchorA = function(a) { return a.SetZero() }, box2d.b2AreaJoint.prototype.GetAnchorB = function(a) { return a.SetZero() }, box2d.b2AreaJoint.prototype.GetReactionForce = function(a, b) { return b.SetZero() }, box2d.b2AreaJoint.prototype.GetReactionTorque = function(a) { return 0 }, box2d.b2AreaJoint.prototype.SetFrequency = function(a) { this.m_frequencyHz = a; for (var b = 0, c = this.m_joints.length; b < c; ++b) this.m_joints[b].SetFrequency(a) }, box2d.b2AreaJoint.prototype.GetFrequency = function() { return this.m_frequencyHz }, box2d.b2AreaJoint.prototype.SetDampingRatio = function(a) { this.m_dampingRatio = a; for (var b = 0, c = this.m_joints.length; b < c; ++b) this.m_joints[b].SetDampingRatio(a) }, box2d.b2AreaJoint.prototype.GetDampingRatio = function() { return this.m_dampingRatio }, box2d.b2AreaJoint.prototype.Dump = function() { box2d.DEBUG && box2d.b2Log("Area joint dumping is not supported.\n") }, box2d.b2AreaJoint.prototype.InitVelocityConstraints = function(a) { for (var b = 0, c = this.m_bodies.length; b < c; ++b) { var d = this.m_bodies[(b + c - 1) % c], e = this.m_bodies[(b + 1) % c], f = a.positions[d.m_islandIndex].c, g = a.positions[e.m_islandIndex].c, h = this.m_deltas[b]; box2d.b2SubVV(g, f, h) } if (a.step.warmStarting) { this.m_impulse *= a.step.dtRatio; for (var b = 0, c = this.m_bodies.length; b < c; ++b) { var i = this.m_bodies[b], j = a.velocities[i.m_islandIndex].v, h = this.m_deltas[b]; j.x += i.m_invMass * h.y * .5 * this.m_impulse, j.y += i.m_invMass * -h.x * .5 * this.m_impulse } } else this.m_impulse = 0 }, box2d.b2AreaJoint.prototype.SolveVelocityConstraints = function(a) { for (var b = 0, c = 0, d = 0, e = this.m_bodies.length; d < e; ++d) { var f = this.m_bodies[d], g = a.velocities[f.m_islandIndex].v, h = this.m_deltas[d]; b += h.GetLengthSquared() / f.GetMass(), c += box2d.b2CrossVV(g, h) } var i = -2 * c / b; this.m_impulse += i; for (var d = 0, e = this.m_bodies.length; d < e; ++d) { var f = this.m_bodies[d], g = a.velocities[f.m_islandIndex].v, h = this.m_deltas[d]; g.x += f.m_invMass * h.y * .5 * i, g.y += f.m_invMass * -h.x * .5 * i } }, box2d.b2AreaJoint.prototype.SolvePositionConstraints = function(a) { for (var b = 0, c = 0, d = 0, e = this.m_bodies.length; d < e; ++d) { var f = this.m_bodies[d], g = this.m_bodies[(d + 1) % e], h = a.positions[f.m_islandIndex].c, i = a.positions[g.m_islandIndex].c, j = box2d.b2SubVV(i, h, this.m_delta), k = j.GetLength(); k < box2d.b2_epsilon && (k = 1), this.m_normals[d].x = j.y / k, this.m_normals[d].y = -j.x / k, b += k, c += box2d.b2CrossVV(h, i) } c *= .5; for (var l = this.m_targetArea - c, m = .5 * l / b, n = !0, d = 0, e = this.m_bodies.length; d < e; ++d) { var f = this.m_bodies[d], h = a.positions[f.m_islandIndex].c, o = (d + 1) % e, j = box2d.b2AddVV(this.m_normals[d], this.m_normals[o], this.m_delta); j.SelfMul(m); var p = j.GetLengthSquared(); p > box2d.b2Sq(box2d.b2_maxLinearCorrection) && j.SelfMul(box2d.b2_maxLinearCorrection / box2d.b2Sqrt(p)), p > box2d.b2Sq(box2d.b2_linearSlop) && (n = !1), h.x += j.x, h.y += j.y } return n }, goog.provide("box2d.b2BuoyancyController"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Controller"), goog.require("box2d.b2Math"), goog.require("box2d.b2WorldCallbacks"), box2d.b2BuoyancyController = function() { goog.base(this), this.normal = new box2d.b2Vec2(0, 1), this.velocity = new box2d.b2Vec2(0, 0), this.gravity = new box2d.b2Vec2(0, 0) }, goog.inherits(box2d.b2BuoyancyController, box2d.b2Controller), box2d.b2BuoyancyController.prototype.normal = null, box2d.b2BuoyancyController.prototype.offset = 0, box2d.b2BuoyancyController.prototype.density = 0, box2d.b2BuoyancyController.prototype.velocity = null, box2d.b2BuoyancyController.prototype.linearDrag = 0, box2d.b2BuoyancyController.prototype.angularDrag = 0, box2d.b2BuoyancyController.prototype.useDensity = !1, box2d.b2BuoyancyController.prototype.useWorldGravity = !0, box2d.b2BuoyancyController.prototype.gravity = null, box2d.b2BuoyancyController.prototype.Step = function(a) { if (this.m_bodyList) { this.useWorldGravity && this.gravity.Copy(this.GetWorld().GetGravity()); for (var b = this.m_bodyList; b; b = b.nextBody) { var c = b.body; if (!1 !== c.IsAwake()) { for (var d = new box2d.b2Vec2, e = new box2d.b2Vec2, f = 0, g = 0, h = c.GetFixtureList(); h; h = h.m_next) { var i = new box2d.b2Vec2, j = h.GetShape().ComputeSubmergedArea(this.normal, this.offset, c.GetTransform(), i); f += j, d.x += j * i.x, d.y += j * i.y; var k = 0; k = this.useDensity ? h.GetDensity() : 1, g += j * k, e.x += j * i.x * k, e.y += j * i.y * k } if (d.x /= f, d.y /= f, e.x /= g, e.y /= g, !(f < box2d.b2_epsilon)) { var l = box2d.b2NegV(this.gravity, new box2d.b2Vec2); l.SelfMul(this.density * f), c.ApplyForce(l, e); var m = c.GetLinearVelocityFromWorldPoint(d, new box2d.b2Vec2); m.SelfSub(this.velocity), m.SelfMul(-this.linearDrag * f), c.ApplyForce(m, d), c.ApplyTorque(-c.GetInertia() / c.GetMass() * f * c.GetAngularVelocity() * this.angularDrag) } } } } }, box2d.b2BuoyancyController.prototype.Draw = function(a) { var b = 100, c = new box2d.b2Vec2, d = new box2d.b2Vec2; c.x = this.normal.x * this.offset + this.normal.y * b, c.y = this.normal.y * this.offset - this.normal.x * b, d.x = this.normal.x * this.offset - this.normal.y * b, d.y = this.normal.y * this.offset + this.normal.x * b; var e = new box2d.b2Color(0, 0, .8); a.DrawSegment(c, d, e) }, goog.provide("box2d.b2TensorDampingController"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Controller"), goog.require("box2d.b2Math"), box2d.b2TensorDampingController = function() { goog.base(this), this.T = new box2d.b2Mat22, this.maxTimestep = 0 }, goog.inherits(box2d.b2TensorDampingController, box2d.b2Controller), box2d.b2TensorDampingController.prototype.T = new box2d.b2Mat22, box2d.b2TensorDampingController.prototype.maxTimestep = 0, box2d.b2TensorDampingController.prototype.Step = function(a) { var b = a.dt; if (!(b <= box2d.b2_epsilon)) { b > this.maxTimestep && this.maxTimestep > 0 && (b = this.maxTimestep); for (var c = this.m_bodyList; c; c = c.nextBody) { var d = c.body; if (d.IsAwake()) { var e = d.GetWorldVector(box2d.b2MulMV(this.T, d.GetLocalVector(d.GetLinearVelocity(), box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t1), box2d.b2TensorDampingController.prototype.Step.s_damping); d.SetLinearVelocity(box2d.b2AddVV(d.GetLinearVelocity(), box2d.b2MulSV(b, e, box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t1)) } } } }, box2d.b2TensorDampingController.prototype.Step.s_damping = new box2d.b2Vec2, box2d.b2TensorDampingController.prototype.SetAxisAligned = function(a, b) { this.T.ex.x = -a, this.T.ex.y = 0, this.T.ey.x = 0, this.T.ey.y = -b, this.maxTimestep = a > 0 || b > 0 ? 1 / box2d.b2Max(a, b) : 0 }, goog.provide("box2d.b2DistanceJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Joint"), goog.require("box2d.b2Math"), box2d.b2DistanceJointDef = function() { goog.base(this, box2d.b2JointType.e_distanceJoint), this.localAnchorA = new box2d.b2Vec2, this.localAnchorB = new box2d.b2Vec2 }, goog.inherits(box2d.b2DistanceJointDef, box2d.b2JointDef), box2d.b2DistanceJointDef.prototype.localAnchorA = null, box2d.b2DistanceJointDef.prototype.localAnchorB = null, box2d.b2DistanceJointDef.prototype.length = 1, box2d.b2DistanceJointDef.prototype.frequencyHz = 0, box2d.b2DistanceJointDef.prototype.dampingRatio = 0, box2d.b2DistanceJointDef.prototype.Initialize = function(a, b, c, d) { this.bodyA = a, this.bodyB = b, this.bodyA.GetLocalPoint(c, this.localAnchorA), this.bodyB.GetLocalPoint(d, this.localAnchorB), this.length = box2d.b2DistanceVV(c, d), this.frequencyHz = 0, this.dampingRatio = 0 }, box2d.b2DistanceJoint = function(a) { goog.base(this, a), this.m_u = new box2d.b2Vec2, this.m_rA = new box2d.b2Vec2, this.m_rB = new box2d.b2Vec2, this.m_localCenterA = new box2d.b2Vec2, this.m_localCenterB = new box2d.b2Vec2, this.m_qA = new box2d.b2Rot, this.m_qB = new box2d.b2Rot, this.m_lalcA = new box2d.b2Vec2, this.m_lalcB = new box2d.b2Vec2, this.m_frequencyHz = a.frequencyHz, this.m_dampingRatio = a.dampingRatio, this.m_localAnchorA = a.localAnchorA.Clone(), this.m_localAnchorB = a.localAnchorB.Clone(), this.m_length = a.length }, goog.inherits(box2d.b2DistanceJoint, box2d.b2Joint); box2d.b2DistanceJoint.prototype.m_frequencyHz = 0, box2d.b2DistanceJoint.prototype.m_dampingRatio = 0, box2d.b2DistanceJoint.prototype.m_bias = 0, box2d.b2DistanceJoint.prototype.m_localAnchorA = null, box2d.b2DistanceJoint.prototype.m_localAnchorB = null, box2d.b2DistanceJoint.prototype.m_gamma = 0, box2d.b2DistanceJoint.prototype.m_impulse = 0, box2d.b2DistanceJoint.prototype.m_length = 0, box2d.b2DistanceJoint.prototype.m_indexA = 0, box2d.b2DistanceJoint.prototype.m_indexB = 0, box2d.b2DistanceJoint.prototype.m_u = null, box2d.b2DistanceJoint.prototype.m_rA = null, box2d.b2DistanceJoint.prototype.m_rB = null, box2d.b2DistanceJoint.prototype.m_localCenterA = null, box2d.b2DistanceJoint.prototype.m_localCenterB = null, box2d.b2DistanceJoint.prototype.m_invMassA = 0, box2d.b2DistanceJoint.prototype.m_invMassB = 0, box2d.b2DistanceJoint.prototype.m_invIA = 0, box2d.b2DistanceJoint.prototype.m_invIB = 0, box2d.b2DistanceJoint.prototype.m_mass = 0, box2d.b2DistanceJoint.prototype.m_qA = null, box2d.b2DistanceJoint.prototype.m_qB = null, box2d.b2DistanceJoint.prototype.m_lalcA = null, box2d.b2DistanceJoint.prototype.m_lalcB = null, box2d.b2DistanceJoint.prototype.GetAnchorA = function(a) { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, a) }, box2d.b2DistanceJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, a) }, box2d.b2DistanceJoint.prototype.GetReactionForce = function(a, b) { return b.SetXY(a * this.m_impulse * this.m_u.x, a * this.m_impulse * this.m_u.y) }, box2d.b2DistanceJoint.prototype.GetReactionTorque = function(a) { return 0 }, box2d.b2DistanceJoint.prototype.GetLocalAnchorA = function(a) { return a.Copy(this.m_localAnchorA) }, box2d.b2DistanceJoint.prototype.GetLocalAnchorB = function(a) { return a.Copy(this.m_localAnchorB) }, box2d.b2DistanceJoint.prototype.SetLength = function(a) { this.m_length = a }, box2d.b2DistanceJoint.prototype.GetLength = function() { return this.m_length }, box2d.b2DistanceJoint.prototype.SetFrequency = function(a) { this.m_frequencyHz = a }, box2d.b2DistanceJoint.prototype.GetFrequency = function() { return this.m_frequencyHz }, box2d.b2DistanceJoint.prototype.SetDampingRatio = function(a) { this.m_dampingRatio = a }, box2d.b2DistanceJoint.prototype.GetDampingRatio = function() { return this.m_dampingRatio }, box2d.b2DistanceJoint.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_bodyA.m_islandIndex, b = this.m_bodyB.m_islandIndex; box2d.b2Log(" /*box2d.b2DistanceJointDef*/ var jd = new box2d.b2DistanceJointDef();\n"), box2d.b2Log(" jd.bodyA = bodies[%d];\n", a), box2d.b2Log(" jd.bodyB = bodies[%d];\n", b), box2d.b2Log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), box2d.b2Log(" jd.localAnchorA.SetXY(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), box2d.b2Log(" jd.localAnchorB.SetXY(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), box2d.b2Log(" jd.length = %.15f;\n", this.m_length), box2d.b2Log(" jd.frequencyHz = %.15f;\n", this.m_frequencyHz), box2d.b2Log(" jd.dampingRatio = %.15f;\n", this.m_dampingRatio), box2d.b2Log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index) } }, box2d.b2DistanceJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI; var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.velocities[this.m_indexA].v, e = a.velocities[this.m_indexA].w, f = a.positions[this.m_indexB].c, g = a.positions[this.m_indexB].a, h = a.velocities[this.m_indexB].v, i = a.velocities[this.m_indexB].w, j = this.m_qA.SetAngleRadians(c), k = this.m_qB.SetAngleRadians(g); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA), box2d.b2MulRV(j, this.m_lalcA, this.m_rA), box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), box2d.b2MulRV(k, this.m_lalcB, this.m_rB), this.m_u.x = f.x + this.m_rB.x - b.x - this.m_rA.x, this.m_u.y = f.y + this.m_rB.y - b.y - this.m_rA.y; var l = this.m_u.GetLength(); l > box2d.b2_linearSlop ? this.m_u.SelfMul(1 / l) : this.m_u.SetZero(); var m = box2d.b2CrossVV(this.m_rA, this.m_u), n = box2d.b2CrossVV(this.m_rB, this.m_u), o = this.m_invMassA + this.m_invIA * m * m + this.m_invMassB + this.m_invIB * n * n; if (this.m_mass = 0 !== o ? 1 / o : 0, this.m_frequencyHz > 0) { var p = l - this.m_length, q = 2 * box2d.b2_pi * this.m_frequencyHz, r = 2 * this.m_mass * this.m_dampingRatio * q, s = this.m_mass * q * q, t = a.step.dt; this.m_gamma = t * (r + t * s), this.m_gamma = 0 !== this.m_gamma ? 1 / this.m_gamma : 0, this.m_bias = p * t * s * this.m_gamma, o += this.m_gamma, this.m_mass = 0 !== o ? 1 / o : 0 } else this.m_gamma = 0, this.m_bias = 0; if (a.step.warmStarting) { this.m_impulse *= a.step.dtRatio; var u = box2d.b2MulSV(this.m_impulse, this.m_u, box2d.b2DistanceJoint.prototype.InitVelocityConstraints.s_P); d.SelfMulSub(this.m_invMassA, u), e -= this.m_invIA * box2d.b2CrossVV(this.m_rA, u), h.SelfMulAdd(this.m_invMassB, u), i += this.m_invIB * box2d.b2CrossVV(this.m_rB, u) } else this.m_impulse = 0; a.velocities[this.m_indexA].w = e, a.velocities[this.m_indexB].w = i }, box2d.b2DistanceJoint.prototype.InitVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2DistanceJoint.prototype.SolveVelocityConstraints = function(a) { var b = a.velocities[this.m_indexA].v, c = a.velocities[this.m_indexA].w, d = a.velocities[this.m_indexB].v, e = a.velocities[this.m_indexB].w, f = box2d.b2AddVCrossSV(b, c, this.m_rA, box2d.b2DistanceJoint.prototype.SolveVelocityConstraints.s_vpA), g = box2d.b2AddVCrossSV(d, e, this.m_rB, box2d.b2DistanceJoint.prototype.SolveVelocityConstraints.s_vpB), h = box2d.b2DotVV(this.m_u, box2d.b2SubVV(g, f, box2d.b2Vec2.s_t0)), i = -this.m_mass * (h + this.m_bias + this.m_gamma * this.m_impulse); this.m_impulse += i; var j = box2d.b2MulSV(i, this.m_u, box2d.b2DistanceJoint.prototype.SolveVelocityConstraints.s_P); b.SelfMulSub(this.m_invMassA, j), c -= this.m_invIA * box2d.b2CrossVV(this.m_rA, j), d.SelfMulAdd(this.m_invMassB, j), e += this.m_invIB * box2d.b2CrossVV(this.m_rB, j), a.velocities[this.m_indexA].w = c, a.velocities[this.m_indexB].w = e }, box2d.b2DistanceJoint.prototype.SolveVelocityConstraints.s_vpA = new box2d.b2Vec2, box2d.b2DistanceJoint.prototype.SolveVelocityConstraints.s_vpB = new box2d.b2Vec2, box2d.b2DistanceJoint.prototype.SolveVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2DistanceJoint.prototype.SolvePositionConstraints = function(a) { if (this.m_frequencyHz > 0) return !0; var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.positions[this.m_indexB].c, e = a.positions[this.m_indexB].a, f = (this.m_qA.SetAngleRadians(c), this.m_qB.SetAngleRadians(e), box2d.b2MulRV(this.m_qA, this.m_lalcA, this.m_rA)), g = box2d.b2MulRV(this.m_qB, this.m_lalcB, this.m_rB), h = this.m_u; h.x = d.x + g.x - b.x - f.x, h.y = d.y + g.y - b.y - f.y; var i = this.m_u.Normalize(), j = i - this.m_length; j = box2d.b2Clamp(j, -box2d.b2_maxLinearCorrection, box2d.b2_maxLinearCorrection); var k = -this.m_mass * j, l = box2d.b2MulSV(k, h, box2d.b2DistanceJoint.prototype.SolvePositionConstraints.s_P); return b.SelfMulSub(this.m_invMassA, l), c -= this.m_invIA * box2d.b2CrossVV(f, l), d.SelfMulAdd(this.m_invMassB, l), e += this.m_invIB * box2d.b2CrossVV(g, l), a.positions[this.m_indexA].a = c, a.positions[this.m_indexB].a = e, box2d.b2Abs(j) < box2d.b2_linearSlop }, box2d.b2DistanceJoint.prototype.SolvePositionConstraints.s_P = new box2d.b2Vec2, goog.provide("box2d.b2FrictionJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Joint"), goog.require("box2d.b2Math"), box2d.b2FrictionJointDef = function() { goog.base(this, box2d.b2JointType.e_frictionJoint), this.localAnchorA = new box2d.b2Vec2, this.localAnchorB = new box2d.b2Vec2 }, goog.inherits(box2d.b2FrictionJointDef, box2d.b2JointDef), box2d.b2FrictionJointDef.prototype.localAnchorA = null, box2d.b2FrictionJointDef.prototype.localAnchorB = null, box2d.b2FrictionJointDef.prototype.maxForce = 0, box2d.b2FrictionJointDef.prototype.maxTorque = 0, box2d.b2FrictionJointDef.prototype.Initialize = function(a, b, c) { this.bodyA = a, this.bodyB = b, this.bodyA.GetLocalPoint(c, this.localAnchorA), this.bodyB.GetLocalPoint(c, this.localAnchorB) }, box2d.b2FrictionJoint = function(a) { goog.base(this, a), this.m_localAnchorA = a.localAnchorA.Clone(), this.m_localAnchorB = a.localAnchorB.Clone(), this.m_linearImpulse = (new box2d.b2Vec2).SetZero(), this.m_maxForce = a.maxForce, this.m_maxTorque = a.maxTorque, this.m_rA = new box2d.b2Vec2, this.m_rB = new box2d.b2Vec2, this.m_localCenterA = new box2d.b2Vec2, this.m_localCenterB = new box2d.b2Vec2, this.m_linearMass = (new box2d.b2Mat22).SetZero(), this.m_qA = new box2d.b2Rot, this.m_qB = new box2d.b2Rot, this.m_lalcA = new box2d.b2Vec2, this.m_lalcB = new box2d.b2Vec2, this.m_K = new box2d.b2Mat22 }, goog.inherits(box2d.b2FrictionJoint, box2d.b2Joint), box2d.b2FrictionJoint.prototype.m_localAnchorA = null, box2d.b2FrictionJoint.prototype.m_localAnchorB = null, box2d.b2FrictionJoint.prototype.m_linearImpulse = null, box2d.b2FrictionJoint.prototype.m_angularImpulse = 0, box2d.b2FrictionJoint.prototype.m_maxForce = 0, box2d.b2FrictionJoint.prototype.m_maxTorque = 0, box2d.b2FrictionJoint.prototype.m_indexA = 0, box2d.b2FrictionJoint.prototype.m_indexB = 0, box2d.b2FrictionJoint.prototype.m_rA = null, box2d.b2FrictionJoint.prototype.m_rB = null, box2d.b2FrictionJoint.prototype.m_localCenterA = null, box2d.b2FrictionJoint.prototype.m_localCenterB = null, box2d.b2FrictionJoint.prototype.m_invMassA = 0, box2d.b2FrictionJoint.prototype.m_invMassB = 0, box2d.b2FrictionJoint.prototype.m_invIA = 0, box2d.b2FrictionJoint.prototype.m_invIB = 0, box2d.b2FrictionJoint.prototype.m_linearMass = null, box2d.b2FrictionJoint.prototype.m_angularMass = 0, box2d.b2FrictionJoint.prototype.m_qA = null, box2d.b2FrictionJoint.prototype.m_qB = null, box2d.b2FrictionJoint.prototype.m_lalcA = null, box2d.b2FrictionJoint.prototype.m_lalcB = null, box2d.b2FrictionJoint.prototype.m_K = null, box2d.b2FrictionJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI; var b = a.positions[this.m_indexA].a, c = a.velocities[this.m_indexA].v, d = a.velocities[this.m_indexA].w, e = a.positions[this.m_indexB].a, f = a.velocities[this.m_indexB].v, g = a.velocities[this.m_indexB].w, h = this.m_qA.SetAngleRadians(b), i = this.m_qB.SetAngleRadians(e); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); var j = box2d.b2MulRV(h, this.m_lalcA, this.m_rA); box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); var k = box2d.b2MulRV(i, this.m_lalcB, this.m_rB), l = this.m_invMassA, m = this.m_invMassB, n = this.m_invIA, o = this.m_invIB, p = this.m_K; if (p.ex.x = l + m + n * j.y * j.y + o * k.y * k.y, p.ex.y = -n * j.x * j.y - o * k.x * k.y, p.ey.x = p.ex.y, p.ey.y = l + m + n * j.x * j.x + o * k.x * k.x, p.GetInverse(this.m_linearMass), this.m_angularMass = n + o, this.m_angularMass > 0 && (this.m_angularMass = 1 / this.m_angularMass), a.step.warmStarting) { this.m_linearImpulse.SelfMul(a.step.dtRatio), this.m_angularImpulse *= a.step.dtRatio; var q = this.m_linearImpulse; c.SelfMulSub(l, q), d -= n * (box2d.b2CrossVV(this.m_rA, q) + this.m_angularImpulse), f.SelfMulAdd(m, q), g += o * (box2d.b2CrossVV(this.m_rB, q) + this.m_angularImpulse) } else this.m_linearImpulse.SetZero(), this.m_angularImpulse = 0; a.velocities[this.m_indexA].w = d, a.velocities[this.m_indexB].w = g }, box2d.b2FrictionJoint.prototype.SolveVelocityConstraints = function(a) { var b = a.velocities[this.m_indexA].v, c = a.velocities[this.m_indexA].w, d = a.velocities[this.m_indexB].v, e = a.velocities[this.m_indexB].w, f = this.m_invMassA, g = this.m_invMassB, h = this.m_invIA, i = this.m_invIB, j = a.step.dt, k = e - c, l = -this.m_angularMass * k, m = this.m_angularImpulse, n = j * this.m_maxTorque; this.m_angularImpulse = box2d.b2Clamp(this.m_angularImpulse + l, -n, n), l = this.m_angularImpulse - m, c -= h * l, e += i * l; var k = box2d.b2SubVV(box2d.b2AddVCrossSV(d, e, this.m_rB, box2d.b2Vec2.s_t0), box2d.b2AddVCrossSV(b, c, this.m_rA, box2d.b2Vec2.s_t1), box2d.b2FrictionJoint.prototype.SolveVelocityConstraints.s_Cdot), o = box2d.b2MulMV(this.m_linearMass, k, box2d.b2FrictionJoint.prototype.SolveVelocityConstraints.s_impulseV).SelfNeg(), p = box2d.b2FrictionJoint.prototype.SolveVelocityConstraints.s_oldImpulseV.Copy(this.m_linearImpulse); this.m_linearImpulse.SelfAdd(o); var n = j * this.m_maxForce; this.m_linearImpulse.GetLengthSquared() > n * n && (this.m_linearImpulse.Normalize(), this.m_linearImpulse.SelfMul(n)), box2d.b2SubVV(this.m_linearImpulse, p, o), b.SelfMulSub(f, o), c -= h * box2d.b2CrossVV(this.m_rA, o), d.SelfMulAdd(g, o), e += i * box2d.b2CrossVV(this.m_rB, o), a.velocities[this.m_indexA].w = c, a.velocities[this.m_indexB].w = e }, box2d.b2FrictionJoint.prototype.SolveVelocityConstraints.s_Cdot = new box2d.b2Vec2, box2d.b2FrictionJoint.prototype.SolveVelocityConstraints.s_impulseV = new box2d.b2Vec2, box2d.b2FrictionJoint.prototype.SolveVelocityConstraints.s_oldImpulseV = new box2d.b2Vec2, box2d.b2FrictionJoint.prototype.SolvePositionConstraints = function(a) { return !0 }, box2d.b2FrictionJoint.prototype.GetAnchorA = function(a) { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, a) }, box2d.b2FrictionJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, a) }, box2d.b2FrictionJoint.prototype.GetReactionForce = function(a, b) { return b.SetXY(a * this.m_linearImpulse.x, a * this.m_linearImpulse.y) }, box2d.b2FrictionJoint.prototype.GetReactionTorque = function(a) { return a * this.m_angularImpulse }, box2d.b2FrictionJoint.prototype.GetLocalAnchorA = function(a) { return a.Copy(this.m_localAnchorA) }, box2d.b2FrictionJoint.prototype.GetLocalAnchorB = function(a) { return a.Copy(this.m_localAnchorB) }, box2d.b2FrictionJoint.prototype.SetMaxForce = function(a) { this.m_maxForce = a }, box2d.b2FrictionJoint.prototype.GetMaxForce = function() { return this.m_maxForce }, box2d.b2FrictionJoint.prototype.SetMaxTorque = function(a) { this.m_maxTorque = a }, box2d.b2FrictionJoint.prototype.GetMaxTorque = function() { return this.m_maxTorque }, box2d.b2FrictionJoint.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_bodyA.m_islandIndex, b = this.m_bodyB.m_islandIndex; box2d.b2Log(" /*box2d.b2FrictionJointDef*/ var jd = new box2d.b2FrictionJointDef();\n"), box2d.b2Log(" jd.bodyA = bodies[%d];\n", a), box2d.b2Log(" jd.bodyB = bodies[%d];\n", b), box2d.b2Log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), box2d.b2Log(" jd.localAnchorA.SetXY(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), box2d.b2Log(" jd.localAnchorB.SetXY(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), box2d.b2Log(" jd.maxForce = %.15f;\n", this.m_maxForce), box2d.b2Log(" jd.maxTorque = %.15f;\n", this.m_maxTorque), box2d.b2Log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index) } }, goog.provide("box2d.b2MouseJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Joint"), goog.require("box2d.b2Math"), box2d.b2MouseJointDef = function() { goog.base(this, box2d.b2JointType.e_mouseJoint), this.target = new box2d.b2Vec2 }, goog.inherits(box2d.b2MouseJointDef, box2d.b2JointDef), box2d.b2MouseJointDef.prototype.target = null, box2d.b2MouseJointDef.prototype.maxForce = 0, box2d.b2MouseJointDef.prototype.frequencyHz = 5, box2d.b2MouseJointDef.prototype.dampingRatio = .7, box2d.b2MouseJoint = function(a) { goog.base(this, a), this.m_localAnchorB = new box2d.b2Vec2, this.m_targetA = new box2d.b2Vec2, this.m_impulse = new box2d.b2Vec2, this.m_rB = new box2d.b2Vec2, this.m_localCenterB = new box2d.b2Vec2, this.m_mass = new box2d.b2Mat22, this.m_C = new box2d.b2Vec2, this.m_qB = new box2d.b2Rot, this.m_lalcB = new box2d.b2Vec2, this.m_K = new box2d.b2Mat22, box2d.ENABLE_ASSERTS && box2d.b2Assert(a.target.IsValid()), box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a.maxForce) && a.maxForce >= 0), box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a.frequencyHz) && a.frequencyHz >= 0), box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a.dampingRatio) && a.dampingRatio >= 0), this.m_targetA.Copy(a.target), box2d.b2MulTXV(this.m_bodyB.GetTransform(), this.m_targetA, this.m_localAnchorB), this.m_maxForce = a.maxForce, this.m_impulse.SetZero(), this.m_frequencyHz = a.frequencyHz, this.m_dampingRatio = a.dampingRatio, this.m_beta = 0, this.m_gamma = 0 }, goog.inherits(box2d.b2MouseJoint, box2d.b2Joint), box2d.b2MouseJoint.prototype.m_localAnchorB = null, box2d.b2MouseJoint.prototype.m_targetA = null, box2d.b2MouseJoint.prototype.m_frequencyHz = 0, box2d.b2MouseJoint.prototype.m_dampingRatio = 0, box2d.b2MouseJoint.prototype.m_beta = 0, box2d.b2MouseJoint.prototype.m_impulse = null, box2d.b2MouseJoint.prototype.m_maxForce = 0, box2d.b2MouseJoint.prototype.m_gamma = 0, box2d.b2MouseJoint.prototype.m_indexA = 0, box2d.b2MouseJoint.prototype.m_indexB = 0, box2d.b2MouseJoint.prototype.m_rB = null, box2d.b2MouseJoint.prototype.m_localCenterB = null, box2d.b2MouseJoint.prototype.m_invMassB = 0, box2d.b2MouseJoint.prototype.m_invIB = 0, box2d.b2MouseJoint.prototype.m_mass = null, box2d.b2MouseJoint.prototype.m_C = null, box2d.b2MouseJoint.prototype.m_qB = null, box2d.b2MouseJoint.prototype.m_lalcB = null, box2d.b2MouseJoint.prototype.m_K = null, box2d.b2MouseJoint.prototype.SetTarget = function(a) {!1 === this.m_bodyB.IsAwake() && this.m_bodyB.SetAwake(!0), this.m_targetA.Copy(a) }, box2d.b2MouseJoint.prototype.GetTarget = function(a) { return a.Copy(this.m_targetA) }, box2d.b2MouseJoint.prototype.SetMaxForce = function(a) { this.m_maxForce = a }, box2d.b2MouseJoint.prototype.GetMaxForce = function() { return this.m_maxForce }, box2d.b2MouseJoint.prototype.SetFrequency = function(a) { this.m_frequencyHz = a }, box2d.b2MouseJoint.prototype.GetFrequency = function() { return this.m_frequencyHz }, box2d.b2MouseJoint.prototype.SetDampingRatio = function(a) { this.m_dampingRatio = a }, box2d.b2MouseJoint.prototype.GetDampingRatio = function() { return this.m_dampingRatio }, box2d.b2MouseJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIB = this.m_bodyB.m_invI; var b = a.positions[this.m_indexB].c, c = a.positions[this.m_indexB].a, d = a.velocities[this.m_indexB].v, e = a.velocities[this.m_indexB].w, f = this.m_qB.SetAngleRadians(c), g = this.m_bodyB.GetMass(), h = 2 * box2d.b2_pi * this.m_frequencyHz, i = 2 * g * this.m_dampingRatio * h, j = g * (h * h), k = a.step.dt; box2d.ENABLE_ASSERTS && box2d.b2Assert(i + k * j > box2d.b2_epsilon), this.m_gamma = k * (i + k * j), 0 !== this.m_gamma && (this.m_gamma = 1 / this.m_gamma), this.m_beta = k * j * this.m_gamma, box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), box2d.b2MulRV(f, this.m_lalcB, this.m_rB); var l = this.m_K; l.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y + this.m_gamma, l.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y, l.ey.x = l.ex.y, l.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x + this.m_gamma, l.GetInverse(this.m_mass), this.m_C.x = b.x + this.m_rB.x - this.m_targetA.x, this.m_C.y = b.y + this.m_rB.y - this.m_targetA.y, this.m_C.SelfMul(this.m_beta), e *= .98, a.step.warmStarting ? (this.m_impulse.SelfMul(a.step.dtRatio), d.x += this.m_invMassB * this.m_impulse.x, d.y += this.m_invMassB * this.m_impulse.y, e += this.m_invIB * box2d.b2CrossVV(this.m_rB, this.m_impulse)) : this.m_impulse.SetZero(), a.velocities[this.m_indexB].w = e }, box2d.b2MouseJoint.prototype.SolveVelocityConstraints = function(a) { var b = a.velocities[this.m_indexB].v, c = a.velocities[this.m_indexB].w, d = box2d.b2AddVCrossSV(b, c, this.m_rB, box2d.b2MouseJoint.prototype.SolveVelocityConstraints.s_Cdot), e = box2d.b2MulMV(this.m_mass, box2d.b2AddVV(d, box2d.b2AddVV(this.m_C, box2d.b2MulSV(this.m_gamma, this.m_impulse, box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t0).SelfNeg(), box2d.b2MouseJoint.prototype.SolveVelocityConstraints.s_impulse), f = box2d.b2MouseJoint.prototype.SolveVelocityConstraints.s_oldImpulse.Copy(this.m_impulse); this.m_impulse.SelfAdd(e); var g = a.step.dt * this.m_maxForce; this.m_impulse.GetLengthSquared() > g * g && this.m_impulse.SelfMul(g / this.m_impulse.GetLength()), box2d.b2SubVV(this.m_impulse, f, e), b.SelfMulAdd(this.m_invMassB, e), c += this.m_invIB * box2d.b2CrossVV(this.m_rB, e), a.velocities[this.m_indexB].w = c }, box2d.b2MouseJoint.prototype.SolveVelocityConstraints.s_Cdot = new box2d.b2Vec2, box2d.b2MouseJoint.prototype.SolveVelocityConstraints.s_impulse = new box2d.b2Vec2, box2d.b2MouseJoint.prototype.SolveVelocityConstraints.s_oldImpulse = new box2d.b2Vec2, box2d.b2MouseJoint.prototype.SolvePositionConstraints = function(a) { return !0 }, box2d.b2MouseJoint.prototype.GetAnchorA = function(a) { return a.Copy(this.m_targetA) }, box2d.b2MouseJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, a) }, box2d.b2MouseJoint.prototype.GetReactionForce = function(a, b) { return box2d.b2MulSV(a, this.m_impulse, b) }, box2d.b2MouseJoint.prototype.GetReactionTorque = function(a) { return 0 }, box2d.b2MouseJoint.prototype.Dump = function() { box2d.DEBUG && box2d.b2Log("Mouse joint dumping is not supported.\n") }, box2d.b2MouseJoint.prototype.ShiftOrigin = function(a) { this.m_targetA.SelfSub(a) }, goog.provide("box2d.b2ConstantForceController"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Controller"), goog.require("box2d.b2Math"), box2d.b2ConstantForceController = function() { goog.base(this), this.F = new box2d.b2Vec2(0, 0) }, goog.inherits(box2d.b2ConstantForceController, box2d.b2Controller), box2d.b2ConstantAccelController.prototype.F = null, box2d.b2ConstantForceController.prototype.Step = function(a) { for (var b = this.m_bodyList; b; b = b.nextBody) { var c = b.body; c.IsAwake() && c.ApplyForce(this.F, c.GetWorldCenter()) } }, goog.provide("box2d.b2PulleyJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Joint"), goog.require("box2d.b2Math"), box2d.b2_minPulleyLength = 2, box2d.b2PulleyJointDef = function() { goog.base(this, box2d.b2JointType.e_pulleyJoint), this.collideConnected = !0, this.groundAnchorA = new box2d.b2Vec2(-1, 1), this.groundAnchorB = new box2d.b2Vec2(1, 1), this.localAnchorA = new box2d.b2Vec2(-1, 0), this.localAnchorB = new box2d.b2Vec2(1, 0) }, goog.inherits(box2d.b2PulleyJointDef, box2d.b2JointDef), box2d.b2PulleyJointDef.prototype.groundAnchorA = null, box2d.b2PulleyJointDef.prototype.groundAnchorB = null, box2d.b2PulleyJointDef.prototype.localAnchorA = null, box2d.b2PulleyJointDef.prototype.localAnchorB = null, box2d.b2PulleyJointDef.prototype.lengthA = 0, box2d.b2PulleyJointDef.prototype.lengthB = 0, box2d.b2PulleyJointDef.prototype.ratio = 1, box2d.b2PulleyJointDef.prototype.Initialize = function(a, b, c, d, e, f, g) { this.bodyA = a, this.bodyB = b, this.groundAnchorA.Copy(c), this.groundAnchorB.Copy(d), this.bodyA.GetLocalPoint(e, this.localAnchorA), this.bodyB.GetLocalPoint(f, this.localAnchorB), this.lengthA = box2d.b2DistanceVV(e, c), this.lengthB = box2d.b2DistanceVV(f, d), this.ratio = g, box2d.ENABLE_ASSERTS && box2d.b2Assert(this.ratio > box2d.b2_epsilon) }, box2d.b2PulleyJoint = function(a) { goog.base(this, a), this.m_groundAnchorA = new box2d.b2Vec2, this.m_groundAnchorB = new box2d.b2Vec2, this.m_localAnchorA = new box2d.b2Vec2, this.m_localAnchorB = new box2d.b2Vec2, this.m_uA = new box2d.b2Vec2, this.m_uB = new box2d.b2Vec2, this.m_rA = new box2d.b2Vec2, this.m_rB = new box2d.b2Vec2, this.m_localCenterA = new box2d.b2Vec2, this.m_localCenterB = new box2d.b2Vec2, this.m_qA = new box2d.b2Rot, this.m_qB = new box2d.b2Rot, this.m_lalcA = new box2d.b2Vec2, this.m_lalcB = new box2d.b2Vec2, this.m_groundAnchorA.Copy(a.groundAnchorA), this.m_groundAnchorB.Copy(a.groundAnchorB), this.m_localAnchorA.Copy(a.localAnchorA), this.m_localAnchorB.Copy(a.localAnchorB), this.m_lengthA = a.lengthA, this.m_lengthB = a.lengthB, box2d.ENABLE_ASSERTS && box2d.b2Assert(0 !== a.ratio), this.m_ratio = a.ratio, this.m_constant = a.lengthA + this.m_ratio * a.lengthB, this.m_impulse = 0 }, goog.inherits(box2d.b2PulleyJoint, box2d.b2Joint), box2d.b2PulleyJoint.prototype.m_groundAnchorA = null, box2d.b2PulleyJoint.prototype.m_groundAnchorB = null, box2d.b2PulleyJoint.prototype.m_lengthA = 0, box2d.b2PulleyJoint.prototype.m_lengthB = 0, box2d.b2PulleyJoint.prototype.m_localAnchorA = null, box2d.b2PulleyJoint.prototype.m_localAnchorB = null, box2d.b2PulleyJoint.prototype.m_constant = 0, box2d.b2PulleyJoint.prototype.m_ratio = 0, box2d.b2PulleyJoint.prototype.m_impulse = 0, box2d.b2PulleyJoint.prototype.m_indexA = 0, box2d.b2PulleyJoint.prototype.m_indexB = 0, box2d.b2PulleyJoint.prototype.m_uA = null, box2d.b2PulleyJoint.prototype.m_uB = null, box2d.b2PulleyJoint.prototype.m_rA = null, box2d.b2PulleyJoint.prototype.m_rB = null, box2d.b2PulleyJoint.prototype.m_localCenterA = null, box2d.b2PulleyJoint.prototype.m_localCenterB = null, box2d.b2PulleyJoint.prototype.m_invMassA = 0, box2d.b2PulleyJoint.prototype.m_invMassB = 0, box2d.b2PulleyJoint.prototype.m_invIA = 0, box2d.b2PulleyJoint.prototype.m_invIB = 0, box2d.b2PulleyJoint.prototype.m_mass = 0, box2d.b2PulleyJoint.prototype.m_qA = null, box2d.b2PulleyJoint.prototype.m_qB = null, box2d.b2PulleyJoint.prototype.m_lalcA = null, box2d.b2PulleyJoint.prototype.m_lalcB = null; box2d.b2PulleyJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI; var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.velocities[this.m_indexA].v, e = a.velocities[this.m_indexA].w, f = a.positions[this.m_indexB].c, g = a.positions[this.m_indexB].a, h = a.velocities[this.m_indexB].v, i = a.velocities[this.m_indexB].w, j = this.m_qA.SetAngleRadians(c), k = this.m_qB.SetAngleRadians(g); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA), box2d.b2MulRV(j, this.m_lalcA, this.m_rA), box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB), box2d.b2MulRV(k, this.m_lalcB, this.m_rB), this.m_uA.Copy(b).SelfAdd(this.m_rA).SelfSub(this.m_groundAnchorA), this.m_uB.Copy(f).SelfAdd(this.m_rB).SelfSub(this.m_groundAnchorB); var l = this.m_uA.GetLength(), m = this.m_uB.GetLength(); l > 10 * box2d.b2_linearSlop ? this.m_uA.SelfMul(1 / l) : this.m_uA.SetZero(), m > 10 * box2d.b2_linearSlop ? this.m_uB.SelfMul(1 / m) : this.m_uB.SetZero(); var n = box2d.b2CrossVV(this.m_rA, this.m_uA), o = box2d.b2CrossVV(this.m_rB, this.m_uB), p = this.m_invMassA + this.m_invIA * n * n, q = this.m_invMassB + this.m_invIB * o * o; if (this.m_mass = p + this.m_ratio * this.m_ratio * q, this.m_mass > 0 && (this.m_mass = 1 / this.m_mass), a.step.warmStarting) { this.m_impulse *= a.step.dtRatio; var r = box2d.b2MulSV(-this.m_impulse, this.m_uA, box2d.b2PulleyJoint.prototype.InitVelocityConstraints.s_PA), s = box2d.b2MulSV(-this.m_ratio * this.m_impulse, this.m_uB, box2d.b2PulleyJoint.prototype.InitVelocityConstraints.s_PB); d.SelfMulAdd(this.m_invMassA, r), e += this.m_invIA * box2d.b2CrossVV(this.m_rA, r), h.SelfMulAdd(this.m_invMassB, s), i += this.m_invIB * box2d.b2CrossVV(this.m_rB, s) } else this.m_impulse = 0; a.velocities[this.m_indexA].w = e, a.velocities[this.m_indexB].w = i }, box2d.b2PulleyJoint.prototype.InitVelocityConstraints.s_PA = new box2d.b2Vec2, box2d.b2PulleyJoint.prototype.InitVelocityConstraints.s_PB = new box2d.b2Vec2, box2d.b2PulleyJoint.prototype.SolveVelocityConstraints = function(a) { var b = a.velocities[this.m_indexA].v, c = a.velocities[this.m_indexA].w, d = a.velocities[this.m_indexB].v, e = a.velocities[this.m_indexB].w, f = box2d.b2AddVCrossSV(b, c, this.m_rA, box2d.b2PulleyJoint.prototype.SolveVelocityConstraints.s_vpA), g = box2d.b2AddVCrossSV(d, e, this.m_rB, box2d.b2PulleyJoint.prototype.SolveVelocityConstraints.s_vpB), h = -box2d.b2DotVV(this.m_uA, f) - this.m_ratio * box2d.b2DotVV(this.m_uB, g), i = -this.m_mass * h; this.m_impulse += i; var j = box2d.b2MulSV(-i, this.m_uA, box2d.b2PulleyJoint.prototype.SolveVelocityConstraints.s_PA), k = box2d.b2MulSV(-this.m_ratio * i, this.m_uB, box2d.b2PulleyJoint.prototype.SolveVelocityConstraints.s_PB); b.SelfMulAdd(this.m_invMassA, j), c += this.m_invIA * box2d.b2CrossVV(this.m_rA, j), d.SelfMulAdd(this.m_invMassB, k), e += this.m_invIB * box2d.b2CrossVV(this.m_rB, k), a.velocities[this.m_indexA].w = c, a.velocities[this.m_indexB].w = e }, box2d.b2PulleyJoint.prototype.SolveVelocityConstraints.s_vpA = new box2d.b2Vec2, box2d.b2PulleyJoint.prototype.SolveVelocityConstraints.s_vpB = new box2d.b2Vec2, box2d.b2PulleyJoint.prototype.SolveVelocityConstraints.s_PA = new box2d.b2Vec2, box2d.b2PulleyJoint.prototype.SolveVelocityConstraints.s_PB = new box2d.b2Vec2, box2d.b2PulleyJoint.prototype.SolvePositionConstraints = function(a) { var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.positions[this.m_indexB].c, e = a.positions[this.m_indexB].a, f = this.m_qA.SetAngleRadians(c), g = this.m_qB.SetAngleRadians(e); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); var h = box2d.b2MulRV(f, this.m_lalcA, this.m_rA); box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); var i = box2d.b2MulRV(g, this.m_lalcB, this.m_rB), j = this.m_uA.Copy(b).SelfAdd(h).SelfSub(this.m_groundAnchorA), k = this.m_uB.Copy(d).SelfAdd(i).SelfSub(this.m_groundAnchorB), l = j.GetLength(), m = k.GetLength(); l > 10 * box2d.b2_linearSlop ? j.SelfMul(1 / l) : j.SetZero(), m > 10 * box2d.b2_linearSlop ? k.SelfMul(1 / m) : k.SetZero(); var n = box2d.b2CrossVV(h, j), o = box2d.b2CrossVV(i, k), p = this.m_invMassA + this.m_invIA * n * n, q = this.m_invMassB + this.m_invIB * o * o, r = p + this.m_ratio * this.m_ratio * q; r > 0 && (r = 1 / r); var s = this.m_constant - l - this.m_ratio * m, t = box2d.b2Abs(s), u = -r * s, v = box2d.b2MulSV(-u, j, box2d.b2PulleyJoint.prototype.SolvePositionConstraints.s_PA), w = box2d.b2MulSV(-this.m_ratio * u, k, box2d.b2PulleyJoint.prototype.SolvePositionConstraints.s_PB); return b.SelfMulAdd(this.m_invMassA, v), c += this.m_invIA * box2d.b2CrossVV(h, v), d.SelfMulAdd(this.m_invMassB, w), e += this.m_invIB * box2d.b2CrossVV(i, w), a.positions[this.m_indexA].a = c, a.positions[this.m_indexB].a = e, t < box2d.b2_linearSlop }, box2d.b2PulleyJoint.prototype.SolvePositionConstraints.s_PA = new box2d.b2Vec2, box2d.b2PulleyJoint.prototype.SolvePositionConstraints.s_PB = new box2d.b2Vec2, box2d.b2PulleyJoint.prototype.GetAnchorA = function(a) { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, a) }, box2d.b2PulleyJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, a) }, box2d.b2PulleyJoint.prototype.GetReactionForce = function(a, b) { return b.SetXY(a * this.m_impulse * this.m_uB.x, a * this.m_impulse * this.m_uB.y) }, box2d.b2PulleyJoint.prototype.GetReactionTorque = function(a) { return 0 }, box2d.b2PulleyJoint.prototype.GetGroundAnchorA = function(a) { return a.Copy(this.m_groundAnchorA) }, box2d.b2PulleyJoint.prototype.GetGroundAnchorB = function(a) { return a.Copy(this.m_groundAnchorB) }, box2d.b2PulleyJoint.prototype.GetLengthA = function() { return this.m_lengthA }, box2d.b2PulleyJoint.prototype.GetLengthB = function() { return this.m_lengthB }, box2d.b2PulleyJoint.prototype.GetRatio = function() { return this.m_ratio }, box2d.b2PulleyJoint.prototype.GetCurrentLengthA = function() { var a = this.m_bodyA.GetWorldPoint(this.m_localAnchorA, box2d.b2PulleyJoint.prototype.GetCurrentLengthA.s_p), b = this.m_groundAnchorA; return box2d.b2DistanceVV(a, b) }, box2d.b2PulleyJoint.prototype.GetCurrentLengthA.s_p = new box2d.b2Vec2, box2d.b2PulleyJoint.prototype.GetCurrentLengthB = function() { var a = this.m_bodyB.GetWorldPoint(this.m_localAnchorB, box2d.b2PulleyJoint.prototype.GetCurrentLengthB.s_p), b = this.m_groundAnchorB; return box2d.b2DistanceVV(a, b) }, box2d.b2PulleyJoint.prototype.GetCurrentLengthB.s_p = new box2d.b2Vec2, box2d.b2PulleyJoint.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_bodyA.m_islandIndex, b = this.m_bodyB.m_islandIndex; box2d.b2Log(" /*box2d.b2PulleyJointDef*/ var jd = new box2d.b2PulleyJointDef();\n"), box2d.b2Log(" jd.bodyA = bodies[%d];\n", a), box2d.b2Log(" jd.bodyB = bodies[%d];\n", b), box2d.b2Log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), box2d.b2Log(" jd.groundAnchorA.SetXY(%.15f, %.15f);\n", this.m_groundAnchorA.x, this.m_groundAnchorA.y), box2d.b2Log(" jd.groundAnchorB.SetXY(%.15f, %.15f);\n", this.m_groundAnchorB.x, this.m_groundAnchorB.y), box2d.b2Log(" jd.localAnchorA.SetXY(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), box2d.b2Log(" jd.localAnchorB.SetXY(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), box2d.b2Log(" jd.lengthA = %.15f;\n", this.m_lengthA), box2d.b2Log(" jd.lengthB = %.15f;\n", this.m_lengthB), box2d.b2Log(" jd.ratio = %.15f;\n", this.m_ratio), box2d.b2Log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index) } }, box2d.b2PulleyJoint.prototype.ShiftOrigin = function(a) { this.m_groundAnchorA.SelfSub(a), this.m_groundAnchorB.SelfSub(a) }, goog.provide("box2d.b2CircleShape"), goog.require("box2d.b2Shape"), box2d.b2CircleShape = function(a) { goog.base(this, box2d.b2ShapeType.e_circleShape, a || 0), this.m_p = new box2d.b2Vec2 }, goog.inherits(box2d.b2CircleShape, box2d.b2Shape), box2d.b2CircleShape.prototype.m_p = null, box2d.b2CircleShape.prototype.Clone = function() { return (new box2d.b2CircleShape).Copy(this) }, box2d.b2CircleShape.prototype.Copy = function(a) { return goog.base(this, "Copy", a), box2d.ENABLE_ASSERTS && box2d.b2Assert(a instanceof box2d.b2CircleShape), this.m_p.Copy(a.m_p), this }, box2d.b2CircleShape.prototype.GetChildCount = function() { return 1 }, box2d.b2CircleShape.prototype.TestPoint = function(a, b) { var c = box2d.b2MulXV(a, this.m_p, box2d.b2CircleShape.prototype.TestPoint.s_center), d = box2d.b2SubVV(b, c, box2d.b2CircleShape.prototype.TestPoint.s_d); return box2d.b2DotVV(d, d) <= box2d.b2Sq(this.m_radius) }, box2d.b2CircleShape.prototype.TestPoint.s_center = new box2d.b2Vec2, box2d.b2CircleShape.prototype.TestPoint.s_d = new box2d.b2Vec2, box2d.b2CircleShape.prototype.RayCast = function(a, b, c, d) { var e = box2d.b2MulXV(c, this.m_p, box2d.b2CircleShape.prototype.RayCast.s_position), f = box2d.b2SubVV(b.p1, e, box2d.b2CircleShape.prototype.RayCast.s_s), g = box2d.b2DotVV(f, f) - box2d.b2Sq(this.m_radius), h = box2d.b2SubVV(b.p2, b.p1, box2d.b2CircleShape.prototype.RayCast.s_r), i = box2d.b2DotVV(f, h), j = box2d.b2DotVV(h, h), k = i * i - j * g; if (k < 0 || j < box2d.b2_epsilon) return !1; var l = -(i + box2d.b2Sqrt(k)); return 0 <= l && l <= b.maxFraction * j && (l /= j, a.fraction = l, box2d.b2AddVMulSV(f, l, h, a.normal).SelfNormalize(), !0) }, box2d.b2CircleShape.prototype.RayCast.s_position = new box2d.b2Vec2, box2d.b2CircleShape.prototype.RayCast.s_s = new box2d.b2Vec2, box2d.b2CircleShape.prototype.RayCast.s_r = new box2d.b2Vec2, box2d.b2CircleShape.prototype.ComputeAABB = function(a, b, c) { var d = box2d.b2MulXV(b, this.m_p, box2d.b2CircleShape.prototype.ComputeAABB.s_p); a.lowerBound.SetXY(d.x - this.m_radius, d.y - this.m_radius), a.upperBound.SetXY(d.x + this.m_radius, d.y + this.m_radius) }, box2d.b2CircleShape.prototype.ComputeAABB.s_p = new box2d.b2Vec2, box2d.b2CircleShape.prototype.ComputeMass = function(a, b) { var c = box2d.b2Sq(this.m_radius); a.mass = b * box2d.b2_pi * c, a.center.Copy(this.m_p), a.I = a.mass * (.5 * c + box2d.b2DotVV(this.m_p, this.m_p)) }, box2d.b2CircleShape.prototype.SetupDistanceProxy = function(a, b) { a.m_vertices = new Array(1, !0), a.m_vertices[0] = this.m_p, a.m_count = 1, a.m_radius = this.m_radius }, box2d.b2CircleShape.prototype.ComputeSubmergedArea = function(a, b, c, d) { var e = box2d.b2MulXV(c, this.m_p, new box2d.b2Vec2), f = -(box2d.b2DotVV(a, e) - b); if (f < -this.m_radius + box2d.b2_epsilon) return 0; if (f > this.m_radius) return d.Copy(e), box2d.b2_pi * this.m_radius * this.m_radius; var g = this.m_radius * this.m_radius, h = f * f, i = g * (box2d.b2Asin(f / this.m_radius) + box2d.b2_pi / 2) + f * box2d.b2Sqrt(g - h), j = -2 / 3 * box2d.b2Pow(g - h, 1.5) / i; return d.x = e.x + a.x * j, d.y = e.y + a.y * j, i }, box2d.b2CircleShape.prototype.Dump = function() { box2d.b2Log(" /*box2d.b2CircleShape*/ var shape = new box2d.b2CircleShape();\n"), box2d.b2Log(" shape.m_radius = %.15f;\n", this.m_radius), box2d.b2Log(" shape.m_p.SetXY(%.15f, %.15f);\n", this.m_p.x, this.m_p.y) }, goog.provide("box2d.b2Rope"), goog.require("box2d.b2Math"), goog.require("box2d.b2Draw"), box2d.b2RopeDef = function() { this.vertices = new Array, this.masses = new Array, this.gravity = new box2d.b2Vec2 }, box2d.b2RopeDef.prototype.vertices = null, box2d.b2RopeDef.prototype.count = 0, box2d.b2RopeDef.prototype.masses = null, box2d.b2RopeDef.prototype.gravity = null, box2d.b2RopeDef.prototype.damping = .1, box2d.b2RopeDef.prototype.k2 = .9, box2d.b2RopeDef.prototype.k3 = .1, box2d.b2Rope = function() { this.m_gravity = new box2d.b2Vec2 }, box2d.b2Rope.prototype.m_count = 0, box2d.b2Rope.prototype.m_ps = null, box2d.b2Rope.prototype.m_p0s = null, box2d.b2Rope.prototype.m_vs = null, box2d.b2Rope.prototype.m_ims = null, box2d.b2Rope.prototype.m_Ls = null, box2d.b2Rope.prototype.m_as = null, box2d.b2Rope.prototype.m_gravity = null, box2d.b2Rope.prototype.m_damping = 0, box2d.b2Rope.prototype.m_k2 = 1, box2d.b2Rope.prototype.m_k3 = .1, box2d.b2Rope.prototype.GetVertexCount = function() { return this.m_count }, box2d.b2Rope.prototype.GetVertices = function() { return this.m_ps }, box2d.b2Rope.prototype.Initialize = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(a.count >= 3), this.m_count = a.count, this.m_ps = box2d.b2Vec2.MakeArray(this.m_count), this.m_p0s = box2d.b2Vec2.MakeArray(this.m_count), this.m_vs = box2d.b2Vec2.MakeArray(this.m_count), this.m_ims = box2d.b2MakeNumberArray(this.m_count); for (var b = 0; b < this.m_count; ++b) { this.m_ps[b].Copy(a.vertices[b]), this.m_p0s[b].Copy(a.vertices[b]), this.m_vs[b].SetZero(); var c = a.masses[b]; this.m_ims[b] = c > 0 ? 1 / c : 0 } var d = this.m_count - 1, e = this.m_count - 2; this.m_Ls = box2d.b2MakeNumberArray(d), this.m_as = box2d.b2MakeNumberArray(e); for (var b = 0; b < d; ++b) { var f = this.m_ps[b], g = this.m_ps[b + 1]; this.m_Ls[b] = box2d.b2DistanceVV(f, g) } for (var b = 0; b < e; ++b) { var f = this.m_ps[b], g = this.m_ps[b + 1], h = this.m_ps[b + 2], i = box2d.b2SubVV(g, f, box2d.b2Vec2.s_t0), j = box2d.b2SubVV(h, g, box2d.b2Vec2.s_t1), k = box2d.b2CrossVV(i, j), l = box2d.b2DotVV(i, j); this.m_as[b] = box2d.b2Atan2(k, l) } this.m_gravity.Copy(a.gravity), this.m_damping = a.damping, this.m_k2 = a.k2, this.m_k3 = a.k3 }, box2d.b2Rope.prototype.Step = function(a, b) { if (0 !== a) { for (var c = Math.exp(-a * this.m_damping), d = 0; d < this.m_count; ++d) this.m_p0s[d].Copy(this.m_ps[d]), this.m_ims[d] > 0 && this.m_vs[d].SelfMulAdd(a, this.m_gravity), this.m_vs[d].SelfMul(c), this.m_ps[d].SelfMulAdd(a, this.m_vs[d]); for (var d = 0; d < b; ++d) this.SolveC2(), this.SolveC3(), this.SolveC2(); for (var e = 1 / a, d = 0; d < this.m_count; ++d) box2d.b2MulSV(e, box2d.b2SubVV(this.m_ps[d], this.m_p0s[d], box2d.b2Vec2.s_t0), this.m_vs[d]) } }, box2d.b2Rope.prototype.SolveC2 = function() { for (var a = this.m_count - 1, b = 0; b < a; ++b) { var c = this.m_ps[b], d = this.m_ps[b + 1], e = box2d.b2SubVV(d, c, box2d.b2Rope.s_d), f = e.Normalize(), g = this.m_ims[b], h = this.m_ims[b + 1]; if (g + h !== 0) { var i = g / (g + h), j = h / (g + h); c.SelfMulSub(this.m_k2 * i * (this.m_Ls[b] - f), e), d.SelfMulAdd(this.m_k2 * j * (this.m_Ls[b] - f), e) } } }, box2d.b2Rope.s_d = new box2d.b2Vec2, box2d.b2Rope.prototype.SetAngleRadians = function(a) { for (var b = this.m_count - 2, c = 0; c < b; ++c) this.m_as[c] = a }, box2d.b2Rope.prototype.SolveC3 = function() { for (var a = this.m_count - 2, b = 0; b < a; ++b) { var c = this.m_ps[b], d = this.m_ps[b + 1], e = this.m_ps[b + 2], f = this.m_ims[b], g = this.m_ims[b + 1], h = this.m_ims[b + 2], i = box2d.b2SubVV(d, c, box2d.b2Rope.s_d1), j = box2d.b2SubVV(e, d, box2d.b2Rope.s_d2), k = i.GetLengthSquared(), l = j.GetLengthSquared(); if (k * l != 0) { var m = box2d.b2CrossVV(i, j), n = box2d.b2DotVV(i, j), o = box2d.b2Atan2(m, n), p = box2d.b2MulSV(-1 / k, i.SelfSkew(), box2d.b2Rope.s_Jd1), q = box2d.b2MulSV(1 / l, j.SelfSkew(), box2d.b2Rope.s_Jd2), r = box2d.b2NegV(p, box2d.b2Rope.s_J1), s = box2d.b2SubVV(p, q, box2d.b2Rope.s_J2), t = q, u = f * box2d.b2DotVV(r, r) + g * box2d.b2DotVV(s, s) + h * box2d.b2DotVV(t, t); if (0 !== u) { u = 1 / u; for (var v = o - this.m_as[b]; v > box2d.b2_pi;) o -= 2 * box2d.b2_pi, v = o - this.m_as[b]; for (; v < -box2d.b2_pi;) o += 2 * box2d.b2_pi, v = o - this.m_as[b]; var w = -this.m_k3 * u * v; c.SelfMulAdd(f * w, r), d.SelfMulAdd(g * w, s), e.SelfMulAdd(h * w, t) } } } }, box2d.b2Rope.s_d1 = new box2d.b2Vec2, box2d.b2Rope.s_d2 = new box2d.b2Vec2, box2d.b2Rope.s_Jd1 = new box2d.b2Vec2, box2d.b2Rope.s_Jd2 = new box2d.b2Vec2, box2d.b2Rope.s_J1 = new box2d.b2Vec2, box2d.b2Rope.s_J2 = new box2d.b2Vec2, box2d.b2Rope.prototype.Draw = function(a) { for (var b = new box2d.b2Color(.4, .5, .7), c = 0; c < this.m_count - 1; ++c) a.DrawSegment(this.m_ps[c], this.m_ps[c + 1], b) }, goog.provide("box2d.b2WheelJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Math"), box2d.b2WheelJointDef = function() { goog.base(this, box2d.b2JointType.e_wheelJoint), this.localAnchorA = new box2d.b2Vec2(0, 0), this.localAnchorB = new box2d.b2Vec2(0, 0), this.localAxisA = new box2d.b2Vec2(1, 0) }, goog.inherits(box2d.b2WheelJointDef, box2d.b2JointDef), box2d.b2WheelJointDef.prototype.localAnchorA = null, box2d.b2WheelJointDef.prototype.localAnchorB = null, box2d.b2WheelJointDef.prototype.localAxisA = null, box2d.b2WheelJointDef.prototype.enableMotor = !1, box2d.b2WheelJointDef.prototype.maxMotorTorque = 0, box2d.b2WheelJointDef.prototype.motorSpeed = 0, box2d.b2WheelJointDef.prototype.frequencyHz = 2, box2d.b2WheelJointDef.prototype.dampingRatio = .7, box2d.b2WheelJointDef.prototype.Initialize = function(a, b, c, d) { this.bodyA = a, this.bodyB = b, this.bodyA.GetLocalPoint(c, this.localAnchorA), this.bodyB.GetLocalPoint(c, this.localAnchorB), this.bodyA.GetLocalVector(d, this.localAxisA) }, box2d.b2WheelJoint = function(a) { goog.base(this, a), this.m_frequencyHz = a.frequencyHz, this.m_dampingRatio = a.dampingRatio, this.m_localAnchorA = a.localAnchorA.Clone(), this.m_localAnchorB = a.localAnchorB.Clone(), this.m_localXAxisA = a.localAxisA.Clone(), this.m_localYAxisA = box2d.b2CrossOneV(this.m_localXAxisA, new box2d.b2Vec2), this.m_maxMotorTorque = a.maxMotorTorque, this.m_motorSpeed = a.motorSpeed, this.m_enableMotor = a.enableMotor, this.m_localCenterA = new box2d.b2Vec2, this.m_localCenterB = new box2d.b2Vec2, this.m_ax = new box2d.b2Vec2, this.m_ay = new box2d.b2Vec2, this.m_qA = new box2d.b2Rot, this.m_qB = new box2d.b2Rot, this.m_lalcA = new box2d.b2Vec2, this.m_lalcB = new box2d.b2Vec2, this.m_rA = new box2d.b2Vec2, this.m_rB = new box2d.b2Vec2, this.m_ax.SetZero(), this.m_ay.SetZero() }, goog.inherits(box2d.b2WheelJoint, box2d.b2Joint), box2d.b2WheelJoint.prototype.m_frequencyHz = 0, box2d.b2WheelJoint.prototype.m_dampingRatio = 0, box2d.b2WheelJoint.prototype.m_localAnchorA = null, box2d.b2WheelJoint.prototype.m_localAnchorB = null, box2d.b2WheelJoint.prototype.m_localXAxisA = null, box2d.b2WheelJoint.prototype.m_localYAxisA = null, box2d.b2WheelJoint.prototype.m_impulse = 0, box2d.b2WheelJoint.prototype.m_motorImpulse = 0, box2d.b2WheelJoint.prototype.m_springImpulse = 0, box2d.b2WheelJoint.prototype.m_maxMotorTorque = 0, box2d.b2WheelJoint.prototype.m_motorSpeed = 0, box2d.b2WheelJoint.prototype.m_enableMotor = !1, box2d.b2WheelJoint.prototype.m_indexA = 0, box2d.b2WheelJoint.prototype.m_indexB = 0, box2d.b2WheelJoint.prototype.m_localCenterA = null, box2d.b2WheelJoint.prototype.m_localCenterB = null, box2d.b2WheelJoint.prototype.m_invMassA = 0, box2d.b2WheelJoint.prototype.m_invMassB = 0, box2d.b2WheelJoint.prototype.m_invIA = 0, box2d.b2WheelJoint.prototype.m_invIB = 0, box2d.b2WheelJoint.prototype.m_ax = null, box2d.b2WheelJoint.prototype.m_ay = null, box2d.b2WheelJoint.prototype.m_sAx = 0, box2d.b2WheelJoint.prototype.m_sBx = 0, box2d.b2WheelJoint.prototype.m_sAy = 0, box2d.b2WheelJoint.prototype.m_sBy = 0, box2d.b2WheelJoint.prototype.m_mass = 0, box2d.b2WheelJoint.prototype.m_motorMass = 0, box2d.b2WheelJoint.prototype.m_springMass = 0, box2d.b2WheelJoint.prototype.m_bias = 0, box2d.b2WheelJoint.prototype.m_gamma = 0, box2d.b2WheelJoint.prototype.m_qA = null, box2d.b2WheelJoint.prototype.m_qB = null, box2d.b2WheelJoint.prototype.m_lalcA = null, box2d.b2WheelJoint.prototype.m_lalcB = null, box2d.b2WheelJoint.prototype.m_rA = null, box2d.b2WheelJoint.prototype.m_rB = null, box2d.b2WheelJoint.prototype.GetMotorSpeed = function() { return this.m_motorSpeed }, box2d.b2WheelJoint.prototype.GetMaxMotorTorque = function() { return this.m_maxMotorTorque }, box2d.b2WheelJoint.prototype.SetSpringFrequencyHz = function(a) { this.m_frequencyHz = a }, box2d.b2WheelJoint.prototype.GetSpringFrequencyHz = function() { return this.m_frequencyHz }, box2d.b2WheelJoint.prototype.SetSpringDampingRatio = function(a) { this.m_dampingRatio = a }, box2d.b2WheelJoint.prototype.GetSpringDampingRatio = function() { return this.m_dampingRatio }, box2d.b2WheelJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI; var b = this.m_invMassA, c = this.m_invMassB, d = this.m_invIA, e = this.m_invIB, f = a.positions[this.m_indexA].c, g = a.positions[this.m_indexA].a, h = a.velocities[this.m_indexA].v, i = a.velocities[this.m_indexA].w, j = a.positions[this.m_indexB].c, k = a.positions[this.m_indexB].a, l = a.velocities[this.m_indexB].v, m = a.velocities[this.m_indexB].w, n = this.m_qA.SetAngleRadians(g), o = this.m_qB.SetAngleRadians(k); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); var p = box2d.b2MulRV(n, this.m_lalcA, this.m_rA); box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); var q = box2d.b2MulRV(o, this.m_lalcB, this.m_rB), r = box2d.b2SubVV(box2d.b2AddVV(j, q, box2d.b2Vec2.s_t0), box2d.b2AddVV(f, p, box2d.b2Vec2.s_t1), box2d.b2WheelJoint.prototype.InitVelocityConstraints.s_d); if (box2d.b2MulRV(n, this.m_localYAxisA, this.m_ay), this.m_sAy = box2d.b2CrossVV(box2d.b2AddVV(r, p, box2d.b2Vec2.s_t0), this.m_ay), this.m_sBy = box2d.b2CrossVV(q, this.m_ay), this.m_mass = b + c + d * this.m_sAy * this.m_sAy + e * this.m_sBy * this.m_sBy, this.m_mass > 0 && (this.m_mass = 1 / this.m_mass), this.m_springMass = 0, this.m_bias = 0, this.m_gamma = 0, this.m_frequencyHz > 0) { box2d.b2MulRV(n, this.m_localXAxisA, this.m_ax), this.m_sAx = box2d.b2CrossVV(box2d.b2AddVV(r, p, box2d.b2Vec2.s_t0), this.m_ax), this.m_sBx = box2d.b2CrossVV(q, this.m_ax); var s = b + c + d * this.m_sAx * this.m_sAx + e * this.m_sBx * this.m_sBx; if (s > 0) { this.m_springMass = 1 / s; var t = box2d.b2DotVV(r, this.m_ax), u = 2 * box2d.b2_pi * this.m_frequencyHz, v = 2 * this.m_springMass * this.m_dampingRatio * u, w = this.m_springMass * u * u, x = a.step.dt; this.m_gamma = x * (v + x * w), this.m_gamma > 0 && (this.m_gamma = 1 / this.m_gamma), this.m_bias = t * x * w * this.m_gamma, this.m_springMass = s + this.m_gamma, this.m_springMass > 0 && (this.m_springMass = 1 / this.m_springMass) } } else this.m_springImpulse = 0; if (this.m_enableMotor ? (this.m_motorMass = d + e, this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass)) : (this.m_motorMass = 0, this.m_motorImpulse = 0), a.step.warmStarting) { this.m_impulse *= a.step.dtRatio, this.m_springImpulse *= a.step.dtRatio, this.m_motorImpulse *= a.step.dtRatio; var y = box2d.b2AddVV(box2d.b2MulSV(this.m_impulse, this.m_ay, box2d.b2Vec2.s_t0), box2d.b2MulSV(this.m_springImpulse, this.m_ax, box2d.b2Vec2.s_t1), box2d.b2WheelJoint.prototype.InitVelocityConstraints.s_P), z = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse, A = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse; h.SelfMulSub(this.m_invMassA, y), i -= this.m_invIA * z, l.SelfMulAdd(this.m_invMassB, y), m += this.m_invIB * A } else this.m_impulse = 0, this.m_springImpulse = 0, this.m_motorImpulse = 0; a.velocities[this.m_indexA].w = i, a.velocities[this.m_indexB].w = m }, box2d.b2WheelJoint.prototype.InitVelocityConstraints.s_d = new box2d.b2Vec2, box2d.b2WheelJoint.prototype.InitVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2WheelJoint.prototype.SolveVelocityConstraints = function(a) { var b = this.m_invMassA, c = this.m_invMassB, d = this.m_invIA, e = this.m_invIB, f = a.velocities[this.m_indexA].v, g = a.velocities[this.m_indexA].w, h = a.velocities[this.m_indexB].v, i = a.velocities[this.m_indexB].w, j = box2d.b2DotVV(this.m_ax, box2d.b2SubVV(h, f, box2d.b2Vec2.s_t0)) + this.m_sBx * i - this.m_sAx * g, k = -this.m_springMass * (j + this.m_bias + this.m_gamma * this.m_springImpulse); this.m_springImpulse += k; var l = box2d.b2MulSV(k, this.m_ax, box2d.b2WheelJoint.prototype.SolveVelocityConstraints.s_P), m = k * this.m_sAx, n = k * this.m_sBx; f.SelfMulSub(b, l), g -= d * m, h.SelfMulAdd(c, l), i += e * n; var j = i - g - this.m_motorSpeed, k = -this.m_motorMass * j, o = this.m_motorImpulse, p = a.step.dt * this.m_maxMotorTorque; this.m_motorImpulse = box2d.b2Clamp(this.m_motorImpulse + k, -p, p), k = this.m_motorImpulse - o, g -= d * k, i += e * k; var j = box2d.b2DotVV(this.m_ay, box2d.b2SubVV(h, f, box2d.b2Vec2.s_t0)) + this.m_sBy * i - this.m_sAy * g, k = -this.m_mass * j; this.m_impulse += k; var l = box2d.b2MulSV(k, this.m_ay, box2d.b2WheelJoint.prototype.SolveVelocityConstraints.s_P), m = k * this.m_sAy, n = k * this.m_sBy; f.SelfMulSub(b, l), g -= d * m, h.SelfMulAdd(c, l), i += e * n, a.velocities[this.m_indexA].w = g, a.velocities[this.m_indexB].w = i }, box2d.b2WheelJoint.prototype.SolveVelocityConstraints.s_P = new box2d.b2Vec2, box2d.b2WheelJoint.prototype.SolvePositionConstraints = function(a) { var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.positions[this.m_indexB].c, e = a.positions[this.m_indexB].a, f = this.m_qA.SetAngleRadians(c), g = this.m_qB.SetAngleRadians(e); box2d.b2SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA); var h = box2d.b2MulRV(f, this.m_lalcA, this.m_rA); box2d.b2SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB); var i, j = box2d.b2MulRV(g, this.m_lalcB, this.m_rB), k = box2d.b2AddVV(box2d.b2SubVV(d, b, box2d.b2Vec2.s_t0), box2d.b2SubVV(j, h, box2d.b2Vec2.s_t1), box2d.b2WheelJoint.prototype.SolvePositionConstraints.s_d), l = box2d.b2MulRV(f, this.m_localYAxisA, this.m_ay), m = box2d.b2CrossVV(box2d.b2AddVV(k, h, box2d.b2Vec2.s_t0), l), n = box2d.b2CrossVV(j, l), o = box2d.b2DotVV(k, this.m_ay), p = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_sAy * this.m_sAy + this.m_invIB * this.m_sBy * this.m_sBy; i = 0 !== p ? -o / p : 0; var q = box2d.b2MulSV(i, l, box2d.b2WheelJoint.prototype.SolvePositionConstraints.s_P), r = i * m, s = i * n; return b.SelfMulSub(this.m_invMassA, q), c -= this.m_invIA * r, d.SelfMulAdd(this.m_invMassB, q), e += this.m_invIB * s, a.positions[this.m_indexA].a = c, a.positions[this.m_indexB].a = e, box2d.b2Abs(o) <= box2d.b2_linearSlop }, box2d.b2WheelJoint.prototype.SolvePositionConstraints.s_d = new box2d.b2Vec2, box2d.b2WheelJoint.prototype.SolvePositionConstraints.s_P = new box2d.b2Vec2, box2d.b2WheelJoint.prototype.GetDefinition = function(a) { return box2d.ENABLE_ASSERTS && box2d.b2Assert(!1), a }, box2d.b2WheelJoint.prototype.GetAnchorA = function(a) { return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, a) }, box2d.b2WheelJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, a) }, box2d.b2WheelJoint.prototype.GetReactionForce = function(a, b) { return b.x = a * (this.m_impulse * this.m_ay.x + this.m_springImpulse * this.m_ax.x), b.y = a * (this.m_impulse * this.m_ay.y + this.m_springImpulse * this.m_ax.y), b }, box2d.b2WheelJoint.prototype.GetReactionTorque = function(a) { return a * this.m_motorImpulse }, box2d.b2WheelJoint.prototype.GetLocalAnchorA = function(a) { return a.Copy(this.m_localAnchorA) }, box2d.b2WheelJoint.prototype.GetLocalAnchorB = function(a) { return a.Copy(this.m_localAnchorB) }, box2d.b2WheelJoint.prototype.GetLocalAxisA = function(a) { return a.Copy(this.m_localXAxisA) }, box2d.b2WheelJoint.prototype.GetJointTranslation = function() { var a = this.m_bodyA, b = this.m_bodyB, c = a.GetWorldPoint(this.m_localAnchorA, new box2d.b2Vec2), d = b.GetWorldPoint(this.m_localAnchorB, new box2d.b2Vec2), e = box2d.b2SubVV(d, c, new box2d.b2Vec2), f = a.GetWorldVector(this.m_localXAxisA, new box2d.b2Vec2); return box2d.b2DotVV(e, f) }, box2d.b2WheelJoint.prototype.GetJointSpeed = function() { var a = this.m_bodyA.m_angularVelocity; return this.m_bodyB.m_angularVelocity - a }, box2d.b2WheelJoint.prototype.IsMotorEnabled = function() { return this.m_enableMotor }, box2d.b2WheelJoint.prototype.EnableMotor = function(a) { this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_enableMotor = a }, box2d.b2WheelJoint.prototype.SetMotorSpeed = function(a) { this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_motorSpeed = a }, box2d.b2WheelJoint.prototype.SetMaxMotorTorque = function(a) { this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_maxMotorTorque = a }, box2d.b2WheelJoint.prototype.GetMotorTorque = function(a) { return a * this.m_motorImpulse }, box2d.b2WheelJoint.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_bodyA.m_islandIndex, b = this.m_bodyB.m_islandIndex; box2d.b2Log(" /*box2d.b2WheelJointDef*/ var jd = new box2d.b2WheelJointDef();\n"), box2d.b2Log(" jd.bodyA = bodies[%d];\n", a), box2d.b2Log(" jd.bodyB = bodies[%d];\n", b), box2d.b2Log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), box2d.b2Log(" jd.localAnchorA.SetXY(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y), box2d.b2Log(" jd.localAnchorB.SetXY(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y), box2d.b2Log(" jd.localAxisA.Set(%.15f, %.15f);\n", this.m_localXAxisA.x, this.m_localXAxisA.y), box2d.b2Log(" jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"), box2d.b2Log(" jd.motorSpeed = %.15f;\n", this.m_motorSpeed), box2d.b2Log(" jd.maxMotorTorque = %.15f;\n", this.m_maxMotorTorque), box2d.b2Log(" jd.frequencyHz = %.15f;\n", this.m_frequencyHz), box2d.b2Log(" jd.dampingRatio = %.15f;\n", this.m_dampingRatio), box2d.b2Log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index) } }, goog.provide("box2d.b2MotorJoint"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Math"), box2d.b2MotorJointDef = function() { goog.base(this, box2d.b2JointType.e_motorJoint), this.linearOffset = new box2d.b2Vec2(0, 0) }, goog.inherits(box2d.b2MotorJointDef, box2d.b2JointDef), box2d.b2MotorJointDef.prototype.linearOffset = null, box2d.b2MotorJointDef.prototype.angularOffset = 0, box2d.b2MotorJointDef.prototype.maxForce = 1, box2d.b2MotorJointDef.prototype.maxTorque = 1, box2d.b2MotorJointDef.prototype.correctionFactor = .3, box2d.b2MotorJointDef.prototype.Initialize = function(a, b) { this.bodyA = a, this.bodyB = b, this.bodyA.GetLocalPoint(this.bodyB.GetPosition(), this.linearOffset); var c = this.bodyA.GetAngleRadians(), d = this.bodyB.GetAngleRadians(); this.angularOffset = d - c }, box2d.b2MotorJoint = function(a) { goog.base(this, a), this.m_linearOffset = a.linearOffset.Clone(), this.m_linearImpulse = new box2d.b2Vec2(0, 0), this.m_maxForce = a.maxForce, this.m_maxTorque = a.maxTorque, this.m_correctionFactor = a.correctionFactor, this.m_rA = new box2d.b2Vec2(0, 0), this.m_rB = new box2d.b2Vec2(0, 0), this.m_localCenterA = new box2d.b2Vec2(0, 0), this.m_localCenterB = new box2d.b2Vec2(0, 0), this.m_linearError = new box2d.b2Vec2(0, 0), this.m_linearMass = new box2d.b2Mat22, this.m_qA = new box2d.b2Rot, this.m_qB = new box2d.b2Rot, this.m_K = new box2d.b2Mat22 }, goog.inherits(box2d.b2MotorJoint, box2d.b2Joint), box2d.b2MotorJoint.prototype.m_linearOffset = null, box2d.b2MotorJoint.prototype.m_angularOffset = 0, box2d.b2MotorJoint.prototype.m_linearImpulse = null, box2d.b2MotorJoint.prototype.m_angularImpulse = 0, box2d.b2MotorJoint.prototype.m_maxForce = 0, box2d.b2MotorJoint.prototype.m_maxTorque = 0, box2d.b2MotorJoint.prototype.m_correctionFactor = .3, box2d.b2MotorJoint.prototype.m_indexA = 0, box2d.b2MotorJoint.prototype.m_indexB = 0, box2d.b2MotorJoint.prototype.m_rA = null, box2d.b2MotorJoint.prototype.m_rB = null, box2d.b2MotorJoint.prototype.m_localCenterA = null, box2d.b2MotorJoint.prototype.m_localCenterB = null, box2d.b2MotorJoint.prototype.m_linearError = null, box2d.b2MotorJoint.prototype.m_angularError = 0, box2d.b2MotorJoint.prototype.m_invMassA = 0, box2d.b2MotorJoint.prototype.m_invMassB = 0, box2d.b2MotorJoint.prototype.m_invIA = 0, box2d.b2MotorJoint.prototype.m_invIB = 0; box2d.b2MotorJoint.prototype.m_linearMass = null, box2d.b2MotorJoint.prototype.m_angularMass = 0, box2d.b2MotorJoint.prototype.m_qA = null, box2d.b2MotorJoint.prototype.m_qB = null, box2d.b2MotorJoint.prototype.m_K = null, box2d.b2MotorJoint.prototype.GetAnchorA = function(a) { return this.m_bodyA.GetPosition(a) }, box2d.b2MotorJoint.prototype.GetAnchorB = function(a) { return this.m_bodyB.GetPosition(a) }, box2d.b2MotorJoint.prototype.GetReactionForce = function(a, b) { return box2d.b2MulSV(a, this.m_linearImpulse, b) }, box2d.b2MotorJoint.prototype.GetReactionTorque = function(a) { return a * this.m_angularImpulse }, box2d.b2MotorJoint.prototype.SetCorrectionFactor = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a) && 0 <= a && a <= 1), this._correctionFactor = a }, box2d.b2MotorJoint.prototype.GetCorrectionFactor = function() { return this.m_correctionFactor }, box2d.b2MotorJoint.prototype.SetLinearOffset = function(a) { box2d.b2IsEqualToV(a, this.m_linearOffset) || (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_linearOffset.Copy(a)) }, box2d.b2MotorJoint.prototype.GetLinearOffset = function(a) { return a.Copy(this.m_linearOffset) }, box2d.b2MotorJoint.prototype.SetAngularOffset = function(a) { a !== this.m_angularOffset && (this.m_bodyA.SetAwake(!0), this.m_bodyB.SetAwake(!0), this.m_angularOffset = a) }, box2d.b2MotorJoint.prototype.GetAngularOffset = function() { return this.m_angularOffset }, box2d.b2MotorJoint.prototype.SetMaxForce = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a) && a >= 0), this.m_maxForce = a }, box2d.b2MotorJoint.prototype.GetMaxForce = function() { return this.m_maxForce }, box2d.b2MotorJoint.prototype.SetMaxTorque = function(a) { box2d.ENABLE_ASSERTS && box2d.b2Assert(box2d.b2IsValid(a) && a >= 0), this.m_maxTorque = a }, box2d.b2MotorJoint.prototype.GetMaxTorque = function() { return this.m_maxTorque }, box2d.b2MotorJoint.prototype.InitVelocityConstraints = function(a) { this.m_indexA = this.m_bodyA.m_islandIndex, this.m_indexB = this.m_bodyB.m_islandIndex, this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter), this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter), this.m_invMassA = this.m_bodyA.m_invMass, this.m_invMassB = this.m_bodyB.m_invMass, this.m_invIA = this.m_bodyA.m_invI, this.m_invIB = this.m_bodyB.m_invI; var b = a.positions[this.m_indexA].c, c = a.positions[this.m_indexA].a, d = a.velocities[this.m_indexA].v, e = a.velocities[this.m_indexA].w, f = a.positions[this.m_indexB].c, g = a.positions[this.m_indexB].a, h = a.velocities[this.m_indexB].v, i = a.velocities[this.m_indexB].w, j = this.m_qA.SetAngleRadians(c), k = this.m_qB.SetAngleRadians(g), l = box2d.b2MulRV(j, box2d.b2NegV(this.m_localCenterA, box2d.b2Vec2.s_t0), this.m_rA), m = box2d.b2MulRV(k, box2d.b2NegV(this.m_localCenterB, box2d.b2Vec2.s_t0), this.m_rB), n = this.m_invMassA, o = this.m_invMassB, p = this.m_invIA, q = this.m_invIB, r = this.m_K; if (r.ex.x = n + o + p * l.y * l.y + q * m.y * m.y, r.ex.y = -p * l.x * l.y - q * m.x * m.y, r.ey.x = r.ex.y, r.ey.y = n + o + p * l.x * l.x + q * m.x * m.x, r.GetInverse(this.m_linearMass), this.m_angularMass = p + q, this.m_angularMass > 0 && (this.m_angularMass = 1 / this.m_angularMass), box2d.b2SubVV(box2d.b2SubVV(box2d.b2AddVV(f, m, box2d.b2Vec2.s_t0), box2d.b2AddVV(b, l, box2d.b2Vec2.s_t1), box2d.b2Vec2.s_t2), box2d.b2MulRV(j, this.m_linearOffset, box2d.b2Vec2.s_t3), this.m_linearError), this.m_angularError = g - c - this.m_angularOffset, a.step.warmStarting) { this.m_linearImpulse.SelfMul(a.step.dtRatio), this.m_angularImpulse *= a.step.dtRatio; var s = this.m_linearImpulse; d.SelfMulSub(n, s), e -= p * (box2d.b2CrossVV(l, s) + this.m_angularImpulse), h.SelfMulAdd(o, s), i += q * (box2d.b2CrossVV(m, s) + this.m_angularImpulse) } else this.m_linearImpulse.SetZero(), this.m_angularImpulse = 0; a.velocities[this.m_indexA].w = e, a.velocities[this.m_indexB].w = i }, box2d.b2MotorJoint.prototype.SolveVelocityConstraints = function(a) { var b = a.velocities[this.m_indexA].v, c = a.velocities[this.m_indexA].w, d = a.velocities[this.m_indexB].v, e = a.velocities[this.m_indexB].w, f = this.m_invMassA, g = this.m_invMassB, h = this.m_invIA, i = this.m_invIB, j = a.step.dt, k = a.step.inv_dt, l = e - c + k * this.m_correctionFactor * this.m_angularError, m = -this.m_angularMass * l, n = this.m_angularImpulse, o = j * this.m_maxTorque; this.m_angularImpulse = box2d.b2Clamp(this.m_angularImpulse + m, -o, o), m = this.m_angularImpulse - n, c -= h * m, e += i * m; var p = this.m_rA, q = this.m_rB, l = box2d.b2AddVV(box2d.b2SubVV(box2d.b2AddVV(d, box2d.b2CrossSV(e, q, box2d.b2Vec2.s_t0), box2d.b2Vec2.s_t0), box2d.b2AddVV(b, box2d.b2CrossSV(c, p, box2d.b2Vec2.s_t1), box2d.b2Vec2.s_t1), box2d.b2Vec2.s_t2), box2d.b2MulSV(k * this.m_correctionFactor, this.m_linearError, box2d.b2Vec2.s_t3), box2d.b2MotorJoint.prototype.SolveVelocityConstraints.s_Cdot), m = box2d.b2MulMV(this.m_linearMass, l, box2d.b2MotorJoint.prototype.SolveVelocityConstraints.s_impulse).SelfNeg(), n = box2d.b2MotorJoint.prototype.SolveVelocityConstraints.s_oldImpulse.Copy(this.m_linearImpulse); this.m_linearImpulse.SelfAdd(m); var o = j * this.m_maxForce; this.m_linearImpulse.GetLengthSquared() > o * o && (this.m_linearImpulse.Normalize(), this.m_linearImpulse.SelfMul(o)), box2d.b2SubVV(this.m_linearImpulse, n, m), b.SelfMulSub(f, m), c -= h * box2d.b2CrossVV(p, m), d.SelfMulAdd(g, m), e += i * box2d.b2CrossVV(q, m), a.velocities[this.m_indexA].w = c, a.velocities[this.m_indexB].w = e }, box2d.b2MotorJoint.prototype.SolveVelocityConstraints.s_Cdot = new box2d.b2Vec2, box2d.b2MotorJoint.prototype.SolveVelocityConstraints.s_impulse = new box2d.b2Vec2, box2d.b2MotorJoint.prototype.SolveVelocityConstraints.s_oldImpulse = new box2d.b2Vec2, box2d.b2MotorJoint.prototype.SolvePositionConstraints = function(a) { return !0 }, box2d.b2MotorJoint.prototype.Dump = function() { if (box2d.DEBUG) { var a = this.m_bodyA.m_islandIndex, b = this.m_bodyB.m_islandIndex; box2d.b2Log(" /*box2d.b2MotorJointDef*/ var jd = new box2d.b2MotorJointDef();\n"), box2d.b2Log(" jd.bodyA = bodies[%d];\n", a), box2d.b2Log(" jd.bodyB = bodies[%d];\n", b), box2d.b2Log(" jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"), box2d.b2Log(" jd.linearOffset.SetXY(%.15f, %.15f);\n", this.m_linearOffset.x, this.m_linearOffset.y), box2d.b2Log(" jd.angularOffset = %.15f;\n", this.m_angularOffset), box2d.b2Log(" jd.maxForce = %.15f;\n", this.m_maxForce), box2d.b2Log(" jd.maxTorque = %.15f;\n", this.m_maxTorque), box2d.b2Log(" jd.correctionFactor = %.15f;\n", this.m_correctionFactor), box2d.b2Log(" joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index) } }, goog.provide("box2d"), goog.require("box2d.b2Settings"), goog.require("box2d.b2Draw"), goog.require("box2d.b2Timer"), goog.require("box2d.b2CircleShape"), goog.require("box2d.b2EdgeShape"), goog.require("box2d.b2ChainShape"), goog.require("box2d.b2PolygonShape"), goog.require("box2d.b2BroadPhase"), goog.require("box2d.b2Distance"), goog.require("box2d.b2DynamicTree"), goog.require("box2d.b2TimeOfImpact"), goog.require("box2d.b2Body"), goog.require("box2d.b2Fixture"), goog.require("box2d.b2WorldCallbacks"), goog.require("box2d.b2TimeStep"), goog.require("box2d.b2World"), goog.require("box2d.b2Contact"), goog.require("box2d.b2AreaJoint"), goog.require("box2d.b2DistanceJoint"), goog.require("box2d.b2FrictionJoint"), goog.require("box2d.b2GearJoint"), goog.require("box2d.b2MotorJoint"), goog.require("box2d.b2MouseJoint"), goog.require("box2d.b2PrismaticJoint"), goog.require("box2d.b2PulleyJoint"), goog.require("box2d.b2RevoluteJoint"), goog.require("box2d.b2RopeJoint"), goog.require("box2d.b2WeldJoint"), goog.require("box2d.b2WheelJoint"), goog.require("box2d.b2Rope"), goog.require("box2d.b2BuoyancyController"), goog.require("box2d.b2ConstantAccelController"), goog.require("box2d.b2ConstantForceController"), goog.require("box2d.b2GravityController"), goog.require("box2d.b2TensorDampingController"), Phaser.Physics.Box2D = function(a, b) { this.game = a, this.version = "1.0.2", this.ptmRatio = 50, this.world = new box2d.b2World(new box2d.b2Vec2(0, 0)), this.debugDraw = new Phaser.Physics.Box2D.DefaultDebugDraw(this.mpx(1)), this.world.SetDebugDraw(this.debugDraw), this.contactListener = new Phaser.Physics.Box2D.DefaultContactListener, this.world.SetContactListener(this.contactListener), this.nextBodyId = 0, this.nextFixtureId = 0, this.gravity = new Phaser.Physics.Box2D.PointProxy(this, this.world, this.world.GetGravity, this.world.SetGravity), this.friction = .2, this.restitution = 0, this.density = 1, this.frameRate = 1 / 60, this.velocityIterations = 8, this.positionIterations = 3, this.useElapsedTime = !1, this.paused = !1, this.particleSystem = null; var c = new box2d.b2BodyDef; this.mouseJointBody = this.world.CreateBody(c), this.mouseJoint = null, b.hasOwnProperty("mpx") && b.hasOwnProperty("pxm") && (this.mpx = b.mpx, this.pxm = b.pxm), this.walls = { left: null, right: null, top: null, bottom: null }, this.onBodyAdded = new Phaser.Signal, this.onBodyRemoved = new Phaser.Signal, this._toRemove = [] }, Phaser.Physics.Box2D.worldBoundsFilterCategory = 32768, Phaser.Physics.Box2D.prototype = { getNextBodyId: function() { var a = this.nextBodyId; return this.nextBodyId += 1, a }, getNextFixtureId: function() { var a = this.nextFixtureId; return this.nextFixtureId += 1, a }, removeBodyNextStep: function(a) { this._toRemove.push(a) }, preUpdate: function() { for (var a = this._toRemove.length; a--;) this.removeBody(this._toRemove[a]); this._toRemove.length = 0 }, enable: function(a, b) { void 0 === b && (b = !0); var c = 1; if (Array.isArray(a)) for (c = a.length; c--;) a[c] instanceof Phaser.Group ? this.enable(a[c].children, b) : (this.enableBody(a[c]), b && a[c].hasOwnProperty("children") && a[c].children.length > 0 && this.enable(a[c], !0)); else a instanceof Phaser.Group ? this.enable(a.children, b) : (this.enableBody(a), b && a.hasOwnProperty("children") && a.children.length > 0 && this.enable(a.children, !0)) }, enableBody: function(a) { a.hasOwnProperty("body") && null === a.body && (a.body = new Phaser.Physics.Box2D.Body(this.game, a, a.x, a.y, 2), a.anchor.set(.5)) }, setBoundsToWorld: function(a, b, c, d, e, f) { void 0 === a && (a = !0), void 0 === b && (b = !0), void 0 === c && (c = !0), void 0 === d && (d = !0), void 0 === e && (e = 1), void 0 === f && (e = 4294967295), this.setBounds(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height, a, b, c, d, e, f) }, setBounds: function(a, b, c, d, e, f, g, h, i, j) { void 0 === e && (e = !0), void 0 === f && (f = !0), void 0 === g && (g = !0), void 0 === h && (h = !0), void 0 === i && (i = 1), void 0 === j && (j = 4294967295), this.walls.left && this.removeBody(this.walls.left), this.walls.right && this.removeBody(this.walls.right), this.walls.top && this.removeBody(this.walls.top), this.walls.bottom && this.removeBody(this.walls.bottom); var k = new box2d.b2PolygonShape, l = new box2d.b2FixtureDef; l.shape = k, l.filter.categoryBits = Phaser.Physics.Box2D.worldBoundsFilterCategory, l.filter.maskBits = 65535; var m = this.pxm(100), n = new PIXI.Rectangle(a, b, c, d); if (e) { this.walls.left = this.createBody(0, 0, 0), k.SetAsOrientedBox(m, this.pxm(n.height) + m, new box2d.b2Vec2(m - this.pxm(n.x), -this.pxm(n.y)), 0); var o = this.walls.left.data.CreateFixture(l); o.id = this.getNextFixtureId() } if (f) { this.walls.right = this.createBody(0, 0, 0), k.SetAsOrientedBox(m, this.pxm(n.height) + m, new box2d.b2Vec2(this.pxm(-n.width) - m - this.pxm(n.x), -this.pxm(n.y)), 0); var o = this.walls.right.data.CreateFixture(l); o.id = this.getNextFixtureId() } if (g) { this.walls.top = this.createBody(0, 0, 0), k.SetAsOrientedBox(this.pxm(n.width) + m, m, new box2d.b2Vec2(-this.pxm(n.x), m - this.pxm(n.y)), 0); var o = this.walls.top.data.CreateFixture(l); o.id = this.getNextFixtureId() } if (h) { this.walls.bottom = this.createBody(0, 0, 0), k.SetAsOrientedBox(this.pxm(n.width) + m, m, new box2d.b2Vec2(-this.pxm(n.x), this.pxm(-n.height) - m - this.pxm(n.y)), 0); var o = this.walls.bottom.data.CreateFixture(l); o.id = this.getNextFixtureId() } }, pause: function() { this.paused = !0 }, resume: function() { this.paused = !1 }, update: function() { this.paused || (this.useElapsedTime ? this.world.Step(this.game.time.physicsElapsed, this.velocityIterations, this.positionIterations) : this.world.Step(this.frameRate, this.velocityIterations, this.positionIterations)) }, reset: function() { this.clear() }, clear: function() { var a = this.world.GetGravity().Clone(); this.world = new box2d.b2World(a), this.world.SetDebugDraw(this.debugDraw), this.world.SetContactListener(this.contactListener), this._toRemove = [] }, destroy: function() { this.clear(), this.gravity = null, this.world = null, this.game = null }, createBody: function(a, b, c) { return new Phaser.Physics.Box2D.Body(this.game, null, a, b, c, this) }, createCircle: function(a, b, c, d, e) { return this.createBody(a, b, 2).setCircle(c, d, e) }, createRectangle: function(a, b, c, d, e, f, g) { return this.createBody(a, b, 2).setRectangle(c, d, e, f, g) }, createPolygon: function(a, b, c, d, e) { return this.createBody(a, b, 2).setPolygon(c, d, e) }, addBody: function(a) { return !a.data.world && (a.data = this.world.CreateBody(a.bodyDef), a.data.world = this.world, a.data.parent = a, this.onBodyAdded.dispatch(a), !0) }, removeBody: function(a) { return a.data.world == this.world && (this.world.DestroyBody(a.data), this.onBodyRemoved.dispatch(a)), a }, getBodies: function() { for (var a = [], b = this.world.GetBodyList(); b; b = b.GetNext()) a.push(b); return a }, getBody: function(a) { return a instanceof box2d.b2Body ? a : a instanceof Phaser.Physics.Box2D.Body ? a.data : a.body && a.body.type === Phaser.Physics.BOX2D ? a.body.data : null }, toJSON: function() { return this.world.toJSON() }, mpx: function(a) { return a *= this.ptmRatio }, pxm: function(a) { return a / this.ptmRatio }, renderDebugDraw: function(a) { if (this.game.physics.box2d) { var b = this.game.physics.box2d; b.debugDraw.start(a), b.world.DrawDebugData(), b.debugDraw.stop() } }, renderBodyInfo: function(a, b) { a.line("Position: x: " + b.x.toFixed(3) + " y: " + b.y.toFixed(3)), a.line("Rotation: " + b.rotation.toFixed(3) + " degrees"), a.line("Velocity: x: " + b.velocity.x.toFixed(3) + " y: " + b.velocity.y.toFixed(3)), a.line("Angular velocity: " + b.angularVelocity.toFixed(3) + " degrees/sec") }, getFixturesAtPoint: function(a, b, c, d) { void 0 === c && (c = !1), void 0 === d && (d = !1); var e = this.pxm(-a), f = this.pxm(-b), g = new box2d.b2Vec2(e, f), h = new box2d.b2AABB, i = new box2d.b2Vec2; i.SetXY(.001, .001), box2d.b2SubVV(g, i, h.lowerBound), box2d.b2AddVV(g, i, h.upperBound); var j = [], k = function(a) { return !(!d || a.GetBody().GetType() === box2d.b2BodyType.b2_dynamicBody) || (!a.TestPoint(g) || (j.push(a), !c)) }; return this.world.QueryAABB(k, h), j }, getBodiesAtPoint: function(a, b, c, d) { void 0 === c && (c = !1), void 0 === d && (d = !1); var e = this.getFixturesAtPoint(a, b, c, d); if (e.length < 1) return e; for (var f = [], g = 0; g < e.length; g++) f.push(e[g].GetBody().parent); return f.filter(function(a, b) { return f.indexOf(a) === b }), f }, mouseDragStart: function(a) { this.mouseDragEnd(); var b = this.getFixturesAtPoint(a.x, a.y, !0, !0); if (!(b.length < 1)) { var c = this.pxm(-a.x), d = this.pxm(-a.y), e = new box2d.b2Vec2(c, d), f = new box2d.b2MouseJointDef; f.bodyA = this.mouseJointBody, f.bodyB = b[0].GetBody(), f.target.Copy(e), f.maxForce = 1e3 * f.bodyB.GetMass(), this.mouseJoint = this.world.CreateJoint(f), f.bodyB.SetAwake(!0) } }, mouseDragMove: function(a) { if (this.mouseJoint) { var b = this.pxm(-a.x), c = this.pxm(-a.y), d = new box2d.b2Vec2(b, c); this.mouseJoint.SetTarget(d) } }, mouseDragEnd: function() { this.mouseJoint && (this.world.DestroyJoint(this.mouseJoint), this.mouseJoint = null) }, distanceJoint: function(a, b, c, d, e, f, g, h, i) { void 0 === d && (d = 0), void 0 === e && (e = 0), void 0 === f && (f = 0), void 0 === g && (g = 0), void 0 === h && (h = 0), void 0 === i && (i = 0), d = this.pxm(-d), e = this.pxm(-e), f = this.pxm(-f), g = this.pxm(-g), a.body && (a = a.body), b.body && (b = b.body); var j = new box2d.b2DistanceJointDef; if (j.bodyA = a.data, j.bodyB = b.data, j.localAnchorA.SetXY(d, e), j.localAnchorB.SetXY(f, g), null === c || void 0 === c) { var k = new box2d.b2Vec2, l = new box2d.b2Vec2; j.bodyA.GetWorldPoint(j.localAnchorA, k), j.bodyB.GetWorldPoint(j.localAnchorB, l), k.SelfSub(l), c = k.Length() } else c = this.pxm(c); return j.length = c, j.frequencyHz = h, j.dampingRatio = i, this.world.CreateJoint(j) }, ropeJoint: function(a, b, c, d, e, f, g) { void 0 === d && (d = 0), void 0 === e && (e = 0), void 0 === f && (f = 0), void 0 === g && (g = 0), d = this.pxm(-d), e = this.pxm(-e), f = this.pxm(-f), g = this.pxm(-g), a.body && (a = a.body), b.body && (b = b.body); var h = new box2d.b2RopeJointDef; if (h.bodyA = a.data, h.bodyB = b.data, h.localAnchorA.SetXY(d, e), h.localAnchorB.SetXY(f, g), null === c || void 0 === c) { var i = new box2d.b2Vec2, j = new box2d.b2Vec2; h.bodyA.GetWorldPoint(h.localAnchorA, i), h.bodyB.GetWorldPoint(h.localAnchorB, j), i.SelfSub(j), c = i.Length() } else c = this.pxm(c); return h.maxLength = c, this.world.CreateJoint(h) }, revoluteJoint: function(a, b, c, d, e, f, g, h, i, j, k, l) { void 0 === c && (c = 0), void 0 === d && (d = 0), void 0 === e && (e = 0), void 0 === f && (f = 0), void 0 === g && (g = 0), void 0 === h && (h = 0), void 0 === i && (i = !1), void 0 === j && (j = 0), void 0 === k && (k = 0), void 0 === l && (l = !1), c = this.pxm(-c), d = this.pxm(-d), e = this.pxm(-e), f = this.pxm(-f), a.body && (a = a.body), b.body && (b = b.body); var m = new box2d.b2RevoluteJointDef; return m.bodyA = a.data, m.bodyB = b.data, m.localAnchorA.SetXY(c, d), m.localAnchorB.SetXY(e, f), m.motorSpeed = Phaser.Math.degToRad(-g), m.maxMotorTorque = h, m.enableMotor = i, m.lowerAngle = Phaser.Math.degToRad(j), m.upperAngle = Phaser.Math.degToRad(k), m.enableLimit = l, this.world.CreateJoint(m) }, prismaticJoint: function(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) { void 0 === c && (c = 1), void 0 === d && (d = 0), void 0 === e && (e = 0), void 0 === f && (f = 0), void 0 === g && (g = 0), void 0 === h && (h = 0), void 0 === i && (i = 0), void 0 === j && (j = 0), void 0 === l && (l = 0), void 0 === m && (m = 0), void 0 === n && (n = !1), void 0 === k && (k = !1), void 0 === o && (o = 0), c *= -1, d *= -1, e = this.pxm(-e), f = this.pxm(-f), g = this.pxm(-g), h = this.pxm(-h), i = this.pxm(i), l = this.pxm(l), m = this.pxm(m), a.body && (a = a.body), b.body && (b = b.body); var p = new box2d.b2PrismaticJointDef; return p.bodyA = a.data, p.bodyB = b.data, p.localAxisA.SetXY(c, d), p.localAnchorA.SetXY(e, f), p.localAnchorB.SetXY(g, h), p.motorSpeed = i, p.maxMotorForce = j, p.enableMotor = k, p.lowerTranslation = l, p.upperTranslation = m, p.enableLimit = n, p.referenceAngle = Phaser.Math.degToRad(-o), this.world.CreateJoint(p) }, frictionJoint: function(a, b, c, d, e, f, g, h) { void 0 === e && (e = 0), void 0 === f && (f = 0), void 0 === g && (g = 0), void 0 === h && (h = 0), void 0 === c && (c = 0), void 0 === d && (d = 0), e = this.pxm(-e), f = this.pxm(-f), g = this.pxm(-g), h = this.pxm(-h), a.body && (a = a.body), b.body && (b = b.body); var i = new box2d.b2FrictionJointDef; return i.bodyA = a.data, i.bodyB = b.data, i.localAnchorA.SetXY(e, f), i.localAnchorB.SetXY(g, h), i.maxForce = c, i.maxTorque = d, this.world.CreateJoint(i) }, weldJoint: function(a, b, c, d, e, f, g, h) { void 0 === c && (c = 0), void 0 === d && (d = 0), void 0 === e && (e = 0), void 0 === f && (f = 0), void 0 === g && (g = 0), void 0 === h && (h = 0), c = this.pxm(-c), d = this.pxm(-d), e = this.pxm(-e), f = this.pxm(-f), a.body && (a = a.body), b.body && (b = b.body); var i = new box2d.b2WeldJointDef; return i.bodyA = a.data, i.bodyB = b.data, i.localAnchorA.SetXY(c, d), i.localAnchorB.SetXY(e, f), i.frequencyHz = g, i.dampingRatio = h, this.world.CreateJoint(i) }, motorJoint: function(a, b, c, d, e, f, g, h) { void 0 === f && (f = 0), void 0 === g && (g = 0), void 0 === h && (h = 0), void 0 === c && (c = 0), void 0 === d && (d = 0), void 0 === e && (e = 1), f = this.pxm(-f), g = this.pxm(-g), a.body && (a = a.body), b.body && (b = b.body); var i = new box2d.b2MotorJointDef; return i.bodyA = a.data, i.bodyB = b.data, i.linearOffset.SetXY(f, g), i.maxForce = c, i.maxTorque = d, i.angularOffset = Phaser.Math.degToRad(-h), i.correctionFactor = e, this.world.CreateJoint(i) }, wheelJoint: function(a, b, c, d, e, f, g, h, i, j, k, l, m) { void 0 === g && (g = 0), void 0 === h && (h = 1), void 0 === c && (c = 0), void 0 === d && (d = 0), void 0 === e && (e = 0), void 0 === f && (f = 0), void 0 === k && (k = 0), void 0 === l && (l = 0), void 0 === m && (m = !1), void 0 === i && (i = 0), void 0 === j && (j = 0), g *= -1, h *= -1, c = this.pxm(-c), d = this.pxm(-d), e = this.pxm(-e), f = this.pxm(-f), a.body && (a = a.body), b.body && (b = b.body); var n = new box2d.b2WheelJointDef; return n.bodyA = a.data, n.bodyB = b.data, n.localAxisA.SetXY(g, h), n.localAnchorA.SetXY(c, d), n.localAnchorB.SetXY(e, f), n.motorSpeed = Phaser.Math.degToRad(-k), n.maxMotorTorque = l, n.enableMotor = m, n.frequencyHz = i, n.dampingRatio = j, this.world.CreateJoint(n) }, pulleyJoint: function(a, b, c, d, e, f, g, h, i, j, k, l, m) { void 0 === c && (c = 0), void 0 === d && (d = 0), void 0 === e && (e = 0), void 0 === f && (f = 0), void 0 === g && (g = 0), void 0 === h && (h = 0), void 0 === i && (i = 0), void 0 === j && (j = 0), void 0 === k && (k = 1), void 0 === l && (l = 100), void 0 === m && (m = 100), c = this.pxm(-c), d = this.pxm(-d), e = this.pxm(-e), f = this.pxm(-f), g = this.pxm(-g), h = this.pxm(-h), i = this.pxm(-i), j = this.pxm(-j), l = this.pxm(l), m = this.pxm(m), a.body && (a = a.body), b.body && (b = b.body); var n = new box2d.b2PulleyJointDef; return n.bodyA = a.data, n.bodyB = b.data, n.localAnchorA.SetXY(c, d), n.localAnchorB.SetXY(e, f), n.groundAnchorA.SetXY(g, h), n.groundAnchorB.SetXY(i, j), n.lengthA = l, n.lengthB = m, n.ratio = k, this.world.CreateJoint(n) }, gearJoint: function(a, b, c) { void 0 === c && (c = 1); var d = new box2d.b2GearJointDef; return d.joint1 = a, d.joint2 = b, d.ratio = -c, d.bodyA = a.GetBodyA(), d.bodyB = b.GetBodyB(), this.world.CreateJoint(d) }, clearTilemapLayerBodies: function(a, b) { b = a.getLayer(b); for (var c = a.layers[b].bodies.length; c--;) a.layers[b].bodies[c].destroy(); a.layers[b].bodies.length = 0 }, convertTilemap: function(a, b, c, d) { b = a.getLayer(b), void 0 === c && (c = !0), void 0 === d && (d = !0), this.clearTilemapLayerBodies(a, b); for (var e = 0, f = 0, g = 0, h = 0, i = a.layers[b].height; h < i; h++) { e = 0; for (var j = 0, k = a.layers[b].width; j < k; j++) { var l = a.layers[b].data[h][j]; if (l && l.index > -1 && l.collides) if (d) { var m = a.getTileRight(b, j, h); if (0 === e && (f = l.x * l.width, g = l.y * l.height, e = l.width), m && m.collides) e += l.width; else { var n = new Phaser.Physics.Box2D.Body(this.game, null, f, g, 0); n.addRectangle(e, l.height, e / 2, l.height / 2, 0), c && this.addBody(n), a.layers[b].bodies.push(n), e = 0 } } else { var n = this.createBody(l.x * l.width, l.y * l.height, 0, !1); n.addRectangle(l.width, l.height, l.width / 2, l.height / 2, 0), c && this.addBody(n), a.layers[b].bodies.push(n) } } } return a.layers[b].bodies }, raycast: function(a, b, c, d, e, f) { void 0 === e && (e = !0), void 0 === f && (f = null), a = this.pxm(-a), b = this.pxm(-b), c = this.pxm(-c), d = this.pxm(-d); var g = new box2d.b2Vec2(a, b), h = new box2d.b2Vec2(c, d), i = [], j = new Phaser.Physics.Box2D.RayCastCallback(this, e, f); this.world.RayCast(j, g, h); for (var k = 0; k < j.hits.length; k++) { var l = j.hits[k]; l.point = { x: this.mpx(-l.point.x), y: this.mpx(-l.point.y) }, l.normal = { x: -l.normal.x, y: -l.normal.y }, i.push(l) } return i }, queryAABB: function(a, b, c, d) { a = this.pxm(-a), b = this.pxm(-b), c = this.pxm(c), d = this.pxm(d); var e = new box2d.b2AABB; e.lowerBound.SetXY(a - c, b - d), e.upperBound.SetXY(a, b); var f = new Phaser.Physics.Box2D.QueryCallback(this); return this.world.QueryAABB(f, e), f.hits }, queryFixture: function(a) { var b = new Phaser.Physics.Box2D.QueryCallback(this); return this.world.QueryShape(b, a.GetShape(), a.GetBody().GetTransform()), b.hits }, setPTMRatio: function(a) { this.ptmRatio = a, this.debugDraw = new Phaser.Physics.Box2D.DefaultDebugDraw(this.ptmRatio), this.world.SetDebugDraw(this.debugDraw) } }, Phaser.Physics.Box2D.RayCastCallback = function(a, b, c) { this.world = a, this.closestHitOnly = b, this.filterFunction = c, this.hits = [] }, goog.inherits(Phaser.Physics.Box2D.RayCastCallback, box2d.b2RayCastCallback), Phaser.Physics.Box2D.RayCastCallback.prototype.ReportFixture = function(a, b, c, d) { if (null !== this.filterFunction) { var e = { x: this.world.mpx(-b.x), y: this.world.mpx(-b.y) }, f = { x: -c.x, y: -c.y }, g = a.GetBody().parent; if (!this.filterFunction.call(this, g, a, e, f)) return -1 } this.closestHitOnly && (this.hits = []); var h = {}; return h.body = a.GetBody().parent, h.fixture = a, h.point = { x: b.x, y: b.y }, h.normal = { x: c.x, y: c.y }, this.hits.push(h), this.closestHitOnly ? d : 1 }, Phaser.Physics.Box2D.QueryCallback = function(a) { this.world = a, this.hits = [] }, goog.inherits(Phaser.Physics.Box2D.QueryCallback, box2d.b2QueryCallback), Phaser.Physics.Box2D.QueryCallback.prototype.ReportFixture = function(a) { var b = {}; return b.body = a.GetBody().parent, b.fixture = a, this.hits.push(b), !0 }, Phaser.Physics.Box2D.renderBody = function(a, b, c, d) { c = c || "rgb(255,255,255)", void 0 === d && (d = !0); var e = b.data, f = e.GetTransform(), g = b.world; f.p.x += -b.game.camera.x / g.ptmRatio, f.p.y -= -b.game.camera.y / g.ptmRatio, g.debugDraw.start(a), g.debugDraw.PushTransform(f); var h = Phaser.Color.webToColor(c), i = g.debugDraw.color; i.r = h.r / 255, i.g = h.g / 255, i.b = h.b / 255; for (var j = e.GetFixtureList(); j; j = j.GetNext()) g.world.DrawShape(j, i); g.debugDraw.PopTransform(), g.debugDraw.stop() }, Phaser.Physics.Box2D.Body = function(a, b, c, d, e, f) { void 0 === b && (b = null), void 0 === c && (c = 0), void 0 === d && (d = 0), void 0 === e && (e = 2), void 0 === f && (f = a.physics.box2d), this.game = a, this.world = f, this.id = this.world.getNextBodyId(), this.sprite = b, this.type = Phaser.Physics.BOX2D, this.offset = new Phaser.Point, this.bodyDef = new box2d.b2BodyDef, this.bodyDef.position.SetXY(-this.world.pxm(c), -this.world.pxm(d)), 0 === e ? this.bodyDef.type = box2d.b2BodyType.b2_staticBody : 1 === e ? this.bodyDef.type = box2d.b2BodyType.b2_kinematicBody : 2 === e ? this.bodyDef.type = box2d.b2BodyType.b2_dynamicBody : 3 === e && (this.bodyDef.type = box2d.b2BodyType.b2_bulletBody), this.data = this.world.world.CreateBody(this.bodyDef), this.data.world = this.world.world, this.data.parent = this, this.velocity = new Phaser.Physics.Box2D.PointProxy(this.world, this.data, this.data.GetLinearVelocity, this.data.SetLinearVelocity), this.removeNextStep = !1, this._fixtureContactCallbacks = {}, this._fixtureContactCallbackContext = {}, this._bodyContactCallbacks = {}, this._bodyContactCallbackContext = {}, this._categoryContactCallbacks = {}, this._categoryContactCallbackContext = {}, this._fixturePresolveCallbacks = {}, this._fixturePresolveCallbackContext = {}, this._bodyPresolveCallbacks = {}, this._bodyPresolveCallbackContext = {}, this._categoryPresolveCallbacks = {}, this._categoryPresolveCallbackContext = {}, this._fixturePostsolveCallbacks = {}, this._fixturePostsolveCallbackContext = {}, this._bodyPostsolveCallbacks = {}, this._bodyPostsolveCallbackContext = {}, this._categoryPostsolveCallbacks = {}, this._categoryPostsolveCallbackContext = {}, b && this.setRectangleFromSprite(b) }, Phaser.Physics.Box2D.Body.prototype = { setBodyContactCallback: function(a, b, c) { var d = -1; a.id ? d = a.id : a.body && (d = a.body.id), d > -1 && (null === b ? (delete this._bodyContactCallbacks[d], delete this._bodyContactCallbackContext[d]) : (this._bodyContactCallbacks[d] = b, this._bodyContactCallbackContext[d] = c)) }, setFixtureContactCallback: function(a, b, c) { var d = a.id; d > -1 && (null === b ? (delete this._fixtureContactCallbacks[d], delete this._fixtureContactCallbackContext[d]) : (this._fixtureContactCallbacks[d] = b, this._fixtureContactCallbackContext[d] = c)) }, setCategoryContactCallback: function(a, b, c) { null === b ? (delete this._categoryContactCallbacks[a], delete this._categoryContactCallbacksContext[a]) : (this._categoryContactCallbacks[a] = b, this._categoryContactCallbackContext[a] = c) }, setBodyPresolveCallback: function(a, b, c) { var d = -1; a.id ? d = a.id : a.body && (d = a.body.id), d > -1 && (null === b ? (delete this._bodyPresolveCallbacks[d], delete this._bodyPresolveCallbackContext[d]) : (this._bodyPresolveCallbacks[d] = b, this._bodyPresolveCallbackContext[d] = c)) }, setFixturePresolveCallback: function(a, b, c) { var d = a.id; d > -1 && (null === b ? (delete this._fixturePresolveCallbacks[d], delete this._fixturePresolveCallbackContext[d]) : (this._fixturePresolveCallbacks[d] = b, this._fixturePresolveCallbackContext[d] = c)) }, setCategoryPresolveCallback: function(a, b, c) { null === b ? (delete this._categoryPresolveCallbacks[a], delete this._categoryPresolveCallbacksContext[a]) : (this._categoryPresolveCallbacks[a] = b, this._categoryPresolveCallbackContext[a] = c) }, setBodyPostsolveCallback: function(a, b, c) { var d = -1; a.id ? d = a.id : a.body && (d = a.body.id), d > -1 && (null === b ? (delete this._bodyPostsolveCallbacks[d], delete this._bodyPostsolveCallbackContext[d]) : (this._bodyPostsolveCallbacks[d] = b, this._bodyPostsolveCallbackContext[d] = c)) }, setFixturePostsolveCallback: function(a, b, c) { var d = a.id; d > -1 && (null === b ? (delete this._fixturePostsolveCallbacks[d], delete this._fixturePostsolveCallbackContext[d]) : (this._fixturePostsolveCallbacks[d] = b, this._fixturePostsolveCallbackContext[d] = c)) }, setCategoryPostsolveCallback: function(a, b, c) { null === b ? (delete this._categoryPostsolveCallbacks[a], delete this._categoryPostsolveCallbacksContext[a]) : (this._categoryPostsolveCallbacks[a] = b, this._categoryPostsolveCallbackContext[a] = c) }, setCollisionCategory: function(a, b) { if (void 0 === b) for (var c = this.data.GetFixtureList(); c; c = c.GetNext()) { var d = c.GetFilterData(); d.categoryBits = a } else { var d = b.GetFilterData(); d.categoryBits = a } }, setCollisionMask: function(a, b) { if (void 0 === b) for (var c = this.data.GetFixtureList(); c; c = c.GetNext()) { var d = c.GetFilterData(); d.maskBits = a } else { var d = b.GetFilterData(); d.maskBits = a } }, applyForce: function(a, b) { this.data.ApplyForce(new box2d.b2Vec2(-a, -b), this.data.GetWorldCenter(), !0) }, setZeroRotation: function() { this.data.SetAngularVelocity(0) }, setZeroVelocity: function() { this.data.SetLinearVelocity(box2d.b2Vec2.ZERO) }, setZeroDamping: function() { this.data.SetLinearDamping(0), this.data.SetAngularDamping(0) }, toLocalPoint: function(a, b) { return a.x = this.world.pxm(-b.x), a.y = this.world.pxm(-b.y), this.data.GetLocalPoint(a, a), a.x = this.world.mpx(-a.x), a.y = this.world.mpx(-a.y), a }, toWorldPoint: function(a, b) { return a.x = this.world.pxm(-b.x), a.y = this.world.pxm(-b.y), this.data.GetWorldPoint(a, a), a.x = this.world.mpx(-a.x), a.y = this.world.mpx(-a.y), a }, toLocalVector: function(a, b) { return a.x = this.world.pxm(-b.x), a.y = this.world.pxm(-b.y), this.data.GetLocalVector(a, a), a.x = this.world.mpx(-a.x), a.y = this.world.mpx(-a.y), a }, toWorldVector: function(a, b) { a.x = this.world.pxm(-b.x), a.y = this.world.pxm(-b.y), this.data.GetWorldVector(a, a), a.x = this.world.mpx(-a.x), a.y = this.world.mpx(-a.y) }, rotateLeft: function(a) { this.data.SetAngularVelocity(this.world.pxm(-a)) }, rotateRight: function(a) { this.data.SetAngularVelocity(this.world.pxm(a)) }, moveForward: function(a) { var b = this.world.pxm(a), c = new box2d.b2Vec2; this.toWorldVector(c, { x: 0, y: b }), this.data.SetLinearVelocity(c) }, moveBackward: function(a) { var b = this.world.pxm(-a), c = new box2d.b2Vec2; this.toWorldVector(c, { x: 0, y: b }), this.data.SetLinearVelocity(c) }, thrust: function(a) { var b = this.world.pxm(a) * this.data.GetMass(), c = new box2d.b2Vec2; this.toWorldVector(c, { x: 0, y: b }), this.data.ApplyForce(c, this.data.GetWorldCenter(), !0) }, reverse: function(a) { var b = -this.world.pxm(a) * this.data.GetMass(), c = new box2d.b2Vec2; this.toWorldVector(c, { x: 0, y: b }), this.data.ApplyForce(c, this.data.GetWorldCenter(), !0) }, moveLeft: function(a) { this.velocity.x = -a }, moveRight: function(a) { this.velocity.x = a }, moveUp: function(a) { this.velocity.y = -a }, moveDown: function(a) { this.velocity.y = a }, preUpdate: function() { this.removeNextStep && (this.removeFromWorld(), this.removeNextStep = !1) }, postUpdate: function() { this.sprite && (this.sprite.x = this.world.mpx(-this.data.GetPosition().x), this.sprite.y = this.world.mpx(-this.data.GetPosition().y), this.sprite.rotation = this.data.GetAngle()) }, kill: function() { this.data.SetActive(!1) }, reset: function(a, b) { this.data.SetPositionXY(this.world.pxm(-a), this.world.pxm(-b)), this.data.SetActive(!0) }, removeFromWorld: function() { this.data.world === this.game.physics.box2d.world && this.game.physics.box2d.removeBodyNextStep(this) }, destroy: function() { this.removeFromWorld(), this._bodyCallbacks = {}, this._bodyCallbackContext = {}, this._categoryCallbacks = {}, this._categoryCallbackContext = {}, this.sprite = null }, clearFixtures: function() { for (var a = [], b = this.data.GetFixtureList(); b; b = b.GetNext()) a.push(b); for (var c = a.length; c--;) this.data.DestroyFixture(a[c]) }, addCircle: function(a, b, c) { var d = new box2d.b2CircleShape(this.world.pxm(a)); d.m_p.SetXY(this.world.pxm(-b), this.world.pxm(-c)); var e = new box2d.b2FixtureDef; e.shape = d, e.friction = this.world.friction, e.restitution = this.world.restitution, e.density = this.world.density; var f = this.data.CreateFixture(e); return f.id = this.world.getNextFixtureId(), f }, addRectangle: function(a, b, c, d, e) { void 0 === a && (a = 16), void 0 === b && (b = 16), void 0 === c && (c = 0), void 0 === d && (d = 0), void 0 === e && (e = 0), a = this.world.pxm(a), b = this.world.pxm(b); var f = new box2d.b2PolygonShape; f.SetAsOrientedBox(.5 * a, .5 * b, new box2d.b2Vec2(this.world.pxm(-c), this.world.pxm(-d)), e); var g = new box2d.b2FixtureDef; g.shape = f, g.friction = this.world.friction, g.restitution = this.world.restitution, g.density = this.world.density; var h = this.data.CreateFixture(g); return h.id = this.world.getNextFixtureId(), h }, addEdge: function(a, b, c, d) { var e = new box2d.b2EdgeShape; e.Set(new box2d.b2Vec2(this.world.pxm(-a), this.world.pxm(-b)), new box2d.b2Vec2(this.world.pxm(-c), this.world.pxm(-d))); var f = new box2d.b2FixtureDef; f.shape = e, f.friction = this.world.friction, f.restitution = this.world.restitution, f.density = this.world.density; var g = this.data.CreateFixture(f); return g.id = this.world.getNextFixtureId(), g }, addChain: function(a, b, c, d) { if (void 0 === a) return null; if (a.length < 4) return null; void 0 === b && (b = 0), void 0 === c && (c = (a.length - b) / 2); for (var e = [], f = b; f < b + c; f++) e.push(new box2d.b2Vec2(this.world.pxm(-a[2 * f]), this.world.pxm(-a[2 * f + 1]))); var g = new box2d.b2ChainShape; d ? g.CreateLoop(e, e.length) : g.CreateChain(e, e.length); var h = new box2d.b2FixtureDef; h.shape = g, h.friction = this.world.friction, h.restitution = this.world.restitution, h.density = this.world.density; var i = this.data.CreateFixture(h); return i.id = this.world.getNextFixtureId(), i }, addLoop: function(a, b, c) { return this.addChain(a, b, c, !0) }, addPolygon: function(a, b, c) { if (void 0 === a) return null; if (a.length < 6) return null; void 0 === b && (b = 0), void 0 === c && (c = (a.length - b) / 2); for (var d = [], e = b; e < b + c; e++) d.push({ x: this.world.pxm(-a[2 * e]), y: this.world.pxm(-a[2 * e + 1]) }); var f = new Phaser.Physics.Box2D.Polygon; f.setFromXYObjects(d); for (var g = f.decompose(d), h = null, e = 0; e < g.length; e++) { var i = new box2d.b2PolygonShape; i.Set(g[e], g[e].length); var j = new box2d.b2FixtureDef; j.shape = i, j.friction = this.world.friction, j.restitution = this.world.restitution, j.density = this.world.density, h = this.data.CreateFixture(j), h.id = this.world.getNextFixtureId() } return h }, removeFixture: function(a) { return a.GetBody() == this.data && (this.data.DestroyFixture(a), !0) }, setCircle: function(a, b, c) { return void 0 === a && (a = 32), void 0 === b && (b = 0), void 0 === c && (c = 0), this.clearFixtures(), this.addCircle(a, b, c) }, setRectangle: function(a, b, c, d, e) { return this.clearFixtures(), this.addRectangle(a, b, c, d, e) }, setRectangleFromSprite: function(a) { return void 0 === a && (a = this.sprite), this.clearFixtures(), this.addRectangle(a.width, a.height, 0, 0, a.rotation) }, setEdge: function(a, b, c, d) { return void 0 === a && (a = 0), void 0 === b && (b = 0), void 0 === c && (c = 0), void 0 === d && (d = 0), this.clearFixtures(), this.addEdge(a, b, c, d) }, setChain: function(a, b, c, d) { return void 0 === a ? null : a.length < 4 ? null : (void 0 === b && (b = 0), void 0 === c && (c = (a.length - b) / 2), this.clearFixtures(), this.addChain(a, b, c, d)) }, setLoop: function(a, b, c) { return this.setChain(a, b, c, !0) }, setPolygon: function(a, b, c) { return void 0 === a ? null : a.length < 4 ? null : (void 0 === b && (b = 0), void 0 === c && (c = (a.length - b) / 2), this.clearFixtures(), this.addPolygon(a, b, c)) }, loadPolygon: function(a, b, c) { void 0 === c && (c = null); for (var d = this.game.cache.getPhysicsData(a, b), e = 0; e < d.length; e++) { for (var f = [], g = 0; g < d[e].shape.length; g += 2) f.push(new box2d.b2Vec2(this.world.pxm(-d[e].shape[g]), this.world.pxm(-d[e].shape[g + 1]))); if (c) for (var h = this.world.pxm(-.5 * c.width), i = this.world.pxm(-.5 * c.height), j = 0; j < f.length; j++) f[j].x -= h, f[j].y -= i; var k = new box2d.b2PolygonShape; k.Set(f, f.length); var l = new box2d.b2FixtureDef; l.shape = k, l.friction = d[e].friction, l.restitution = d[e].bounce, l.density = d[e].density, l.filter.categoryBits = d[e].filter.categoryBits, l.filter.maskBits = d[e].filter.maskBits; this.data.CreateFixture(l).id = this.world.getNextFixtureId() } return !0 }, containsPoint: function(a) { for (var b = this.world.pxm(-a.x), c = this.world.pxm(-a.y), d = new box2d.b2Vec2(b, c), e = this.data.GetFixtureList(); e; e = e.GetNext()) if (e.TestPoint(d)) return !0; return !1 } }, Phaser.Physics.Box2D.Body.prototype.constructor = Phaser.Physics.Box2D.Body, Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "static", { get: function() { return this.data.GetType() === box2d.b2BodyType.b2_staticBody }, set: function(a) { a && this.data.GetType() !== box2d.b2BodyType.b2_staticBody ? this.data.SetType(box2d.b2BodyType.b2_staticBody) : a || this.data.GetType() !== box2d.b2BodyType.b2_staticBody || this.data.SetType(box2d.b2BodyType.b2_dynamicBody) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "dynamic", { get: function() { return this.data.GetType() === box2d.b2BodyType.b2_dynamicBody }, set: function(a) { a && this.data.GetType() !== box2d.b2BodyType.b2_dynamicBody ? this.data.SetType(box2d.b2BodyType.b2_dynamicBody) : a || this.data.GetType() !== box2d.b2BodyType.b2_dynamicBody || this.data.SetType(box2d.b2BodyType.b2_staticBody) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "kinematic", { get: function() { return this.data.GetType() === box2d.b2BodyType.b2_kinematicBody }, set: function(a) { a && this.data.GetType() !== box2d.b2BodyType.b2_kinematicBody ? this.data.SetType(box2d.b2BodyType.b2_kinematicBody) : a || this.data.GetType() !== box2d.b2BodyType.b2_kinematicBody || this.data.SetType(box2d.b2BodyType.b2_staticBody) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "angle", { get: function() { return Phaser.Math.wrapAngle(Phaser.Math.radToDeg(this.data.GetAngle())) }, set: function(a) { this.data.SetAngle(Phaser.Math.degToRad(Phaser.Math.wrapAngle(a))) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "linearDamping", { get: function() { return this.data.GetLinearDamping() }, set: function(a) { this.data.SetLinearDamping(a) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "angularDamping", { get: function() { return this.data.GetAngularDamping() }, set: function(a) { this.data.SetAngularDamping(a) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "angularVelocity", { get: function() { return this.data.GetAngularVelocity() }, set: function(a) { this.data.SetAngularVelocity(a) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "fixedRotation", { get: function() { return this.data.IsFixedRotation() }, set: function(a) { this.data.SetFixedRotation(a) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "gravityScale", { get: function() { return this.data.GetGravityScale() }, set: function(a) { this.data.SetGravityScale(a) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "friction", { get: function() { var a = this.data.GetFixtureList(); return a ? a.GetFriction() : 0 }, set: function(a) { for (var b = this.data.GetFixtureList(); b; b = b.GetNext()) b.SetFriction(a), b.Refilter() } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "restitution", { get: function() { var a = this.data.GetFixtureList(); return a ? a.GetRestitution() : 0 }, set: function(a) { for (var b = this.data.GetFixtureList(); b; b = b.GetNext()) b.SetRestitution(a), b.Refilter() } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "sensor", { get: function() { var a = this.data.GetFixtureList(); return a ? a.IsSensor() : 0 }, set: function(a) { for (var b = this.data.GetFixtureList(); b; b = b.GetNext()) b.SetSensor(a), b.Refilter() } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "bullet", { get: function() { return this.data.IsBullet() }, set: function(a) { this.data.SetBullet(a) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "mass", { get: function() { return this.data.GetMass() }, set: function(a) { if (0 === a) this.data.SetType(box2d.b2BodyType.b2_staticBody); else { this.data.GetType() !== box2d.b2BodyType.b2_dynamicBody && this.data.SetType(box2d.b2BodyType.b2_dynamicBody); for (var b = this.data.GetMass(), c = a / b, d = this.data.GetFixtureList(); d; d = d.GetNext()) { var e = d.GetDensity(); d.SetDensity(e * c) } this.data.ResetMassData() } } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "rotation", { get: function() { return this.data.GetAngle() }, set: function(a) { this.data.SetAngle(a) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "x", { get: function() { return this.world.mpx(-this.data.GetPosition().x) }, set: function(a) { this.data.SetPositionXY(this.world.pxm(-a), this.data.GetPosition().y) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "y", { get: function() { return this.world.mpx(-this.data.GetPosition().y) }, set: function(a) { this.data.SetPositionXY(this.data.GetPosition().x, this.world.pxm(-a)) } }), Object.defineProperty(Phaser.Physics.Box2D.Body.prototype, "collideWorldBounds", { get: function() { for (var a = this.data.GetFixtureList(); a; a = a.GetNext()) { if (a.GetFilterData().maskBits & Phaser.Physics.Box2D.worldBoundsFilterCategory) return !0 } return !1 }, set: function(a) { for (var b = this.data.GetFixtureList(); b; b = b.GetNext()) { var c = b.GetFilterData(); a ? c.maskBits |= Phaser.Physics.Box2D.worldBoundsFilterCategory : c.maskBits &= ~Phaser.Physics.Box2D.worldBoundsFilterCategory } } }), Phaser.Physics.Box2D.PointProxy = function(a, b, c, d) { this.world = a, this.object = b, this.gettor = c, this.settor = d }, Phaser.Physics.Box2D.PointProxy.prototype.constructor = Phaser.Physics.Box2D.PointProxy, Object.defineProperty(Phaser.Physics.Box2D.PointProxy.prototype, "x", { get: function() { return this.world.mpx(-this.gettor.call(this.object).x) }, set: function(a) { var b = this.gettor.call(this.object); b.x = this.world.pxm(-a), this.settor.call(this.object, b) } }), Object.defineProperty(Phaser.Physics.Box2D.PointProxy.prototype, "y", { get: function() { return this.world.mpx(-this.gettor.call(this.object).y) }, set: function(a) { var b = this.gettor.call(this.object); b.y = this.world.pxm(-a), this.settor.call(this.object, b) } }), Phaser.Physics.Box2D.DefaultDebugDraw = function(a) { this.context = null, this.pixelsPerMeter = a, this.flags = box2d.b2DrawFlags.e_shapeBit }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.color = new box2d.b2Color(1, 1, 1), Phaser.Physics.Box2D.DefaultDebugDraw.prototype.SetFlags = function(a) { this.flags = a }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.GetFlags = function() { return this.flags }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.start = function(a) { this.context = a, this.context.save(), this.context.scale(-1, -1), this.context.scale(this.pixelsPerMeter, this.pixelsPerMeter) }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.stop = function() { this.context.restore() }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.PushTransform = function(a) { var b = this.context; b.save(), b.translate(a.p.x, a.p.y), b.rotate(a.q.GetAngleRadians()) }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.PopTransform = function() { this.context.restore() }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.DrawPolygon = function(a, b, c) { if (b) { var d = this.context; d.lineWidth = 1 / this.pixelsPerMeter, d.beginPath(), d.moveTo(a[0].x, a[0].y); for (var e = 1; e < b; e++) d.lineTo(a[e].x, a[e].y); d.closePath(), d.strokeStyle = c.MakeStyleString(1), d.stroke() } }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.DrawSolidPolygon = function(a, b, c) { if (b) { var d = this.context; d.lineWidth = 1 / this.pixelsPerMeter, d.beginPath(), d.moveTo(a[0].x, a[0].y); for (var e = 1; e < b; e++) d.lineTo(a[e].x, a[e].y); d.closePath(), d.fillStyle = c.MakeStyleString(.5), d.fill(), d.strokeStyle = c.MakeStyleString(1), d.stroke() } }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.DrawCircle = function(a, b, c) { if (b) { var d = this.context; d.beginPath(), d.arc(a.x, a.y, b, 0, 2 * Math.PI, !0), d.strokeStyle = c.MakeStyleString(1), d.stroke() } }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.DrawSolidCircle = function(a, b, c, d) { if (b) { var e = this.context; e.lineWidth = 1 / this.pixelsPerMeter; var f = a.x, g = a.y; e.beginPath(), e.arc(f, g, b, 0, 2 * Math.PI, !0), e.moveTo(f, g), e.lineTo(f + c.x * b, g + c.y * b), e.fillStyle = d.MakeStyleString(.5), e.fill(), e.strokeStyle = d.MakeStyleString(1), e.stroke() } }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.DrawSegment = function(a, b, c) { var d = this.context; d.lineWidth = 1 / this.pixelsPerMeter, d.beginPath(), d.moveTo(a.x, a.y), d.lineTo(b.x, b.y), d.strokeStyle = c.MakeStyleString(1), d.stroke() }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.DrawTransform = function(a) { var b = this.context; b.lineWidth = 1 / this.pixelsPerMeter, this.PushTransform(a), b.beginPath(), b.moveTo(0, 0), b.lineTo(1, 0), b.strokeStyle = box2d.b2Color.RED.MakeStyleString(1), b.stroke(), b.beginPath(), b.moveTo(0, 0), b.lineTo(0, 1), b.strokeStyle = box2d.b2Color.GREEN.MakeStyleString(1), b.stroke(), this.PopTransform(a) }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.DrawPoint = function(a, b, c) { var d = this.context; d.fillStyle = c.MakeStyleString(); var e = b / 2; d.fillRect(a.x - e, a.y - e, b, b) }, Phaser.Physics.Box2D.DefaultDebugDraw.prototype.DrawAABB = function(a, b) { var c = this.context; c.strokeStyle = b.MakeStyleString(); var d = a.lowerBound.x, e = a.lowerBound.y, f = a.upperBound.x - a.lowerBound.x, g = a.upperBound.y - a.lowerBound.y; c.strokeRect(d, e, f, g) }, Object.defineProperty(Phaser.Physics.Box2D.DefaultDebugDraw.prototype, "shapes", { get: function() { return this.flags & box2d.b2DrawFlags.e_shapeBit }, set: function(a) { a ? this.flags |= box2d.b2DrawFlags.e_shapeBit : this.flags &= ~box2d.b2DrawFlags.e_shapeBit } }), Object.defineProperty(Phaser.Physics.Box2D.DefaultDebugDraw.prototype, "joints", { get: function() { return this.flags & box2d.b2DrawFlags.e_jointBit }, set: function(a) { a ? this.flags |= box2d.b2DrawFlags.e_jointBit : this.flags &= ~box2d.b2DrawFlags.e_jointBit } }), Object.defineProperty(Phaser.Physics.Box2D.DefaultDebugDraw.prototype, "aabbs", { get: function() { return this.flags & box2d.b2DrawFlags.e_aabbBit }, set: function(a) { a ? this.flags |= box2d.b2DrawFlags.e_aabbBit : this.flags &= ~box2d.b2DrawFlags.e_aabbBit } }), Object.defineProperty(Phaser.Physics.Box2D.DefaultDebugDraw.prototype, "pairs", { get: function() { return this.flags & box2d.b2DrawFlags.e_pairBit }, set: function(a) { a ? this.flags |= box2d.b2DrawFlags.e_pairBit : this.flags &= ~box2d.b2DrawFlags.e_pairBit } }), Object.defineProperty(Phaser.Physics.Box2D.DefaultDebugDraw.prototype, "centerOfMass", { get: function() { return this.flags & box2d.b2DrawFlags.e_centerOfMassBit }, set: function(a) { a ? this.flags |= box2d.b2DrawFlags.e_centerOfMassBit : this.flags &= ~box2d.b2DrawFlags.e_centerOfMassBit } }), Phaser.Physics.Box2D.DefaultContactListener = function() {}, Phaser.Physics.Box2D.DefaultContactListener.prototype.BeginContact = function(a) { this.handleContactBeginOrEnd(a, !0) }, Phaser.Physics.Box2D.DefaultContactListener.prototype.EndContact = function(a) { this.handleContactBeginOrEnd(a, !1) }, Phaser.Physics.Box2D.DefaultContactListener.prototype.handleContactBeginOrEnd = function(a, b) { var c = a.GetFixtureA(), d = a.GetFixtureB(), e = c.GetBody(), f = d.GetBody(), g = c.GetFilterData().categoryBits, h = d.GetFilterData().categoryBits, i = e.parent, j = f.parent; if (void 0 !== i && void 0 !== j) { var k = i.id, l = j.id; i._bodyContactCallbacks[l] && i._bodyContactCallbacks[l].call(i._bodyContactCallbackContext[l], i, j, c, d, b, a), j._bodyContactCallbacks[k] && j._bodyContactCallbacks[k].call(j._bodyContactCallbackContext[k], j, i, d, c, b, a), i._fixtureContactCallbacks[d.id] && i._fixtureContactCallbacks[d.id].call(i._fixtureContactCallbackContext[d.id], i, j, c, d, b, a), j._fixtureContactCallbacks[c.id] && j._fixtureContactCallbacks[c.id].call(j._fixtureContactCallbackContext[c.id], j, i, d, c, b, a), i._fixtureContactCallbacks[c.id] && i._fixtureContactCallbacks[c.id].call(i._fixtureContactCallbackContext[c.id], i, j, c, d, b, a), j._fixtureContactCallbacks[d.id] && j._fixtureContactCallbacks[d.id].call(j._fixtureContactCallbackContext[d.id], j, i, d, c, b, a), i._categoryContactCallbacks[h] && i._categoryContactCallbacks[h].call(i._categoryContactCallbackContext[h], i, j, c, d, b, a), j._categoryContactCallbacks[g] && j._categoryContactCallbacks[g].call(j._categoryContactCallbackContext[g], j, i, d, c, b, a), i._categoryContactCallbacks[g] && i._categoryContactCallbacks[g].call(i._categoryContactCallbackContext[g], i, j, c, d, b, a), j._categoryContactCallbacks[h] && j._categoryContactCallbacks[h].call(j._categoryContactCallbackContext[h], j, i, d, c, b, a) } }, Phaser.Physics.Box2D.DefaultContactListener.prototype.PreSolve = function(a, b) { var c = a.GetFixtureA(), d = a.GetFixtureB(), e = c.GetBody(), f = d.GetBody(), g = c.GetFilterData().categoryBits, h = d.GetFilterData().categoryBits, i = e.parent, j = f.parent; if (void 0 !== i && void 0 !== j) { var k = i.id, l = j.id; i._bodyPresolveCallbacks[l] && i._bodyPresolveCallbacks[l].call(i._bodyPresolveCallbackContext[l], i, j, c, d, a, b), j._bodyPresolveCallbacks[k] && j._bodyPresolveCallbacks[k].call(j._bodyPresolveCallbackContext[k], j, i, d, c, a, b), i._fixturePresolveCallbacks[d.id] && i._fixturePresolveCallbacks[d.id].call(i._fixturePresolveCallbackContext[d.id], i, j, c, d, a, b), j._fixturePresolveCallbacks[c.id] && j._fixturePresolveCallbacks[c.id].call(j._fixturePresolveCallbackContext[c.id], j, i, d, c, a, b), i._categoryPresolveCallbacks[h] && i._categoryPresolveCallbacks[h].call(i._categoryPresolveCallbackContext[h], i, j, c, d, a, b), j._categoryPresolveCallbacks[g] && j._categoryPresolveCallbacks[g].call(j._categoryPresolveCallbackContext[g], j, i, d, c, a, b) } }, Phaser.Physics.Box2D.DefaultContactListener.prototype.PostSolve = function(a, b) { var c = a.GetFixtureA(), d = a.GetFixtureB(), e = c.GetBody(), f = d.GetBody(), g = c.GetFilterData().categoryBits, h = d.GetFilterData().categoryBits, i = e.parent, j = f.parent; if (void 0 !== i && void 0 !== j) { var k = i.id, l = j.id; i._bodyPostsolveCallbacks[l] && i._bodyPostsolveCallbacks[l].call(i._bodyPostsolveCallbackContext[l], i, j, c, d, a, b), j._bodyPostsolveCallbacks[k] && j._bodyPostsolveCallbacks[k].call(j._bodyPostsolveCallbackContext[k], j, i, d, c, a, b), i._fixturePostsolveCallbacks[d.id] && i._fixturePostsolveCallbacks[d.id].call(i._fixturePostsolveCallbackContext[d.id], i, j, c, d, a, b), j._fixturePostsolveCallbacks[c.id] && j._fixturePostsolveCallbacks[c.id].call(j._fixturePostsolveCallbackContext[c.id], j, i, d, c, a, b), i._categoryPostsolveCallbacks[h] && i._categoryPostsolveCallbacks[h].call(i._categoryPostsolveCallbackContext[h], i, j, c, d, a, b), j._categoryPostsolveCallbacks[g] && j._categoryPostsolveCallbacks[g].call(j._categoryPostsolveCallbackContext[g], j, i, d, c, a, b) } }, Phaser.Physics.Box2D.Polygon = function() { this.vertices = [] }, Phaser.Physics.Box2D.Polygon.prototype.setFromFlatXYCoords = function(a) { this.vertices = []; for (var b = 0; b < a.length / 2; b++) this.vertices.push({ x: a[2 * b], y: a[2 * b + 1] }) }, Phaser.Physics.Box2D.Polygon.prototype.setFromXYObjects = function(a) { this.vertices = a.concat() }, Phaser.Physics.Box2D.Polygon.prototype.addVertex = function(a) { this.vertices.push(a) }, Phaser.Physics.Box2D.Polygon.prototype.at = function(a) { var b = this.vertices.length; return this.vertices[a < 0 ? a % b + b : a % b] }, Phaser.Physics.Box2D.Polygon.prototype.indicesAreAdjacent = function(a, b) { if (a %= this.vertices.length, b %= this.vertices.length, a == b) return !0; var c = Math.abs(a - b); return c < 2 || c == this.vertices.length - 1 }, Phaser.Physics.Box2D.Polygon.prototype.areaInTriangle = function(a, b, c) { return a = this.at(a), b = this.at(b), c = this.at(c), .5 * ((b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y)) }, Phaser.Physics.Box2D.Polygon.prototype.left = function(a, b, c) { return this.areaInTriangle(a, b, c) > 0 }, Phaser.Physics.Box2D.Polygon.prototype.leftOn = function(a, b, c) { return this.areaInTriangle(a, b, c) >= 0 }, Phaser.Physics.Box2D.Polygon.prototype.right = function(a, b, c) { return this.areaInTriangle(a, b, c) < 0 }, Phaser.Physics.Box2D.Polygon.prototype.rightOn = function(a, b, c) { return this.areaInTriangle(a, b, c) <= 0 }, Phaser.Physics.Box2D.Polygon.sqdist = function(a, b) { var c = b.x - a.x, d = b.y - a.y; return c * c + d * d }, Phaser.Physics.Box2D.Polygon.prototype.makeCCW = function() { for (var a = 0, b = 1, c = this.vertices.length; b < c; b++)(this.at(b).y < this.at(a).y || this.at(b).y === this.at(a).y && this.at(b).x > this.at(a).x) && (a = b); return !this.left(a - 1, a, a + 1) && (this.vertices.reverse(), !0) }, Phaser.Physics.Box2D.Polygon.prototype.isConvex = function() { for (var a = !1, b = !1, c = 0, d = this.vertices.length; c < d; c++) { var e = c, f = (c + 1) % d, g = (c + 2) % d; this.areaInTriangle(this.vertices[e], this.vertices[f], this.vertices[g]) > 0 ? a = !0 : b = !0 } return b ^ a }, Phaser.Physics.Box2D.Polygon.prototype.isReflex = function(a) { return this.right(a - 1, a, a + 1) }, Phaser.Physics.Box2D.Polygon.areVecsEqual = function(a, b) { return a.x == b.x && a.y == b.y }, Phaser.Physics.Box2D.Polygon.linesCross = function(a, b, c, d) { if (Phaser.Physics.Box2D.Polygon.areVecsEqual(b, c) || Phaser.Physics.Box2D.Polygon.areVecsEqual(a, c) || Phaser.Physics.Box2D.Polygon.areVecsEqual(b, d) || Phaser.Physics.Box2D.Polygon.areVecsEqual(a, d)) return null; var e = {}; box2d.b2SubVV(b, a, e), box2d.b2CrossVS(e, 1, e); var f = box2d.b2DotVV(e, a), g = box2d.b2DotVV(e, c), h = box2d.b2DotVV(e, d); if (g > f && h > f) return null; if (g < f && h < f) return null; var i = {}; box2d.b2SubVV(d, c, i), box2d.b2CrossVS(i, 1, i); var g = box2d.b2DotVV(i, c), f = box2d.b2DotVV(i, a), j = box2d.b2DotVV(i, b); if (f > g && j > g) return null; if (f < g && j < g) return null; var k = (g - f) / (j - f); return { x: a.x + k * (b.x - a.x), y: a.y + k * (b.y - a.y) } }, Phaser.Physics.Box2D.Polygon.prototype.canSee = function(a, b) { if (this.indicesAreAdjacent(a, b)) return !1; if (this.leftOn(a + 1, a, b) && this.rightOn(a - 1, a, b)) return !1; for (var c = 0; c < this.vertices.length; ++c) if ((c + 1) % this.vertices.length != a && c != a && this.leftOn(a, b, c + 1) && this.rightOn(a, b, c) && Phaser.Physics.Box2D.Polygon.linesCross(this.at(a), this.at(b), this.at(c), this.at(c + 1))) return !1; return !0 }, Phaser.Physics.Box2D.Polygon.prototype.subPolygon = function(a, b) { var c = new Phaser.Physics.Box2D.Polygon; if (a < b) for (var d = a; d < b + 1; d++) c.addVertex(this.at(d)); else { for (var d = a; d < this.vertices.length; d++) c.addVertex(this.at(d)); for (var d = 0; d < b + 1; d++) c.addVertex(this.at(d)) } return c }, Phaser.Physics.Box2D.Polygon.prototype.decomposeOptimal = function(a) { if (void 0 === a && (a = 0), a > 1) return this.vertices; this.makeCCW(); for (var b = [], c = [], d = [], e = Number.MAX_VALUE, f = 0; f < this.vertices.length; f++) if (this.isReflex(f)) for (var g = 0; g < this.vertices.length; g++) this.canSee(f, g) && (c = this.subPolygon(f, g).decompose(a + 1), d = this.subPolygon(g, f).decompose(a + 1), c.length + d.length < e && (b = c.concat(d), e = b.length)); return 0 === b.length && b.push(this.vertices), b }, Phaser.Physics.Box2D.Polygon.prototype.decompose = function(a) { void 0 === a && (a = 0), this.makeCCW(); for (var b, c, d = [], e = Number.MAX_VALUE, f = !1, g = 0; g < this.vertices.length; g++) if (this.isReflex(g)) { f = !0; for (var h = this.at(g), i = 0; i < this.vertices.length; i++) if (this.canSee(g, i)) { var j = this.at(i), k = j.x - h.x, l = j.y - h.y, m = k * k * (l * l); m < e && (b = g, c = i, e = m) } } if (!f && this.vertices.length > 8 && (b = 0, c = Math.floor(this.vertices.length / 2), f = !0), f) { var n = this.subPolygon(b, c).decompose(a + 1), o = this.subPolygon(c, b).decompose(a + 1); d = n.concat(o) } return 0 === d.length && d.push(this.vertices), d }, define("box2d", ["Phaser"], function(a) { return function() { return a.box2d } }(this)), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Level/Devices/BackgroundCover", ["Phaser"], function(b) { return function(b) { function c(a, b) { c.__super__.constructor.call(this, a, b.x, b.y, "MechAssets", "BackgroundCover0000"), this.options = b, this.width = b.width, this.height = b.height, a.layers.background.addChild(this) } return a(c, b), c }(b.Sprite) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Device", ["Phaser"], function() { "use strict"; var c; return c = c = function(c) { function d(b, c) { this.sounds = a(this.sounds, this), this.ocupy = a(this.ocupy, this), this.ocupyTile = a(this.ocupyTile, this), this.checkState = a(this.checkState, this), this.updateState = a(this.updateState, this), this._updateState = a(this._updateState, this), this.updateLight = a(this.updateLight, this), this.setupLight = a(this.setupLight, this), this.getColor = a(this.getColor, this), this.registerDevice = a(this.registerDevice, this), this.pxm = a(this.pxm, this), this.mpx = a(this.mpx, this); var e, f, g, h, i; this.lights = [], g = {}, _.deepObjectExtend(g, this._defaults), c.properties || (c.properties = {}), _.deepObjectExtend(g, c), _.deepObjectExtend(g, this.options), this.options = g, null == this.options.layer && (this.options.layer = "overGround"), (e = this.options).rotation || (e.rotation = 0), this.options.rotation = Math.PI * this.options.rotation / 180, this.options.width = b.physics.box2d.pxm(this.options.width), this.options.height = b.physics.box2d.pxm(this.options.height), h = this.options.x, i = this.options.y, this.state = null != this.options.properties ? +this.options.properties.initialState || 0 : 0, d.__super__.constructor.call(this, b), null != this.options.atlasName && null != this.options.frameName && (this.sprite = this.game.make.resSprite(h, i, this.options.atlasName, this.options.frameName), this.game.layers[this.options.layer].addChild(this.sprite), this.sprite.anchor.set(.5)), null != this.sprite && (this.sprite.autoCull = !0), this.sprite && !0 === this.options.enableBody && (this.game.physics.box2d.enable(this.sprite), this.sprite.body.clearFixtures(), this.sprite.body.data.SetAngle(Math.PI * c.rotation / 180 || 0), this.body = this.sprite.body), null != this.options.lightAtlas && null != this.options.lightFrame && (f = this.create(0, 0, this.options.lightAtlas, this.options.lightFrame + "_on0000"), null != this.sprite && this.sprite.addChild(f), f.anchor.set(.5), f.offFrameName = this.options.lightFrame + "_off0000", f.onFrameName = this.options.lightFrame + "_on0000", f.frameName = f.offFrameName, this.lights.push(f)), _.defer(function(a) { return function() { return a.updateLight(a.state) } }(this)) } return b(d, c), d.prototype._defaults = { atlasName: null, frameName: null, lightAtlas: null, lightFrame: null }, d.prototype.mpx = function(a) { return this.game.physics.box2d.mpx(-1 * a) }, d.prototype.pxm = function(a) { return this.game.physics.box2d.pxm(-1 * a) }, d.prototype.registerDevice = function() { if (this.game.MechManager.registerDevice(this), this.lights.length > 0) return this.setupLight() }, d.prototype.getColor = function() { var a; return a = Number(String(this.options.properties.group)[0]), d.groupColors[a] || "#ffffff" }, d.prototype.setupLight = function() { var a, b, c, d, e; for (e = this.lights, b = 0, d = e.length; b < d; b++) c = e[b], a = this.getColor(), c.offTint = Phaser.Color.hexToColor(a).color, c.onTint = Phaser.Color.hexToColor(a).color, c.tint = c.offTint }, d.prototype.updateLight = function(a) { var b, c, d, e, f; if (0 !== this.lights.length) { for (e = this.lights, f = [], b = 0, d = e.length; b < d; b++) c = e[b], null != c.onFrameName && a ? (c.frameName = c.onFrameName, f.push(c.tint = c.onTint)) : null == c.offFrameName || a ? f.push(void 0) : (c.frameName = c.offFrameName, f.push(c.tint = c.offTint)); return f } }, d.prototype.update = function() { return this.checkState() }, d.prototype._updateState = function() { return this.updateLight(this.state), this.updateState() }, d.prototype.updateState = function() {}, d.prototype.checkState = function() {}, d.prototype.ocupyTile = function(a, b, c) { if (null != a[Math.floor(c)] && null != a[Math.floor(c)][Math.floor(b)]) return a[Math.floor(c)][Math.floor(b)].ocupied = !0 }, d.prototype.ocupy = function(a, b) { return !1 }, d.prototype.sounds = function() { return [] }, d }(Phaser.Group), c.groupColors = { 1: "#ff0000", 2: "#00cc00", 3: "#0D3EFF", 4: "#ffff00", 5: "#EC0EF1", 6: "#57beff", 7: "#9933FF" }, c }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/BoxedDevice", ["./Device"], function(c) { "use strict"; return function(c) { function d(b, c) { this.ocupy = a(this.ocupy, this); var e; this._defaults.enableBody = !0, e = new box2d.b2Vec2(b.physics.box2d.mpx(this.boxSize.x / 2), b.physics.box2d.mpx(this.boxSize.y / 2)), e = e.SelfRotateRadians(-Math.PI * c.rotation / 180 || 0), c.x = c.x + e.x, c.y = c.y - e.y, d.__super__.constructor.call(this, b, c) } return b(d, c), d.prototype.boxSize = { x: 2, y: 2 }, d.prototype.ocupy = function(a) { var b, c; return b = this.options.x / 32, c = this.options.y / 32, this.ocupyTile(a, b, c), this.ocupyTile(a, b - 1, c - 1), this.ocupyTile(a, b - 1, c), this.ocupyTile(a, b, c - 1) }, d }(c) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Level/Devices/Ball", ["./BoxedDevice"], function(b) { "use strict"; return function(b) { function c(a, b) { var d, e, f, g; return b.x -= a.physics.box2d.mpx(.5), b.y += a.physics.box2d.mpx(.65), c.__super__.constructor.call(this, a, b), g = new box2d.b2CircleShape(this.radius), f = new box2d.b2FixtureDef, f.shape = g, f.friction = .2, f.restitution = .1, f.density = 2.3, f.filter.categoryBits = 17, e = this.body.data.CreateFixture(f), e.id = this.body.world.getNextFixtureId(), null != this.options.properties && null != this.options.properties.linearDamping && this.body.data.SetLinearDamping(this.options.properties.linearDamping), null != this.options.properties && null != this.options.properties.angularDamping && this.body.data.SetAngularDamping(this.options.properties.angularDamping), d = new box2d.b2CircleShape(.1), d.m_p.SetXY(0, 0), f = new box2d.b2FixtureDef, f.shape = d, f.filter.categoryBits = 4096, f.filter.maskBits = 4096, f.friction = .5, f.density = 0, f.userData = { "portal-sensor": !0 }, e = this.body.data.CreateFixture(f), e.id = this.body.world.getNextFixtureId(), this } return a(c, b), c.prototype.options = { boxWidth: 1.8, boxHeight: 1.8, atlasName: "MechAssets", frameName: "ball0000" }, c.prototype.radius = .4, c }(b) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Beamer", ["./BoxedDevice"], function(c) { "use strict"; return function(c) { function d(b, c) { this.drawDarkMask = a(this.drawDarkMask, this), this.drawBeam = a(this.drawBeam, this), this.update = a(this.update, this), this.getColor = a(this.getColor, this); var e, f, g, h, i; return this.state = 1, d.__super__.constructor.call(this, b, c), this.body.mass = 0, i = [], i.push(new box2d.b2Vec2(0, -this.options.pusherWidth / 2 - .6)), i.push(new box2d.b2Vec2(0, this.options.pusherWidth / 2 + .6)), i.push(new box2d.b2Vec2(-this.options.pusherHeight, this.options.pusherWidth / 2)), i.push(new box2d.b2Vec2(-this.options.pusherHeight, -this.options.pusherWidth / 2)), h = new box2d.b2PolygonShape, h.Set(i), f = new box2d.b2FixtureDef, f.shape = h, f.friction = .7, f.restitution = 0, f.density = 0, f.filter.categoryBits = 1, f.filter.maskBits = 65535, e = this.body.data.CreateFixture(f), e.id = this.body.world.getNextFixtureId(), g = this.game.make.sprite(0, 0, "MechAssets", "beamer_light_off0000"), g.anchor.set(.5), this.sprite.addChild(g), g.offFrameName = "beamer_light_off0000", g.onFrameName = "beamer_light_on0000", this.lights.push(g), this.registerDevice(), this.graphics = this.game.make.graphics(0, 0), this.game.layers.lights.addChild(this.graphics), this.game.layers.dust.sources.push(this), this.graphicsColor = Phaser.Color.hexToColor(this.getColor()).color, this } return b(d, c), d.prototype.options = { pusherWidth: .8, pusherHeight: .4, atlasName: "MechAssets", frameName: "beamer0000", layer: "overGround" }, d.prototype.getColor = function() { switch (this.options.properties.color) { case "blue": return "#AAEAFF"; case "red": return "#FF4D00"; default: return "#ffff88" } }, d.prototype.update = function() { var a, b, c, d, e, f, g, h, i, j, k, l; if (this.dirty = !1, 1 !== this.state) return null !== this.points && (this.dirty = !0), this.points = null, this.graphics.clear(); for (a = new box2d.b2RayCastCallback, a.ReportFixture = function(a, b, c, d) { if (null == a.m_userData || null == a.m_userData.lightProperties) return this.contact = { point: b.Clone(), normal: null }, d; if ("transparent" !== a.m_userData.lightProperties.type) return "normal" === a.m_userData.lightProperties.type ? (this.contact = { point: b.Clone(), normal: null }, a.m_userData.lightProperties.sensor && (this.contact.sensor = a), d) : "mirror" === a.m_userData.lightProperties.type ? (this.contact = { point: b.Clone(), normal: c.Clone() }, a.m_userData.lightProperties.sensor && (this.contact.sensor = a), d) : "portal" === a.m_userData.lightProperties.type ? 1 === a.m_userData.device.state ? (this.contact = { point: a.m_userData.lightProperties.getPoint(b, c), output: a.m_userData.lightProperties.getOutput, skipPoint: b.Clone() }, d) : void 0 : void(a.m_userData.lightProperties.sensor && (this.contact.sensor = a)) }, a.point = new box2d.b2Vec2(this.pxm(this.options.x), this.pxm(this.options.y)), c = new box2d.b2Vec2(-1, 0), c = c.SelfRotateRadians(this.options.rotation || 0), a.dir = c, j = [], j.push({ point: a.point.Clone() }); null != a.dir && j.length < 12;) h = a.point.Clone(), i = a.point.Clone().SelfAdd(a.dir.Clone().SelfMul(50)), a.contact = null, this.body.world.world.RayCast(a, h, i), null != a.contact && (a.point = a.contact.point, null != a.contact.sensor && (a.contact.sensor.m_userData.lightProperties.iluminated = this.options.properties.color, a.contact.sensor.m_userData.lightProperties.lightAt = a.contact.point), a.contact.skipPoint ? (j.push({ type: "line", point: a.contact.skipPoint.Clone() }), j.push({ type: "move", point: a.point.Clone() })) : j.push({ type: "line", point: a.point.Clone() }), null != a.contact.output ? a.dir = a.contact.output(a.dir) : null != a.contact.normal ? (b = h.Clone().SelfSub(i).SelfNormalize(), f = a.contact.normal.Clone().SelfCrossVS(1), a.dir = b.Clone().SelfSub(f.Clone().SelfMul(2 * b.Clone().Dot(f)))) : a.dir = null); if (l = [30, 10, 2], g = [.05, .3, 1], !_.isEqual(this.points, j)) { for (this.graphics.clear(), this.dirty = !0, this.points = j, this.graphics.blendMode = PIXI.blendModes.LIGHTEN, k = [], d = e = 1; e <= 2; d = ++e) this.graphics.lineStyle(l[d], this.graphicsColor, g[d]), k.push(this.drawBeam(this.graphics, j)); return k } }, d.prototype.drawBeam = function(a, b, c) { var d, e, f, g, h; for (null == c && (c = { x: 0, y: 0 }), a.moveTo(this.mpx(b[0].point.x) + c.x, this.mpx(b[0].point.y) + c.y), h = [], d = e = 0, f = b.length; e < f; d = ++e) g = b[d], d > 0 ? "line" === g.type ? (a.lineTo(this.mpx(g.point.x) + c.x, this.mpx(g.point.y) + c.y), h.push(a.moveTo(this.mpx(g.point.x) + c.x, this.mpx(g.point.y) + c.y))) : "move" === g.type ? h.push(a.moveTo(this.mpx(g.point.x) + c.x, this.mpx(g.point.y) + c.y)) : h.push(void 0) : h.push(void 0); return h }, d.prototype.drawDarkMask = function(a) { var b, c; if (1 === this.state && null != this.points) return a.ctx.globalCompositeOperation = "lighter", a.ctx.beginPath(), a.ctx.lineCap = "round", a.ctx.strokeStyle = "rgba(255,255,255,0.8)", a.ctx.lineWidth = 25, this.drawBeam(a.ctx, this.points, a.offset), a.ctx.stroke(), a.ctx.closePath(), c = { x: this.sprite.x + a.offset.x, y: this.sprite.y + a.offset.y }, b = a.ctx.createRadialGradient(c.x, c.y, 30, c.x, c.y, 90), b.addColorStop(0, "rgba(255,255,255,1)"), b.addColorStop(.5, "rgba(255,255,255,0.3)"), b.addColorStop(1, "transparent"), a.circle(c.x, c.y, 90, b) }, d }(c) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Level/Devices/BoxPrototype", ["./BoxedDevice"], function(b) { "use strict"; return function(b) { function c(a, b) { var d, e, f, g, h, i, j, k, l; return c.__super__.constructor.call(this, a, b), null != this.options.properties.boxSize && (this.options.boxWidth = this.options.properties.boxSize, this.options.boxWidth = this.options.properties.boxSize), this.sprite.cacheAsBitmap = !0, g = .1, k = new box2d.b2PolygonShape, l = [], l.push(new box2d.b2Vec2(-this.options.boxWidth / 2 + g, -this.options.boxHeight / 2)), l.push(new box2d.b2Vec2(this.options.boxWidth / 2 - g, -this.options.boxHeight / 2)), l.push(new box2d.b2Vec2(this.options.boxWidth / 2, -this.options.boxHeight / 2 + g)), l.push(new box2d.b2Vec2(this.options.boxWidth / 2, +this.options.boxHeight / 2 - g)), l.push(new box2d.b2Vec2(this.options.boxWidth / 2 - g, +this.options.boxHeight / 2)), l.push(new box2d.b2Vec2(-this.options.boxWidth / 2 + g, +this.options.boxHeight / 2)), l.push(new box2d.b2Vec2(-this.options.boxWidth / 2, +this.options.boxHeight / 2 - g)), l.push(new box2d.b2Vec2(-this.options.boxWidth / 2, -this.options.boxHeight / 2 + g)), k.Set(l.reverse()), i = new box2d.b2FixtureDef, i.shape = k, i.friction = null != this.options.properties.friction ? this.options.properties.friction : .4, i.restitution = 0, i.density = this.options.density, h = this.body.data.CreateFixture(i), h.id = this.body.world.getNextFixtureId(), this.boxFixture = h, j = function(a) { return function(b, c) { var d; return d = new box2d.b2CircleShape(b), d.m_p.SetXY(c[0], c[1]), i = new box2d.b2FixtureDef, i.shape = d, i.filter.categoryBits = 17, i.filter.maskBits = 4097, i.friction = a.options.circleFriction, i.density = 0, i.userData = { lightProperties: { type: "transparent" } }, h = a.body.data.CreateFixture(i), h.id = a.body.world.getNextFixtureId(), h } }(this), d = g, f = this.options.boxWidth / 2 - .6 * g, j(d, [-f, -f]), j(d, [f, -f]), j(d, [-f, f]), j(d, [f, f]), e = new box2d.b2CircleShape(.1), e.m_p.SetXY(0, 0), i = new box2d.b2FixtureDef, i.shape = e, i.filter.categoryBits = 4096, i.filter.maskBits = 4096, i.friction = .5, i.density = 0, i.userData = { "portal-sensor": !0, lightProperties: { type: "transparent" } }, h = this.body.data.CreateFixture(i), h.id = this.body.world.getNextFixtureId(), this.body.data.SetLinearDamping(1), this.body.data.SetAngularDamping(20), this } return a(c, b), c.prototype.options = { boxWidth: 1.77, boxHeight: 1.77, atlasName: "MechAssets", frameName: "movingbox0000", layer: "overGround", density: .45, circleFriction: .1 }, c }(b) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Level/Devices/Box", ["./BoxedDevice", "./BoxPrototype"], function(b, c) { "use strict"; return function(b) { function c(a, b) { return c.__super__.constructor.call(this, a, b), this } return a(c, b), c }(c) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Level/Devices/BoxHeavy", ["./BoxedDevice", "./BoxPrototype"], function(b, c) { "use strict"; return function(b) { function c(a, b) { return b.frameName = "movingbox20000", b.density = .8, b.circleFriction = .05, c.__super__.constructor.call(this, a, b), this } return a(c, b), c }(c) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Level/Devices/BoxMirror", ["./BoxedDevice", "./BoxPrototype"], function(b, c) { "use strict"; return function(b) { function c(a, b) { var d, e, f; return b.mirrorWidth = 2, b.mirrorHeight = .05, b.frameName = "BoxMirror0000", c.__super__.constructor.call(this, a, b), this.boxFixture.m_userData = { lightProperties: { type: "transparent" } }, f = new box2d.b2PolygonShape, f.SetAsOrientedBox(this.options.mirrorWidth / 2, this.options.mirrorHeight / 2, new box2d.b2Vec2(0, 0), Math.PI / 4), e = new box2d.b2FixtureDef, e.shape = f, e.friction = 0, e.restitution = 0, e.density = 0, e.userData = { lightProperties: { type: "mirror" } }, d = this.body.data.CreateFixture(e), d.id = this.body.world.getNextFixtureId(), this } return a(c, b), c }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Diamond", ["Phaser"], function() { "use strict"; return function(c) { function d(b, c, e, f) { this.grabbed = a(this.grabbed, this); var g, h, i; return c += b.physics.box2d.mpx(1), e -= b.physics.box2d.mpx(1), d.__super__.constructor.call(this, b, c, e, "CharAssets", "_default0000"), this.game.physics.box2d.enable(this), this.sprite = b.make.sprite(0, 0, "CharAssets", "diamond_" + f + "0000"), this.sprite.anchor.set(.5), this.addChild(this.sprite), this.signal = new Phaser.Signal, this.body.clearFixtures(), this.body.mass = 0, i = new box2d.b2PolygonShape, i.SetAsOrientedBox(this.options.width / 2, this.options.height / 2, new box2d.b2Vec2(0, 0), 0), h = new box2d.b2FixtureDef, h.shape = i, h.friction = .7, h.restitution = 0, h.density = 0, h.userData = "diamond-" + f, h.isSensor = !0, h.userData = { lightProperties: { type: "transparent" } }, this.data.char = f, g = this.body.data.CreateFixture(h), g.id = this.body.world.getNextFixtureId(), this.game.layers.underGround.addChild(this), this.body.setFixtureContactCallback(g, function(a) { return function(b, c, d, e, f, g) { if (null != c.sprite.character && c.sprite.character.data.char && ("silver" === a.data.char || "fbwg" === a.data.char || c.sprite.character.data.char === a.data.char) && f) return console.log("Grabbed!"), a.grabbed(c.sprite.character), a.signal.dispatch() } }(this), this), this.sprite.y = -5, _.delay(function(a) { return function() { var b; return b = a.game.add.tween(a.sprite).to({ y: 5 }, 2e3, Phaser.Easing.Sinusoidal.InOut, !0), b.yoyo(!0).loop() } }(this), 2e3 * Math.random()), this } return b(d, c), d.prototype.options = { width: .7, height: .7 }, d.prototype.grabbed = function(a) { return this.game.level.sounds.diamond.play(), "silver" === this.data.char ? a.data.silverDiamond++ : a.data.diamonds++, this.destroy() }, d }(Phaser.Sprite) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Door", ["Phaser"], function() { "use strict"; return function(c) { function d(b, c, e, f) { this.update = a(this.update, this); var g, h, i, j; return d.__super__.constructor.call(this, b), c += this.game.physics.box2d.mpx(1), this.pos = { x: c, y: e }, i = "fb" === f ? "FinishBoy" : "FinishGirl", this.sprite = this.game.make.sprite(c, e + 4, "TempleAssets", i + "0000"), this.sprite.scale.set(.8), this.sprite.animations.add("open", Phaser.Animation.generateFrameNames(i, 0, 21, "", 4), 10, !1), this.game.physics.box2d.enable(this.sprite), this.body = this.sprite.body, this.sprite.anchor.y = .99, this.game.layers.background.addChild(this.sprite), this.signal = new Phaser.Signal, this.body.clearFixtures(), this.body.data.SetType(box2d.b2BodyType.b2_staticBody), j = new box2d.b2PolygonShape, j.SetAsOrientedBox(this.game.physics.box2d.pxm(this.options.width / 2), this.game.physics.box2d.pxm(this.options.height / 2), new box2d.b2Vec2(0, 0), 0), h = new box2d.b2FixtureDef, h.shape = j, h.friction = .7, h.restitution = 0, h.density = 0, h.userData = "door-" + f, h.isSensor = !0, this.data = { char: f }, g = this.body.data.CreateFixture(h), g.id = this.body.world.getNextFixtureId(), this.body.setFixtureContactCallback(g, function(a) { return function(b, c, d, e, f, g) { if (null != c.sprite.character && c.sprite.character.data.char === a.data.char) return a.isOpen = !!f } }(this), this), this.currentFrac = this.sprite.animations.currentFrame.index, this } return b(d, c), d.prototype.options = { width: 64, height: 8 }, d.prototype.update = function() { var a, b, c; return a = this.sprite.animations._outputFrames.indexOf(this.sprite.animations.currentFrame.index), this.isUp = 21 === a, b = Math.min(.04, this.game.time.elapsed / 1e3), c = 25 * b, this.isOpen ? (a < 21 && (this.currentFrac += c, this.sprite.animations.frame = Math.round(this.currentFrac), null != this.sound && this.sound.isPlaying || (this.sound = this.game.level.sounds.door.playInstance())), 21 === a && (this.signal.dispatch(), null != this.sound && (this.sound.stopInstance(), this.sound = null))) : this.isOpen || (a > 0 && (this.currentFrac -= c, this.sprite.animations.frame = Math.round(this.currentFrac), null != this.sound && this.sound.isPlaying || (this.sound = this.game.level.sounds.door.playInstance())), 0 === a && (null != this.sound && (this.sound.stopInstance(), this.sound = null), this.signal.dispatch())), this.isUp }, d }(Phaser.Group) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Hanging", ["./Device"], function(c) { "use strict"; return function(c) { function d(b, c) { this.update = a(this.update, this); var e, f, g, h, i, j, k, l, m, n, o, p, q, r; return d.__super__.constructor.call(this, b, c), this.barWidth = this.options.properties.barWidth || this.options.barWidth, this.anchor = new box2d.b2Vec2(this.options.polyline[0][0] + this.options.x, this.options.polyline[0][1] + this.options.y), this.pos = { x: this.options.polyline[1][0] + this.options.x, y: this.options.polyline[1][1] + this.options.y }, this.rope = this.game.make.tileSprite(this.anchor.x, this.anchor.y, this.options.polyline[0][1] - this.options.polyline[1][1], 20, "MechAssets", "pulley_rope0000"), this.rope.anchor.set(0, .5), this.game.layers.underGround.addChild(this.rope), this.platform = p = this.game.make.sprite(this.pos.x, this.pos.y), h = this.game.make.sprite(0, 0, "MechAssets", "hanging_platform0000"), h.anchor.set(.5), h.width = 1.15 * this.mpx(this.barWidth), this.platform.addChild(h), g = this.game.make.sprite(this.anchor.x, this.anchor.y, "MechAssets", "hanging_anchor0000"), i = this.game.make.sprite(0, 0, "MechAssets", "hanging_base0000"), i.anchor.set(.5), this.game.physics.box2d.enable(p, !1), this.game.physics.box2d.enable(g), g.body.data.m_fixtureList.m_filter.categoryBits = 0, this.platform.addChild(i), this.game.layers.underGround.addChild(this.platform), this.game.layers.underGround.addChild(g), p.body.data.SetLinearDamping(.4), p.body.data.SetAngularDamping(.3), j = this.platform.body, j.clearFixtures(), r = [], m = this.barWidth / 2, n = m + .1, r.push(new box2d.b2Vec2(m, .12)), r.push(new box2d.b2Vec2(-m, .12)), r.push(new box2d.b2Vec2(-n, 0)), r.push(new box2d.b2Vec2(-m, -.12)), r.push(new box2d.b2Vec2(m, -.12)), r.push(new box2d.b2Vec2(n, 0)), q = new box2d.b2PolygonShape, q.Set(r), l = new box2d.b2FixtureDef, l.shape = q, l.friction = .4, l.restitution = 0, l.density = this.options.properties.density || 2.5, l.filter.categoryBits = 65535, l.filter.maskBits = 65535, k = j.data.CreateFixture(l), k.id = j.world.getNextFixtureId(), o = new box2d.b2DistanceJointDef, e = { x: this.pxm(this.anchor.x), y: this.pxm(this.anchor.y) }, f = { x: this.pxm(this.pos.x), y: this.pxm(this.pos.y) }, o.Initialize(g.body.data, p.body.data, e, f), this.joint = this.game.physics.box2d.world.CreateJoint(o), o = new box2d.b2RevoluteJointDef, o.Initialize(g.body.data, p.body.data, f), o.lowerAngle = -.85 * Math.PI / 2, o.upperAngle = .85 * Math.PI / 2, this.options.properties.fullRotation || (o.enableLimit = !0), this.joint = this.game.physics.box2d.world.CreateJoint(o), o = new box2d.b2RevoluteJointDef, o.Initialize(g.body.data, this.game.level.groundBody, e), this.joint = this.game.physics.box2d.world.CreateJoint(o), this } return b(d, c), d.prototype.options = { barWidth: 3.2 }, d.prototype.baseHeight = 60, d.prototype.update = function() { var a, b; return b = new box2d.b2Vec2(this.platform.position.x, this.platform.position.y), a = b.Clone().SelfSub(this.anchor), this.rope.rotation = Math.atan2(-a.y, -a.x) }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/InfiniteMirror", ["./BoxedDevice"], function(c) { "use strict"; return function(c) { function d(b, c) { this.updateState = a(this.updateState, this); var e, f, g, h, i, j, k, l, m, n, o; return d.__super__.constructor.call(this, b, c), f = this.game.make.sprite(this.options.x, this.options.y, "MechAssets", "rotmirror_circle0000"), f.anchor.set(.5), this.game.layers.underGround.addChild(f), k = this.game.make.sprite(this.options.x, this.options.y, "MechAssets", "infinitemirror0000"), k.anchor.set(.5), this.game.physics.box2d.enable(k), this.body = k.body, l = this.game.make.sprite(0, 0, "MechAssets", "infinitemirror_light_off0000"), l.anchor.set(.5), k.addChild(l), l.offFrameName = "infinitemirror_light_off0000", l.onFrameName = "infinitemirror_light_off0000", this.lights.push(l), this.game.layers.overGround.addChild(k), this.body.clearFixtures(), o = new box2d.b2PolygonShape, o.SetAsOrientedBox(this.options.boxWidth / 2, this.options.boxHeight / 2, new box2d.b2Vec2(0, 0), 0), m = new box2d.b2PolygonShape, m.SetAsOrientedBox(this.options.mirrorWidth / 2, this.options.mirrorHeight / 2, new box2d.b2Vec2(0, 0), Math.PI / 4), i = new box2d.b2FixtureDef, i.shape = m, i.friction = .7, i.restitution = 0, i.density = .2, i.userData = { lightProperties: { type: "mirror" } }, h = this.body.data.CreateFixture(i), h.id = this.body.world.getNextFixtureId(), this.body.data.SetAngle(this.options.rotation), e = new box2d.b2CircleShape(.3), e.m_p = new box2d.b2Vec2(1.1, 1.1), i = new box2d.b2FixtureDef, i.shape = e, h = this.body.data.CreateFixture(i), e = new box2d.b2CircleShape(.3), e.m_p = new box2d.b2Vec2(-1.1, -1.1), i = new box2d.b2FixtureDef, i.shape = e, h = this.body.data.CreateFixture(i), j = new box2d.b2RevoluteJointDef, n = this.body.data.GetWorldCenter(), g = new box2d.b2Vec2(n.x, n.y), j.Initialize(this.body.data, this.game.level.groundBody, g), j.enableLimit = !0, j.maxMotorTorque = 500, j.motorSpeed = 0, j.enableMotor = !0, this.joint = this.game.physics.box2d.world.CreateJoint(j), this.registerDevice(), this } return b(d, c), d.prototype.options = { atlasName: null, frameName: null, lightAtlas: null, lightFrame: null, boxWidth: 1.8, boxHeight: 1.8, mirrorWidth: 3, mirrorHeight: .1 }, d.prototype.updateState = function() { return this.joint.SetLimits(this.state, this.state) }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Lever", ["./BoxedDevice"], function(c) { "use strict"; return function(c) { function d(b, c) { this.drawDarkMask = a(this.drawDarkMask, this), this.checkState = a(this.checkState, this), this.sounds = a(this.sounds, this); var e, f, g, h, i, j, k, l, m, n; return d.__super__.constructor.call(this, b, c), m = this.game.make.resSprite(this.options.x, this.options.y, "MechAssets", "lever_stick0000"), m.anchor.set(.5), this.game.physics.box2d.enable(m), this.body = m.body, n = this.game.make.resSprite(0, 0, "MechAssets", "lever_stick_light_off0000"), n.anchor.set(.5), m.addChild(n), n.offFrameName = "lever_stick_light_off0000", n.onFrameName = "lever_stick_light_on0000", this.lights.push(n), this.game.layers.overGround.addChild(m), this.base = e = this.game.make.resSprite(this.options.x, this.options.y, "MechAssets", "lever_base0000"), e.anchor.set(.5), f = this.game.make.resSprite(0, 0, "MechAssets", "lever_base_light_off0000"), f.anchor.set(.5), e.addChild(f), f.offFrameName = "lever_base_light_off0000", f.onFrameName = "lever_base_light_on0000", this.lights.push(f), this.game.layers.overGround.addChild(e), this.body.clearFixtures(), l = new box2d.b2PolygonShape, l.SetAsOrientedBox(.15, .7, new box2d.b2Vec2(0, .55), 0), i = new box2d.b2FixtureDef, i.shape = l, i.friction = .7, i.restitution = 0, i.density = 1.6, i.filter.categoryBits = 1, i.filter.maskBits = 61695, h = m.body.data.CreateFixture(i), h.id = m.body.world.getNextFixtureId(), j = new box2d.b2RevoluteJointDef, k = this.body.data.GetWorldCenter(), g = new box2d.b2Vec2(k.x, k.y - .7), j.Initialize(this.body.data, this.game.level.groundBody, g), j.lowerAngle = -.2 * Math.PI, j.upperAngle = .2 * Math.PI, j.enableLimit = !0, j.maxMotorTorque = 10, j.motorSpeed = 0, j.enableMotor = !0, this.joint = this.game.physics.box2d.world.CreateJoint(j), -1 === this.options.properties.startPos ? this.body.data.SetAngle(this.joint.GetLowerLimit()) : this.body.data.SetAngle(this.joint.GetUpperLimit()), this.signal = new Phaser.Signal, this.registerDevice(), this } return b(d, c), d.prototype.options = { atlasName: null, frameName: null }, d.prototype.sounds = function() { return "lever" }, d.prototype.checkState = function() { return 0 === this.state && this.joint.GetJointAngleRadians() * this.options.properties.onis < 0 ? (this.state = 1, this.joint.SetMotorSpeed(-4 * this.options.properties.onis), this.game.level.sounds.lever.play(), this.signal.dispatch(this)) : 1 === this.state && this.joint.GetJointAngleRadians() * this.options.properties.onis > 0 ? (this.state = 0, this.joint.SetMotorSpeed(4 * this.options.properties.onis), this.game.level.sounds.lever.play(), this.signal.dispatch(this)) : void 0 }, d.prototype.drawDarkMask = function(a) { var b, c, d; if (1 === this.state) return a.ctx.globalCompositeOperation = "lighter", d = { x: this.base.x + a.offset.x, y: this.base.y + a.offset.y }, b = new box2d.b2Vec2(0, this.mpx(-1.1)), b.SelfRotateRadians(this.joint.GetJointAngleRadians()), b.SelfAdd(new box2d.b2Vec2(0, this.mpx(1.8))), c = a.ctx.createRadialGradient(d.x + b.x, d.y + b.y, 10, d.x + b.x, d.y + b.y, 50), c.addColorStop(0, "rgba(255,255,255,1)"), c.addColorStop(.7, "rgba(255,255,255,0.1)"), c.addColorStop(1, "rgba(255,255,255,0)"), a.circle(d.x + b.x, d.y + b.y, 60, c) }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/LightPusher", ["./BoxedDevice"], function(c) { "use strict"; return function(c) { function d(b, c) { this.checkState = a(this.checkState, this), this.sounds = a(this.sounds, this); var e, f, g, h, i; return d.__super__.constructor.call(this, b, c), this.body.mass = 0, f = new box2d.b2PolygonShape, f.SetAsOrientedBox(this.options.sensorWidth / 2, this.options.pusherHeight / 2, new box2d.b2Vec2(0, 0), 0), e = new box2d.b2FixtureDef, e.shape = f, e.friction = .7, e.restitution = 0, e.density = 0, e.isSensor = !0, e.userData = { lightProperties: { type: "normal", sensor: !0 } }, this.sensorFixture = g = this.body.data.CreateFixture(e), g.id = this.body.world.getNextFixtureId(), i = [], i.push(new box2d.b2Vec2(-this.options.pusherWidth / 2 - .5, 0)), i.push(new box2d.b2Vec2(this.options.pusherWidth / 2 + .5, 0)), i.push(new box2d.b2Vec2(this.options.pusherWidth / 2, this.options.pusherHeight - .1)), i.push(new box2d.b2Vec2(-this.options.pusherWidth / 2, this.options.pusherHeight - .1)), h = new box2d.b2PolygonShape, h.Set(i), e = new box2d.b2FixtureDef, e.shape = h, e.friction = .7, e.restitution = 0, e.density = 0, e.isSensor = !1, e.userData = { lightProperties: { type: "transparent" } }, this.body.data.CreateFixture(e), g.id = this.body.world.getNextFixtureId(), this.signal = new Phaser.Signal, this.registerDevice(), this } return b(d, c), d.prototype.options = { pusherWidth: 1, pusherHeight: .4, sensorWidth: 1.5, atlasName: "MechAssets", frameName: "lightpusher_base0000", lightAtlas: "MechAssets", lightFrame: "lightpusher_light" }, d.prototype.sounds = function() { return "lightPusher" }, d.prototype.checkState = function() { return 0 === this.state && this.sensorFixture.m_userData.lightProperties.iluminated === this.options.properties.color ? (this.state = 1, this.game.level.sounds.lightPusher.play(), this.signal.dispatch(this)) : 1 === this.state && this.sensorFixture.m_userData.lightProperties.iluminated !== this.options.properties.color && (this.state = 0, this.signal.dispatch(this)), this.sensorFixture.m_userData.lightProperties.iluminated = null }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Liquid", ["Phaser"], function() { "use strict"; return function(c) { function d(b, c, e, f) { this.melt = a(this.melt, this), this.freeze = a(this.freeze, this), this.initialFreeze = a(this.initialFreeze, this), this.shouldMelt = a(this.shouldMelt, this), this.shouldFreeze = a(this.shouldFreeze, this), this.update = a(this.update, this), this.createIceGraphics = a(this.createIceGraphics, this), this.createLiquidGraphics = a(this.createLiquidGraphics, this); var g, h, i, j, k, l; return 55 === f.type && (f.type = 5, f.startFrozen = !0), this.options = f, this.options.x = c, this.options.y = e, d.__super__.constructor.call(this, b, c, e, "GroundAssets", "_default0000"), this.game.layers.liquids.addChild(this), this.game.physics.box2d.enable(this), this.body.clearFixtures(), this.body.mass = 0, this.body.data.SetPosition(new box2d.b2Vec2(-c, -e)), j = new box2d.b2PolygonShape, l = [], k = f.width, i = 1, l.push(new box2d.b2Vec2(0, -.15)), l.push(new box2d.b2Vec2(-k, -.15)), l.push(new box2d.b2Vec2(-k, -i / 2)), l.push(new box2d.b2Vec2(0, -i / 2)), j.Set(l), h = new box2d.b2FixtureDef, h.shape = j, h.filter.categoryBits = 1, h.filter.maskBits = 61695, h.friction = .7, h.isSensor = !0, h.userData = { type: "liquid", liquidType: f.type, lightProperties: { type: "normal", sensor: !0 } }, g = this.sensorFixture = this.body.data.CreateFixture(h), g.id = this.body.world.getNextFixtureId(), j = new box2d.b2PolygonShape, l = [], k = f.width, i = 1, l.push(new box2d.b2Vec2(0, 0)), l.push(new box2d.b2Vec2(-k, 0)), l.push(new box2d.b2Vec2(-k, -i / 2)), l.push(new box2d.b2Vec2(0, -i / 2)), j.Set(l), h = new box2d.b2FixtureDef, h.shape = j, h.filter.categoryBits = 1, h.filter.maskBits = 0, h.friction = 0, h.userData = { type: "ice", liquidType: f.type, lightProperties: { type: "transparent" } }, g = this.iceFixture = this.body.data.CreateFixture(h), g.id = this.body.world.getNextFixtureId(), this.body.setFixtureContactCallback(this.iceFixture, function(a) { return function(a, b, c, d, e, f) { var g; if (null != b.sprite.character || null != a.sprite.character) return g = b.sprite.character || a.sprite.character, e ? (g.snowCount || (g.snowCount = 0), g.snowCount += 1) : (g.snowCount || (g.snowCount = 0), g.snowCount -= 1), g.setOnIce(0 !== g.snowCount) } }()), j = new box2d.b2PolygonShape, l = [], k = f.width, i = .18, l.push(new box2d.b2Vec2(0, -i)), l.push(new box2d.b2Vec2(-k, -i)), l.push(new box2d.b2Vec2(-k, -1)), l.push(new box2d.b2Vec2(0, -1)), j.Set(l), h = new box2d.b2FixtureDef, h.shape = j, h.filter.categoryBits = 1, h.filter.maskBits = 4369, h.friction = .7, h.isSensor = !0, h.userData = { type: "liquid_death", liquidType: f.type, lightProperties: { type: "transparent" } }, g = this.killFixture = this.body.data.CreateFixture(h), g.id = this.body.world.getNextFixtureId(), this.liquidGraphics = this.game.make.group(), this.liquidGraphics.position.y = 2, this.createLiquidGraphics(), this.addChild(this.liquidGraphics), 5 === f.type && (this.iceGraphics = this.game.make.group(), this.iceGraphics.position.y = 4, this.createIceGraphics(), this.addChild(this.iceGraphics), this.iceGraphics.visible = !1), this.nearBodies = {}, this.frozenBodies = {}, this.body.setFixtureContactCallback(this.sensorFixture, function(a) { return function(b, c, d, e, f, g) { var h; return f || null == a.nearBodies[c.id] ? f && null == a.nearBodies[c.id] ? (h = { body: c }, a.nearBodies[c.id] = h) : void 0 : delete a.nearBodies[c.id] } }(this), this), f.startFrozen && _.delay(this.initialFreeze, 10), this } return b(d, c), d.prototype.createLiquidGraphics = function() { var a, b, c, d, e, f, g; if (5 === this.options.type ? a = "WaterBox" : 6 === this.options.type ? a = "FireBox" : 7 === this.options.type && (a = "GreenBox"), d = this.game.make.sprite(0, 0, "GroundAssets"), d.anchor.set(.5), d.animations.add("loop", Phaser.Animation.generateFrameNames(a + "Left", 0, 14, "", 4), 30, !0), this.liquidGraphics.addChild(d), d.x = this.body.world.mpx(.5), d.y = this.body.world.mpx(.5), d.animations.play("loop"), this.options.width > 2) for (b = c = 1, f = this.options.width - 2; 1 <= f ? c <= f : c >= f; b = 1 <= f ? ++c : --c) e = this.game.make.sprite(0, 0, "GroundAssets"), e.anchor.set(.5), e.animations.add("loop", Phaser.Animation.generateFrameNames(a, 0, 14, "", 4), 30, !0), this.liquidGraphics.addChild(e), e.x = this.body.world.mpx(b + .5), e.y = this.body.world.mpx(.5), e.animations.play("loop"); return g = this.game.make.sprite(0, 0, "GroundAssets"), g.anchor.set(.5), g.animations.add("loop", Phaser.Animation.generateFrameNames(a + "Right", 0, 14, "", 4), 30, !0), this.liquidGraphics.addChild(g), g.x = this.body.world.mpx(this.options.width - .5), g.y = this.body.world.mpx(.5), g.animations.play("loop") }, d.prototype.createIceGraphics = function() { var a, b, c, d, e, f, g; for (a = "IceBox", d = this.game.make.sprite(0, 0, "GroundAssets", a + "Left0000"), d.anchor.set(.5), this.iceGraphics.addChild(d), d.x = this.body.world.mpx(.5), d.y = this.body.world.mpx(.5), b = c = 1, f = this.options.width - 2; 1 <= f ? c <= f : c >= f; b = 1 <= f ? ++c : --c) e = this.game.make.sprite(0, 0, "GroundAssets", a + "0000"), e.anchor.set(.5), this.iceGraphics.addChild(e), e.x = this.body.world.mpx(b + .5), e.y = this.body.world.mpx(.5); return g = this.game.make.sprite(0, 0, "GroundAssets", a + "Right0000"), g.anchor.set(.5), this.iceGraphics.addChild(g), g.x = this.body.world.mpx(this.options.width - .5), g.y = this.body.world.mpx(.5) }, d.prototype.update = function() { if (!this.game.physics.box2d.paused) { if (!this.ready) return void(this.ready = !0); if (null != this.sensorFixture.m_userData.lightProperties.iluminated) { if ("blue" === this.sensorFixture.m_userData.lightProperties.iluminated && 5 === this.options.type) return this.shouldFreeze(); if ("red" === this.sensorFixture.m_userData.lightProperties.iluminated && 5 === this.options.type) return this.shouldMelt() } } }, d.prototype.shouldFreeze = function() { if (!this.frozen) return this.freeze(), this.game.level.sounds.freeze.play() }, d.prototype.shouldMelt = function() { if (this.frozen) return this.game.level.sounds.melt.play(), this.melt() }, d.prototype.initialFreeze = function() { var a, b, c; this.game.physics.box2d.paused = !1, this.game.physics.box2d.update(), this.game.physics.box2d.paused = !0, this.frozen = !0, this.iceFixture.SetFilterData({ maskBits: 16, categoryBits: 1 }), c = this.nearBodies; for (a in c) b = c[a], "pers" === b.body.data.m_userData ? (b.body.data.SetPosition(b.body.data.GetPosition().SelfAdd(new box2d.b2Vec2(0, .5))), b.body.data.SetAwake(!0)) : (this.frozenBodies[a] = b, b.body.static = !0); return this.iceFixture.Refilter(), this.sensorFixture.m_userData.lightProperties.type = "mirror", this.iceGraphics.visible = !0, this.liquidGraphics.visible = !1 }, d.prototype.freeze = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n; b = 800, console.log("freezing"), this.frozen = !0, this.iceFixture.SetFilterData({ maskBits: 16, categoryBits: 1 }), h = this.nearBodies; for (d in h) e = h[d], "pers" === e.body.data.m_userData ? (e.body.data.SetPosition(e.body.data.GetPosition().SelfAdd(new box2d.b2Vec2(0, .5))), e.body.data.SetAwake(!0)) : (this.frozenBodies[d] = e, e.body.static = !0); this.iceFixture.Refilter(), this.sensorFixture.m_userData.lightProperties.type = "mirror", this.iceGraphics.visible = !0, c = this.game.make.graphics(0, 0), this.addChild(c), l = this.game.physics.box2d.mpx(this.options.width), c.beginFill(16777215), c.drawRect(-10, -10, l + 20, 52), a = this.sensorFixture.m_userData.lightProperties.lightAt, n = this.game.physics.box2d.mpx(-a.x - this.options.x), c.width = 0, c.x = n, i = this.game.add.tween(c).to({ x: 0, width: l }, b, "Linear", !0).onUpdateCallback(function(a) { return function() { return a.frozen ? a.iceGraphics.mask = c : c.visible = !1 } }(this)), m = this.game.make.graphics(0, 0), this.addChild(m), m.width = l, m.x = 0, f = { val: l - n }, i = this.game.add.tween(f).to({ val: 0 }, b, "Linear", !0).onUpdateCallback(function(a) { return function() { return a.frozen ? (m.clear(), m.beginFill(16777215), m.drawRect(l - f.val, -10, f.val, 52), a.liquidGraphics.mask = m) : m.visible = !1 } }(this)), g = { val: n }, i = this.game.add.tween(g).to({ val: 0 }, b, "Linear", !0).onUpdateCallback(function(a) { return function() { return a.frozen ? (m.beginFill(16777215), m.drawRect(0, -10, g.val, 52), a.liquidGraphics.mask = m) : m.visible = !1 } }(this)), j = this.game.make.sprite(0, 0, "GroundAssets", "frost0000"), k = this.game.make.sprite(0, 0, "GroundAssets", "frost0000"), j.anchor.set(.5), k.anchor.set(.5), j.animations.add("loop", Phaser.Animation.generateFrameNames("frost", 0, 10, "", 4), 30, !0), k.animations.add("loop", Phaser.Animation.generateFrameNames("frost", 0, 10, "", 4), 30, !0), j.animations.play("loop"), k.animations.play("loop"), this.addChild(j), this.addChild(k), j.x = n, k.x = n, i = this.game.add.tween(j).to({ x: 10 }, b, "Linear", !0), i = this.game.add.tween(k).to({ x: l - 10 }, b, "Linear", !0), i.onComplete.add(function(a) { return function() { return a.frozen && (a.liquidGraphics.visible = !1), m.destroy(), c.destroy(), j.destroy(), k.destroy() } }(this)) }, d.prototype.melt = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n; e = 800, console.log("melting"), this.frozen = !1, this.iceFixture.SetFilterData({ maskBits: 0, categoryBits: 1 }), i = this.frozenBodies; for (c in i) f = i[c], f.body.static = !1, delete this.frozenBodies[c]; return this.iceFixture.Refilter(), this.sensorFixture.m_userData.lightProperties.type = "normal", this.liquidGraphics.visible = !0, d = this.game.make.graphics(0, 0), this.addChild(d), m = this.game.physics.box2d.mpx(this.options.width), d.beginFill(16777215), d.drawRect(0, -10, m, 52), a = this.sensorFixture.m_userData.lightProperties.lightAt, n = this.game.physics.box2d.mpx(-a.x - this.options.x), d.width = 0, d.x = n, j = this.game.add.tween(d).to({ x: 0, width: m }, e, "Linear", !0).onUpdateCallback(function(a) { return function() { return a.frozen ? d.visible = !1 : a.liquidGraphics.mask = d } }(this)), b = this.game.make.graphics(0, 0), this.addChild(b), b.width = m, b.x = 0, g = { val: m - n }, j = this.game.add.tween(g).to({ val: 0 }, e, "Linear", !0).onUpdateCallback(function(a) { return function() { return a.frozen ? b.visible = !1 : (b.clear(), b.beginFill(16777215), b.drawRect(m - g.val - 10, -10, g.val + 20, 52)) } }(this)), h = { val: n }, j = this.game.add.tween(h).to({ val: 0 }, e, "Linear", !0).onUpdateCallback(function(a) { return function() { return a.frozen ? b.visible = !1 : (b.beginFill(16777215), b.drawRect(0, -10, h.val, 52), a.iceGraphics.mask = b) } }(this)), k = this.game.make.sprite(0, 0, "GroundAssets", "vapor0000"), l = this.game.make.sprite(0, 0, "GroundAssets", "vapor0000"), k.anchor.set(.5), l.anchor.set(.5), k.animations.add("loop", Phaser.Animation.generateFrameNames("vapor", 0, 10, "", 4), 30, !0), l.animations.add("loop", Phaser.Animation.generateFrameNames("vapor", 0, 10, "", 4), 30, !0), k.animations.play("loop"), l.animations.play("loop"), this.addChild(k), this.addChild(l), k.x = n, l.x = n, j = this.game.add.tween(k).to({ x: 10 }, e, "Linear", !0), j = this.game.add.tween(l).to({ x: m - 10 }, e, "Linear", !0), j.onComplete.add(function(a) { return function() { return a.frozen || (a.iceGraphics.visible = !1), d.destroy(), b.destroy(), k.destroy(), l.destroy() } }(this)) }, d }(Phaser.Sprite) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/MovingPlatform", ["./Device"], function(c) { "use strict"; return function(c) { function d(b, c) { this.drawDarkMask = a(this.drawDarkMask, this), this.checkState = a(this.checkState, this), this.updateState = a(this.updateState, this), this.update = a(this.update, this), this.sounds = a(this.sounds, this); var e, f, g, h, i, j, k, l, m, n, o; c.width < c.height ? (o = c.width, c.width = c.height, c.height = o, c.x = c.x + c.height / 2, c.y = c.y + c.width / 2, this.shapeRotation = n = -Math.PI / 2) : (c.x = c.x + c.width / 2, c.y = c.y + c.height / 2, this.shapeRotation = n = 0), c.padding = { x: null != c.properties && null != c.properties.paddingX ? c.properties.paddingX : 0, y: null != c.properties && null != c.properties.paddingY ? c.properties.paddingY : .06 }, d.__super__.constructor.call(this, b, c), this.sprite = this.game.make.sprite(this.options.x, this.options.y, "MechAssets", "_default0000"), this.game.physics.box2d.enable(this.sprite), this.game.layers.underGround.addChild(this.sprite), this.body = this.sprite.body, this.body.clearFixtures(), this.body.data.SetAngle(this.options.rotation), l = new box2d.b2PolygonShape, l.SetAsOrientedBox(this.options.width / 2 - this.options.padding.x, this.options.height / 2 - this.options.padding.y, new box2d.b2Vec2(0, 0), n), h = new box2d.b2FixtureDef, h.shape = l, h.friction = .7, h.restitution = 0, null != this.options.properties.dtheta ? h.density = .5 : h.density = 0, h.userData = { reflection: !0 }, h.filter.categoryBits = 256, h.filter.maskBits = 4369, g = this.body.data.CreateFixture(h), g.id = this.body.world.getNextFixtureId(), null != this.options.properties.dtheta ? (i = new box2d.b2RevoluteJointDef, k = this.body.data.GetWorldCenter(), f = new box2d.b2Vec2(k.x - (this.options.properties.offsetX || 0), k.y - (this.options.properties.offsetY || 0)), i.Initialize(this.body.data, this.game.level.groundBody, f), this.options.properties.dtheta > 0 ? (i.lowerAngle = 0, i.upperAngle = Math.PI * this.options.properties.dtheta / 180) : (i.lowerAngle = Math.PI * this.options.properties.dtheta / 180, i.upperAngle = 0), i.enableLimit = !0, i.maxMotorTorque = 200, i.enableMotor = !0, this.joint = this.game.physics.box2d.world.CreateJoint(i)) : (e = new box2d.b2Vec2(this.options.properties.dx, this.options.properties.dy), i = new box2d.b2PrismaticJointDef, i.Initialize(this.body.data, this.game.level.groundBody, this.body.data.GetWorldCenter(), e), i.lowerTranslation = -e.Length(), i.upperTranslation = 0, i.enableLimit = !0, i.motorSpeed = .5, i.maxMotorForce = 220, i.enableMotor = !0, this.joint = this.game.physics.box2d.world.CreateJoint(i)), this.state = 0, this.registerDevice(), this.shapeSprite = this.game.make.group(0, 0), j = this.game.make.sprite(0, 0, "MechAssets", "BarCapLeft0000"), j.anchor.set(.5), this.shapeSprite.addChild(j), j.x = this.mpx(this.options.width / 2 - .5), j.y = this.mpx(this.options.height / 2 - .5), m = this.game.make.sprite(0, 0, "MechAssets", "BarCapRight0000"), m.anchor.set(.5), this.shapeSprite.addChild(m), m.x = -this.mpx(this.options.width / 2 - .5), m.y = this.mpx(this.options.height / 2 - .5), f = this.game.make.sprite(0, 0, "MechAssets", "BarCenter0000"), f.anchor.set(.5), this.shapeSprite.addChild(f), f.x = 0, f.y = 0, f.scale.x = (this.options.width - 2) / 3, this.lights[0].scale.x = (this.options.width - 1) / 3, this.shapeSprite.addChild(this.lights[0]), this.shapeSprite.rotation = n, this.sprite.addChild(this.shapeSprite), 0 === n ? (this.sprite.scale.x = 1.05, this.sprite.scale.y = .95) : (this.sprite.scale.y = 1.05, this.sprite.scale.x = .95) } return b(d, c), d.prototype.options = { atlasName: null, frameName: null, lightAtlas: "MechAssets", lightFrame: "moving_platform_light", properties: { group: 0, dx: 4, dy: 0 } }, d.prototype.sounds = function() { return "platform" }, d.prototype.update = function() { return null != this.joint.GetJointAngleRadians && (this.joint.GetJointAngleRadians() < this.joint.GetLowerLimit() && this.body.data.SetAngle(-this.joint.GetLowerLimit()), this.joint.GetJointAngleRadians() > this.joint.GetUpperLimit() && this.body.data.SetAngle(-this.joint.GetUpperLimit())), d.__super__.update.apply(this, arguments) }, d.prototype.updateState = function(a) { var b; if (this.cacheAsBitmap = !0, b = null != this.joint.GetJointAngleRadians && this.options.properties.dtheta > 0 ? -2 : 2, 0 === this.state) { if (this.joint.SetMotorSpeed(b), this.body.data.ApplyForce(new box2d.b2Vec2(1, 0), new box2d.b2Vec2(0, 0)), null != this.sound && (this.sound.stopInstance(), this.sound = null), !a) return this.sound = this.game.level.sounds.platform.playInstance() } else if (this.joint.SetMotorSpeed(-b), this.body.data.ApplyForce(new box2d.b2Vec2(1, 0), new box2d.b2Vec2(0, 0)), null != this.sound && (this.sound.stopInstance(), this.sound = null), !a) return this.sound = this.game.level.sounds.platform.playInstance() }, d.prototype.checkState = function() { var a, b, c; return a = function(a) { return function() { return null != a.joint.GetJointTranslation ? a.joint.GetJointTranslation() : a.options.properties.dtheta > 0 ? -a.joint.GetJointAngleRadians() : a.joint.GetJointAngleRadians() } }(this), c = function(a) { return function() { return null != a.joint.GetJointTranslation ? a.joint.m_upperTranslation : a.options.properties.dtheta > 0 ? -a.joint.GetLowerLimit() : a.joint.GetUpperLimit() } }(this), b = function(a) { return function() { return null != a.joint.GetJointTranslation ? a.joint.m_lowerTranslation : a.options.properties.dtheta > 0 ? -a.joint.GetUpperLimit() : a.joint.GetLowerLimit() } }(this), null != this.sound && 0 === this.state && a() >= c() ? (this.sound.stopInstance(), this.sound = null) : null != this.sound && 1 === this.state && a() <= b() ? (this.sound.stopInstance(), this.sound = null) : void 0 }, d.prototype.drawDarkMask = function(a) { var b, c, d, e; if (1 === this.state) return a.ctx.globalCompositeOperation = "lighter", e = { x: this.sprite.x + a.offset.x, y: this.sprite.y + a.offset.y }, b = new box2d.b2Vec2(36, 0).SelfRotateRadians(this.shapeRotation), c = new box2d.b2Vec2(-36, 0).SelfRotateRadians(this.shapeRotation), d = a.ctx.createRadialGradient(e.x + b.x, e.y + b.y, 20, e.x + b.x, e.y + b.y, 160), d.addColorStop(0, "rgba(255,255,255,0.9)"), d.addColorStop(.5, "rgba(255,255,255,0.2)"), d.addColorStop(1, "transparent"), a.circle(e.x + b.x, e.y + b.y, 160, d), d = a.ctx.createRadialGradient(e.x + c.x, e.y + c.y, 20, e.x + c.x, e.y + c.y, 160), d.addColorStop(0, "rgba(255,255,255,0.9)"), d.addColorStop(.5, "rgba(255,255,255,0.2)"), d.addColorStop(1, "transparent"), a.circle(e.x + c.x, e.y + c.y, 180, d) }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Portal", ["./BoxedDevice"], function(c) { "use strict"; return function(c) { function d(b, c) { this.drawDarkMask = a(this.drawDarkMask, this), this.ocupy = a(this.ocupy, this), this.createFakeBlock = a(this.createFakeBlock, this), this.debugVector = a(this.debugVector, this), this.destroy = a(this.destroy, this), this.update = a(this.update, this), this.updateState = a(this.updateState, this), this.transport = a(this.transport, this), this.removeMask = a(this.removeMask, this), this.createMask = a(this.createMask, this), this.sounds = a(this.sounds, this); var e, f, g, h, i, j, k, l, m, n; c.rotation || (c.rotation = 0), d.__super__.constructor.call(this, b, c), this.center = g = this.game.make.sprite(this.options.x, this.options.y, "MechAssets"), g.animations.add("loop", Phaser.Animation.generateFrameNames("portal_center", 0, 39, "", 4), 30, !0), g.animations.play("loop"), g.anchor.set(.5), this.game.physics.box2d.enable(g), this.body = g.body, this.game.layers.liquids.addChild(g), this.glowLeft = j = this.game.make.sprite(this.options.x, this.options.y, "MechAssets"), j.animations.add("loop", Phaser.Animation.generateFrameNames("portal_glow", 0, 29, "", 4), 30, !0), j.animations.play("loop"), j.anchor.set(.5), j.scale.x = -1, j.rotation = this.options.rotation || 0, j.alpha = 0, j.tint = 0, this.game.layers.liquids.addChild(j), this.glowRight = k = this.game.make.sprite(this.options.x, this.options.y, "MechAssets"), k.animations.add("loop", Phaser.Animation.generateFrameNames("portal_glow", 0, 29, "", 4), 30, !0), k.animations.play("loop"), k.anchor.set(.5), k.rotation = this.options.rotation || 0, k.alpha = 0, this.game.layers.liquids.addChild(k), e = this.game.make.sprite(this.options.x, this.options.y, "MechAssets", "portal0000"), e.anchor.set(.5), e.rotation = this.options.rotation || 0, f = this.game.make.sprite(0, 0, "MechAssets", "portal_light_off0000"), f.anchor.set(.5), e.addChild(f), f.offFrameName = "portal_light_off0000", f.onFrameName = "portal_light_on0000", this.lights.push(f), this.game.layers.liquids.addChild(e), this.options.properties.inverted && (g.scale.x = -1, e.scale.x = -1, j.scale.x = 1, k.scale.x = -1), this.body.clearFixtures(), this.body.mass = 0, this.body.data.SetAngle(this.options.rotation), m = new box2d.b2PolygonShape, m.SetAsOrientedBox(this.options.sensorWidth, this.options.sensorHeigh, new box2d.b2Vec2(0, 0), 0), i = new box2d.b2FixtureDef, i.shape = m, i.density = 0, i.isSensor = !0, i.filter.maskBits = 4096, i.filter.categoryBits = 4096, i.userData = { lightProperties: { type: "transparent" } }, this.sensorFixture = n = this.body.data.CreateFixture(i), n.id = this.body.world.getNextFixtureId(), l = new box2d.b2PolygonShape, l.SetAsOrientedBox(this.options.lightSensorWidth, this.options.sensorHeigh, new box2d.b2Vec2(0, 0), 0), i = new box2d.b2FixtureDef, i.shape = l, i.density = 0, i.isSensor = !1, i.filter.maskBits = 4096, i.filter.categoryBits = 4096, i.userData = { lightProperties: { type: "portal", getOutput: function(a) { return function(b) { var c, d; return d = b, c = (a.other.options.rotation || 0) - (a.options.rotation || 0), a.other.options.properties.inverted === a.options.properties.inverted ? d.SelfRotateRadians(c + Math.PI) : d.SelfRotateRadians(c), d } }(this), getPoint: function(a) { return function(b, c) { var d, e; return c = new box2d.b2Vec2(0, 1).SelfRotateRadians(a.options.rotation || 0), e = b.Clone().SelfSub(a.body.data.GetPosition()), a.other.options.properties.inverted !== a.options.properties.inverted && (e = c.Clone().SelfMul(2 * e.Dot(c) / c.Length()).SelfSub(e)), d = (a.other.options.rotation || 0) - (a.options.rotation || 0), e.SelfRotateRadians(d), a.other.body.data.GetPosition().SelfAdd(e) } }(this) }, device: this }, h = this.body.data.CreateFixture(i), h.id = this.body.world.getNextFixtureId(), this.eventHorizon = h, this.registerDevice(), this.nearBodies = {}, this.body.setFixtureContactCallback(n, function(a) { return function(b, c, d, e, f, g) { var h, i; if (e.m_userData["portal-sensor"]) return f || null == a.nearBodies[c.id] ? 1 === a.state && f && null == a.nearBodies[c.id] ? (console.log("add", c.id), h = a.body.data.GetLocalPoint(c.data.GetPosition(), new box2d.b2Vec2).x, i = { body: c, dist: null }, c.side = h / Math.abs(h), a.createMask(i), a.nearBodies[c.id] = i) : void 0 : (console.log("remove", c.id), i = a.nearBodies[c.id], a.removeMask(i), delete a.nearBodies[c.id]) } }(this), this), this.body.setFixtureContactCallback(this.eventHorizon, function(a) { return function(b, c, d, e, f, g) { var h, i; if (f) return h = a.body.data.GetLocalPoint(c.data.GetPosition(), new box2d.b2Vec2).x, i = h > 0 && !a.options.properties.inverted || h < 0 && a.options.properties.inverted ? 1 : -1, a.transporting || (a.transporting = []), !c.lastTransport || (new Date).getTime() - c.lastTransport > 200 ? (c.lastTransport = (new Date).getTime(), a.transporting.push({ body: c, vel: c.data.GetLinearVelocity().Clone(), side: i })) : console.log("prevented transport...") } }(this), this), this.options.properties.inverted ? this.normal = new box2d.b2Vec2(1, 0) : this.normal = new box2d.b2Vec2(-1, 0), this.normal.SelfRotateRadians(this.options.rotation || 0) } return b(d, c), d.prototype.options = { sensorWidth: 2, sensorHeigh: 1.5, lightSensorWidth: .1 }, d.prototype.boxSize = { x: 2, y: 3 }, d.prototype.sounds = function() { return ["portalOpen", "portalLoop", "portalClose", "portalTransport"] }, d.prototype.createMask = function(a) { var b, c, d, e, f; return c = this.mpx(3 * this.options.sensorHeigh), d = this.game.make.graphics(0, 0), this.game.level.root.addChild(d), d.beginFill(16777215), f = new box2d.b2Vec2(-1, 0).SelfRotateRadians(this.options.rotation || 0), b = a.body.data.GetPosition().Clone().SelfSub(this.body.data.GetPosition()), e = f.Dot(b) < 0 ? this.mpx(5) : -this.mpx(5), d.drawRect(0, -c, e, 2 * c), d.x = this.options.x, d.y = this.options.y, d.angle = 180 * this.options.rotation / Math.PI || 0, a.mask = d, a.body.sprite.mask = d }, d.prototype.removeMask = function(a) { return a.body.sprite.mask = null, a.mask.destroy() }, d.prototype.transport = function(a) { var b, c, d, e, f, g; return c = a.body, e = new box2d.b2Vec2(0, 1).SelfRotateRadians(this.options.rotation || 0), d = c.data.GetPosition().Clone().SelfSub(this.body.data.GetPosition()), this.other.options.properties.inverted !== this.options.properties.inverted && (d = e.Clone().SelfMul(2 * d.Dot(e) / e.Length()).SelfSub(d)), b = (this.other.options.rotation || 0) - (this.options.rotation || 0), d.SelfRotateRadians(b), c.data.SetPosition(this.other.body.data.GetPosition().SelfAdd(d)), this.other.options.properties.inverted === this.options.properties.inverted ? (g = a.vel.Clone().SelfRotateRadians(-b), g = e.Clone().SelfMul(2 * g.Dot(e) / e.Length()).SelfSub(g)) : g = a.vel.Clone().SelfRotateRadians(b), c.data.SetLinearVelocity(g), g.Length() < 10 && (f = this.other.normal.Clone(), 1 === a.side && f.SelfMul(-1), c.data.SetLinearVelocity(g.SelfNormalize().SelfMul(10 / c.data.GetMass()))), this.game.physics.update(), this.game.level.sounds.portalTransport.play(), this.sensorFixture.Refilter(), this.eventHorizon.Refilter() }, d.prototype.updateState = function(a) { if (1 !== this.state || this.center.visible ? 0 === this.state && this.center.visible && (this.center.visible = !1, this.eventHorizon.SetFilterData({ maskBits: 0, categoryBits: 0 }), this.sensorFixture.SetFilterData({ maskBits: 0, categoryBits: 0 }), null != this.sound && (this.sound.stopInstance(), this.sound = null), a || this.game.level.sounds.portalClose.play()) : (this.center.visible = !0, this.eventHorizon.SetFilterData({ maskBits: 4096, categoryBits: 4096 }), this.sensorFixture.SetFilterData({ maskBits: 4096, categoryBits: 4096 }), this.game.level.sounds.portalOpen.play(), this.game.level.sounds.portalLoop.loop = !0, a || (this.sound = this.game.level.sounds.portalLoop.playInstance(), this.sound.volume = .3)), this.sensorFixture.Refilter(), null != this.fakeWallFixture) return 1 === this.state ? this.fakeWallFixture.SetFilterData({ maskBits: 0, categoryBits: 0 }) : this.fakeWallFixture.SetFilterData({ maskBits: 4369, categoryBits: 1 }), this.fakeWallFixture.Refilter() }, d.prototype.update = function() { var a, b, c, d, e, f, g, h; if (1 === this.state && Object.keys(this.nearBodies).length > 0) { d = 1 / 0, e = 1 / 0, h = this.nearBodies; for (c in h) f = h[c], a = this.body.data.GetLocalPoint(f.body.data.GetPosition(), new box2d.b2Vec2), b = a.x, f.body.side && f.body.side !== b / Math.abs(b) && (console.log("side violation!", f.body), f.body.data.SetPosition(f.body.data.GetPosition().SelfAdd(a.Clone().SelfMul(-2)))), this.options.properties.inverted && (b *= -1), b > 0 ? d = Math.min(d, b) : e = Math.min(e, -b); d < 1 / 0 && (this.glowLeft.alpha = this.other.glowLeft.alpha = Math.min(1, (2 - d) / 2 + .3)), e < 1 / 0 && (this.glowRight.alpha = this.other.glowRight.alpha = Math.min(1, (2 - e) / 2 + .3)), null != this.sound && (this.sound.volume = .3 + Math.max(this.glowRight.alpha, this.glowLeft.alpha)) } else null == this.transporting && null == this.other.transporting && null == this.receiving && null == this.other.receiving && (0 === this.state || 0 === Object.keys(this.nearBodies).length && 0 === Object.keys(this.other.nearBodies).length) && (this.glowRight.alpha = this.other.glowRight.alpha = this.glowLeft.alpha = this.other.glowLeft.alpha = 0); if (1 === this.state && null != this.transporting) { for (; g = this.transporting.shift();) this.transport(g); this.other.receiving = !0, this.transporting = null } this.receiving = null }, d.prototype.destroy = function() { return null != this.sound && this.sound.stopInstance(), d.__super__.destroy.apply(this, arguments) }, d.prototype.debugVector = function(a, b) { return this.debugger.lineStyle(2, b, 1), this.debugger.moveTo(0, 0), this.debugger.lineTo(this.mpx(a.x), this.mpx(a.y)) }, d.prototype.createFakeBlock = function(a) { var b, c, d, e; return e = this.game.make.sprite(0, 0, "MechAssets", "_default0000"), this.game.physics.box2d.enable(e), b = e.body, b.clearFixtures(), a.center.y -= .5 * Math.cos(this.options.rotation), a.center.x += .5 * Math.sin(this.options.rotation), d = new box2d.b2PolygonShape, d.SetAsOrientedBox(a.width, a.height, a.center, a.rotation), c = new box2d.b2FixtureDef, c.shape = d, this.fakeWallFixture = b.data.CreateFixture(c), b.mass = 0 }, d.prototype.ocupy = function(a) { var b, c; return b = this.options.x / 32, c = this.options.y / 32, this.ocupyTile(a, b, c + 2), this.ocupyTile(a, b - 1, c - 2), this.ocupyTile(a, b - 1, c + 2), this.ocupyTile(a, b, c - 2) }, d.prototype.drawDarkMask = function(a) { var b, c, d, e; if (1 === this.state) return a.ctx.globalCompositeOperation = "lighter", e = { x: this.center.x + a.offset.x, y: this.center.y + a.offset.y }, b = new box2d.b2Vec2(0, 36).SelfRotateRadians(this.options.rotation), c = new box2d.b2Vec2(0, -36).SelfRotateRadians(this.options.rotation), d = a.ctx.createRadialGradient(e.x + b.x, e.y + b.y, 20, e.x + b.x, e.y + b.y, 90), d.addColorStop(0, "rgba(255,255,255,1)"), d.addColorStop(.5, "rgba(255,255,255,0.3)"), d.addColorStop(1, "transparent"), a.circle(e.x + b.x, e.y + b.y, 90, d), d = a.ctx.createRadialGradient(e.x + c.x, e.y + c.y, 20, e.x + c.x, e.y + c.y, 90), d.addColorStop(0, "rgba(255,255,255,1)"), d.addColorStop(.5, "rgba(255,255,255,0.3)"), d.addColorStop(1, "transparent"), a.circle(e.x + c.x, e.y + c.y, 90, d) }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Pulley", ["./Device"], function(c) { "use strict"; return function(c) { function d(b, c) { this.update = a(this.update, this); var e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y; for (d.__super__.constructor.call(this, b, c), this.barWidth = this.options.properties.barWidth || this.options.barWidth, this.barHeight = this.options.properties.barHeight || this.options.barHeight, this.anchor1 = new box2d.b2Vec2(this.options.polyline[1][0] + this.options.x, this.options.polyline[1][1] + this.options.y - this.mpx(2)), this.anchor2 = new box2d.b2Vec2(this.options.polyline[2][0] + this.options.x, this.options.polyline[2][1] + this.options.y - this.mpx(2)), q = { x: this.options.polyline[0][0] + this.options.x, y: this.options.polyline[0][1] + this.options.y }, r = { x: this.options.polyline[3][0] + this.options.x, y: this.options.polyline[3][1] + this.options.y }, this.ropeLeft = this.game.make.tileSprite(q.x, q.y, 200, 20, "MechAssets", "pulley_rope0000"), this.ropeCenter = this.game.make.tileSprite(this.anchor1.x, this.anchor1.y, 200, 20, "MechAssets", "pulley_rope0000"), this.ropeRight = this.game.make.tileSprite(r.x, r.y, 200, 20, "MechAssets", "pulley_rope0000"), this.ropeLeft.anchor.set(0, .5), this.ropeCenter.anchor.set(0, .5), this.ropeRight.anchor.set(0, .5), this.game.layers.underGround.addChild(this.ropeLeft), this.game.layers.underGround.addChild(this.ropeCenter), this.game.layers.underGround.addChild(this.ropeRight), this.platform1 = s = this.game.make.sprite(q.x, q.y, "MechAssets", "_default0000"), this.platform2 = t = this.game.make.sprite(r.x, r.y, "MechAssets", "_default0000"), this.game.physics.box2d.enable(s), this.game.physics.box2d.enable(t), this.plat1 = this.game.make.sprite(0, 0, "MechAssets", "pulley_platform0000"), this.plat2 = this.game.make.sprite(0, 0, "MechAssets", "pulley_platform0000"), this.plat1.anchor.set(.5), this.plat2.anchor.set(.5), this.plat1.width = 1.3 * this.mpx(this.barWidth), this.plat2.width = 1.3 * this.mpx(this.barWidth), this.base1 = this.game.make.sprite(0, 0, "MechAssets", "pulley_base0000"), this.base2 = this.game.make.sprite(0, 0, "MechAssets", "pulley_base0000"), this.base1.anchor.set(.5), this.base2.anchor.set(.5), this.platform1.addChild(this.base1), this.platform2.addChild(this.base2), this.platform1.addChild(this.plat1), this.platform2.addChild(this.plat2), this.game.layers.underGround.addChild(this.platform1), this.game.layers.underGround.addChild(this.platform2), s.body.data.SetFixedRotation(!0), t.body.data.SetFixedRotation(!0), s.body.data.m_userData = "reactable", t.body.data.m_userData = "reactable", s.body.data.SetLinearDamping(.1), t.body.data.SetLinearDamping(.1), v = [this.platform1.body, this.platform2.body], n = 0, p = v.length; n < p; n++) h = v[n], h.clearFixtures(), l = this.barWidth / 2, k = this.barHeight / 2, m = l + .1, y = [], y.push(new box2d.b2Vec2(l, k)), y.push(new box2d.b2Vec2(-l, k)), y.push(new box2d.b2Vec2(-m, 0)), y.push(new box2d.b2Vec2(-l, -k)), y.push(new box2d.b2Vec2(l, -k)), y.push(new box2d.b2Vec2(m, 0)), u = new box2d.b2PolygonShape, u.Set(y), j = new box2d.b2FixtureDef, j.shape = u, j.friction = .4, j.restitution = 0, j.density = 3, i = h.data.CreateFixture(j), i.id = h.world.getNextFixtureId(), this.options.properties.prismatic && (g = new box2d.b2Vec2(0, 1), x = new box2d.b2BodyDef, x.density = 0, w = new box2d.b2Body(x), o = new box2d.b2PrismaticJointDef, o.Initialize(h.data, w, h.data.GetWorldCenter(), g), this.joint = this.game.physics.box2d.world.CreateJoint(o)); return this.wheel1 = this.game.make.sprite(this.anchor1.x + 10, this.anchor1.y + 10 - this.baseHeight, "MechAssets", "pulley_anchor0000"), this.wheel2 = this.game.make.sprite(this.anchor2.x - 10, this.anchor2.y + 10 - this.baseHeight, "MechAssets", "pulley_anchor0000"), this.wheel1.anchor.set(.5), this.wheel2.anchor.set(.5), this.game.layers.underGround.addChild(this.wheel1), this.game.layers.underGround.addChild(this.wheel2), o = new box2d.b2PulleyJointDef, e = { x: this.pxm(this.anchor1.x), y: this.pxm(this.anchor1.y) }, f = { x: this.pxm(this.anchor2.x), y: this.pxm(this.anchor2.y) }, o.Initialize(s.body.data, t.body.data, e, f, s.body.data.GetWorldCenter(), t.body.data.GetWorldCenter(), 1), this.joint = this.game.physics.box2d.world.CreateJoint(o), this } return b(d, c), d.prototype.options = { barWidth: 2.7, barHeight: .24 }, d.prototype.lastp1 = { x: 0, y: 0 }, d.prototype.baseHeight = 60, d.prototype.update = function() { var a, b, c, d, e, f, g; return f = new box2d.b2Vec2(this.platform1.position.x, this.platform1.position.y - this.baseHeight), a = new box2d.b2Vec2(this.anchor1.x, this.anchor1.y - this.baseHeight), g = new box2d.b2Vec2(this.platform2.position.x, this.platform2.position.y - this.baseHeight), b = new box2d.b2Vec2(this.anchor2.x, this.anchor2.y - this.baseHeight), Math.round(1 * this.lastp1.x) !== Math.round(1 * f.x) || Math.round(1 * this.lastp1.y) !== Math.round(1 * f.y) || Math.round(1 * this.lastp2.x) !== Math.round(1 * g.x) || Math.round(1 * this.lastp2.y) !== Math.round(1 * g.y) ? (this.cacheAsBitmap = !1, this.lastp1 = f.Clone(), this.lastp2 = g.Clone(), d = f.Clone().SelfSub(a), c = a.Clone().SelfSub(b), e = b.Clone().SelfSub(g), this.ropeLeft.position = { x: a.x, y: a.y }, this.ropeLeft.width = d.Length(), this.ropeLeft.height = 20, this.ropeLeft.rotation = Math.atan2(-d.y, -d.x) + Math.PI, this.ropeLeft.tilePosition.x = d.Length(), this.ropeCenter.position = { x: a.x, y: a.y }, this.ropeCenter.width = c.Length(), this.ropeCenter.height = 20, this.ropeCenter.rotation = Math.atan2(-c.y, -c.x), this.ropeCenter.tilePosition.x = e.Length(), this.ropeRight.position = { x: b.x, y: b.y }, this.ropeRight.width = e.Length(), this.ropeRight.height = 20, this.ropeRight.rotation = Math.atan2(-e.y, -e.x), this.ropeRight.tilePosition.x = e.Length(), this.wheel1.rotation = e.Length() / Math.PI / 10, this.wheel2.rotation = e.Length() / Math.PI / 10) : this.cacheAsBitmap ? void 0 : this.cacheAsBitmap = !0 }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Pusher", ["./BoxedDevice"], function(c) { "use strict"; return function(c) { function d(b, c) { this.ocupy = a(this.ocupy, this), this.checkState = a(this.checkState, this), this.doRegister = a(this.doRegister, this), this.sounds = a(this.sounds, this); var e, f, g, h, i, j, k, l, m, n, o; return d.__super__.constructor.call(this, b, c), g = this.game.make.sprite(this.options.x, this.options.y, "MechAssets", "_default0000"), this.game.physics.box2d.enable(g), h = this.game.make.resSprite(0, 0, "MechAssets", "pusher_block0000"), h.anchor.set(.5), g.addChild(h), j = this.game.make.resSprite(0, 0, "MechAssets", "pusher_block_light0000"), j.anchor.set(.5), g.addChild(j), this.button = g, this.game.layers.underGround.addChild(g), this.base = f = this.game.make.sprite(this.options.x, this.options.y + this.mpx(.5), "MechAssets", "_default0000"), this.game.layers.overGround.addChild(f), this.lights.push(j), g.body.clearFixtures(), g.body.data.SetAngle(Math.PI * c.rotation / 180 || 0), i = g.body, o = [], o.push(new box2d.b2Vec2(-this.options.pusherWidth / 2 - .5, 0)), o.push(new box2d.b2Vec2(this.options.pusherWidth / 2 + .5, 0)), o.push(new box2d.b2Vec2(this.options.pusherWidth / 2, this.options.pusherHeight)), o.push(new box2d.b2Vec2(-this.options.pusherWidth / 2, this.options.pusherHeight)), n = new box2d.b2PolygonShape, n.Set(o), k = new box2d.b2FixtureDef, k.shape = n, k.friction = .7, k.restitution = 0, k.density = .1, k.userData = "pusher", k.filter.categoryBits = 1, k.filter.maskBits = 61695, m = i.data.CreateFixture(k), m.id = i.world.getNextFixtureId(), e = new box2d.b2Vec2(0, 1), l = new box2d.b2PrismaticJointDef, l.Initialize(i.data, this.game.level.groundBody, i.data.GetWorldCenter(), e), l.upperTranslation = .7, l.lowerTranslation = 0, l.enableLimit = !0, l.motorSpeed = -15, l.maxMotorForce = 5, l.enableMotor = !0, this.joint = this.game.physics.box2d.world.CreateJoint(l), this.signal = new Phaser.Signal, this.doRegister(), this } return b(d, c), d.prototype.options = { pusherWidth: 1, pusherHeight: .6, atlasName: null, frameName: null }, d.prototype.sounds = function() { return "pusher" }, d.prototype.doRegister = function() { return this.registerDevice() }, d.prototype.checkState = function() { return 0 === this.state && this.joint.GetJointTranslation() > .2 ? (this.state = 1, this.game.level.sounds.pusher.play(), this.signal.dispatch(this)) : 1 === this.state && this.joint.GetJointTranslation() <= .2 ? (this.state = 0, this.game.level.sounds.pusher.play(), this.signal.dispatch(this)) : void 0 }, d.prototype.ocupy = function() {}, d }(c) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Level/Devices/Roman", ["./BoxedDevice"], function(b) { "use strict"; return function(b) { function c(a, b) { var d, e, f, g, h, i, j, k, l, m, n, o, p, q; return c.__super__.constructor.call(this, a, b), this.options.polygon[0][0] === this.options.polygon[1][0] ? (m = 2 * this.pxm(this.options.polygon[2][0] - this.options.polygon[1][0]), k = this.pxm(this.options.polygon[1][1] - this.options.polygon[0][1]), f = .6, d = -Math.atan(k / (m / 2))) : (m = 2 * this.pxm(this.options.polygon[1][0] - this.options.polygon[0][0]), k = this.pxm(this.options.polygon[1][1] - this.options.polygon[0][1]), f = .6, d = Math.atan(k / (m / 2))), h = { x: this.options.polygon[1][0] + this.options.x + this.mpx(1), y: this.options.polygon[1][1] + this.options.y - this.mpx(1) }, e = this.game.make.tileSprite(h.x, h.y, this.mpx(m), 30, "MechAssets", "roman_bar0000"), this.game.physics.box2d.enable(e), i = this.game.make.sprite(this.mpx(m / 2), 0, "MechAssets", "roman_end0000"), i.anchor.set(.05, .5), e.addChild(i), i = this.game.make.sprite(-this.mpx(m / 2), 0, "MechAssets", "roman_end0000"), i.scale.x = -1, i.anchor.set(.05, .5), e.addChild(i), o = this.game.make.sprite(h.x, h.y, "MechAssets", "roman_center0000"), o.anchor.set(.5, .5), e.body.clearFixtures(), q = [], q.push(new box2d.b2Vec2(-m / 2, -f / 2)), q.push(new box2d.b2Vec2(m / 2, -f / 2)), q.push(new box2d.b2Vec2(m / 2 - 2, f / 2)), q.push(new box2d.b2Vec2(-m / 2 + 2, f / 2)), p = new box2d.b2PolygonShape, p.Set(q), j = new box2d.b2FixtureDef, j.shape = p, j.friction = .7, j.restitution = 0, j.density = .1, j.filter.categoryBits = 1, j.filter.maskBits = 65535, e.body.data.CreateFixture(j), e.body.data.SetAngle(d || 0), g = this.game.make.sprite(h.x, h.y - this.mpx(k), "MechAssets", "roman_base0000"), this.game.physics.box2d.enable(g), g.height / (2 * this.mpx(k)), g.height = -2 * this.mpx(k), this.game.layers.overGround.addChild(g), this.game.layers.overGround.addChild(e), this.game.layers.overChars.addChild(o), g.body.clearFixtures(), g.body.data.SetAngle(Math.PI * b.rotation / 180 || 0), g.body.mass = 0, g.body, q = [], q.push(new box2d.b2Vec2(-1, 0)), q.push(new box2d.b2Vec2(0, k)), q.push(new box2d.b2Vec2(1, 0)), p = new box2d.b2PolygonShape, p.Set(q), j = new box2d.b2FixtureDef, j.shape = p, j.friction = .7, j.restitution = 0, j.density = .1, j.filter.categoryBits = 1, j.filter.maskBits = 65535, g.body.data.CreateFixture(j), l = new box2d.b2RevoluteJointDef, n = e.body.data.GetWorldCenter(), h = new box2d.b2Vec2(n.x, n.y), l.Initialize(e.body.data, g.body.data, h), this.joint = this.game.physics.box2d.world.CreateJoint(l), this } return a(c, b), c.prototype.options = { atlasName: null, frameName: null }, c }(b) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/RotMirror", ["./BoxedDevice"], function(c) { "use strict"; return function(c) { function d(b, c) { this.drawDarkMask = a(this.drawDarkMask, this), this.checkState = a(this.checkState, this), this.updateState = a(this.updateState, this), this.update = a(this.update, this), this.sounds = a(this.sounds, this); var e, f, g, h, i, j, k, l, m, n, o; for (d.__super__.constructor.call(this, b, c), this.base = f = this.game.make.resSprite(this.options.x, this.options.y, "MechAssets", "rotmirror_circle0000"), f.anchor.set(.5), this.game.layers.underGround.addChild(f), k = this.game.make.resSprite(this.options.x, this.options.y, "MechAssets", "rotmirror0000"), k.anchor.set(.5), this.game.physics.box2d.enable(k), this.body = k.body, l = this.game.make.resSprite(0, 0, "MechAssets", "rotmirror_light_off0000"), l.anchor.set(.5), k.addChild(l), l.offFrameName = "rotmirror_light_off0000", l.onFrameName = "rotmirror_light_on0000", this.lights.push(l), this.options.properties.bringToBack ? this.game.layers.underGround.addChild(k) : this.game.layers.overGround.addChild(k), this.body.clearFixtures(), o = new box2d.b2PolygonShape, o.SetAsOrientedBox(this.options.boxWidth / 2, this.options.boxHeight / 2, new box2d.b2Vec2(0, 0), 0), i = new box2d.b2FixtureDef, i.shape = o, i.friction = .7, i.restitution = 0, i.density = 1, i.userData = { lightProperties: { type: "transparent" } }, h = this.body.data.CreateFixture(i), h.id = this.body.world.getNextFixtureId(), m = new box2d.b2PolygonShape, m.SetAsOrientedBox(this.options.mirrorWidth / 2, this.options.mirrorHeight / 2, new box2d.b2Vec2(0, 0), Math.PI / 4), i = new box2d.b2FixtureDef, i.shape = m, i.friction = .7, i.restitution = 0, i.density = .2, i.userData = { lightProperties: { type: "mirror" } }, h = this.body.data.CreateFixture(i), h.id = this.body.world.getNextFixtureId(), e = new box2d.b2CircleShape(.25), e.m_p = new box2d.b2Vec2(this.options.boxWidth / 2 - .25, this.options.boxWidth / 2 - .25), i = new box2d.b2FixtureDef, i.shape = e, h = this.body.data.CreateFixture(i), e = new box2d.b2CircleShape(.25), e.m_p = new box2d.b2Vec2(-this.options.boxWidth / 2 + .25, -this.options.boxWidth / 2 + .25), i = new box2d.b2FixtureDef, i.shape = e, h = this.body.data.CreateFixture(i), j = new box2d.b2RevoluteJointDef, n = this.body.data.GetWorldCenter(), g = new box2d.b2Vec2(n.x, n.y), j.Initialize(this.body.data, this.game.level.groundBody, g); this.options.rotation < 0;) this.options.rotation += 2 * Math.PI; return 1 === this.options.properties.dir ? (j.lowerAngle = -this.options.rotation, j.upperAngle = -this.options.rotation + Math.PI / 2) : (j.lowerAngle = -this.options.rotation - Math.PI / 2, j.upperAngle = -this.options.rotation), j.enableLimit = !0, j.maxMotorTorque = 100, j.enableMotor = !0, this.joint = this.game.physics.box2d.world.CreateJoint(j), 1 === this.options.properties.dir ? this.body.data.SetAngle(-this.joint.GetLowerLimit()) : this.body.data.SetAngle(-this.joint.GetUpperLimit()), this.registerDevice(), this } return b(d, c), d.prototype.options = { atlasName: null, frameName: null, lightAtlas: null, lightFrame: null, boxWidth: 1.8, boxHeight: 1.8, mirrorWidth: 2, mirrorHeight: .1 }, d.prototype.sounds = function() { return ["platform"] }, d.prototype.update = function() { return this.joint.GetJointAngleRadians() < this.joint.GetLowerLimit() && this.body.data.SetAngle(-this.joint.GetLowerLimit()), this.joint.GetJointAngleRadians() > this.joint.GetUpperLimit() && this.body.data.SetAngle(-this.joint.GetUpperLimit()), d.__super__.update.apply(this, arguments) }, d.prototype.updateState = function(a) { if (0 === this.state) { if (this.joint.SetMotorSpeed(-1.5 * this.options.properties.dir), null != this.sound && this.sound.stopInstance(), !a) return this.sound = this.game.level.sounds.platform.playInstance() } else if (this.joint.SetMotorSpeed(1.5 * this.options.properties.dir), null != this.sound && this.sound.stopInstance(), !a) return this.sound = this.game.level.sounds.platform.playInstance() }, d.prototype.checkState = function() { var a, b, c; return a = function(a) { return function() { return a.options.properties.dir > 0 ? -a.joint.GetJointAngleRadians() : a.joint.GetJointAngleRadians() } }(this), c = function(a) { return function() { return a.options.properties.dir > 0 ? -a.joint.GetLowerLimit() : a.joint.GetUpperLimit() } }(this), b = function(a) { return function() { return a.options.properties.dir > 0 ? -a.joint.GetUpperLimit() : a.joint.GetLowerLimit() } }(this), null != this.sound && 0 === this.state && a() >= c() ? (this.game.level.sounds.platform.stopInstance(), this.sound = null) : null != this.sound && 1 === this.state && a() <= b() ? (this.game.level.sounds.platform.stopInstance(), this.sound = null) : void 0 }, d.prototype.drawDarkMask = function(a) { var b, c; if (1 === this.state) return c = { x: this.base.x + a.offset.x, y: this.base.y + a.offset.y }, a.ctx.globalCompositeOperation = "lighter", b = a.ctx.createRadialGradient(c.x, c.y, 20, c.x, c.y, 160), b.addColorStop(0, "rgba(255,255,255,1)"), b.addColorStop(.5, "rgba(255,255,255,0.3)"), b.addColorStop(1, "transparent"), a.circle(c.x, c.y, 160, b) }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Slider", ["./Device"], function(c) { "use strict"; return function(c) { function d(b, c) { this.checkState = a(this.checkState, this), this.sounds = a(this.sounds, this); var e, f, g, h, i, j, k, l, m, n, o, p; return d.__super__.constructor.call(this, b, c), o += this.game.physics.box2d.mpx(1), p -= this.game.physics.box2d.mpx(1), n = this.options.polyline[1][0] - this.options.polyline[0][0], this._width = n, l = { x: this.options.x + n / 2, y: this.options.y }, g = this.game.make.sprite(l.x, l.y, "MechAssets", "_default0000"), this.game.physics.box2d.enable(g), h = this.game.make.sprite(0, 0, "MechAssets", "SliderDot0000"), h.anchor.set(.5), g.addChild(h), i = this.game.make.sprite(0, 0, "MechAssets", "slider_light_off0000"), i.anchor.set(.5), g.addChild(i), this.game.layers.overChars.addChild(g), this.lights.push(i), m = this.game.make.sprite(l.x, l.y, "MechAssets", "SliderTrack0000"), m.anchor.set(.5), m.width = n, this.game.layers.underGround.addChild(m), g.body.clearFixtures(), f = new box2d.b2CircleShape(.3), f.m_p.SetXY(0, 0), j = new box2d.b2FixtureDef, j.shape = f, j.friction = 0, g.body.data.CreateFixture(j), e = new box2d.b2Vec2(-1, 0), k = new box2d.b2PrismaticJointDef, k.Initialize(g.body.data, this.game.level.groundBody, g.body.data.GetWorldCenter(), e), k.upperTranslation = -this.pxm(n / 2), k.lowerTranslation = this.pxm(n / 2), k.enableLimit = !0, k.motorSpeed = 0, k.maxMotorForce = 20, k.enableMotor = !0, this.joint = this.game.physics.box2d.world.CreateJoint(k), g.body.data.SetLinearDamping(1), this.signal = new Phaser.Signal, this.registerDevice(), this } return b(d, c), d.prototype.options = { properties: { group: 0 } }, d.prototype.sounds = function() { return "slider" }, d.prototype.checkState = function() { if (this.joint.GetJointTranslation() !== this.state) return this.sound && this.sound.isPlaying || (this.sound = this.game.level.sounds.slider.play()), this.state = Math.PI * this.joint.GetJointTranslation() * (this.options.properties.max || 1) / this.pxm(-this._width), this.signal.dispatch(this) }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Snow", ["Phaser"], function() { "use strict"; return function(c) { function d(b, c, e) { this.drawTile = a(this.drawTile, this), this.createSnowGraphics = a(this.createSnowGraphics, this); var f, g, h, i, j, k, l, m; return this.ground = c, this.options = {}, this.options.data = e, "SW" === e.dir ? (i = e.length * Math.sqrt(2), this.options.y = e.x + e.length / 2, this.options.x = e.y + e.length / 2) : "SE" === e.dir ? (i = e.length * Math.sqrt(2), this.options.y = e.x + e.length / 2, this.options.x = e.y - e.length / 2 + 1) : "WE" === e.dir && (i = e.length, this.options.y = e.x, this.options.x = e.y + e.length / 2), d.__super__.constructor.call(this, b, this.options.x, this.options.y), this.game.add.existing(this), this.game.layers.liquids.addChild(this), this.game.physics.box2d.enable(this), this.body.clearFixtures(), this.body.mass = 0, this.body.data.SetPosition(new box2d.b2Vec2(-this.options.x, -this.options.y)), "SW" === e.dir ? f = Math.PI / 4 : "SE" === e.dir ? f = -Math.PI / 4 : "WE" === e.dir && (f = 0), this.body.data.SetAngle(f), k = new box2d.b2PolygonShape, m = [], l = i - .1, j = .4, m.push(new box2d.b2Vec2(-l / 2 + 0, .01)), m.push(new box2d.b2Vec2(l / 2 - 0, .01)), m.push(new box2d.b2Vec2(l / 2 - .3, 0 - j + .01)), m.push(new box2d.b2Vec2(-l / 2 + .3, 0 - j + .01)), k.Set(m), h = new box2d.b2FixtureDef, h.shape = k, h.filter.categoryBits = 1, h.filter.maskBits = 16, h.friction = 1, h.userData = { type: "ice" }, g = this.iceFixture = this.body.data.CreateFixture(h), g.id = this.body.world.getNextFixtureId(), this.body.setFixtureContactCallback(this.iceFixture, function(a) { return function(a, b, c, d, e, f) { var g; if (null != b.sprite.character && "feet" === d.m_userData || null != a.sprite.character && "feet" === c.m_userData) return g = b.sprite.character || a.sprite.character, e ? (g.snowCount || (g.snowCount = 0), g.snowCount += 1) : (g.snowCount || (g.snowCount = 0), g.snowCount -= 1), g.setOnIce(0 !== g.snowCount) } }()), this.createSnowGraphics(), this } return b(d, c), d.prototype.createSnowGraphics = function() { var a, b, c, d, e, f, g, h; for (d = [], e = a = 0, c = this.options.data.length - 1; 0 <= c ? a <= c : a >= c; e = 0 <= c ? ++a : --a) b = 1, "SW" === this.options.data.dir ? (g = this.game.physics.box2d.mpx(1) * (this.options.x - this.options.data.length / 2 + e * b), h = this.game.physics.box2d.mpx(1) * (this.options.y - this.options.data.length / 2 + e * b), f = "SnowSlope0000") : "SE" === this.options.data.dir ? (g = this.game.physics.box2d.mpx(1) * (this.options.x + this.options.data.length / 2 - 1 - e * b), h = this.game.physics.box2d.mpx(1) * (this.options.y - this.options.data.length / 2 + e * b), f = "SnowSlope0001") : "WE" === this.options.data.dir && (g = this.game.physics.box2d.mpx(1) * (this.options.x - this.options.data.length / 2 + e), h = this.game.physics.box2d.mpx(1) * this.options.y, f = "SnowFlat0000"), d.push(this.drawTile(g, h, f)); return d }, d.prototype.drawTile = function(a, b, c, d) { var e, f; return e = this.game.cache.getFrameByName("GroundAssets", c), f = this.game.cache.getImage("GroundAssets"), a = a - (e.width - 32) / 2 + 32, b = b - (e.height - 32) / 2 + 32, this.ground.bmd.ctx.drawImage(f, e.x, e.y, e.width, e.height, a, b, e.width, e.height) }, d }(Phaser.Sprite) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/TimedPusher", ["./Pusher"], function(c) { "use strict"; return function(c) { function d(b, c) { this.drawDarkMask = a(this.drawDarkMask, this), this.ocupy = a(this.ocupy, this), this.checkState = a(this.checkState, this), this.doRegister = a(this.doRegister, this), this.destroy = a(this.destroy, this), this.sounds = a(this.sounds, this); var e, f, g; d.__super__.constructor.call(this, b, c), f = this.game.make.sprite(0, 0, "MechAssets", "timed_pusher_base0000"), f.anchor.set(.5), this.base.addChild(f), g = this.game.make.sprite(0, 0, "MechAssets", "timed_pusher_light_off0000"), g.anchor.set(.5), this.base.addChild(g), g.offFrameName = "timed_pusher_light_off0000", g.onFrameName = "timed_pusher_light_off0000", this.lights.push(g), this.baseLight = e = this.game.make.sprite(0, 0, "MechAssets", "timed_pusher_light_off0000"), e.anchor.set(.5), this.base.addChild(e), e.offFrameName = "timed_pusher_light_off0000", e.onFrameName = "timed_pusher_light_on0000", e.cacheAsBitmap = !0, this.lights.push(e), this.clock = this.game.make.graphics(0, 27), this.clock.cacheAsBitmap = !0, this.registerDevice(), this.downState = 0 } return b(d, c), d.prototype.timer = null, d.prototype.sounds = function() { return ["pusher", "clock"] }, d.prototype.destroy = function() { return null != this.sound && this.sound.stop(), d.__super__.destroy.apply(this, arguments) }, d.prototype.doRegister = function() {}, d.prototype.checkState = function() { var a, b, c, d, e, f, g, h; if (f = this.joint.GetJointTranslation(), 0 === this.downState && f > 0 ? (this.downState = 1, this.game.level.sounds.pusher.play(), null != this.sound && this.sound.isPlaying && this.sound.stop()) : 1 === this.downState && f <= 0 && (this.downState = 0, this.game.level.sounds.pusher.play(), null != this.sound && this.sound.isPlaying && this.sound.stop()), f > 0 ? (this.state = 1, this.signal.dispatch(this), null == this.timer && (this.timer = this.game.time.create(!0), this.timer.add(this.options.properties.time, function(a) { return function() { return a.state = 0, a.game.level.sounds.pusher.play(), a.signal.dispatch(a), a.timer = null } }(this))), this.timer.stop(!1), this.timer.start()) : !this.timer && 1 === this.state && f <= 0 && (this.state = 0, this.signal.dispatch(this)), 1 === this.state) { if (null == this.baseLight.mask && (this.base.addChild(this.clock), this.baseLight.mask = this.clock), 0 !== this.downState || null != this.sound && this.sound.isPlaying || (d = 22796, this.sound = this.game.level.sounds.clock.play(null, (d - this.options.properties.time) / 1e3)), a = 0, b = 0, g = 20, c = Math.max(0, Math.min(1, 1 - this.timer.ms / this.options.properties.time)), c = Math.ceil(12 * c) / 12, h = -2 * Math.PI * c - Math.PI / 2, e = -Math.PI / 2, console.log("angling " + this.timer.ms + " " + this.options.properties.time + " " + (1 - this.timer.ms / this.options.properties.time)), this.lastDrawnAngle !== h) return this.clock.clear(), this.clock.beginFill(16777215, 1), this.clock.moveTo(a, b), this.clock.arc(a, b, g, h, e), this.clock.lineTo(a, b), this.clock.cacheAsBitmap = !0, this.lastDrawnAngle = h } else if (this.lastDrawnAngle) return this.base.removeChild(this.clock), this.baseLight.mask = null, this.lastDrawnAngle = null }, d.prototype.ocupy = function(a) { var b, c; return b = this.options.x / 32, c = this.options.y / 32, this.ocupyTile(a, b, c), this.ocupyTile(a, b - 1, c), this.ocupyTile(a, b - 2, c), this.ocupyTile(a, b + 1, c), this.ocupyTile(a, b, c - 1), this.ocupyTile(a, b - 1, c - 1), this.ocupyTile(a, b - 2, c - 1), this.ocupyTile(a, b + 1, c - 1) }, d.prototype.drawDarkMask = function(a) { var b, c; if (1 === this.state) return a.ctx.globalCompositeOperation = "lighter", c = { x: this.options.x + a.offset.x, y: this.options.y + a.offset.y + 12 }, b = a.ctx.createRadialGradient(c.x, c.y, 20, c.x, c.y, 80), b.addColorStop(0, "rgba(255,255,255,1)"), b.addColorStop(.5, "rgba(255,255,255,0.2)"), b.addColorStop(1, "transparent"), a.circle(c.x, c.y, 90, b) }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Devices/Wind", ["./BoxedDevice"], function(c) { "use strict"; return function(c) { function d(b, c) { this.drawDarkMask = a(this.drawDarkMask, this), this.ocupy = a(this.ocupy, this), this.updateState = a(this.updateState, this), this.update = a(this.update, this), this.destroy = a(this.destroy, this), this.sounds = a(this.sounds, this); var e, f, g, h, i, j, k, l; c.rotation || (c.rotation = 0), c.rotation += 90, d.__super__.constructor.call(this, b, c), this.sprite.anchor.set(.5), i = new box2d.b2PolygonShape, this.options.properties.flat ? i.SetAsOrientedBox(this.options.boxWidth / 2, this.options.boxHeight / 2, new box2d.b2Vec2(0, .3), 0) : (j = [], j.push(new box2d.b2Vec2(-this.options.boxWidth / 2 - .6, 0)), j.push(new box2d.b2Vec2(this.options.boxWidth / 2 + .6, 0)), j.push(new box2d.b2Vec2(this.options.boxWidth / 2, this.options.boxHeight)), j.push(new box2d.b2Vec2(-this.options.boxWidth / 2, this.options.boxHeight)), i.Set(j)), f = new box2d.b2FixtureDef, f.shape = i, f.friction = .4, f.restitution = 0, f.density = .2, g = new box2d.b2Vec2(0, 0), g = g.SelfRotateRadians(this.options.rotation || 0), e = this.body.data.CreateFixture(f), e.id = this.body.world.getNextFixtureId(), this.body.mass = 0, l = null != this.options.properties.windWidth ? this.options.properties.windWidth : this.options.windWidth, h = new box2d.b2PolygonShape, h.SetAsOrientedBox(l / 2, this.options.properties.length / 2, new box2d.b2Vec2(0, this.options.properties.length / 2 + .5), 0), f = new box2d.b2FixtureDef, f.shape = h, f.isSensor = !0, f.userData = { lightProperties: { type: "transparent" } }, this.windSensor = this.body.data.CreateFixture(f), this.windSensor.id = this.body.world.getNextFixtureId(), this.body.mass = 0, this.activeBodies = {}, this.body.setFixtureContactCallback(this.windSensor, function(a) { return function(b, c, d, e, f, g) { var h; if (null != c.sprite.character) { if (!f && null != a.activeBodies[c.id]) return delete a.activeBodies[c.id]; if (f && null == a.activeBodies[c.id]) return h = { body: c }, a.activeBodies[c.id] = h } } }(this)), this.sprite.animations.add("loop", Phaser.Animation.generateFrameNames("wind_base", 0, 4, "", 4), 30, !0), k = this.windEffect = this.game.make.sprite(this.options.x - b.physics.box2d.mpx(g.x), this.options.y - b.physics.box2d.mpx(g.y), "MechAssets"), k.anchor.y = 1, k.anchor.x = .5, k.animations.add("loop", Phaser.Animation.generateFrameNames("wind_effect", 0, 30, "", 4), 30, !0), k.animations.play("loop"), k.animations.next(Math.floor(30 * Math.random())), k.height = b.physics.box2d.mpx(this.options.properties.length), k.rotation = this.options.rotation || 0, k.visible = !1, this.game.layers.overChars.addChild(k), this.registerDevice() } return b(d, c), d.prototype.options = { boxWidth: 2.5, boxHeight: .6, windWidth: 2.6, windHeight: 10, atlasName: "MechAssets", frameName: "wind_base0000", lightAtlas: "MechAssets", lightFrame: "wind_base_light", layer: "liquids" }, d.prototype.boxSize = { x: -3, y: 2 }, d.prototype.sounds = function() { return "wind" }, d.prototype.destroy = function() { return null != this.sound && this.sound.stopInstance(), d.__super__.destroy.apply(this, arguments) }, d.prototype.update = function() { var a, b, c, d, e, f, g; if (1 === (this.options.properties.invertInput ? +!this.state : this.state)) { e = this.activeBodies, f = []; for (c in e) d = e[c], b = new box2d.b2Vec2(0, 1), b = b.SelfRotateRadians(this.options.rotation || 0), a = d.body.data.GetPosition().SelfSub(this.body.data.GetPosition()), b.SelfMul(1.2 + .2 * Math.sin(this.game.time.now / 1e3)).SelfMul(100).SelfMul(1 - a.GetLength() / this.options.properties.length), d.body.data.ApplyForce(b, new box2d.b2Vec2(0, 0)), d.body.data.SetLinearVelocity(d.body.data.GetLinearVelocity().SelfMul(.975)), g = d.body.data.GetLinearVelocity().GetLength(), f.push(d.body.data.SetLinearVelocity(d.body.data.GetLinearVelocity().SelfNormalize().SelfMul(Math.min(g, 15)))); return f } }, d.prototype.updateState = function() { var a; return this.running || (this.running = !1), a = this.options.properties.invertInput ? +!this.state : this.state, 1 === a && !1 === this.windEffect.visible ? (this.windEffect.visible = !0, this.sprite.animations.play("loop"), this.running = !0, this.game.level.sounds.wind.loop = !0, this.sound = this.game.level.sounds.wind.playInstance(), this.sound.volume = .2) : 0 === a && !0 === this.windEffect.visible ? (this.windEffect.visible = !1, null != this.sound && (this.sound.stopInstance(), this.sound = null), _.delay(function(a) { return function() { return a.sprite.animations.stop(), a.sprite.frameName = "wind_base0000" } }(this), 400)) : void 0 }, d.prototype.ocupy = function(a) { var b, c; return b = this.options.x / 32, c = this.options.y / 32, this.ocupyTile(a, b - 1, c), this.ocupyTile(a, b - 1, c - 1), this.ocupyTile(a, b, c), this.ocupyTile(a, b, c - 1), this.ocupyTile(a, b - 2, c), this.ocupyTile(a, b - 2, c - 1) }, d.prototype.drawDarkMask = function(a) { var b, c, d, e; if (1 === this.state) return a.ctx.globalCompositeOperation = "lighter", e = { x: this.sprite.x + a.offset.x, y: this.sprite.y + a.offset.y }, b = new box2d.b2Vec2(36, 0).SelfRotateRadians(this.options.rotation), c = new box2d.b2Vec2(-36, 0).SelfRotateRadians(this.options.rotation), d = a.ctx.createRadialGradient(e.x + b.x, e.y + b.y, 20, e.x + b.x, e.y + b.y, 90), d.addColorStop(0, "rgba(255,255,255,1)"), d.addColorStop(.5, "rgba(255,255,255,0.3)"), d.addColorStop(1, "transparent"), a.circle(e.x + b.x, e.y + b.y, 90, d), d = a.ctx.createRadialGradient(e.x + c.x, e.y + c.y, 20, e.x + c.x, e.y + c.y, 90), d.addColorStop(0, "rgba(255,255,255,1)"), d.addColorStop(.5, "rgba(255,255,255,0.3)"), d.addColorStop(1, "transparent"), a.circle(e.x + c.x, e.y + c.y, 90, d) }, d }(c) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Level/Devices/Window", ["./Device"], function(b) { "use strict"; return function(b) { function c(a, b) { var d, e, f, g, h, i, j; b.width < b.height ? (j = b.width, b.width = b.height, b.height = j, b.x = b.x + b.height / 2, b.y = b.y + b.width / 2, b.rotation = -90) : (b.x = b.x + b.width / 2, b.y = b.y + b.height / 2), c.__super__.constructor.call(this, a, b), this.sprite = this.game.make.sprite(this.options.x, this.options.y, "MechAssets", "_default0000"), this.game.physics.box2d.enable(this.sprite), this.game.layers.overGround.addChild(this.sprite), this.body = this.sprite.body, this.body.clearFixtures(), this.body.data.SetAngle(this.options.rotation), this.body.static = !0, h = new box2d.b2PolygonShape, h.SetAsOrientedBox(this.options.width / 2, this.options.height / 2, new box2d.b2Vec2(0, 0), 0), f = new box2d.b2FixtureDef, f.shape = h, f.friction = .7, f.restitution = 0, f.density = 0, f.userData = f.userData = { lightProperties: { type: "transparent" } }, f.filter.categoryBits = 1, f.filter.maskBits = 61695, e = this.body.data.CreateFixture(f), e.id = this.body.world.getNextFixtureId(), new box2d.b2Vec2(this.options.properties.dx, this.options.properties.dy), this.state = 0, this.registerDevice(), g = this.game.make.sprite(0, 0, "MechAssets", "WindowLeft0000"), g.anchor.set(.5), this.sprite.addChild(g), g.x = this.mpx(this.options.width / 2 - .5), g.y = this.mpx(this.options.height / 2 - .5), i = this.game.make.sprite(0, 0, "MechAssets", "WindowRight0000"), i.anchor.set(.5), this.sprite.addChild(i), i.x = -this.mpx(this.options.width / 2 - .5), i.y = this.mpx(this.options.height / 2 - .5), d = this.game.make.sprite(0, 0, "MechAssets", "WindowCenter0000"), d.anchor.set(.5), this.sprite.addChild(d), d.x = 0, d.y = 0, d.scale.x = (this.options.width - 2) / 3, this.sprite.scale.x = 1.05, this.sprite.scale.y = 1.05 } return a(c, b), c.prototype.options = { atlasName: null, frameName: null, lightAtlas: "MechAssets", properties: { group: 0, dx: 4, dy: 0 } }, c }(b) }) }.call(this), function() { define("States/Level/Devices/_define", ["require", "./BackgroundCover", "./Ball", "./Beamer", "./Box", "./BoxedDevice", "./BoxHeavy", "./BoxMirror", "./BoxPrototype", "./Device", "./Diamond", "./Door", "./Hanging", "./InfiniteMirror", "./Lever", "./LightPusher", "./Liquid", "./MovingPlatform", "./Portal", "./Pulley", "./Pusher", "./Roman", "./RotMirror", "./Slider", "./Snow", "./TimedPusher", "./Wind", "./Window"], function(a) { "use strict"; var b; return b = window.Devices = {}, b.BackgroundCover = a("./BackgroundCover"), b.Ball = a("./Ball"), b.Beamer = a("./Beamer"), b.Box = a("./Box"), b.BoxedDevice = a("./BoxedDevice"), b.BoxHeavy = a("./BoxHeavy"), b.BoxMirror = a("./BoxMirror"), b.BoxPrototype = a("./BoxPrototype"), b.Device = a("./Device"), b.Diamond = a("./Diamond"), b.Door = a("./Door"), b.Hanging = a("./Hanging"), b.InfiniteMirror = a("./InfiniteMirror"), b.Lever = a("./Lever"), b.LightPusher = a("./LightPusher"), b.Liquid = a("./Liquid"), b.MovingPlatform = a("./MovingPlatform"), b.Portal = a("./Portal"), b.Pulley = a("./Pulley"), b.Pusher = a("./Pusher"), b.Roman = a("./Roman"), b.RotMirror = a("./RotMirror"), b.Slider = a("./Slider"), b.Snow = a("./Snow"), b.TimedPusher = a("./TimedPusher"), b.Wind = a("./Wind"), b.Window = a("./Window"), b }) }.call(this), function(a, b, c, d) { "use strict"; function e(a, b, c) { return setTimeout(j(a, c), b) } function f(a, b, c) { return !!Array.isArray(a) && (g(a, c[b], c), !0) } function g(a, b, c) { var e; if (a) if (a.forEach) a.forEach(b, c); else if (a.length !== d) for (e = 0; e < a.length;) b.call(c, a[e], e, a), e++; else for (e in a) a.hasOwnProperty(e) && b.call(c, a[e], e, a) } function h(b, c, d) { var e = "DEPRECATED METHOD: " + c + "\n" + d + " AT \n"; return function() { var c = new Error("get-stack-trace"), d = c && c.stack ? c.stack.replace(/^[^\(]+?[\n$]/gm, "").replace(/^\s+at\s+/gm, "").replace(/^Object.<anonymous>\s*\(/gm, "{anonymous}()@") : "Unknown Stack Trace", f = a.console && (a.console.warn || a.console.log); return f && f.call(a.console, e, d), b.apply(this, arguments) } } function i(a, b, c) { var d, e = b.prototype; d = a.prototype = Object.create(e), d.constructor = a, d._super = e, c && ka(d, c) } function j(a, b) { return function() { return a.apply(b, arguments) } } function k(a, b) { return typeof a == na ? a.apply(b ? b[0] || d : d, b) : a } function l(a, b) { return a === d ? b : a } function m(a, b, c) { g(q(b), function(b) { a.addEventListener(b, c, !1) }) } function n(a, b, c) { g(q(b), function(b) { a.removeEventListener(b, c, !1) }) } function o(a, b) { for (; a;) { if (a == b) return !0; a = a.parentNode } return !1 } function p(a, b) { return a.indexOf(b) > -1 } function q(a) { return a.trim().split(/\s+/g) } function r(a, b, c) { if (a.indexOf && !c) return a.indexOf(b); for (var d = 0; d < a.length;) { if (c && a[d][c] == b || !c && a[d] === b) return d; d++ } return -1 } function s(a) { return Array.prototype.slice.call(a, 0) } function t(a, b, c) { for (var d = [], e = [], f = 0; f < a.length;) { var g = b ? a[f][b] : a[f]; r(e, g) < 0 && d.push(a[f]), e[f] = g, f++ } return c && (d = b ? d.sort(function(a, c) { return a[b] > c[b] }) : d.sort()), d } function u(a, b) { for (var c, e, f = b[0].toUpperCase() + b.slice(1), g = 0; g < la.length;) { if (c = la[g], (e = c ? c + f : b) in a) return e; g++ } return d } function v() { return ta++ } function w(b) { var c = b.ownerDocument || b; return c.defaultView || c.parentWindow || a } function x(a, b) { var c = this; this.manager = a, this.callback = b, this.element = a.element, this.target = a.options.inputTarget, this.domHandler = function(b) { k(a.options.enable, [a]) && c.handler(b) }, this.init() } function y(a) { var b = a.options.inputClass; return new(b || (wa ? M : xa ? P : va ? R : L))(a, z) } function z(a, b, c) { var d = c.pointers.length, e = c.changedPointers.length, f = b & za && d - e == 0, g = b & (Ba | Ca) && d - e == 0; c.isFirst = !!f, c.isFinal = !!g, f && (a.session = {}), c.eventType = b, A(a, c), a.emit("hammer.input", c), a.recognize(c), a.session.prevInput = c } function A(a, b) { var c = a.session, d = b.pointers, e = d.length; c.firstInput || (c.firstInput = D(b)), e > 1 && !c.firstMultiple ? c.firstMultiple = D(b) : 1 === e && (c.firstMultiple = !1); var f = c.firstInput, g = c.firstMultiple, h = g ? g.center : f.center, i = b.center = E(d); b.timeStamp = qa(), b.deltaTime = b.timeStamp - f.timeStamp, b.angle = I(h, i), b.distance = H(h, i), B(c, b), b.offsetDirection = G(b.deltaX, b.deltaY); var j = F(b.deltaTime, b.deltaX, b.deltaY); b.overallVelocityX = j.x, b.overallVelocityY = j.y, b.overallVelocity = pa(j.x) > pa(j.y) ? j.x : j.y, b.scale = g ? K(g.pointers, d) : 1, b.rotation = g ? J(g.pointers, d) : 0, b.maxPointers = c.prevInput ? b.pointers.length > c.prevInput.maxPointers ? b.pointers.length : c.prevInput.maxPointers : b.pointers.length, C(c, b); var k = a.element; o(b.srcEvent.target, k) && (k = b.srcEvent.target), b.target = k } function B(a, b) { var c = b.center, d = a.offsetDelta || {}, e = a.prevDelta || {}, f = a.prevInput || {}; b.eventType !== za && f.eventType !== Ba || (e = a.prevDelta = { x: f.deltaX || 0, y: f.deltaY || 0 }, d = a.offsetDelta = { x: c.x, y: c.y }), b.deltaX = e.x + (c.x - d.x), b.deltaY = e.y + (c.y - d.y) } function C(a, b) { var c, e, f, g, h = a.lastInterval || b, i = b.timeStamp - h.timeStamp; if (b.eventType != Ca && (i > ya || h.velocity === d)) { var j = b.deltaX - h.deltaX, k = b.deltaY - h.deltaY, l = F(i, j, k); e = l.x, f = l.y, c = pa(l.x) > pa(l.y) ? l.x : l.y, g = G(j, k), a.lastInterval = b } else c = h.velocity, e = h.velocityX, f = h.velocityY, g = h.direction; b.velocity = c, b.velocityX = e, b.velocityY = f, b.direction = g } function D(a) { for (var b = [], c = 0; c < a.pointers.length;) b[c] = { clientX: oa(a.pointers[c].clientX), clientY: oa(a.pointers[c].clientY) }, c++; return { timeStamp: qa(), pointers: b, center: E(b), deltaX: a.deltaX, deltaY: a.deltaY } } function E(a) { var b = a.length; if (1 === b) return { x: oa(a[0].clientX), y: oa(a[0].clientY) }; for (var c = 0, d = 0, e = 0; e < b;) c += a[e].clientX, d += a[e].clientY, e++; return { x: oa(c / b), y: oa(d / b) } } function F(a, b, c) { return { x: b / a || 0, y: c / a || 0 } } function G(a, b) { return a === b ? Da : pa(a) >= pa(b) ? a < 0 ? Ea : Fa : b < 0 ? Ga : Ha } function H(a, b, c) { c || (c = La); var d = b[c[0]] - a[c[0]], e = b[c[1]] - a[c[1]]; return Math.sqrt(d * d + e * e) } function I(a, b, c) { c || (c = La); var d = b[c[0]] - a[c[0]], e = b[c[1]] - a[c[1]]; return 180 * Math.atan2(e, d) / Math.PI } function J(a, b) { return I(b[1], b[0], Ma) + I(a[1], a[0], Ma) } function K(a, b) { return H(b[0], b[1], Ma) / H(a[0], a[1], Ma) } function L() { this.evEl = Oa, this.evWin = Pa, this.pressed = !1, x.apply(this, arguments) } function M() { this.evEl = Sa, this.evWin = Ta, x.apply(this, arguments), this.store = this.manager.session.pointerEvents = [] } function N() { this.evTarget = Va, this.evWin = Wa, this.started = !1, x.apply(this, arguments) } function O(a, b) { var c = s(a.touches), d = s(a.changedTouches); return b & (Ba | Ca) && (c = t(c.concat(d), "identifier", !0)), [c, d] } function P() { this.evTarget = Ya, this.targetIds = {}, x.apply(this, arguments) } function Q(a, b) { var c = s(a.touches), d = this.targetIds; if (b & (za | Aa) && 1 === c.length) return d[c[0].identifier] = !0, [c, c]; var e, f, g = s(a.changedTouches), h = [], i = this.target; if (f = c.filter(function(a) { return o(a.target, i) }), b === za) for (e = 0; e < f.length;) d[f[e].identifier] = !0, e++; for (e = 0; e < g.length;) d[g[e].identifier] && h.push(g[e]), b & (Ba | Ca) && delete d[g[e].identifier], e++; return h.length ? [t(f.concat(h), "identifier", !0), h] : void 0 } function R() { x.apply(this, arguments); var a = j(this.handler, this); this.touch = new P(this.manager, a), this.mouse = new L(this.manager, a), this.primaryTouch = null, this.lastTouches = [] } function S(a, b) { a & za ? (this.primaryTouch = b.changedPointers[0].identifier, T.call(this, b)) : a & (Ba | Ca) && T.call(this, b) } function T(a) { var b = a.changedPointers[0]; if (b.identifier === this.primaryTouch) { var c = { x: b.clientX, y: b.clientY }; this.lastTouches.push(c); var d = this.lastTouches, e = function() { var a = d.indexOf(c); a > -1 && d.splice(a, 1) }; setTimeout(e, Za) } } function U(a) { for (var b = a.srcEvent.clientX, c = a.srcEvent.clientY, d = 0; d < this.lastTouches.length; d++) { var e = this.lastTouches[d], f = Math.abs(b - e.x), g = Math.abs(c - e.y); if (f <= $a && g <= $a) return !0 } return !1 } function V(a, b) { this.manager = a, this.set(b) } function W(a) { if (p(a, db)) return db; var b = p(a, eb), c = p(a, fb); return b && c ? db : b || c ? b ? eb : fb : p(a, cb) ? cb : bb } function X(a) { this.options = ka({}, this.defaults, a || {}), this.id = v(), this.manager = null, this.options.enable = l(this.options.enable, !0), this.state = hb, this.simultaneous = {}, this.requireFail = [] } function Y(a) { return a & mb ? "cancel" : a & kb ? "end" : a & jb ? "move" : a & ib ? "start" : "" } function Z(a) { return a == Ha ? "down" : a == Ga ? "up" : a == Ea ? "left" : a == Fa ? "right" : "" } function $(a, b) { var c = b.manager; return c ? c.get(a) : a } function _() { X.apply(this, arguments) } function aa() { _.apply(this, arguments), this.pX = null, this.pY = null } function ba() { _.apply(this, arguments) } function ca() { X.apply(this, arguments), this._timer = null, this._input = null } function da() { _.apply(this, arguments) } function ea() { _.apply(this, arguments) } function fa() { X.apply(this, arguments), this.pTime = !1, this.pCenter = !1, this._timer = null, this._input = null, this.count = 0 } function ga(a, b) { return b = b || {}, b.recognizers = l(b.recognizers, ga.defaults.preset), new ha(a, b) } function ha(a, b) { this.options = ka({}, ga.defaults, b || {}), this.options.inputTarget = this.options.inputTarget || a, this.handlers = {}, this.session = {}, this.recognizers = [], this.oldCssProps = {}, this.element = a, this.input = y(this), this.touchAction = new V(this, this.options.touchAction), ia(this, !0), g(this.options.recognizers, function(a) { var b = this.add(new a[0](a[1])); a[2] && b.recognizeWith(a[2]), a[3] && b.requireFailure(a[3]) }, this) } function ia(a, b) { var c = a.element; if (c.style) { var d; g(a.options.cssProps, function(e, f) { d = u(c.style, f), b ? (a.oldCssProps[d] = c.style[d], c.style[d] = e) : c.style[d] = a.oldCssProps[d] || "" }), b || (a.oldCssProps = {}) } } function ja(a, c) { var d = b.createEvent("Event"); d.initEvent(a, !0, !0), d.gesture = c, c.target.dispatchEvent(d) } var ka, la = ["", "webkit", "Moz", "MS", "ms", "o"], ma = b.createElement("div"), na = "function", oa = Math.round, pa = Math.abs, qa = Date.now; ka = "function" != typeof Object.assign ? function(a) { if (a === d || null === a) throw new TypeError("Cannot convert undefined or null to object"); for (var b = Object(a), c = 1; c < arguments.length; c++) { var e = arguments[c]; if (e !== d && null !== e) for (var f in e) e.hasOwnProperty(f) && (b[f] = e[f]) } return b } : Object.assign; var ra = h(function(a, b, c) { for (var e = Object.keys(b), f = 0; f < e.length;)(!c || c && a[e[f]] === d) && (a[e[f]] = b[e[f]]), f++; return a }, "extend", "Use `assign`."), sa = h(function(a, b) { return ra(a, b, !0) }, "merge", "Use `assign`."), ta = 1, ua = /mobile|tablet|ip(ad|hone|od)|android/i, va = "ontouchstart" in a, wa = u(a, "PointerEvent") !== d, xa = va && ua.test(navigator.userAgent), ya = 25, za = 1, Aa = 2, Ba = 4, Ca = 8, Da = 1, Ea = 2, Fa = 4, Ga = 8, Ha = 16, Ia = Ea | Fa, Ja = Ga | Ha, Ka = Ia | Ja, La = ["x", "y"], Ma = ["clientX", "clientY"]; x.prototype = { handler: function() {}, init: function() { this.evEl && m(this.element, this.evEl, this.domHandler), this.evTarget && m(this.target, this.evTarget, this.domHandler), this.evWin && m(w(this.element), this.evWin, this.domHandler) }, destroy: function() { this.evEl && n(this.element, this.evEl, this.domHandler), this.evTarget && n(this.target, this.evTarget, this.domHandler), this.evWin && n(w(this.element), this.evWin, this.domHandler) } }; var Na = { mousedown: za, mousemove: Aa, mouseup: Ba }, Oa = "mousedown", Pa = "mousemove mouseup"; i(L, x, { handler: function(a) { var b = Na[a.type]; b & za && 0 === a.button && (this.pressed = !0), b & Aa && 1 !== a.which && (b = Ba), this.pressed && (b & Ba && (this.pressed = !1), this.callback(this.manager, b, { pointers: [a], changedPointers: [a], pointerType: "mouse", srcEvent: a })) } }); var Qa = { pointerdown: za, pointermove: Aa, pointerup: Ba, pointercancel: Ca, pointerout: Ca }, Ra = { 2: "touch", 3: "pen", 4: "mouse", 5: "kinect" }, Sa = "pointerdown", Ta = "pointermove pointerup pointercancel"; a.MSPointerEvent && !a.PointerEvent && (Sa = "MSPointerDown", Ta = "MSPointerMove MSPointerUp MSPointerCancel"), i(M, x, { handler: function(a) { var b = this.store, c = !1, d = a.type.toLowerCase().replace("ms", ""), e = Qa[d], f = Ra[a.pointerType] || a.pointerType, g = "touch" == f, h = r(b, a.pointerId, "pointerId"); e & za && (0 === a.button || g) ? h < 0 && (b.push(a), h = b.length - 1) : e & (Ba | Ca) && (c = !0), h < 0 || (b[h] = a, this.callback(this.manager, e, { pointers: b, changedPointers: [a], pointerType: f, srcEvent: a }), c && b.splice(h, 1)) } }); var Ua = { touchstart: za, touchmove: Aa, touchend: Ba, touchcancel: Ca }, Va = "touchstart", Wa = "touchstart touchmove touchend touchcancel"; i(N, x, { handler: function(a) { var b = Ua[a.type]; if (b === za && (this.started = !0), this.started) { var c = O.call(this, a, b); b & (Ba | Ca) && c[0].length - c[1].length == 0 && (this.started = !1), this.callback(this.manager, b, { pointers: c[0], changedPointers: c[1], pointerType: "touch", srcEvent: a }) } } }); var Xa = { touchstart: za, touchmove: Aa, touchend: Ba, touchcancel: Ca }, Ya = "touchstart touchmove touchend touchcancel"; i(P, x, { handler: function(a) { var b = Xa[a.type], c = Q.call(this, a, b); c && this.callback(this.manager, b, { pointers: c[0], changedPointers: c[1], pointerType: "touch", srcEvent: a }) } }); var Za = 2500, $a = 25; i(R, x, { handler: function(a, b, c) { var d = "touch" == c.pointerType, e = "mouse" == c.pointerType; if (!(e && c.sourceCapabilities && c.sourceCapabilities.firesTouchEvents)) { if (d) S.call(this, b, c); else if (e && U.call(this, c)) return; this.callback(a, b, c) } }, destroy: function() { this.touch.destroy(), this.mouse.destroy() } }); var _a = u(ma.style, "touchAction"), ab = _a !== d, bb = "auto", cb = "manipulation", db = "none", eb = "pan-x", fb = "pan-y", gb = function() { if (!ab) return !1; var b = {}, c = a.CSS && a.CSS.supports; return ["auto", "manipulation", "pan-y", "pan-x", "pan-x pan-y", "none"].forEach(function(d) { b[d] = !c || a.CSS.supports("touch-action", d) }), b }(); V.prototype = { set: function(a) { "compute" == a && (a = this.compute()), ab && this.manager.element.style && gb[a] && (this.manager.element.style[_a] = a), this.actions = a.toLowerCase().trim() }, update: function() { this.set(this.manager.options.touchAction) }, compute: function() { var a = []; return g(this.manager.recognizers, function(b) { k(b.options.enable, [b]) && (a = a.concat(b.getTouchAction())) }), W(a.join(" ")) }, preventDefaults: function(a) { var b = a.srcEvent, c = a.offsetDirection; if (this.manager.session.prevented) return void b.preventDefault(); var d = this.actions, e = p(d, db) && !gb[db], f = p(d, fb) && !gb[fb], g = p(d, eb) && !gb[eb]; if (e) { var h = 1 === a.pointers.length, i = a.distance < 2, j = a.deltaTime < 250; if (h && i && j) return } return g && f ? void 0 : e || f && c & Ia || g && c & Ja ? this.preventSrc(b) : void 0 }, preventSrc: function(a) { this.manager.session.prevented = !0, a.preventDefault() } }; var hb = 1, ib = 2, jb = 4, kb = 8, lb = kb, mb = 16; X.prototype = { defaults: {}, set: function(a) { return ka(this.options, a), this.manager && this.manager.touchAction.update(), this }, recognizeWith: function(a) { if (f(a, "recognizeWith", this)) return this; var b = this.simultaneous; return a = $(a, this), b[a.id] || (b[a.id] = a, a.recognizeWith(this)), this }, dropRecognizeWith: function(a) { return f(a, "dropRecognizeWith", this) ? this : (a = $(a, this), delete this.simultaneous[a.id], this) }, requireFailure: function(a) { if (f(a, "requireFailure", this)) return this; var b = this.requireFail; return a = $(a, this), -1 === r(b, a) && (b.push(a), a.requireFailure(this)), this }, dropRequireFailure: function(a) { if (f(a, "dropRequireFailure", this)) return this; a = $(a, this); var b = r(this.requireFail, a); return b > -1 && this.requireFail.splice(b, 1), this }, hasRequireFailures: function() { return this.requireFail.length > 0 }, canRecognizeWith: function(a) { return !!this.simultaneous[a.id] }, emit: function(a) { function b(b) { c.manager.emit(b, a) } var c = this, d = this.state; d < kb && b(c.options.event + Y(d)), b(c.options.event), a.additionalEvent && b(a.additionalEvent), d >= kb && b(c.options.event + Y(d)) }, tryEmit: function(a) { if (this.canEmit()) return this.emit(a); this.state = 32 }, canEmit: function() { for (var a = 0; a < this.requireFail.length;) { if (!(this.requireFail[a].state & (32 | hb))) return !1; a++ } return !0 }, recognize: function(a) { var b = ka({}, a); if (!k(this.options.enable, [this, b])) return this.reset(), void(this.state = 32); this.state & (lb | mb | 32) && (this.state = hb), this.state = this.process(b), this.state & (ib | jb | kb | mb) && this.tryEmit(b) }, process: function(a) {}, getTouchAction: function() {}, reset: function() {} }, i(_, X, { defaults: { pointers: 1 }, attrTest: function(a) { var b = this.options.pointers; return 0 === b || a.pointers.length === b }, process: function(a) { var b = this.state, c = a.eventType, d = b & (ib | jb), e = this.attrTest(a); return d && (c & Ca || !e) ? b | mb : d || e ? c & Ba ? b | kb : b & ib ? b | jb : ib : 32 } }), i(aa, _, { defaults: { event: "pan", threshold: 10, pointers: 1, direction: Ka }, getTouchAction: function() { var a = this.options.direction, b = []; return a & Ia && b.push(fb), a & Ja && b.push(eb), b }, directionTest: function(a) { var b = this.options, c = !0, d = a.distance, e = a.direction, f = a.deltaX, g = a.deltaY; return e & b.direction || (b.direction & Ia ? (e = 0 === f ? Da : f < 0 ? Ea : Fa, c = f != this.pX, d = Math.abs(a.deltaX)) : (e = 0 === g ? Da : g < 0 ? Ga : Ha, c = g != this.pY, d = Math.abs(a.deltaY))), a.direction = e, c && d > b.threshold && e & b.direction }, attrTest: function(a) { return _.prototype.attrTest.call(this, a) && (this.state & ib || !(this.state & ib) && this.directionTest(a)) }, emit: function(a) { this.pX = a.deltaX, this.pY = a.deltaY; var b = Z(a.direction); b && (a.additionalEvent = this.options.event + b), this._super.emit.call(this, a) } }), i(ba, _, { defaults: { event: "pinch", threshold: 0, pointers: 2 }, getTouchAction: function() { return [db] }, attrTest: function(a) { return this._super.attrTest.call(this, a) && (Math.abs(a.scale - 1) > this.options.threshold || this.state & ib) }, emit: function(a) { if (1 !== a.scale) { var b = a.scale < 1 ? "in" : "out"; a.additionalEvent = this.options.event + b } this._super.emit.call(this, a) } }), i(ca, X, { defaults: { event: "press", pointers: 1, time: 251, threshold: 9 }, getTouchAction: function() { return [bb] }, process: function(a) { var b = this.options, c = a.pointers.length === b.pointers, d = a.distance < b.threshold, f = a.deltaTime > b.time; if (this._input = a, !d || !c || a.eventType & (Ba | Ca) && !f) this.reset(); else if (a.eventType & za) this.reset(), this._timer = e(function() { this.state = lb, this.tryEmit() }, b.time, this); else if (a.eventType & Ba) return lb; return 32 }, reset: function() { clearTimeout(this._timer) }, emit: function(a) { this.state === lb && (a && a.eventType & Ba ? this.manager.emit(this.options.event + "up", a) : (this._input.timeStamp = qa(), this.manager.emit(this.options.event, this._input))) } }), i(da, _, { defaults: { event: "rotate", threshold: 0, pointers: 2 }, getTouchAction: function() { return [db] }, attrTest: function(a) { return this._super.attrTest.call(this, a) && (Math.abs(a.rotation) > this.options.threshold || this.state & ib) } }), i(ea, _, { defaults: { event: "swipe", threshold: 10, velocity: .3, direction: Ia | Ja, pointers: 1 }, getTouchAction: function() { return aa.prototype.getTouchAction.call(this) }, attrTest: function(a) { var b, c = this.options.direction; return c & (Ia | Ja) ? b = a.overallVelocity : c & Ia ? b = a.overallVelocityX : c & Ja && (b = a.overallVelocityY), this._super.attrTest.call(this, a) && c & a.offsetDirection && a.distance > this.options.threshold && a.maxPointers == this.options.pointers && pa(b) > this.options.velocity && a.eventType & Ba }, emit: function(a) { var b = Z(a.offsetDirection); b && this.manager.emit(this.options.event + b, a), this.manager.emit(this.options.event, a) } }), i(fa, X, { defaults: { event: "tap", pointers: 1, taps: 1, interval: 300, time: 250, threshold: 9, posThreshold: 10 }, getTouchAction: function() { return [cb] }, process: function(a) { var b = this.options, c = a.pointers.length === b.pointers, d = a.distance < b.threshold, f = a.deltaTime < b.time; if (this.reset(), a.eventType & za && 0 === this.count) return this.failTimeout(); if (d && f && c) { if (a.eventType != Ba) return this.failTimeout(); var g = !this.pTime || a.timeStamp - this.pTime < b.interval, h = !this.pCenter || H(this.pCenter, a.center) < b.posThreshold; this.pTime = a.timeStamp, this.pCenter = a.center, h && g ? this.count += 1 : this.count = 1, this._input = a; if (0 === this.count % b.taps) return this.hasRequireFailures() ? (this._timer = e(function() { this.state = lb, this.tryEmit() }, b.interval, this), ib) : lb } return 32 }, failTimeout: function() { return this._timer = e(function() { this.state = 32 }, this.options.interval, this), 32 }, reset: function() { clearTimeout(this._timer) }, emit: function() { this.state == lb && (this._input.tapCount = this.count, this.manager.emit(this.options.event, this._input)) } }), ga.VERSION = "2.0.7", ga.defaults = { domEvents: !1, touchAction: "compute", enable: !0, inputTarget: null, inputClass: null, preset: [ [da, { enable: !1 }], [ba, { enable: !1 }, ["rotate"] ], [ea, { direction: Ia }], [aa, { direction: Ia }, ["swipe"] ], [fa], [fa, { event: "doubletap", taps: 2 }, ["tap"] ], [ca] ], cssProps: { userSelect: "none", touchSelect: "none", touchCallout: "none", contentZooming: "none", userDrag: "none", tapHighlightColor: "rgba(0,0,0,0)" } }; ha.prototype = { set: function(a) { return ka(this.options, a), a.touchAction && this.touchAction.update(), a.inputTarget && (this.input.destroy(), this.input.target = a.inputTarget, this.input.init()), this }, stop: function(a) { this.session.stopped = a ? 2 : 1 }, recognize: function(a) { var b = this.session; if (!b.stopped) { this.touchAction.preventDefaults(a); var c, d = this.recognizers, e = b.curRecognizer; (!e || e && e.state & lb) && (e = b.curRecognizer = null); for (var f = 0; f < d.length;) c = d[f], 2 === b.stopped || e && c != e && !c.canRecognizeWith(e) ? c.reset() : c.recognize(a), !e && c.state & (ib | jb | kb) && (e = b.curRecognizer = c), f++ } }, get: function(a) { if (a instanceof X) return a; for (var b = this.recognizers, c = 0; c < b.length; c++) if (b[c].options.event == a) return b[c]; return null }, add: function(a) { if (f(a, "add", this)) return this; var b = this.get(a.options.event); return b && this.remove(b), this.recognizers.push(a), a.manager = this, this.touchAction.update(), a }, remove: function(a) { if (f(a, "remove", this)) return this; if (a = this.get(a)) { var b = this.recognizers, c = r(b, a); - 1 !== c && (b.splice(c, 1), this.touchAction.update()) } return this }, on: function(a, b) { if (a !== d && b !== d) { var c = this.handlers; return g(q(a), function(a) { c[a] = c[a] || [], c[a].push(b) }), this } }, off: function(a, b) { if (a !== d) { var c = this.handlers; return g(q(a), function(a) { b ? c[a] && c[a].splice(r(c[a], b), 1) : delete c[a] }), this } }, emit: function(a, b) { this.options.domEvents && ja(a, b); var c = this.handlers[a] && this.handlers[a].slice(); if (c && c.length) { b.type = a, b.preventDefault = function() { b.srcEvent.preventDefault() }; for (var d = 0; d < c.length;) c[d](b), d++ } }, destroy: function() { this.element && ia(this, !1), this.handlers = {}, this.session = {}, this.input.destroy(), this.element = null } }, ka(ga, { INPUT_START: za, INPUT_MOVE: Aa, INPUT_END: Ba, INPUT_CANCEL: Ca, STATE_POSSIBLE: hb, STATE_BEGAN: ib, STATE_CHANGED: jb, STATE_ENDED: kb, STATE_RECOGNIZED: lb, STATE_CANCELLED: mb, STATE_FAILED: 32, DIRECTION_NONE: Da, DIRECTION_LEFT: Ea, DIRECTION_RIGHT: Fa, DIRECTION_UP: Ga, DIRECTION_DOWN: Ha, DIRECTION_HORIZONTAL: Ia, DIRECTION_VERTICAL: Ja, DIRECTION_ALL: Ka, Manager: ha, Input: x, TouchAction: V, TouchInput: P, MouseInput: L, PointerEventInput: M, TouchMouseInput: R, SingleTouchInput: N, Recognizer: X, AttrRecognizer: _, Tap: fa, Pan: aa, Swipe: ea, Pinch: ba, Rotate: da, Press: ca, on: m, off: n, each: g, merge: sa, extend: ra, assign: ka, inherit: i, bindFn: j, prefixed: u }), (void 0 !== a ? a : "undefined" != typeof self ? self : {}).Hammer = ga, "function" == typeof define && define.amd ? define("hammer", [], function() { return ga }) : "undefined" != typeof module && module.exports ? module.exports = ga : a.Hammer = ga }(window, document), Phaser.Filter.OutlineFilter = function(a, b, c, d, e) { Phaser.Filter.call(this, a), this.uniforms = { thickness: { type: "1f", value: d }, outlineColor: { type: "4f", value: null }, pixelWidth: { type: "1f", value: null }, pixelHeight: { type: "1f", value: null } }, this.color = e, this.viewWidth = b, this.viewHeight = c, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "uniform sampler2D texture;", "uniform float thickness;", "uniform vec4 outlineColor;", "uniform float pixelWidth;", "uniform float pixelHeight;", "vec2 px = vec2(pixelWidth, pixelHeight);", "void main(void) {", " const float PI = 3.14159265358979323846264;", " vec4 curColor;", " vec4 ownColor = texture2D(texture, vTextureCoord);", " float maxAlpha = 0.;", " for (float angle = -PI; angle <= PI; angle += " + (Math.PI / 10).toFixed(4) + ") {", " curColor = texture2D(texture, vec2(vTextureCoord.x - thickness * px.x * cos(angle), vTextureCoord.y - thickness * px.y * sin(angle)));", " maxAlpha = max(maxAlpha, curColor.a);", " }", " float resultAlpha = max(maxAlpha, ownColor.a);", " if (ownColor.a < 0.1) gl_FragColor = vec4((ownColor.rgb + outlineColor.rgb * (1. - ownColor.a)) * resultAlpha, resultAlpha);", " else gl_FragColor = vec4(ownColor.rgb,1.);", "}"] }, Phaser.Filter.OutlineFilter.prototype = Object.create(Phaser.Filter.prototype), Phaser.Filter.OutlineFilter.prototype.constructor = Phaser.Filter, Object.defineProperty(Phaser.Filter.OutlineFilter.prototype, "color", { set: function(a) { var b = ((16711680 & a) >> 16) / 255, c = ((65280 & a) >> 8) / 255, d = (255 & a) / 255; this.uniforms.outlineColor.value = { x: b, y: c, z: d, w: 1 }, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.OutlineFilter.prototype, "viewWidth", { set: function(a) { this.uniforms.pixelWidth.value = 1 / a, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.OutlineFilter.prototype, "viewHeight", { set: function(a) { this.uniforms.pixelHeight.value = 1 / a, this.dirty = !0 } }), define("outlineFilter", ["Phaser"], function(a) { return function() { return a.outlineFilter } }(this)), Phaser.Filter.InlineFilter = function(a, b, c, d, e) { Phaser.Filter.call(this, a), this.uniforms = { thickness: { type: "1f", value: d }, outlineColor: { type: "4f", value: null }, pixelWidth: { type: "1f", value: null }, pixelHeight: { type: "1f", value: null } }, this.color = e, this.viewWidth = b, this.viewHeight = c, this.passes = [this], this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "uniform sampler2D texture;", "uniform float thickness;", "uniform vec4 outlineColor;", "uniform float pixelWidth;", "uniform float pixelHeight;", "vec2 px = vec2(pixelWidth, pixelHeight);", "void main(void) {", " const float PI = 3.14159265358979323846264;", " vec4 curColor;", " vec4 ownColor = texture2D(texture, vTextureCoord);", " float maxAlpha = 255.;", " for (float angle = 0.; angle < PI * 2.; angle += " + (1 / d).toFixed(4) + ") {", " curColor = texture2D(texture, vec2(vTextureCoord.x + thickness * px.x * cos(angle), vTextureCoord.y + thickness * px.y * sin(angle)));", " maxAlpha = min(maxAlpha, curColor.a);", " }", " float resultAlpha = min(maxAlpha, ownColor.a);", " if (ownColor.a > 0.1) gl_FragColor = vec4((ownColor.rgb + outlineColor.rgb * (1. - ownColor.a)) * resultAlpha, resultAlpha);", " else gl_FragColor = ownColor;", "}"] }, Phaser.Filter.InlineFilter.prototype = Object.create(Phaser.Filter.prototype), Phaser.Filter.InlineFilter.prototype.constructor = Phaser.Filter, Object.defineProperty(Phaser.Filter.InlineFilter.prototype, "color", { set: function(a) { var b = ((16711680 & a) >> 16) / 255, c = ((65280 & a) >> 8) / 255, d = (255 & a) / 255; this.uniforms.outlineColor.value = { x: b, y: c, z: d, w: 1 }, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.InlineFilter.prototype, "viewWidth", { set: function(a) { this.uniforms.pixelWidth.value = 1 / a, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.InlineFilter.prototype, "viewHeight", { set: function(a) { this.uniforms.pixelHeight.value = 1 / a, this.dirty = !0 } }), define("inlineFilter", ["Phaser"], function(a) { return function() { return a.inlineFilter } }(this)), Phaser.Filter.ShadowFilter = function(a, b, c, d, e) { Phaser.Filter.call(this, a), this.uniforms = { thickness: { type: "1f", value: d }, outlineColor: { type: "4f", value: null }, pixelWidth: { type: "1f", value: null }, pixelHeight: { type: "1f", value: null } }, this.color = e, this.viewWidth = b, this.viewHeight = c, this.passes = [this], this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "uniform sampler2D texture;", "uniform float thickness;", "uniform vec4 outlineColor;", "uniform float pixelWidth;", "uniform float pixelHeight;", "vec2 px = vec2(pixelWidth, pixelHeight);", "void main(void) {", " const float PI = 3.14159265358979323846264;", " vec4 curColor;", " vec4 ownColor = texture2D(texture, vTextureCoord);", " float maxAlpha = 0.;", " float angle = -3.*PI/4.;", " curColor = texture2D(texture, vec2(vTextureCoord.x + thickness * px.x * cos(angle), vTextureCoord.y + thickness * px.y * sin(angle)));", " if (ownColor.a > 0.8) gl_FragColor = ownColor;", " else gl_FragColor = vec4(outlineColor.rgb, curColor.a*0.1);", "}"] }, Phaser.Filter.ShadowFilter.prototype = Object.create(Phaser.Filter.prototype), Phaser.Filter.ShadowFilter.prototype.constructor = Phaser.Filter, Object.defineProperty(Phaser.Filter.ShadowFilter.prototype, "color", { set: function(a) { var b = ((16711680 & a) >> 16) / 255, c = ((65280 & a) >> 8) / 255, d = (255 & a) / 255; this.uniforms.outlineColor.value = { x: b, y: c, z: d, w: 1 }, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.ShadowFilter.prototype, "viewWidth", { set: function(a) { this.uniforms.pixelWidth.value = 1 / a, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.ShadowFilter.prototype, "viewHeight", { set: function(a) { this.uniforms.pixelHeight.value = 1 / a, this.dirty = !0 } }), define("shadowFilter", ["Phaser"], function(a) { return function() { return a.shadowFilter } }(this)), Phaser.Filter.BevelFilter = function(a, b, c, d, e, f, g) { Phaser.Filter.call(this, a), this.uniforms = { outer: { type: "1f", value: f }, dir: { type: "1f", value: g }, thickness: { type: "1f", value: d }, outlineColor: { type: "4f", value: null }, pixelWidth: { type: "1f", value: null }, pixelHeight: { type: "1f", value: null } }, this.color = e, this.viewWidth = b, this.viewHeight = c, this.passes = [this], this.maxStep = 1 / this.uniforms.thickness.value, this.res = 3, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "uniform float outer;", "uniform float dir;", "uniform sampler2D uSampler;", "uniform vec4 filterArea;", "void main(void)", "{", " vec2 onePixel = vec2(1.0);", " vec4 color = texture2D(uSampler, vTextureCoord);", " float a1 = 0.0;", " float a2 = 0.0;", " for (float step = 0.; step < " + this.maxStep + "; step += " + this.maxStep / this.res + ") {", " a1 = a1 + texture2D(uSampler, vec2(vTextureCoord.x + step , vTextureCoord.y + step)).a;", " }", " for (float step = 0.; step < " + this.maxStep + "; step += " + this.maxStep / this.res + ") {", " a2 = a2 + texture2D(uSampler, vec2(vTextureCoord.x - step , vTextureCoord.y - step)).a;", " }", " a1 = a1/" + this.res.toFixed(4) + ";", " a2 = a2/" + this.res.toFixed(4) + ";", " color.rgb = vec3(0.5);", " float alpha = texture2D(uSampler, vTextureCoord).a;", " if (outer == 1.0){", " alpha = a1 + a2;", " color.rgb = vec3(0.5-dir*a1/6.0+dir*a2/6.0);", " }else{", " alpha = texture2D(uSampler, vTextureCoord).a;", " color.rgb = vec3(0.5+dir*a1/6.0-dir*a2/6.0);", " }", " if(alpha>0.5){", " alpha = 1.0;", " }", " gl_FragColor = vec4(color.rgb * alpha, alpha);", "}"] }, Phaser.Filter.BevelFilter.prototype = Object.create(Phaser.Filter.prototype), Phaser.Filter.BevelFilter.prototype.constructor = Phaser.Filter, Object.defineProperty(Phaser.Filter.BevelFilter.prototype, "color", { set: function(a) { var b = ((16711680 & a) >> 16) / 255, c = ((65280 & a) >> 8) / 255, d = (255 & a) / 255; this.uniforms.outlineColor.value = { x: b, y: c, z: d, w: 1 }, this.dirty = !0 } }); Object.defineProperty(Phaser.Filter.BevelFilter.prototype, "viewWidth", { set: function(a) { this.uniforms.pixelWidth.value = 1 / a, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.BevelFilter.prototype, "viewHeight", { set: function(a) { this.uniforms.pixelHeight.value = 1 / a, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.BevelFilter.prototype, "thickness", { set: function(a) { this.uniforms.thickness.value = 1 / a, this.dirty = !0 } }), define("bevelFilter", ["Phaser"], function(a) { return function() { return a.bevelFilter } }(this)), Phaser.Filter.ColorMatrix = function(a, b, c, d) { Phaser.Filter.call(this, a), this.passes = [this]; var e = ((16711680 & d) >> 16) / 255, f = ((65280 & d) >> 8) / 255, g = (255 & d) / 255; offset = 1.7, this.uniforms = { matrix: { type: "mat4", value: [offset * e, 0, 0, 0, 0, offset * f, 0, 0, 0, 0, offset * g, 0, 0, 0, 0, 1] } }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float invert;", "uniform mat4 matrix;", "uniform sampler2D uSampler;", "void main(void) {", " gl_FragColor = texture2D(uSampler, vTextureCoord) * matrix;", "}"] }, Phaser.Filter.ColorMatrix.prototype = Object.create(Phaser.Filter.prototype), Phaser.Filter.ColorMatrix.prototype.constructor = Phaser.Filter, Object.defineProperty(Phaser.Filter.ColorMatrix.prototype, "color", { set: function(a) { var b = ((16711680 & a) >> 16) / 255, c = ((65280 & a) >> 8) / 255, d = (255 & a) / 255; this.uniforms.outlineColor.value = { x: b, y: c, z: d, w: 1 }, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.ColorMatrix.prototype, "viewWidth", { set: function(a) { this.uniforms.pixelWidth.value = 1 / a, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.ColorMatrix.prototype, "viewHeight", { set: function(a) { this.uniforms.pixelHeight.value = 1 / a, this.dirty = !0 } }), define("colorMatrix", ["Phaser"], function(a) { return function() { return a.colorMatrix } }(this)), function(a, b) { function c(c, o, p) { var q = [], r = f(function a(b, c) { var d, e = [], f = typeof b; if (c && "object" == f) for (d in b) try { e.push(a(b[d], c - 1)) } catch (a) {} return e.length ? e : "string" == f ? b : b + "\0" }((o = 1 == o ? { entropy: !0 } : o || {}).entropy ? [c, g(a)] : null == c ? function() { try { var b; return h && (b = h.randomBytes) ? b = b(j) : (b = new Uint8Array(j), (i.crypto || i.msCrypto).getRandomValues(b)), g(b) } catch (b) { var c = i.navigator, d = c && c.plugins; return [+new Date, i, d, i.screen, g(a)] } }() : c, 3), q), s = new d(q), t = function() { for (var a = s.g(6), b = l, c = 0; a < m;) a = (a + c) * j, b *= j, c = s.g(1); for (; n <= a;) a /= 2, b /= 2, c >>>= 1; return (a + c) / b }; return t.int32 = function() { return 0 | s.g(4) }, t.quick = function() { return s.g(4) / 4294967296 }, t.double = t, f(g(s.S), a), (o.pass || p || function(a, c, d, f) { return f && (f.S && e(f, s), a.state = function() { return e(s, {}) }), d ? (b[k] = a, c) : a })(t, r, "global" in o ? o.global : this == b, o.state) } function d(a) { var b, c = a.length, d = this, e = 0, f = d.i = d.j = 0, g = d.S = []; for (c || (a = [c++]); e < j;) g[e] = e++; for (e = 0; e < j; e++) g[e] = g[f = o & f + a[e % c] + (b = g[e])], g[f] = b; (d.g = function(a) { for (var b, c = 0, e = d.i, f = d.j, g = d.S; a--;) b = g[e = o & e + 1], c = c * j + g[o & (g[e] = g[f = o & f + b]) + (g[f] = b)]; return d.i = e, d.j = f, c })(j) } function e(a, b) { return b.i = a.i, b.j = a.j, b.S = a.S.slice(), b } function f(a, b) { for (var c, d = a + "", e = 0; e < d.length;) b[o & e] = o & (c ^= 19 * b[o & e]) + d.charCodeAt(e++); return g(b) } function g(a) { return String.fromCharCode.apply(0, a) } var h, i = eval("this"), j = 256, k = "random", l = b.pow(j, 6), m = b.pow(2, 52), n = 2 * m, o = j - 1; if (b["seed" + k] = c, f(b.random(), a), "object" == typeof module && module.exports) { module.exports = c; try { h = require("crypto") } catch (d) {} } else "function" == typeof define && define.amd && define("seedrandom", [], function() { return c }) }([], Math), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Ground", ["./Devices/Liquid", "./Devices/Snow", "seedrandom"], function(c, d, e) { "use strict"; return function(f) { function g(b, c, d) { this.CreateLiquid = a(this.CreateLiquid, this), this.CreateSnow = a(this.CreateSnow, this), this.CreateSnows = a(this.CreateSnows, this), this.createGroundFixture = a(this.createGroundFixture, this), this.destroy = a(this.destroy, this), this.drawForeground = a(this.drawForeground, this), this.decorate = a(this.decorate, this), this.getNaviesPoints = a(this.getNaviesPoints, this), this.getTileAt = a(this.getTileAt, this), this.drawTile = a(this.drawTile, this); this.options = _.extend(this.options, d), g.__super__.constructor.call(this, b), this.game.physics.box2d.enable(this), this.body.mass = 0, this.body.clearFixtures(), this.mapData = c, this.options.width = this.mapData.width * this.mapData.tileWidth, this.options.height = this.mapData.height * this.mapData.tileHeight, this.convertTilemap(this.mapData), this.CreateSnows(this.mapData), Phaser.Physics.Box2D.worldBoundsFilterCategory = 65535, this.game.physics.box2d.setBounds(-100, -100, this.options.width + 200, this.options.height + 200, !0, !0, !0, !0, 65535, 65535), this.drawForeground(), this.applyFilter() } return b(g, f), g.prototype.options = { tileWidth: 32, tileHeight: 32, key: "map" }, g.prototype.filterPadding = 10, g.prototype.getTileRight = function(a, b, c) { return null != a.data[c] && null != a.data[c][b + 1] ? a.data[c][b + 1] : null }, g.prototype.getTileLeft = function(a, b, c) { return null != a.data[c] && null != a.data[c][b - 1] ? a.data[c][b - 1] : null }, g.prototype.getTileUp = function(a, b, c) { return null != a.data[c - 1] && null != a.data[c - 1][b] ? a.data[c - 1][b] : null }, g.prototype.getTileDown = function(a, b, c) { return null != a.data[c + 1] && null != a.data[c + 1][b] ? a.data[c + 1][b] : null }, g.prototype.drawTile = function(a, b, c, d) { var e, f, g, h; return 10 === d && (d = 0), 11 === d && (d = 1), 12 === d && (d = 2), 55 === d && (d = 5), 0 === d ? (h = Math.floor(4 * Math.random()), g = "MaskBox0000" + h) : g = "MaskBox" + d + "0000", e = this.game.cache.getFrameByName("GroundAssets", g), f = this.game.cache.getImage("GroundAssets"), b = b - (e.width - 32) / 2 + 32, c = c - (e.height - 32) / 2 + 32, a.drawImage(f, e.x, e.y, e.width, e.height, b, c, e.width, e.height) }, g.prototype.getTileAt = function(a, b) { return this.mapData.layers[0].data[b][a] }, g.prototype.convertTilemap = function(a) { var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C; for (m = 0, this.map = a, A = 0, v = 0, w = 0, C = 0, this.h = h = a.height, this.w = z = a.width, this.groundBody = c = this.body, this.groundBody.data.m_userData = "ground", this.game.level.groundBody = this.groundBody.data, n = this.game.add.bitmapData(this.options.width + 64, this.options.height + 64); C < h;) { for (A = 0, B = 0; B < z;) x = a.layers[m].data[C][B], x && x.index > -1 && (d = B * this.options.tileWidth, e = C * this.options.tileHeight, 0 === x.properties.type ? (0 === A && (v = B * x.width, w = C * x.height, A = 1), r = this.getTileRight(a.layers[m], B, C), r && 0 === r.properties.type ? (A += 1, this.drawTile(n.ctx, d, e, x.properties.type)) : (t = new box2d.b2PolygonShape, y = [], u = this.groundBody.world.pxm(c.world.mpx(1) * A), s = this.groundBody.world.pxm(c.world.mpx(1)), y.push(new box2d.b2Vec2(0, 0)), y.push(new box2d.b2Vec2(-u, 0)), y.push(new box2d.b2Vec2(-u, -s)), y.push(new box2d.b2Vec2(0, -s)), _.each(y, function(a) { return a.x -= c.world.pxm(v), a.y -= c.world.pxm(w) }), t.Set(y), A = 0, this.createGroundFixture(t), this.drawTile(n.ctx, d, e, x.properties.type))) : 5 === x.properties.type || 6 === x.properties.type || 7 === x.properties.type || 55 === x.properties.type ? (0 === A && (v = B * x.width, w = C * x.height, A = 1), r = this.getTileRight(a.layers[m], B, C), r && r.properties.type === x.properties.type ? (A > 1 && this.drawTile(n.ctx, d, e, x.properties.type), A += 1) : (t = this.createGroundShape(8, new box2d.b2Vec2(c.world.pxm(d) - A + 1, c.world.pxm(e))), this.createGroundFixture(t), this.drawTile(n.ctx, d - c.world.mpx(A - 1), e, 8), t = this.createGroundShape(9, new box2d.b2Vec2(c.world.pxm(d), c.world.pxm(e))), this.createGroundFixture(t), this.drawTile(n.ctx, d, e, 9), t = new box2d.b2PolygonShape, y = [], u = this.groundBody.world.pxm(c.world.mpx(1) * A), s = this.groundBody.world.pxm(c.world.mpx(1)), y.push(new box2d.b2Vec2(-1, -s / 2 + .05)), y.push(new box2d.b2Vec2(1 - u, -s / 2 + .05)), y.push(new box2d.b2Vec2(1 - u, -s)), y.push(new box2d.b2Vec2(-1, -s)), _.each(y, function(a) { return a.x -= c.world.pxm(v), a.y -= c.world.pxm(w) }), t.Set(y), this.createGroundFixture(t), this.CreateLiquid(x.properties.type, B + 1, C, A), A = 0)) : -1 === x.properties.type ? this.drawTile(n.ctx, d, e, 0) : (t = this.createGroundShape(x.properties.type, new box2d.b2Vec2(c.world.pxm(d), c.world.pxm(e))), this.createGroundFixture(t), this.drawTile(n.ctx, d, e, x.properties.type))), B++; C++ } for (f = this.game.make.bitmapData(this.options.width + 64, this.options.height + 64), g = this.game.cache.getFrameByName("TempleAssets", "ForeGround0000"), j = this.game.cache.getImage("TempleAssets"), i = l = 0, p = Math.ceil(this.options.width / 256); 0 <= p ? l <= p : l >= p; i = 0 <= p ? ++l : --l) for (k = o = 0, q = Math.ceil(this.options.height / 256); 0 <= q ? o <= q : o >= q; k = 0 <= q ? ++o : --o) B = 256 * i, C = 256 * k, f.ctx.drawImage(j, g.x, g.y, g.width, g.height, B, C, g.width, g.height); return b = this.game.add.bitmapData(this.options.width + 64, this.options.height + 64), b.alphaMask(f, n), this.bmd = b, this.maskBmd = n, this.foregroundBmd = f, c }, g.prototype.getNaviesPoints = function() { var a, b, c, d, f, g, h, i, j, k, l, m; for (i = this.map, d = this.h, m = this.w, g = 0, b = this.groundBody, this.rng = e("ASDFA"), function(a) { return function() { return Math.round(3 * a.rng() + 3.5) } }(this), j = function(a) { return function(a, b) { return null != i.layers[g].data[a] && null != i.layers[g].data[a][b] ? i.layers[g].data[a][b] : null } }(), l = [{ x: Math.floor(d / 4), y: Math.floor(d / 4) }, { x: Math.floor(3 * d / 4), y: Math.floor(d / 4) }, { x: Math.floor(d / 4), y: Math.floor(3 * d / 4) }, { x: Math.floor(3 * d / 4), y: Math.floor(d / 4) }], a = function(a) { return function(a) { return a > 0 ? 1 : a < 0 ? -1 : 0 } }(), f = 0, h = l.length; f < h; f++) for (k = l[f], k.valid = !1, c = { x: a(Math.random() - .5), y: a(Math.random() - .5) }; k.x > 0 && k.x < m && k.y > 0 && k.y < d;) { if (null == j(k.y, k.x).properties.type) { k.valid = !0; break } k.x += c.x, k.y += c.y } return l = l.filter(function(a) { return a.valid }), _.each(l, function(a) { return a.x *= b.world.mpx(1), a.y *= b.world.mpx(1) }), l }, g.prototype.decorate = function(a) { var b, c, d, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J; for (s = this.map, k = this.h, H = this.w, o = 0, c = this.groundBody, this.rng = e("ASDFA"), z = function(a) { return function() { return Math.round(3 * a.rng() + 3.5) } }(this), n = 0, q = a.length; n < q; n++) v = a[n], null != v.ocupy && v.ocupy(s.layers[o].data); for (t = function(a) { return function(a, b) { return null != s.layers[o].data[a] && null != s.layers[o].data[a][b] ? s.layers[o].data[a][b] : null } }(), J = 1, f = [], g = new Phaser.RenderTexture(this.game, this.options.width + 64, this.options.height + 64, "decosTexture", void 0, 1); J < k;) { for (0, I = 1; I < H - 1;) { for (F = s.layers[o].data[J][I], l = x = 0; x <= 6; l = ++x) { for (j = null, m = y = 0; y <= 6; m = ++y) if (h = Math.max(Math.min(I + l, H - 2), 0), i = Math.max(Math.min(J + m, k - 1), 0), null != t(i, h).properties.type && !t(i, h).ocupied && f.indexOf(t(i, h)) < 0 && f.indexOf(t(i - 1, h)) < 0 && f.indexOf(t(i, h + 1)) < 0 && f.indexOf(t(i - 1, h + 1)) < 0 && f.indexOf(t(i, h - 1)) < 0 && f.indexOf(t(i - 1, h - 1)) < 0) { j = s.layers[o].data[i][h], f.push(j); break } if (null != j) break } I += z() } J += z() } for (w = 0, l = E = 0, r = f.length; E < r; l = ++E) d = f[l], F = s.layers[o].data[d.y][d.x], b = this.getTileUp(s.layers[o], d.x, d.y), A = this.getTileRight(s.layers[o], d.x, d.y), p = this.getTileLeft(s.layers[o], d.x, d.y), G = null, B = 0, C = [1, 1], u = 1, 0 === F.properties.type && null != b && null != b.properties.type && null != A && null != A.properties.type && null != p && null != p.properties.type ? (G = "O_" + (w % 2 + 1), B = "1" === w ? Math.floor(3 * Math.random()) * Math.PI / 2 : 0) : 0 !== F.properties.type || null != b && null != b.properties.type ? 0 === F.properties.type ? (G = "X", B = Math.floor(3 * Math.random()) * Math.PI / 2) : 1 === F.properties.type ? G = "A" : 2 === F.properties.type ? (G = "A", C = [-1, 1]) : 3 === F.properties.type ? G = "V" : 4 === F.properties.type && (G = "V", C = [-1, 1]) : (G = "T_" + (w % 3 + 1), u = 2 * Math.round(Math.random()) - 1), w++, null != G && (D = this.game.make.sprite((d.x + .5) * c.world.mpx(1), (d.y + .5) * c.world.mpx(1), "TempleAssets", "decor_" + G + "0000"), D.rotation = B, D.scale.set(u * C[0], C[1]), D.anchor.set(.5), g.renderXY(D, D.x + 32, D.y + 32, !1), D.destroy()); return this.game.cache.addRenderTexture("decosTexture", g), D = this.game.make.sprite(-32, -32, this.game.cache.getRenderTexture("decosTexture").texture), this.game.layers.decorations.addChild(D), this.game.layers.decorations.cacheAsBitmap = !0 }, g.prototype.drawForeground = function() { return this.image = this.game.make.image(0, 0, this.bmd) }, g.prototype.applyFilter = function() { var a, b, c, d, e, f, g; return a = this.game.make.tileSprite(0, 0, this.options.width, this.options.height, "TempleAssets", "BackGround0000"), this.game.layers.background.addChild(a), a.cacheAsBitmap = !0, g = this.options.width + 64, b = this.options.height + 64, c = new Phaser.Filter.InlineFilter(this.game, g, b, 3, 16711680), c.init(), d = new Phaser.Filter.OutlineFilter(this.game, g, b, 3.5, 0), d.init(), f = new Phaser.Filter.ShadowFilter(this.game, g, b, 8, 0), f.init(), this.image.filters = [c, d, f], e = new Phaser.RenderTexture(this.game, g, b, "groundTexture", void 0, 1), this.game.renderer.renderSession.resolution = 1, e.renderRawXY(this.image, 0, 0, !0), this.game.renderer.renderSession.resolution = this.game.resolution, this.game.cache.addRenderTexture("groundTexture", e), this.sprite = this.game.make.sprite(-32, -32, this.game.cache.getRenderTexture("groundTexture").texture), this.game.layers.ground.addChild(this.sprite), this.sprite.cacheAsBitmap = !0, this.image.destroy(), this.bmd.destroy(), this.maskBmd.destroy(), this.foregroundBmd.destroy() }, g.prototype.destroy = function() { return this.sprite.destroy(), this.image.destroy(), this.bmd.destroy(), this.maskBmd.destroy(), this.foregroundBmd.destroy(), g.__super__.destroy.call(this) }, g.prototype.createGroundFixture = function(a, b, c) { var d, e; return e = new box2d.b2FixtureDef, e.shape = a, e.filter.categoryBits = 1, e.filter.maskBits = 4369, e.friction = .8, e.isSensor = b, e.userData = c, d = this.groundBody.data.CreateFixture(e), d.id = this.groundBody.world.getNextFixtureId() }, g.prototype.createGroundShape = function(a, b) { var c, d, e, f; return e = 1, d = 1, c = new box2d.b2PolygonShape, 0 === a || 10 === a ? (f = [], f.push(new box2d.b2Vec2(0, 0)), f.push(new box2d.b2Vec2(-e, 0)), f.push(new box2d.b2Vec2(-e, -d)), f.push(new box2d.b2Vec2(0, -d))) : 1 === a || -2 === a || 11 === a ? (f = [], f.push(new box2d.b2Vec2(-e, 0)), f.push(new box2d.b2Vec2(-e, -d)), f.push(new box2d.b2Vec2(0, -d))) : 2 === a || 12 === a ? (f = [], f.push(new box2d.b2Vec2(0, 0)), f.push(new box2d.b2Vec2(-e, -d)), f.push(new box2d.b2Vec2(0, -d))) : 3 === a ? (f = [], f.push(new box2d.b2Vec2(0, 0)), f.push(new box2d.b2Vec2(-e, 0)), f.push(new box2d.b2Vec2(-e, -d))) : 4 === a ? (f = [], f.push(new box2d.b2Vec2(0, 0)), f.push(new box2d.b2Vec2(-e, 0)), f.push(new box2d.b2Vec2(0, -d))) : 5 === a || 6 === a || 7 === a ? (f = [], f.push(new box2d.b2Vec2(0, -d / 2)), f.push(new box2d.b2Vec2(-e, -d / 2)), f.push(new box2d.b2Vec2(-e, -d)), f.push(new box2d.b2Vec2(0, -d))) : 8 === a ? (f = [], f.push(new box2d.b2Vec2(0, 0)), f.push(new box2d.b2Vec2(-e - .3, -d / 2)), f.push(new box2d.b2Vec2(-e - .3, -d)), f.push(new box2d.b2Vec2(0, -d))) : 9 === a && (f = [], f.push(new box2d.b2Vec2(.3, -d / 2)), f.push(new box2d.b2Vec2(-e, 0)), f.push(new box2d.b2Vec2(-e, -d)), f.push(new box2d.b2Vec2(.3, -d))), _.each(f, function(a) { return a.x -= b.x, a.y -= b.y }), c.Set(f), c }, g.prototype.CreateSnows = function(a) { var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z; for (c = a.layers[0].data, j = c.length, i = c[0].length, v = [], console.log("WE"), d = g = 0, m = j; 0 <= m ? g <= m : g >= m; d = 0 <= m ? ++g : --g) for ([], e = k = 0, n = i; 0 <= n ? k <= n : k >= n; e = 0 <= n ? ++k : --k) d >= 0 && e >= 0 && d < j && e < i && (x = c[d][e], 10 === x.properties.type ? void 0 === u || null === u ? u = { x: d, y: e, length: 1, dir: "WE" } : u.length += 1 : null != u && (v.push(u), u = null)); for (console.log("SE"), f = l = 0, o = i + j; 0 <= o ? l <= o : l >= o; f = 0 <= o ? ++l : --l) for ([], d = w = 0, p = f; 0 <= p ? w <= p : w >= p; d = 0 <= p ? ++w : --w) e = f - d, d >= 0 && e >= 0 && d < j && e < i && (x = c[d][e], 11 === x.properties.type ? null == u ? u = { x: d, y: e, length: 1, dir: "SE" } : u.length += 1 : null != u && (v.push(u), u = null)); for (console.log("SW"), f = y = q = -Math.max(i, j), r = Math.max(i, j); q <= r ? y <= r : y >= r; f = q <= r ? ++y : --y) for ([], d = z = 0, s = j; 0 <= s ? z <= s : z >= s; d = 0 <= s ? ++z : --z) e = f + d, d >= 0 && e >= 0 && d < j && e < i && (x = c[d][e], 12 === x.properties.type ? null == u ? u = { x: d, y: e, length: 1, dir: "SW" } : u.length += 1 : null != u && (v.push(u), u = null)); for (console.log(v), b = 0, h = v.length; b < h; b++) t = v[b], this.CreateSnow(this, t) }, g.prototype.CreateSnow = function(a, b) { return new d(this.game, a, b) }, g.prototype.CreateLiquid = function(a, b, d, e) { return new c(this.game, b - e, d, { type: a, width: e }) }, g }(Phaser.Sprite) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Common/TouchButton", ["./Button", "Phaser"], function(c) { "use strict"; return function(c) { function d(b, c, e, f, g, h) { this.onUp = a(this.onUp, this), this.onDown = a(this.onDown, this), this.setState = a(this.setState, this); var i; "up" === f ? i = "FingerRingJump0000" : "right" === f ? i = "FingerRingRight0000" : "left" === f && (i = "FingerRingLeft0000"), d.__super__.constructor.call(this, b, c, e, "PopupAssets", i, h), this.sprite.anchor.set(.5), this.anchor.set(.5), this.sprite.tint = "fb" === g ? 16757917 : 10347007, this.alpha = .7, this.initialFrame = i, b.TouchManager.register(this, "touchstart", function(a) { return function() { return console.log("down"), a.isDown = !0, a.alpha = .3, a.onDown() } }(this)), b.TouchManager.register(this, "touchend", function(a) { return function() { return console.log("up"), a.isDown = !1, a.alpha = .5, a.onUp() } }(this)), this.hitArea = new PIXI.Circle(0, 0, this.sprite.width) } return b(d, c), d.prototype.customEvents = !0, d.prototype.setState = function(a) { return this.sprite.frameName = "up" === a ? "FingerRingJump0000" : this.initialFrame, this.sprite.cacheAsBitmap = !0 }, d.prototype.onDown = function() {}, d.prototype.onUp = function() {}, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/CharCursors", ["../Common/TouchButton", "Phaser"], function(c) { "use strict"; return function(d) { function e(b, c) { this.hide = a(this.hide, this), this.show = a(this.show, this), this.updateDowns = a(this.updateDowns, this), this.onSettingChange = a(this.onSettingChange, this), this.destroy = a(this.destroy, this), e.__super__.constructor.call(this), this.game = b, this.id = c, this.active = !1, b.settingsSignal.add(this.onSettingChange), this.setup() } return b(e, d), e.prototype.destroy = function() { return this.game.settingsSignal.remove(this.onSettingChange) }, e.prototype.onSettingChange = function(a) { if ("controls" === a) return this.buttons && (this.buttons.destroy(), this.buttons = null), this.setup() }, e.prototype.isOnDevice = function() { return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) }, e.prototype.setup = function() { var a, b, d, e, f, g; return "dual" === this.game.settings.controls ? (a = .35 * window.devicePixelRatio, b = this.buttons = this.game.make.sprite(0, 0), d = new c(this.game, 0, 0, "left", this.id), d.scale.set(a), e = new c(this.game, 0, 0, "right", this.id), e.scale.set(a), f = new c(this.game, 0, 0, "up", this.id), f.scale.set(a), this.updateDowns = g = function(a) { return function() { return a.right.isDown = a.right.buttonDown, a.left.isDown = a.left.buttonDown, a.up.isDown = a.up.buttonDown, a.active = a.up.isDown || a.left.isDown || a.right.isDown } }(this), d.onDown = function(a) { return function() { return a.left.buttonDown = !0, g() } }(this), e.onDown = function(a) { return function() { return a.right.buttonDown = !0, g() } }(this), f.onDown = function(a) { return function() { return a.up.buttonDown = !0, g() } }(this), d.onUp = function(a) { return function() { return a.left.buttonDown = !1, g() } }(this), e.onUp = function(a) { return function() { return a.right.buttonDown = !1, g() } }(this), f.onUp = function(a) { return function() { return a.up.buttonDown = !1, g() } }(this), b.addChild(d), b.addChild(e), b.addChild(f), this.layoutContent = function(c) { return function() { var g; return d.x = -1.2 * a * d.sprite.width / 2, e.x = 1.2 * a * e.sprite.width / 2, f.y = -1.2 * a * f.sprite.width / 2, g = "wg" === c.id ? { x: -c.game.realWidth / 2 + 2 * d.sprite.width / 3, y: c.game.realHeight / 2 - d.sprite.height / 4 } : { x: c.game.realWidth / 2 - 2 * d.sprite.width / 3, y: c.game.realHeight / 2 - d.sprite.height / 4 }, b.x = g.x, b.y = g.y } }(this), this.layoutContent(), this.game.layers.ui.addChild(b), this.left = { isDown: !1 }, this.right = { isDown: !1 }, this.up = { isDown: !1 }) : "single" === this.game.settings.controls || this.isOnDevice() ? (a = .5 * window.devicePixelRatio, b = this.buttons = this.game.make.group(0, 0), d = new c(this.game, 0, 0, "left", this.id), e = new c(this.game, 0, 0, "right", this.id), d.scale.set(a), e.scale.set(a), this.layoutContent = function(b) { return function() { return d.x = -b.game.realWidth / 2 + .7 * a * d.sprite.width / 2, d.y = b.game.realHeight / 2 - .7 * a * d.sprite.height / 2, e.x = b.game.realWidth / 2 - .7 * a * e.sprite.width / 2, e.y = b.game.realHeight / 2 - .7 * a * e.sprite.height / 2 } }(this), this.layoutContent(), this.updateDowns = g = function(a) { return function() { return a.left.buttonDown && a.right.buttonDown ? (Date.now() - a.lastTouch < 80 && (a.right.isDown = a.right.lastDown = !1, a.left.isDown = a.left.lastDown = !1), a.up.isDown = !0) : a.up.isDown = !1, a.left.buttonDown && !a.right.buttonDown ? (a.left.lastDown = !0, a.right.lastDown = !1) : a.right.buttonDown && !a.left.buttonDown && (a.right.lastDown = !0, a.left.lastDown = !1), a.left.lastDown && a.left.buttonDown ? (a.left.isDown = !0, a.right.isDown = !1, e.setState("up"), d.setState("left")) : a.right.lastDown && a.right.buttonDown ? (a.right.isDown = !0, a.left.isDown = !1, d.setState("up"), e.setState("right")) : (a.right.isDown = !1, a.left.isDown = !1, d.setState("left"), e.setState("right")), a.active = a.buttons.visible && (a.up.isDown || a.left.isDown || a.right.isDown), a.lastTouch = Date.now() } }(this), d.onDown = function(a) { return function() { return a.left.buttonDown = !0, g() } }(this), e.onDown = function(a) { return function() { return a.right.buttonDown = !0, g() } }(this), d.onUp = function(a) { return function() { return a.left.buttonDown = !1, g() } }(this), e.onUp = function(a) { return function() { return a.right.buttonDown = !1, g() } }(this), "fb" === this.id && (b.visible = !1), b.addChild(d), b.addChild(e), this.game.layers.ui.addChild(b), this.left = { isDown: !1 }, this.right = { isDown: !1 }, this.up = { isDown: !1 }, this.up.visible = !1) : "wg" === this.id ? (this.up = this.game.input.keyboard.addKey(Phaser.Keyboard.W), this.left = this.game.input.keyboard.addKey(Phaser.Keyboard.A), this.right = this.game.input.keyboard.addKey(Phaser.Keyboard.D)) : (this.up = this.game.input.keyboard.addKey(Phaser.Keyboard.UP), this.left = this.game.input.keyboard.addKey(Phaser.Keyboard.LEFT), this.right = this.game.input.keyboard.addKey(Phaser.Keyboard.RIGHT)), this }, e.prototype.updateDowns = function() {}, e.prototype.show = function() { return this.buttons.visible = !0 }, e.prototype.hide = function() { return this.buttons.visible = !1 }, e }(Phaser.Signal) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/character", ["./CharCursors", "Phaser"], function(c) { "use strict"; return function(d) { function e(b, d, f, g) { this.drawDarkMask = a(this.drawDarkMask, this), this.update = a(this.update, this), this.setFriction = a(this.setFriction, this), this.setOnIce = a(this.setOnIce, this), this.animateStairs = a(this.animateStairs, this), this.destroy = a(this.destroy, this), this._doKill = a(this._doKill, this), this.kill = a(this.kill, this), this.liquidTouched = a(this.liquidTouched, this); var h, i, j, k, l, m, n, o, p, q, r, s; return this.maxSpeed = this.defaultMaxSpeed, e.__super__.constructor.call(this, b), d += this.game.physics.box2d.mpx(1), f -= this.game.physics.box2d.mpx(1), this.data = { char: g, diamonds: 0, silverDiamond: 0 }, this.sprite = this.game.make.sprite(d, f, "CharAssets", "_default0000"), this.sprite.character = this, this.sprite.scale.x = this.spriteScale, this.sprite.scale.y = this.spriteScale, this.game.layers.chars.addChild(this.sprite), this.game.physics.box2d.enable(this.sprite), this.body = this.sprite.body, this.body.clearFixtures(), this.body.fixedRotation = !0, this.body.data.m_userData = "pers", this.body.data.SetBullet(!0), this.signal = new Phaser.Signal, m = function(a) { return function(b, c, d) { var e, f, g; return e = new box2d.b2CircleShape(b), e.m_p.SetXY(c[0], c[1]), g = new box2d.b2FixtureDef, g.shape = e, g.density = 0, g.filter.categoryBits = 16, g.filter.maskBits = 4353, g.friction = d, f = a.body.data.CreateFixture(g), f.id = a.body.world.getNextFixtureId(), f } }(this), n = function(a) { return function(b, c, d, e) { var f, g, h, i, j; return j = [], f = a.dr, j.push(new box2d.b2Vec2(b - f, d)), j.push(new box2d.b2Vec2(-b + f, d)), j.push(new box2d.b2Vec2(c - f, e)), j.push(new box2d.b2Vec2(-c + f, e)), i = new box2d.b2PolygonShape, i.Set(j), h = new box2d.b2FixtureDef, h.shape = i, h.friction = 0, h.density = 1.4, h.filter.categoryBits = 16, h.filter.maskBits = 4353, g = a.body.data.CreateFixture(h), g.id = a.body.world.getNextFixtureId(), g } }(this), p = this.r1, q = this.r2, r = this.y1, s = this.y2, h = new box2d.b2CircleShape(.1), h.m_p.SetXY(0, 0), i = new box2d.b2FixtureDef, i.shape = h, i.density = 0, i.filter.categoryBits = 4096, i.filter.maskBits = 4096, i.filter.groupIndex = -1, i.friction = 0, this.portalSensor = this.body.data.CreateFixture(i), this.portalSensor.id = this.body.world.getNextFixtureId(), this.portalSensor.m_userData = { "portal-sensor": !0 }, m(p, [0, r], 0), this.feetSensor = m(q, [0, s], this.feetFriction), n(p, q, r, s), this.feetSensor.m_userData = "feet", this.feetSensor.contacts = [], o = "fb" === g ? "fire" : "water", this.prefix = o, this.bodySprite = b.make.sprite(0, 0, "CharAssets", "_default0000"), this.sprite.addChild(this.bodySprite), l = b.make.sprite(0, 0, "CharAssets"), l.anchor.set(.5), l.animations.add("running", Phaser.Animation.generateFrameNames(o + "_legs_running", 0, 7, "", 4), 30, !0), "wg" === this.data.char && l.animations.add("onice", Phaser.Animation.generateFrameNames(o + "_legs_running", 0, 7, "", 4), 10, !0), l.frameName = o + "_legs_idle0000", this.bodySprite.addChild(l), j = b.make.sprite(0, 0, "CharAssets"), j.animations.add("idle", Phaser.Animation.generateFrameNames(o + "_head_idle", 0, 29, "", 4), 30, !0), j.animations.add("falling", Phaser.Animation.generateFrameNames(o + "_head_falling", 0, 4, "", 4), 30, !0), j.animations.add("jumping", Phaser.Animation.generateFrameNames(o + "_head_jumping", 0, 10, "", 4), 30, !0), j.animations.add("rising", Phaser.Animation.generateFrameNames(o + "_head_rising", 0, 4, "", 4), 30, !0), j.anchor.set(.5), j.animations.play("idle"), this.bodySprite.addChild(j), k = b.make.sprite(0, 0, "CharAssets"), k.anchor.set(.5), k.animations.add("loop", Phaser.Animation.generateFrameNames(o + "_ice_legs", 0, 4, "", 4), 10, !0), k.visible = !1, this.bodySprite.addChild(k), this.bodyParts = {}, this.bodyParts.legs = l, this.bodyParts.ice = k, this.bodyParts.head = j, this.bodySprite.hitArea = new PIXI.Circle(0, 0, .65 * l.height), this.body.setFixtureContactCallback(this.feetSensor, function(a) { return function(b, c, d, e, f, g) { var h; if (e.m_isSensor) { if (null != e.m_userData && "liquid_death" === e.m_userData.type) return f ? (a.liquidTouched(e.m_userData.liquidType), a.isOnLiquid = !0) : a.isOnLiquid = !1 } else { if (f && g.m_manifold.localNormal.Length() > 0) return a.feetSensor.contacts.push(g); if ((h = a.feetSensor.contacts.indexOf(g)) >= 0) return a.feetSensor.contacts.splice(h, 1) } } }(this), this), this.cursors = new c(this.game, g), this.sprite.char = this.char = g, this } return b(e, d), e.prototype.facing = "left", e.prototype.feetFriction = .5, e.prototype.r1 = .48, e.prototype.r2 = .2, e.prototype.dr = .03, e.prototype.y1 = .2, e.prototype.y2 = -.9, e.prototype.spriteScale = .95, e.prototype.jumpImpulse = 1, e.prototype.jumpVelocity = 15.5, e.prototype.jumpIceVelocity = 10, e.prototype.runForce = 50, e.prototype.floatForce = 30, e.prototype.defaultMaxSpeed = 8.5, e.prototype.waterIceMaxSpeed = 2, e.prototype.absoluteMaxSpeed = 40, e.prototype.liquidTouched = function(a) { if (7 === a || "wg" === this.char && 6 === a || "fb" === this.char && 5 === a) return this.kill() }, e.prototype.kill = function() { if (!this.dying) return this.dying = !0, _.delay(this._doKill, 0) }, e.prototype._doKill = function() { var a, b; return this.game.level.sounds.death.play(), this.game.level.sounds.levelMusic.stop(), this.game.level.sounds.levelMusicOver.play(), b = this.game.make.sprite(0, -.7 * this.game.physics.box2d.mpx(1), "CharAssets"), a = b.animations.add("play", Phaser.Animation.generateFrameNames("death_smoke", 0, 45, "", 4), 30, !1), this.body.data.GetLinearVelocity().x < 0 && (b.scale.x = -1), b.animations.play("play"), b.anchor.set(.5), a.onComplete.add(function(a) { return function() { return a.sprite.visible = !1, a.isDead = !0, a.signal.dispatch() } }(this)), this.sprite.addChild(b), this.dead = !0 }, e.prototype.destroy = function() { return e.__super__.destroy.apply(this, arguments), this.cursors.destroy() }, e.prototype.animateStairs = function(a) { var b; return this.bodyParts.head.visible = !1, this.bodyParts.legs.visible = !1, b = this.game.make.sprite(0, 0, "CharAssets"), b.animations.add("up", Phaser.Animation.generateFrameNames(this.prefix + "_stairs", 0, 30, "", 4), 25, !1), b.anchor.set(.5, 1), this.game.add.tween(b.scale).to({ x: .8, y: .8 }, 360, Phaser.Easing.Linear.None, !0, 0), this.sprite.addChild(b), this.body.x = a.pos.x, this.body.y = a.pos.y + 4, b.animations.play("up") }, e.prototype.setOnIce = function(a) { return a && !this.isOnIce ? (this.isOnIce = !0, this.setFriction()) : !a && this.isOnIce ? (this.isOnIce = !1, this.setFriction()) : void 0 }, e.prototype.setFriction = function() { var a, b; for ("fb" === this.data.char && (this.isOnIce ? (this.feetSensor.m_friction = 0, this.maxSpeed = this.defaultMaxSpeed) : (this.feetSensor.m_friction = this.feetFriction, this.maxSpeed = this.defaultMaxSpeed)), "wg" === this.data.char && (this.isOnIce ? (this.feetSensor.m_friction = .7, this.maxSpeed = this.waterIceMaxSpeed) : (this.feetSensor.m_friction = this.feetFriction, this.maxSpeed = this.defaultMaxSpeed)), this.feetSensor.Refilter(), a = this.feetSensor.m_body.m_contactList, b = []; null != a;) a.contact.ResetFriction(), b.push(a = a.next); return b }, e.prototype.update = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t; if (!(null != this.game.level && this.game.level.ended || this.game.physics.box2d.paused)) { if (this.dying) return this.bodySprite.visible = !1, this.bodyParts.legs.visible = !1, this.bodyParts.head.visible = !1, void(this.dead && this.body.data.SetLinearVelocity(new box2d.b2Vec2(0, 0))); if (k = this.jumpImpulse, this.jumpVelocity, q = this.runForce, h = this.floatForce, this.defaultMaxSpeed, (this.cursors.right.isDown || this.cursors.left.isDown) && this.isOnLiquid ? this.waterplaying || (this.waterplaying = !0, this.game.level.sounds.waterSteps.loop = !0, this.game.level.sounds.waterSteps.volume = .5, this.game.level.sounds.waterSteps.play()) : !0 === this.waterplaying && (this.waterplaying = !1, this.game.level.sounds.waterSteps.stop()), (this.cursors.right.isDown || this.cursors.left.isDown) && this.isOnIce ? this.iceplaying || (this.iceplaying = !0, this.game.level.sounds["iceSteps_" + this.data.char].loop = !0, this.game.level.sounds["iceSteps_" + this.data.char].play()) : !0 === this.iceplaying && (this.iceplaying = !1, this.game.level.sounds["iceSteps_" + this.data.char].stop()), j = new box2d.b2Vec2(0, -1), this.feetSensor.contacts.length > 0 && (_.each(this.feetSensor.contacts, function(a) { return function(a) { return a.m_normal || (a.m_normal = new box2d.b2Vec2), a.m_fixtureA.m_body.GetWorldVector(a.m_manifold.localNormal, a.m_normal) } }()), this.feetSensor.contacts = _.sortBy(this.feetSensor.contacts, function(a) { return function(a) { return a.m_normal.Dot(j) } }()), d = this.feetSensor.contacts[0], l = d.m_normal), g = this.game.time.elapsed / 1e3, e = 130 * g / this.currentRunForce, this.body.data.GetLinearVelocity().Length() < 1 && this.currentRunForce > .5 * q && (e = q), this.cursors.left.isDown ? null != d ? (this.currentRunForce < q && (this.currentRunForce = Math.min(this.currentRunForce + e, q)), n = l.y > .6 ? l.y : 0, i = l.Clone().SelfCrossSV(-this.currentRunForce).SelfMul(Math.max(0, Math.sqrt(n))), n > .6 && i.y >= 0 && i.y < 20 && (i.y += 20)) : i = new box2d.b2Vec2(h, 0) : this.cursors.right.isDown ? null != d ? (this.currentRunForce < q && (this.currentRunForce = Math.min(this.currentRunForce + e, q)), n = l.y > .6 ? l.y : 0, i = l.Clone().SelfCrossSV(this.currentRunForce).SelfMul(Math.max(0, Math.sqrt(n))), n > .6 && i.y >= 0 && i.y < 20 && (i.y += 20)) : i = new box2d.b2Vec2(-h, 0) : (this.currentRunForce = .475 * q, this.isOnIce && "wg" === this.data.char ? (i = new box2d.b2Vec2(20 * -this.body.data.GetLinearVelocity().x, 0), this.body.data.SetLinearVelocity(new box2d.b2Vec2(0, 0))) : i = new box2d.b2Vec2(7 * -this.body.data.GetLinearVelocity().x, 0)), this.prohibitJump && !this.cursors.up.isDown && (this.prohibitJump = !1), !this.prohibitJump && this.cursors.up.isDown && (null != l && l.y > .2 || this.feetSensor.contacts.length >= 2)) { for (this.body.data.ApplyLinearImpulse({ x: 0, y: k }, { x: 0, y: 0 }), this.isOnIce ? "fb" === this.data.char ? l.y > .9 ? (t = new box2d.b2Vec2(this.body.data.GetLinearVelocity().x, 3 * l.y), this.body.data.SetLinearVelocity(t)) : (t = new box2d.b2Vec2(3 * l.x, 3 * l.y), this.body.data.SetLinearVelocity(t)) : (t = new box2d.b2Vec2(this.body.data.GetLinearVelocity().x, this.jumpIceVelocity), this.body.data.SetLinearVelocity(t)) : (t = l.y > .65 ? new box2d.b2Vec2(this.body.data.GetLinearVelocity().x, this.jumpVelocity) : new box2d.b2Vec2(this.body.data.GetLinearVelocity().x, Math.sqrt(Math.sqrt(l.y)) * this.jumpVelocity), t.Length() > this.jumpVelocity && t.SelfNormalize().SelfMul(this.jumpVelocity), this.body.data.SetLinearVelocity(t), f = !0), o = this.feetSensor.m_body.m_contactList, p = new box2d.b2Vec2(0, -1), p; null != o;) c = o.contact.m_fixtureA.m_body, "reactable" === c.m_userData && c.ApplyLinearImpulse(p, { x: 0, y: 0 }, !0), o = o.next; this.prohibitJump = !0, "wg" === this.char ? this.game.level.sounds.jump_wg.play() : this.game.level.sounds.jump_fb.play() } null != i && (f && (i.y = 0, f = !1), this.isOnIce && ("fb" === this.data.char && i.SelfMul(.2), "wg" === this.data.char && i.SelfMul(1), s = this.body.data.GetLinearVelocity(), s.Length() > this.maxSpeed && (s.SelfNormalize().SelfMul(this.maxSpeed), this.body.data.SetLinearVelocity(s))), s = this.body.data.GetLinearVelocity(), i.x > 0 && s.x < this.maxSpeed && this.body.data.ApplyForce(i, { x: 0, y: 0 }), i.x < 0 && s.x > -this.maxSpeed && this.body.data.ApplyForce(i, { x: 0, y: 0 })), s.Length() > this.absoluteMaxSpeed && (s.SelfNormalize().SelfMul(this.absoluteMaxSpeed), this.body.data.SetLinearVelocity(s)), s = this.body.data.GetLinearVelocity(), m = s.Clone().SelfNormalize(), a = Math.atan2(Math.max(-.333, m.y), m.x), null != l ? this.cursors.left.isDown ? (b = "jumping", r = -1, a = Math.atan2(l.y, l.x) - Math.PI / 2, a = Math.max(Math.min(a, .25 * Math.PI), .1 * -Math.PI)) : this.cursors.right.isDown ? (b = "jumping", r = 1, a = Math.atan2(l.y, l.x) - Math.PI / 2, a = Math.max(Math.min(a, .1 * Math.PI), .25 * -Math.PI)) : (b = "idle", r = 1, a = 0) : s.x > 4 ? (b = "jumping", r = -1, a = a) : s.x < -4 ? (b = "jumping", r = 1, a += Math.PI) : s.y > 3 ? (b = "rising", r = 1, a = 0) : s.y < -3 ? (b = "falling", r = 1, a = 0) : this.cursors.left.isDown ? (b = "jumping", r = -1, a = this.bodyParts.head.rotation) : this.cursors.right.isDown ? (b = "jumping", r = 1, a = this.bodyParts.head.rotation) : (b = "idle", r = 1, a = 0), this.bodyParts.head.scale.set(r, 1), this.bodyParts.head.rotation = a, this.bodyParts.head.animations.play(b), "rising" === b ? this.bodyParts.legs.renderOrderID < this.bodyParts.head.renderOrderID && (this.sprite.removeChild(this.bodyParts.legs, !1, !0), this.sprite.addChild(this.bodyParts.legs, !0)) : this.bodyParts.legs.renderOrderID > this.bodyParts.head.renderOrderID && (this.sprite.removeChild(this.bodyParts.head, !1, !0), this.sprite.addChild(this.bodyParts.head, !0)), "jumping" === b ? (-1 === r && "left" !== this.facing && (this.bodyParts.legs.scale.set(-1, 1), this.bodyParts.ice.scale.set(-1, 1), this.facing = "left"), 1 === r && "right" !== this.facing && (this.bodyParts.legs.scale.set(1, 1), this.bodyParts.ice.scale.set(1, 1), this.facing = "right"), this.isOnIce ? (this.bodyParts.ice.animations.play("loop"), this.bodyParts.ice.visible = !0) : (this.bodyParts.ice.animations.stop(), this.bodyParts.ice.visible = !1), "wg" === this.data.char && this.isOnIce ? this.bodyParts.legs.animations.play("onice") : this.bodyParts.legs.animations.play("running")) : "idle" !== this.facing && (this.bodyParts.ice.animations.stop(), this.bodyParts.ice.visible = !1, this.bodyParts.legs.animations.stop(), this.bodyParts.legs.frameName = this.prefix + "_legs_idle0000", this.facing = "idle") } }, e.prototype.drawDarkMask = function(a) { var b, c; return a.ctx.globalCompositeOperation = "lighter", c = { x: this.sprite.x + a.offset.x, y: this.sprite.y + a.offset.y }, b = a.ctx.createRadialGradient(c.x, c.y, 20, c.x, c.y, 180), b.addColorStop(0, "rgba(255,255,255,1)"), b.addColorStop(.5, "rgba(255,255,255,0.3)"), b.addColorStop(1, "transparent"), a.circle(c.x, c.y, 220, b) }, e }(Phaser.Group) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/MechManager", ["./Devices/Device", "./Devices/_define"], function() { "use strict"; var c; return c = c = function(c) { function d(b) { this.deviceChanged = a(this.deviceChanged, this), this.resetStates = a(this.resetStates, this), this.connectToWall = a(this.connectToWall, this), this.registerDevice = a(this.registerDevice, this), this.game = b, this.deviceGroups = {} } return b(d, c), d.prototype.registerDevice = function(a) { var b, c; if (c = a.options.properties.group, (b = this.deviceGroups)[c] || (b[c] = []), this.deviceGroups[c].push(a), null != a.signal) return a.signal.add(this.deviceChanged) }, d.prototype.connectPortals = function() { var a, b, c, d, e, f, g, h, i, j, k, l; j = {}, k = this.deviceGroups; for (f in k) for (d = k[f], e = 0, g = d.length; e < g; e++) c = d[e], "portal" === c.options.type && (j[h = c.options.properties.portalId] || (j[h] = []), j[c.options.properties.portalId].push(c)); l = []; for (f in j) i = j[f], i[0].other = i[1], i[1].other = i[0], (a = i[0].options.properties).inverted || (a.inverted = !1), (b = i[1].options.properties).inverted || (b.inverted = !1), this.connectToWall(i[0]), l.push(this.connectToWall(i[1])); return l }, d.prototype.connectToWall = function(a) { var b, c, d, e, f, g, h; if (g = this.game.physics.box2d.pxm(a.options.x), h = this.game.physics.box2d.pxm(a.options.y), d = new box2d.b2Vec2(g, h), c = d.Clone().SelfAdd(new box2d.b2Vec2(.5, 0).SelfRotateRadians(a.options.rotation)), f = d.Clone().SelfAdd(new box2d.b2Vec2(-.5, 0).SelfRotateRadians(a.options.rotation)), -1 === this.game.level.ground.getTileAt(Math.floor(c.x), Math.floor(c.y)).properties.type && (b = c), -1 === this.game.level.ground.getTileAt(Math.floor(f.x), Math.floor(f.y)).properties.type && (b = f), null != b) return b.SelfAdd(new box2d.b2Vec2(0, -.5).SelfRotateRadians(a.options.rotation)), e = { center: { x: -b.x, y: -b.y }, rotation: a.options.rotation, width: .5, height: 1.5 }, a.createFakeBlock(e) }, d.prototype.resetStates = function() { var a, b, c, d, e; d = this.deviceGroups, e = []; for (c in d) b = d[c], e.push(function() { var c, d, e; for (e = [], c = 0, d = b.length; c < d; c++) a = b[c], e.push(a.updateState(!0)); return e }()); return e }, d.prototype.deviceChanged = function(a) { var b, c, d, e, f, g, h, i, j; for (console.log("--"), g = a.state, h = this.deviceGroups[a.options.properties.group], c = 0, e = h.length; c < e; c++) b = h[c], null != b.signal && (g = g || b.state); for (i = this.deviceGroups[a.options.properties.group], j = [], d = 0, f = i.length; d < f; d++) b = i[d], null == b.signal && (b.state = g), j.push(b._updateState()); return j }, d }(Object), c.classNames = { pusher: Devices.Pusher, lever: Devices.Lever, box: Devices.Box, platform: Devices.MovingPlatform, beamer: Devices.Beamer, rotmirror: Devices.RotMirror, lightpusher: Devices.LightPusher, portal: Devices.Portal, ball: Devices.Ball, pulley: Devices.Pulley, hanging: Devices.Hanging, boxmirror: Devices.BoxMirror, boxheavy: Devices.BoxHeavy, infinitemirror: Devices.InfiniteMirror, slider: Devices.Slider, timedpusher: Devices.TimedPusher, wind: Devices.Wind, cover: Devices.BackgroundCover, window: Devices.Window, roman: Devices.Roman }, c.className = function(a) { return c.classNames[a] }, c }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/CameraManager", [], function() { "use strict"; return function(c) { function d(b) { this.destroy = a(this.destroy, this), this.checkBounds = a(this.checkBounds, this), this.animate = a(this.animate, this), this.focusOn = a(this.focusOn, this), this.updateCamera = a(this.updateCamera, this), this.update = a(this.update, this); var c, d; this.game = b.game, this.level = b, this.camGraphics = this.game.add.graphics(0, 0), this.camGraphics.fixedToCamera = !0, this.viewportPadding = { top: 64, left: 0, bottom: 0, right: 0 }, this.worldPadding = { top: 100, left: 200, bottom: 100, right: 200 }, this.target = { x: 0, y: 0, scale: 1, vx: 0, vy: 0, vscale: 0, ax: 0, ay: 0, ascale: 0 }, this.updateCamera(), this.minScale = d = Math.min(.9 * this.game.realWidth / this.game.level.size.width, .9 * this.game.realHeight / this.game.level.size.height), this.maxScale = 1.5, this.level.root.x = -this.game.level.size.width / 2 * d, this.level.root.y = -this.game.level.size.height / 2 * d, this.level.root.scale.set(d), this.camFreeze = !0, c = _.debounce(function(a) { return function() { return a.wheelScale = null } }(this), 1e3), $(window).on("wheel", function(a) { return function(b) { return console.log("zoom", b.originalEvent.deltaY), b.originalEvent.deltaY > 0 ? a.wheelScale = Math.min(a.maxScale, Math.max(a.minScale, .8 * a.level.root.scale.x)) : a.wheelScale = Math.min(a.maxScale, Math.max(a.minScale, 1.2 * a.level.root.scale.x)), b.stopPropagation(), b.preventDefault(), c() } }(this)), this.game.TouchManager.register(this, "pinch", function(a) { return function(b) { if (!a.game.level.pers1.cursors.active && !a.game.level.pers2.cursors.active) return null == a.userScale && (a.pinchScale = a.level.root.scale.x, a.pinchOrigin = { x: -a.level.root.x, y: -a.level.root.y }, a.pinchCenter = { x: -a.level.root.x - a.game.realWidth / 2 + b.center.x / a.pinchScale, y: -a.level.root.y - a.game.realHeight / 2 + b.center.y / a.pinchScale }), a.userScale = Math.min(a.maxScale, Math.max(a.minScale, b.scale * a.pinchScale)), a.userCenter = new box2d.b2Vec2(a.pinchOrigin.x + a.pinchCenter.x * a.userScale - a.pinchCenter.x * a.pinchScale - b.deltaX / a.game.camera.scale.x, a.pinchOrigin.y + a.pinchCenter.y * a.userScale - a.pinchCenter.y * a.pinchScale - b.deltaY / a.game.camera.scale.y) } }(this)), this.game.TouchManager.register(this, "pinchend", function(a) { return function(b) { return a.userScale = null, a.userCenter = null } }(this)), this.game.TouchManager.register(null, "pan", function(a) { return function(b) { if (!a.game.level.pers1.cursors.active && !a.game.level.pers2.cursors.active) return null == a.userCenter && (a.panOrigin = { x: -a.level.root.x, y: -a.level.root.y }), a.userCenter = new box2d.b2Vec2(a.panOrigin.x - b.deltaX / a.game.camera.scale.x, a.panOrigin.y - b.deltaY / a.game.camera.scale.y) } }(this)), this.game.TouchManager.register(null, "panend", function(a) { return function(b) { return a.userCenter = null } }(this)) } return b(d, c), d.prototype.update = function() { if (!this.camFreeze) return this.updateCamera(), this.animate() }, d.prototype.updateCamera = function() { var a, b, c, d, e, f, g, h, i, j, k; if (null != this.level.pers1 && null != this.level.pers2) return f = new box2d.b2Vec2(this.level.pers1.sprite.x, this.level.pers1.sprite.y), g = new box2d.b2Vec2(this.level.pers2.sprite.x, this.level.pers2.sprite.y), b = g.Clone().SelfSub(f), k = { width: this.game.realWidth - this.viewportPadding.left - this.viewportPadding.right, height: this.game.realHeight - this.viewportPadding.top - this.viewportPadding.bottom }, i = j = 1, c = Math.abs(b.x) + this.worldPadding.left + this.worldPadding.right, d = Math.abs(b.y) + this.worldPadding.top + this.worldPadding.bottom, c = Math.min(c, this.game.level.size.width), d = Math.min(d, this.game.level.size.height), c > k.width && (i = k.width / c), d > k.height && (j = k.height / d), h = i < 1 || j < 1 ? Math.min(i, j) : 1, e = "elements" === this.game.gameConfig.id || this.game.bowser.mobile || this.game.width <= 780 || this.game.height <= 480 ? { width: 20, height: 15 } : { width: 40, height: 30 }, h * this.game.physics.box2d.mpx(e.width) > this.game.realWidth && (h = this.game.realWidth / this.game.physics.box2d.mpx(e.width)), h * this.game.physics.box2d.mpx(e.height) > this.game.realHeight && (h = this.game.realHeight / this.game.physics.box2d.mpx(e.height)), null != this.userScale && (h = this.userScale), null != this.wheelScale && (h = this.wheelScale), a = f.Clone().SelfAdd(b.Clone().SelfMul(.5)).SelfMul(h), null != this.userCenter && (a = new box2d.b2Vec2(this.userCenter.x, this.userCenter.y)), this.level.debug && (h = 1, a = new box2d.b2Vec2(this.game.realWidth / 2, this.game.realHeight / 2), this.game.camera.x = 0, this.game.camera.y = 0), this.focusOn(a, h), this.level.debug ? void 0 : this.checkBounds() }, d.prototype.focusOn = function(a, b) { return this.target.x = Math.round(-a.x + this.game.realWidth / 2), this.target.y = Math.round(-a.y + this.game.realHeight / 2), this.target.scale = b }, d.prototype.animate = function() { var a, b; if (this.target.x !== this.level.root.x || this.target.y !== this.level.root.y || this.target.scale !== this.level.root.scale.x) return a = null != this.userCenter ? 1 / 3 : 1 / 15, b = .5, this.target.ax = (this.target.x - this.level.root.x) * a, this.target.ay = (this.target.y - this.level.root.y) * a, this.target.ascale = (this.target.scale - this.level.root.scale.x) * a, this.target.vx += this.target.ax, this.target.vx *= b, this.target.vy += this.target.ay, this.target.vy *= b, this.target.vscale += this.target.ascale, this.target.vscale *= b, this.level.root.x += this.target.vx, this.level.root.y += this.target.vy, this.level.root.scale.x += this.target.vscale, this.level.root.scale.y += this.target.vscale }, d.prototype.checkBounds = function() { var a, b, c, d, e, f; d = { left: !1, top: !1, right: !1, bottom: !1 }, b = new Phaser.Rectangle(0, 0, this.game.level.size.width, this.game.level.size.height), c = 0, e = this.game.realWidth, f = 0, a = this.game.realHeight, c <= this.target.x + b.x * this.target.scale && (d.left = !0, this.target.x = b.x * this.target.scale), e >= this.target.x + b.right * this.target.scale && (d.right = !0, this.target.x = e - b.right * this.target.scale), f <= this.target.y + b.y * this.target.scale && (d.top = !0, this.target.y = b.top * this.target.scale), a >= this.target.y + b.bottom * this.target.scale && (d.bottom = !0, this.target.y = a - b.bottom * this.target.scale), b.width * this.target.scale < this.game.realWidth && (d.right || d.left) && (this.target.x = this.game.realWidth / 2 - b.width * this.target.scale / 2), b.height * this.target.scale < this.game.realHeight && (d.top || d.bottom) && (this.target.y = this.game.realHeight / 2 - b.height * this.target.scale / 2), this.target.x -= this.game.realWidth / 2, this.target.y -= this.game.realHeight / 2 }, d.prototype.destroy = function() { return this.camGraphics.destroy(), $(window).off("wheel"), this.game.TouchManager.unregister(this, "pinch pinchend"), this.game.TouchManager.unregister(null, "pan panend") }, d }(Object) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Common/StoneButton", ["./Button", "Phaser"], function(b) { "use strict"; return function(b) { function c(a, b, d, e, f) { c.__super__.constructor.call(this, a, b, d, "MenuAssets", ["StoneButton0000", "StoneButton0001"], f, "pusher"), this.anchor.set(.5), this.label = a.make.bitmapText(0, 0, a.lang.font, e, 26), this.label.anchor.set(.5), this.label.y = -this.label.textHeight / 2, this.label.textWidth > .65 * this.sprite.width && (this.sprite.width = this.label.textWidth / .65), this.addChild(this.label) } return a(c, b), c }(b) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty, d = [].slice; define("States/Level/IngameMenu", ["../Common/StoneButton", "Phaser"], function(c) { "use strict"; return function(c) { function e(b, c) { this.destroy = a(this.destroy, this), this.update = a(this.update, this), this.fixToCamera = a(this.fixToCamera, this), this.layoutContent = a(this.layoutContent, this), this.renderContent = a(this.renderContent, this); var d, f; e.__super__.constructor.call(this, b, 0, 0), this.options = c, this.background = b.make.graphics(0, 0), this.background.boundsPadding = 0, this.addChild(this.background), this.board = d = b.make.sprite(0, 0, "PopupAssets", "_default0000"), d.anchor.set(.5), this.boardBg = f = b.make.sprite(0, 0, "PopupAssets", "PopupBackground0000"), f.anchor.set(.5), f.cacheAsBitmap = !0, this.board.addChild(f), this.addChild(d), b.TouchManager.register(this.background, "mousedown", function(a) { return function() { return console.log("prevent event") } }()), b.TouchManager.register(this.background, "touchstart", function(a) { return function() { return console.log("prevent event") } }()), this.visible = !1, this.game.add.existing(this), this.fixToCamera(), this.target = this.outside, this.force = 2.3, this.vy = 0, this.ay = 0, this.friction = .7, this.board.x = this.target.x, this.board.y = this.target.y, this.renderContent() } return b(e, c), e.prototype.renderContent = function() {}, e.prototype.layoutContent = function() { return this.fixToCamera(), this.shown ? this.target = this.center : this.target = this.outside, this.board.x = this.target.x }, e.prototype.show = function() { return this.target = this.center, this.shown = !0, this.visible = !0 }, e.prototype.hide = function() { return this.shown = !1, this.target = this.outside }, e.prototype.fixToCamera = function() { var a; return this.x = -this.game.realWidth / 2, this.y = -this.game.realHeight / 2, this.background.clear(), this.background.beginFill(0), this.background.drawRect(0, 0, this.game.realWidth, this.game.realHeight), this.background.alpha = 0, a = Math.min(1, Math.min(this.game.realWidth / this.boardBg.texture.frame.width, this.game.realHeight / this.boardBg.texture.frame.height)), this.board.scale.set(a), this.contentSize = { width: .8 * this.boardBg.width, height: this.boardBg.height }, this.contentSize.halfWidth = this.contentSize.width / 2, this.contentSize.halfHeight = this.contentSize.height / 2, this.center = { x: this.game.realWidth / 2, y: this.game.realHeight / 2 }, this.outside = { x: this.game.realWidth / 2, y: 1.5 * this.game.realHeight } }, e.prototype.update = function() { var a; if (this.visible) { if (this.background.alpha = .7 * (1 - (this.board.y - this.center.y) / (this.outside.y - this.center.y)), Math.abs(this.board.y - this.target.y) < 1 && Math.abs(this.vy) < 1) return; if (a = Math.min(.04, this.game.time.elapsed / 1e3), this.ay = (this.target.y - this.board.y) * this.force * a, this.vy += this.ay, this.vy *= this.friction, this.board.y += this.vy, Math.abs(this.board.y - this.outside.y) < 3) return this.visible = !1 } }, e.prototype.destroy = function() { var a; return a = 1 <= arguments.length ? d.call(arguments, 0) : [], this.background.clear(), this.visible = !1, e.__super__.destroy.apply(this, a) }, e }(Phaser.Group) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Settings/ToggleSettingButton", ["../Common/Button", "Phaser"], function(c) { "use strict"; return function(c) { function d(b, c, e, f, g, h) { this.setSelected = a(this.setSelected, this), this.myKey = f, d.__super__.constructor.call(this, b, c, e, "MenuAssets", [f + "0000", f + "0000"], function(a) { return function() { return h(g) } }(), "pusher"), this.anchor.set(.5) } return b(d, c), d.prototype.setSelected = function(a) { return a ? (this.downFrameName = this.myKey + "0000", this.upFrameName = this.myKey + "0000") : (this.downFrameName = this.myKey + "0001", this.upFrameName = this.myKey + "0001"), this.sprite.frameName = this.upFrameName }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Settings/ToggleControlButton", ["../Common/Button", "Phaser"], function(c) { "use strict"; return function(c) { function d(b, c, e, f, g, h) { this.setSelected = a(this.setSelected, this); var i, j, k; this.myKey = f, d.__super__.constructor.call(this, b, c, e, "MenuAssets", [f + "0000", f + "0000"], function(a) { return function() { return h(g) } }(), "pusher"), this.anchor.set(.5), "single" === g && (k = b.make.sprite(0, 0, "MenuAssets"), k.anchor.set(.5), j = Phaser.Animation.generateFrameNames("ToggleSingleScreen", 0, 12, "", 4), k.animations.add("forth", j, 12, !1), k.animations.add("back", j.slice(0).reverse(), 12, !1), i = function(a) { return function() { if (null != k.animations.play("forth")) return k.animations.play("forth").onComplete.add(function() { return a.game.time.events.add(1e3, function() { if (null != k.animations.play("back")) return k.animations.play("back").onComplete.add(function() { return a.game.time.events.add(1e3, i, a) }) }, i, a) }) } }(this), i(), this.addChild(k)) } return b(d, c), d.prototype.setSelected = function(a) { return a ? (this.downFrameName = this.myKey + "0000", this.upFrameName = this.myKey + "0000") : (this.downFrameName = this.myKey + "0001", this.upFrameName = this.myKey + "0001"), this.sprite.frameName = this.upFrameName }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Settings/SettingsMenu", ["../Level/IngameMenu", "../Common/StoneButton", "./ToggleSettingButton", "./ToggleControlButton", "Phaser"], function(c, d, e, f) { "use strict"; return function(c) { function g(b, c) { this.changeControls = a(this.changeControls, this), this.chagneSetting = a(this.chagneSetting, this), this.setState = a(this.setState, this), this.show = a(this.show, this), this.close = a(this.close, this), this.renderContent = a(this.renderContent, this), g.__super__.constructor.call(this, b, c), this.onClose = new Phaser.Signal } return b(g, c), g.prototype.renderContent = function() { var a, b, c, g; return c = this.contentSize.halfWidth, b = this.contentSize.halfHeight, "keyboard" !== this.game.settings.controls ? (this.single = a = new f(this.game, -120, -b / 3, "ToggleControlButtonSingle", "single", this.changeControls), a.anchor.set(.5), this.board.addChild(a), g = this.game.make.bitmapText(0, -b / 3, this.game.lang.font, "or", 18), g.anchor.set(.5), this.board.addChild(g), this.dual = a = new f(this.game, 120, -b / 3, "ToggleControlButtonDual", "dual", this.changeControls), a.anchor.set(.5), this.board.addChild(a), this.vibrate = a = new e(this.game, -c / 2, b / 6, "VibrateButton", "vibrate", this.chagneSetting), a.anchor.set(.5), this.board.addChild(a), this.music = a = new e(this.game, 0, b / 6, "MusicButton", "music", this.chagneSetting), a.anchor.set(.5), this.board.addChild(a), this.fx = a = new e(this.game, c / 2, b / 6, "FxButton", "fx", this.chagneSetting), a.anchor.set(.5), this.board.addChild(a)) : (this.music = a = new e(this.game, c / 3, 0, "MusicButton", "music", this.chagneSetting), a.anchor.set(.5), this.board.addChild(a), this.fx = a = new e(this.game, -c / 3, 0, "FxButton", "fx", this.chagneSetting), a.anchor.set(.5), this.board.addChild(a)), this.setState(), this.button = a = new d(this.game, 0, 1.1 * b / 2, this.game.lang.locale("Ok"), this.close), a.anchor.set(.5), this.board.addChild(a) }, g.prototype.close = function() { return this.hide(), _.delay(function(a) { return function() { return a.onClose.dispatch() } }(this), 1e3) }, g.prototype.show = function() { return g.__super__.show.call(this), h5branding.google.sendScreenView("settings") }, g.prototype.setState = function() { return this.dual && this.single && ("dual" === this.game.settings.controls ? (this.dual.setSelected(!0), this.single.setSelected(!1)) : (this.dual.setSelected(!1), this.single.setSelected(!0))), this.vibrate && this.vibrate.setSelected(this.game.settings.vibrate), this.music.setSelected(this.game.settings.music), this.fx.setSelected(this.game.settings.fx) }, g.prototype.chagneSetting = function(a) { return this.game.settings[a] = !this.game.settings[a], this.game.saveSettings(), this.game.settingsSignal.dispatch(a), this.setState() }, g.prototype.changeControls = function(a) { return this.game.settings.controls = a, this.game.saveSettings(), this.game.settingsSignal.dispatch("controls"), this.setState() }, g }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/PauseMenu", ["require", "./IngameMenu", "../Common/StoneButton", "../Common/Button", "Phaser", "States/Settings/SettingsMenu"], function(c) { var d, e, f, g; return e = c("./IngameMenu"), g = c("../Common/StoneButton"), d = c("../Common/Button"), c("Phaser"), f = c("States/Settings/SettingsMenu"), function(c) { function e(b, c) { this.retry = a(this.retry, this), this.quit = a(this.quit, this), this.resume = a(this.resume, this), this.show = a(this.show, this), this.layoutContent = a(this.layoutContent, this), this.renderContent = a(this.renderContent, this), e.__super__.constructor.call(this, b), this.level = c } return b(e, c), e.prototype.renderContent = function() { var a, b; return this.label = b = this.game.make.bitmapText(0, 0, this.game.lang.font, this.game.lang.locale("Paused"), 36), b.anchor.set(0), b.x = -b.width / 2, b.y = .5 * -this.contentSize.halfHeight + b.textHeight / 2, this.board.addChild(b), this.settingsButton = new d(this.game, 0, 0, "MenuAssets", ["SettingsButton0000", "SettingsButton0001"], function(a) { return function() { var b; return a.settingsMenu = b = new f(a.game, a.levelState), b.show(), b.onClose.add(b.destroy) } }(this), "pusher"), this.settingsButton.anchor.set(1), this.settingsButton.scale.set(.9), this.settingsButton.x = this.contentSize.halfWidth - this.settingsButton.width, this.settingsButton.y = -this.contentSize.halfHeight + this.settingsButton.height + 100, this.board.addChild(this.settingsButton), this.button1 = a = new g(this.game, 0, 0, this.game.lang.locale("Retry"), this.retry), a.anchor.set(0), this.board.addChild(a), this.button2 = a = new g(this.game, 0, 0, this.game.lang.locale("End"), this.quit), a.anchor.set(0), this.board.addChild(a), this.button3 = a = new g(this.game, 0, 0, this.game.lang.locale("Resume"), this.resume), a.anchor.set(0), this.board.addChild(a), this.layoutContent() }, e.prototype.layoutContent = function() { return e.__super__.layoutContent.call(this), this.label.x = -this.label.width / 2, this.label.y = .6 * -this.contentSize.halfHeight + this.label.textHeight / 2, this.button1.x = this.contentSize.halfWidth / 3, this.button1.y = .15 * this.contentSize.halfHeight, this.button2.x = -this.contentSize.halfWidth / 3, this.button2.y = .15 * this.contentSize.halfHeight, this.button3.x = 0, this.button3.y = .5 * this.contentSize.halfHeight, this.settingsButton.x = this.contentSize.halfWidth - this.settingsButton.width, this.settingsButton.y = -this.contentSize.halfHeight + this.settingsButton.height + 100 }, e.prototype.show = function() { return e.__super__.show.call(this), h5branding.google.sendScreenView("button_game_pause") }, e.prototype.resume = function() { return this.game.level.togglePause() }, e.prototype.quit = function() { return this.level.quit() }, e.prototype.retry = function() { return this.level.retry() }, e }(e) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/CursorToggle", ["../Common/Button"], function(c) { "use strict"; return function(c) { function d(b) { this.setChar = a(this.setChar, this), this.clicked = a(this.clicked, this), this.update = a(this.update, this), this.getAngle = a(this.getAngle, this), this.normalizeAngle = a(this.normalizeAngle, this), this.layoutContent = a(this.layoutContent, this), this.init = a(this.init, this), d.__super__.constructor.call(this, b, 0, 0, "PopupAssets", "CursorToggle0000", this.clicked), this.game.layers.ui.addChild(this), this.anchor.set(.5), this.y = this.game.realHeight / 2, this.onChange = new Phaser.Signal, this.setChar("wg"), this.vtheta = 0, this.atheta = 0, this.rotation = Math.PI } return b(d, c), d.prototype.init = function() { return requestAnimationFrame(function(a) { return function() { var b; return b = a.game.level.pers2.sprite, new box2d.b2Vec2(b.world.x - a.world.x, b.world.y - a.world.y), a.rotation = a.getAngle() } }(this)) }, d.prototype.layoutContent = function() { return this.y = this.game.realHeight / 2 }, d.prototype.normalizeAngle = function(a) { for (; a > 2 * Math.PI;) a -= 2 * Math.PI; for (; a < 0;) a += 2 * Math.PI; return a }, d.prototype.getAngle = function() { var a, b, c; return "fb" === this.current ? (b = this.game.level.pers1.sprite, a = 0) : (b = this.game.level.pers2.sprite, a = Math.PI), c = new box2d.b2Vec2(b.world.x - this.world.x, b.world.y - this.world.y), this.normalizeAngle(a + Math.atan2(c.y, c.x)) }, d.prototype.update = function() { var a, b, c; return b = .5, c = this.getAngle(), a = c - this.rotation, a > Math.PI && (a -= 2 * Math.PI), a < -Math.PI && (a += 2 * Math.PI), this.atheta = .1 * a, this.vtheta += this.atheta, this.vtheta *= b, this.rotation += this.vtheta, this.rotation = this.normalizeAngle(this.rotation) }, d.prototype.clicked = function() { return console.log("toggle"), "wg" === this.current ? (this.setChar("fb"), this.game.level.sounds.charToggle1.play()) : (this.setChar("wg"), this.game.level.sounds.charToggle2.play()) }, d.prototype.setChar = function(a, b) { if (null == b && (b = null), null == b || !this.game.input.hitTest(this, b.center, new Phaser.Point)) return this.current !== a ? (this.current = a, this.onChange.dispatch(this.current)) : void 0 }, d }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Clock", ["./IngameMenu", "../Common/StoneButton", "Phaser"], function(c, d) { "use strict"; return function(c) { function d(b, c, e) { this.getElapsedSeconds = a(this.getElapsedSeconds, this), this.resume = a(this.resume, this), this.stop = a(this.stop, this), this.pause = a(this.pause, this), this.update = a(this.update, this), this.start = a(this.start, this); var f; d.__super__.constructor.call(this, b, c, e, "TempleAssets", "Clock0000"), this.text = f = b.make.bitmapText(0, 0, "font_en", "00:00", 24), f.anchor.set(0), f.x = -this.text.textWidth / 2, f.y = -this.height / 2 + this.text.textHeight + 20, this.addChild(f), this.text.text = this.game.secondsToString(0) } return b(d, c), d.prototype.start = function() { if (null != this.game) return this.startTime = this.game.time.now }, d.prototype.update = function() { var a; if (null != this.startTime && !this.stopped && null == this.pauseTime) return a = this.getElapsedSeconds(), this.text.text = this.game.secondsToString(a), this.text.x = -this.text.textWidth / 2, this.text.y = -this.height / 2 + this.text.textHeight + 20 }, d.prototype.pause = function() { if (null == this.pauseTime) return this.pauseTime = this.game.time.now }, d.prototype.stop = function() { return this.stopped = !0 }, d.prototype.resume = function() { return this.startTime = this.startTime + (this.game.time.now - this.pauseTime), this.pauseTime = null }, d.prototype.getElapsedSeconds = function() { return Math.round((this.game.time.now - this.startTime) / 1e3) }, d }(Phaser.Sprite) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/LevelUI", ["../Common/Button", "./Clock", "../Common/MuteButton", "Phaser"], function(c, d, e) { "use strict"; return function(e) { function f(b, e) { this.pauseClicked = a(this.pauseClicked, this), this.show = a(this.show, this), this.layoutContent = a(this.layoutContent, this); var g, h; f.__super__.constructor.call(this, b, 0, 0), this.game.layers.ui.addChild(this), this.pauseButton = h = new c(this.game, this.game.realWidth / 2, -this.game.realHeight / 2, "PopupAssets", "PauseButton0000", this.pauseClicked), h.sprite.anchor.set(1, 0), h.hitArea = new PIXI.Circle(-h.width / 2, h.width / 2, 2 * h.width), this.addChild(h), this.clock = g = new d(this.game, 0, -this.game.realHeight / 2), g.anchor.set(.5, .05), this.addChild(g), this.visible = !1 } return b(f, e), f.prototype.layoutContent = function() { return this.pauseButton.x = this.game.realWidth / 2, this.pauseButton.y = -this.game.realHeight / 2, this.clock.x = 0, this.clock.y = -this.game.realHeight / 2 }, f.prototype.show = function() { return this.visible = !0 }, f.prototype.pauseClicked = function() { return console.log("pause"), this.game.level.togglePause() }, f }(Phaser.Group) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/FinishCounter", ["../Common/StoneButton", "Phaser"], function(c) { "use strict"; return function(c) { function d(b, c, e) { this.setAchieved = a(this.setAchieved, this); var f, g; d.__super__.constructor.call(this, b, 0, 0), e = this.game.make.sprite(0, 0, "PopupAssets", e), e.anchor.set(.5, .5), e.x = -e.width / 2, this.addChild(e), "" !== c && (g = this.game.make.bitmapText(0, 0, "font_en", c, 20), g.anchor.set(.5, .5), g.x = -e.width / 2, g.y = 40, this.addChild(g)), this.achieved = f = this.game.make.sprite(0, 0, "PopupAssets", "TickIcon0000"), f.anchor.set(.5, .5), f.x = e.width / 2, f.visible = !1, this.addChild(f) } return b(d, c), d.prototype.setAchieved = function(a) { return this.achieved.frameName = a ? "TickIcon0000" : "CrossIcon0000", this.achieved.visible = !0 }, d }(Phaser.Group) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/EndMenu", ["./IngameMenu", "./FinishCounter", "../Common/StoneButton", "Phaser"], function(c, d, e) { "use strict"; return function(f) { function g() { return this.gotoMenu = a(this.gotoMenu, this), this.renderContent = a(this.renderContent, this), g.__super__.constructor.apply(this, arguments) } return b(g, f), g.prototype.renderContent = function() { var a, b, f, g, h, i, j, k, l, m, n, o; return j = new d(this.game, "", "FinishIcon0000"), h = this.options.state.diamonds, i = this.options.data.totalDiamonds, g = new d(this.game, "", "DiamondsIcon0000"), m = "puzzle" === this.options.data.type ? new d(this.game, "", "SilverIcon0000") : new d(this.game, "", "TimeIcon0000"), n = this.options.state.time, o = "single" === this.game.settings.controls && this.options.data.mobileTime || this.options.data.time, console.log("Time current: " + n), this.board.addChild(j), this.board.addChild(g), this.board.addChild(m), this.layoutContent = function(a) { return function() { return c.prototype.layoutContent.call(a), j.x = -200, g.x = -200, m.x = -200, "puzzle" === a.options.data.type ? (g.visible = !1, j.y = .5 * -a.contentSize.halfHeight + 60, m.y = .5 * -a.contentSize.halfHeight + 140) : "dark" === a.options.data.type ? (j.y = .5 * -a.contentSize.halfHeight + 60, m.y = .5 * -a.contentSize.halfHeight + 140, g.visible = !1) : (j.y = .5 * -a.contentSize.halfHeight + 20, g.y = .5 * -a.contentSize.halfHeight + 100, m.y = .5 * -a.contentSize.halfHeight + 180) } }(this), this.layoutContent(), b = new e(this.game, 0, this.contentSize.halfHeight - 140, this.game.lang.locale("Continue"), this.gotoMenu), b.disable(), this.board.addChild(b), a = this.game.make.sprite(5, -60, "PopupAssets", "popupArrow0000"), a.anchor.set(.5), this.board.addChild(a), l = "puzzle" === this.options.data.type ? "FinishStonePuzzle" : "speed" === this.options.data.type ? "FinishStoneSpeed" : "dark" === this.options.data.type ? "FinishStoneDark" : "FinishStone", k = this.game.make.sprite(180, -60, "PopupAssets", l + "0000"), k.animations.add("to_1", Phaser.Animation.generateFrameNames(l, 1, 7, "", 4), 30, !1), k.animations.add("to_2", Phaser.Animation.generateFrameNames(l, 8, 14, "", 4), 30, !1), k.animations.add("to_3", Phaser.Animation.generateFrameNames(l, 15, 21, "", 4), 30, !1), k.anchor.set(.5), this.board.addChild(k), f = 700, _.delay(function(c) { return function() { if (j.setAchieved(!0), null != c.game && null != c.game.level) return c.game.level.sounds.endPass.play(), _.delay(function() { if (null != c.game && null != c.game.level) return c.game.level.sounds.endPass.play(), g.setAchieved(h >= i), _.delay(function() { if (null != c.game && null != c.game.level) return c.game.level.sounds.endPass.play(), "puzzle" === c.options.data.type ? m.setAchieved(c.options.state.silverDiamond > 0) : m.setAchieved(n <= o), _.delay(function() { if (null != c.game && null != c.game.level) return c.game.level.sounds.endDiamond.play(), a.frameName = "popupArrow0001", k.animations.play("to_" + c.options.state.stars), c.animationDone = !0, b.enable() }, m.visible && f) }, g.visible && f) }, j.visible && f) } }(this), f) }, g.prototype.gotoMenu = function() { if (this.animationDone) return this.game.state.fade("levelMenu", !0, !1, this.game.currentTemple) }, g }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/GameOverMenu", ["require", "Phaser", "./IngameMenu", "../Common/StoneButton"], function(c) { var d, e; return c("Phaser"), e = c("./IngameMenu"), d = c("../Common/StoneButton"), function(c) { function e() { return this.retry = a(this.retry, this), this.gotoMenu = a(this.gotoMenu, this), this.layoutContent = a(this.layoutContent, this), this.renderContent = a(this.renderContent, this), e.__super__.constructor.apply(this, arguments) } return b(e, c), e.prototype.renderContent = function() { var a, b; return this.label = b = this.game.make.bitmapText(0, 0, this.game.lang.font, this.game.lang.locale("Game Over"), 36), b.anchor.set(0), b.x = -b.width / 2, b.y = .5 * -this.contentSize.halfHeight + b.textHeight / 2, this.board.addChild(b), a = new d(this.game, .4 * -this.contentSize.halfWidth, .4 * this.contentSize.halfHeight, this.game.lang.locale("Menu"), this.gotoMenu), a.anchor.set(.5), this.board.addChild(a), a = new d(this.game, .4 * this.contentSize.halfWidth, .4 * this.contentSize.halfHeight, this.game.lang.locale("Retry"), this.retry), a.anchor.set(.5), this.board.addChild(a) }, e.prototype.layoutContent = function() { return e.__super__.layoutContent.call(this), this.label.x = -this.label.width / 2, this.label.y = .5 * -this.contentSize.halfHeight + this.label.textHeight / 2 }, e.prototype.gotoMenu = function() { return this.game.state.fade("levelMenu", !0, !1, this.game.currentTemple) }, e.prototype.retry = function() { return this.game.level.retry() }, e }(e) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/End", ["./Level/EndMenu", "./Level/GameOverMenu"], function(c, d) { "use strict"; return function(e) { function f() { return this.shutdown = a(this.shutdown, this), this.pauseUpdate = a(this.pauseUpdate, this), this.layoutContent = a(this.layoutContent, this), this.create = a(this.create, this), this.init = a(this.init, this), f.__super__.constructor.apply(this, arguments) } return b(f, e), f.prototype.init = function(a) { return this.levelState = a }, f.prototype.create = function() { return this.levelState.success ? (this.game.progress.update(this.levelState), this.menu = new c(this.game, this.levelState), this.menu.show()) : (this.menu = new d(this.game, this.levelState), this.menu.show(), this.restartKey = this.game.input.keyboard.addKey(Phaser.Keyboard.R), this.restartKey.onDown.add(this.levelState.retry)) }, f.prototype.layoutContent = function() { if (null != this.menu.layoutContent) return this.menu.layoutContent() }, f.prototype.pauseUpdate = function() { return this.menu.update(), this.game.tweens.update() }, f.prototype.shutdown = function() { return console.log("shuting down end, with levelstate ", this.game.state.states.level), this.game.state.states.level.killAll() }, f }(Phaser.State) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Level/Level", ["require", "box2d", "States/Level/Devices/_define", "hammer", "outlineFilter", "inlineFilter", "shadowFilter", "bevelFilter", "colorMatrix", "./Ground", "./character", "./MechManager", "./CameraManager", "./PauseMenu", "./CursorToggle", "./LevelUI", "States/End", "../Common/Navies"], function(c) { var d, e, f, g, h, i, j, k, l; return c("box2d"), c("States/Level/Devices/_define"), c("hammer"), c("outlineFilter"), c("inlineFilter"), c("shadowFilter"), c("bevelFilter"), c("colorMatrix"), h = c("./Ground"), e = c("./character"), j = c("./MechManager"), d = c("./CameraManager"), l = c("./PauseMenu"), f = c("./CursorToggle"), i = c("./LevelUI"), g = c("States/End"), k = c("../Common/Navies"), function(c) { function m() { this.quit = a(this.quit, this), this.gameOver = a(this.gameOver, this), this.retry = a(this.retry, this), this.updateDust = a(this.updateDust, this), this.updateTutorial = a(this.updateTutorial, this), this.update = a(this.update, this), this.gameFinish = a(this.gameFinish, this), this.animateFinish = a(this.animateFinish, this), this.checkEndGame = a(this.checkEndGame, this), this.updateMusic = a(this.updateMusic, this), this.setupCursorToggle = a(this.setupCursorToggle, this), this.onSettingChange = a(this.onSettingChange, this), this.createCharObjects = a(this.createCharObjects, this), this.createObjects = a(this.createObjects, this), this.fillDustLayer = a(this.fillDustLayer, this), this.updateDarkness = a(this.updateDarkness, this), this.setupDarkness = a(this.setupDarkness, this), this.setupLayers = a(this.setupLayers, this), this.pauseUpdate = a(this.pauseUpdate, this), this.togglePause = a(this.togglePause, this), this.sendScreenView = a(this.sendScreenView, this), this.startLevel = a(this.startLevel, this), this.start = a(this.start, this), this.layoutContent = a(this.layoutContent, this), this.loadComplete = a(this.loadComplete, this), this.setupTutorial = a(this.setupTutorial, this), this.parseMapPropper = a(this.parseMapPropper, this), this.killAll = a(this.killAll, this), this.shutdown = a(this.shutdown, this), this.decodeAudio = a(this.decodeAudio, this), this.preloadAudioFiles = a(this.preloadAudioFiles, this), this.baseLoadComplete = a(this.baseLoadComplete, this), this.create = a(this.create, this), this.init = a(this.init, this), this.onReady = new Phaser.Signal, m.__super__.constructor.call(this) } return b(m, c), m.prototype.useDust = !0, m.prototype.init = function(a) { return this.levelPath = "data/" + a.filename, this.levelData = a, this.levelState = { diamonds: { red: 0, blue: 0, silver: 0 }, time: 1 / 0 }, this.game.time.advancedTiming = !0, this.game.sound.mute = !this.game.settings.fx }, m.prototype.create = function() { this.game.load.tilemap("map", this.levelPath, null, Phaser.Tilemap.TILED_JSON), this.game.load.onLoadComplete.addOnce(this.baseLoadComplete, this), this.game.load.start(), this.sendScreenView(), this.game.SideBanners.destroyBanners() }, m.prototype.baseLoadComplete = function() { _.defer(function(a) { return function() { var b; return a.mapData = a.parseMapPropper(), b = "assets/atlasses/Temples/" + a.game.currentTemple.id, a.game.load.atlasJSONArray("TempleAssets", b + "/TempleAssets.png", b + "/TempleAssets.json"), a.preloadAudioFiles(), a.game.load.onLoadComplete.addOnce(a.loadComplete, a), a.game.load.start() } }(this)) }, m.prototype.preloadAudioFiles = function() { var a, b, c, d, e, f, g, h, i, k, l, m, n, o, p, q; for ("dark" === this.levelData.type ? (h = "levelMusic_dark", k = "levelMusicOver", i = "levelMusicFinish") : "speed" === this.levelData.type ? (h = "levelMusic_speed", k = "levelMusicOver", i = "levelMusicFinish_speed") : (h = "levelMusic", k = "levelMusicOver", i = "levelMusicFinish"), q = { levelMusic: h, levelMusicOver: k, levelMusicFinish: i }, this.sounds = [], this.sounds = this.sounds.concat(["levelMusic", "levelMusicOver", "levelMusicFinish", "charToggle1", "charToggle2", "endPass", "endFail", "endDiamond", "jump_fb", "jump_wg", "waterSteps", "iceSteps_fb", "iceSteps_wg", "death", "diamond", "door", "freeze", "melt"]), m = this.mapData.objects.Objects, d = 0, f = m.length; d < f; d++) l = m[d], a = j.className(l.type), null != a ? (b = null != a.prototype.sounds && a.prototype.sounds() || [], Array.isArray(b) || [b], this.sounds = this.sounds.concat(b)) : console.warn("Object type " + l.type + " not found!"); for (this.sounds = _.uniq(this.sounds), n = this.sounds, o = [], e = 0, g = n.length; e < g; e++) p = n[e], c = (q[p] || p).charAt(0).toUpperCase() + (q[p] || p).slice(1), o.push(this.game.load.audio(p, "assets/audio/" + c + ".mp3")); return o }, m.prototype.decodeAudio = function(a) { var b, c, d, e, f; for (f = {}, d = this.sounds, b = 0, c = d.length; b < c; b++) e = d[b], f[e] = this.game.add.audio(e); return this.sounds = f, this.game.sound.setDecodedCallback(_.map(this.sounds), function(a) { return function() { if (a.game.settings.music) return a.sounds.levelMusic.loop = !0, a.sounds.levelMusic.play() } }(this), this), a() }, m.prototype.shutdown = function() { var a, b, c, d, e; if (this.pers1.destroy(!0), this.pers2.destroy(!0), this.door1.destroy(!0), this.door2.destroy(!0), this.camManager.destroy(), null != this.darknessBmd && this.darkness.events.onRemovedFromGroup.add(function(a) { return function() { return a.darknessBmd.destroy() } }(this)), _.each(this.objects, function(a) { return a.destroy(!0) }), _.each(this.game.layers, function(a) { return a.update = function(a) { return function() {} }() }), this.game.settingsSignal.remove(this.onSettingChange), null != this.cursorToggle && (this.game.TouchManager.unregister(this.pers1.bodySprite, "tap"), this.game.TouchManager.unregister(this.pers2.bodySprite, "tap")), null != this.navies) { for (d = this.navies, e = [], a = 0, b = d.length; a < b; a++) c = d[a], e.push(c.destroy(!0)); return e } }, m.prototype.killAll = function() { if (null != this.game) return this.game.physics.box2d.paused = !0, this.game.paused = !0, this.ui.clock.destroy(!0), this.ui.destroy(!0), _.each(this.sounds, function(a) { return function(a) { return a.destroy() } }()) }, m.prototype.parseMapPropper = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r; for (g = this.game.cache.getTilemapData("map").data, a = [], i = [], l = g.tilesets, b = 0, d = l.length; b < d; b++) p = l[b], null != p.source && (p.src = p.source, h = p.src.split("/").pop().replace(".json", ""), delete p.source, "Ground" === h ? a.push(p) : i.push(p)); for (g.tilesets = a, m = g.tilesets, c = 0, e = m.length; c < e; c++) p = m[c], null != p.src && "Ground" === (h = p.src.split("/").pop().replace(".json", "")) && _.extend(p, this.game.cache.getJSON(h)); for (q = Phaser.TilemapParser.parseTiledJSON(g), g.tilesets = a.concat(i), n = g.tilesets, k = 0, f = n.length; k < f; k++) p = n[k], null != p.src && "Ground" !== (h = p.src.split("/").pop().replace(".json", "")) && q.tilesets.push(_.extend(p, this.game.cache.getJSON(h))); return j = function(a) { return function() { var a, b, c, d, e, f, g; for (g = {}, e = q.tilesets, d = 0, b = e.length; d < b; d++) if (f = e[d], null != f.tiles) for (a in f.tiles) c = f.tileproperties[a], g[+f.firstgid + +a] = { type: f.tiles[a].type, properties: c }; return g } }(), r = j(), o = function(a) { return function(a) { var b, c, d, e; for (e = [], d = 0, b = a.length; d < b; d++) c = a[d], null != c.gid && null != r[+c.gid] ? ("" === c.type && delete c.type, e.push(_.deepObjectExtend(c, r[+c.gid]))) : e.push(void 0); return e } }(), o(q.objects.Objects), o(q.objects.Chars), q }, m.prototype.setupTutorial = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o; if (f = this.game.cache.getTilemapData("map").data, null != (o = _.findWhere(f.layers, { name: "Tutorial_" + this.game.settings.controls }) || _.findWhere(f.layers, { name: "Tutorial" }))) { for (n = {}, i = o.objects, c = 0, e = i.length; c < e; c++) h = i[c], n[g = h.properties.id] || (n[g] = {}), null != h.text ? ((a = n[h.properties.id]).texts || (a.texts = []), n[h.properties.id].texts.push(h)) : ((b = n[h.properties.id]).rects || (b.rects = []), n[h.properties.id].rects.push(new Phaser.Rectangle(h.x, h.y, h.width, h.height))); this.tutorialTexts = [], j = []; for (d in n) l = n[d], console.log("text object", l), j.push(function() { var a, b, c, d; for (c = l.texts, d = [], a = 0, b = c.length; a < b; a++) k = c[a], m = this.game.make.bitmapText(k.x, k.y, this.game.lang.font, this.game.lang.locale(k.text.text), 18, k.text.halign), m.maxWidth = k.width, m.cacheAsBitmap = !0, m.visible = !1, m.rects = l.rects, this.game.layers.tutorial.addChild(m), d.push(this.tutorialTexts.push(m)); return d }.call(this)); return j } }, m.prototype.loadComplete = function() { var a, b, c, e, f, g, m, n, o, p; for (this.loadCompleted = !0, this.game.clearBeforeRender = !1, this.game.level = this, this.setupLayers(), $('<div style="top:0; left: 0; width: 100%; height: 100%; position:absolute"></div>'), this.game.config.enableDebug && $(window).on("keydown", function(a) { return function(b) { if (81 === b.keyCode) return a.debug = !a.debug } }(this)), this.showfps = this.game.config.showFps, this.game.MechManager = new j(this.game), this.game.physics.startSystem(Phaser.Physics.BOX2D), this.game.physics.box2d.setPTMRatio(32), this.game.physics.setBoundsToWorld = function(a) { return function() {} }(), a = new h(this.game, this.mapData), this.ground = a, this.size = { width: a.options.width, height: a.options.height }, this.game.physics.box2d.gravity.y = 1e3, this.objects = this.createObjects(this.map, this.mapData.objects.Objects), this.createCharObjects(this.map, this.mapData.objects.Chars), o = _.values(this.game.physics.box2d.walls), b = 0, e = o.length; b < e; b++) p = o[b], p.setBodyContactCallback(this.pers1, function(a) { return function(b, c, d, e, f, g) { return console.log("char1 is dead"), a.pers1.kill() } }(this), this), p.setBodyContactCallback(this.pers2, function(a) { return function(b, c, d, e, f, g) { return console.log("char2 is dead"), a.pers2.kill() } }(this), this); if (this.useDust) for (n = a.getNaviesPoints(), this.navies = [], c = 0, f = n.length; c < f; c++) m = n[c], g = new k(this.game, m.x, m.y, Math.floor(1 + 3 * Math.random())), g.scale.set(.3 + .7 * Math.random()), this.game.layers.overGround.addChild(g), this.navies.push(g); this.useDust && null != _.find(this.objects, function(a) { return "beamer" === a.options.type }) && this.fillDustLayer(), a.decorate(this.objects), this.setupDarkness(), this.setupTutorial(), this.pauseMenu = new l(this.game, this), this.pauseKey = this.game.input.keyboard.addKey(Phaser.Keyboard.P), this.pauseKey.onDown.add(this.togglePause), this.ui = new i(this.game, this), this.camManager = new d(this), this.root.alpha = 0, requestAnimationFrame(function(a) { return function() { if (a.game.stage.backgroundColor = 0, a.onReady.dispatch(), a.root.alpha = 1, a.game.layers.ui.alpha = 1, a.ui.show(), null != a.cursorToggle) return a.cursorToggle.init() } }(this)), this.game.physics.box2d.useElapsedTime = !0, this.game.physics.box2d.paused = !0, this.game.physics.box2d.update = function() { var a; if (!this.paused) return a = Math.min(.04, this.game.time.elapsed / 1e3), this.world.Step(a, this.velocityIterations, this.positionIterations) }, this.decodeAudio(function(a) { return function() { return console.log("load completed"), a.startLevel() } }(this)) }, m.prototype.layoutContent = function() { if (this.ui.layoutContent(), this.pauseMenu.layoutContent(), null != this.cursorToggle && this.cursorToggle.layoutContent(), null != this.pers1.cursors.layoutContent && this.pers1.cursors.layoutContent(), null != this.pers2.cursors.layoutContent) return this.pers2.cursors.layoutContent() }, m.prototype.start = function() {}, m.prototype.startLevel = function() { var a; for (this.game.time.addvancedTiming = !0, _.delay(function(a) { return function() { if (a.game.time.suggestedFps < 40) return a.useDust = !1, _.each(a.navies, function(a) { return a.destroy() }), a.game.layers.dust.destroy() } }(this), 3e3), this.levelStarted = !0, this.game.MechManager.resetStates(), this.game.physics.box2d.paused = !1, this.game.forceSingleUpdate = !1, a = 0; a <= 3; ++a) this.game.updateLogic(this.game.time.desiredFpsMult); return this.game.updateRender(this.game.time.slowMotion * this.game.time.desiredFps), this.game.forceSingleUpdate = !0, this.game.physics.box2d.paused = !0, console.log("start timer, and whatever"), _.delay(function(a) { return function() { return a.camManager.camFreeze = !1, _.delay(function() { if (a.restartKey = a.game.input.keyboard.addKey(Phaser.Keyboard.R), a.restartKey.onDown.add(a.retry), null != a.game.physics.box2d) return a.ui.clock.start(), a.game.physics.box2d.paused = !1 }, 400) } }(this), 1600) }, m.prototype.sendScreenView = function() { return h5branding.google.sendScreenView("gameplay") }, m.prototype.togglePause = function() { return this.game.paused = !this.game.paused, this.game.paused ? (this.game.SideBanners.resize(!1), this.root.alpha.cacheAsBitmap = !0, this.pauseMenu.show(), this.ui.clock.pause()) : (this.game.SideBanners.destroyBanners(), this.sendScreenView(), this.root.alpha.cacheAsBitmap = !1, this.root.alpha = 1, this.pauseMenu.hide(), this.ui.clock.resume()) }, m.prototype.pauseUpdate = function() { if (this.loadCompleted) return this.pauseMenu.update(), null != this.pauseMenu.settingsMenu && this.pauseMenu.settingsMenu.update(), this.game.tweens.update(), this.camManager.update() }, m.prototype.setupLayers = function() { var a, b; return b = {}, this.root = this.game.make.group(0, 0), a = function(a) { return function(c) { return b[c] = a.game.make.group(), b[c].name = c, a.root.addChild(b[c]) } }(this), a("background"), a("tutorial"), a("underGround"), a("lights"), a("ground"), a("overGround"), a("chars"), a("overChars"), a("decorations"), a("liquids"), b.liquids.update = function() { return _.each(this.children, function(a) { return a.update() }) }, this.game.add.existing(this.root), b.ui = this.game.make.group(), b.ui.alpha = 0, this.game.add.existing(b.ui), b.ui.update = function() { return _.each(this.children, function(a) { return a.update() }) }, b.dust = this.game.make.group(), b.dust.sources = [], this.root.addChild(b.dust), this.game.layers = b }, m.prototype.setupDarkness = function() { var a, b; if (null != this.levelData.type && "dark" === this.levelData.type) return this.darknessBmd = a = this.game.add.bitmapData(this.size.width + 64, this.size.height + 64), a.offset = { x: 32, y: 32 }, this.darkness = b = this.game.make.sprite(-32, -32, a), b.blendMode = Phaser.blendModes.MULTIPLY, this.game.layers.darkGradients = this.game.make.group(0, 0), this.root.addChild(this.game.layers.darkGradients), this.root.addChild(b), this.updateDarkness(a), this.game.layers.darkGradients.update = function(b) { return function() { if (null != b.game.physics) return b.updateDarkness(a) } }(this) }, m.prototype.updateDarkness = function(a) { var b, c, d, e; for (a.ctx.globalCompositeOperation = "source-over", a.ctx.beginPath(), a.ctx.rect(0, 0, this.size.width + 64, this.size.height + 64), a.ctx.fillStyle = "#000000", a.ctx.fill(), this.pers1.drawDarkMask(a), this.pers2.drawDarkMask(a), e = this.objects, b = 0, c = e.length; b < c; b++) d = e[b], null != d.drawDarkMask && d.drawDarkMask(a); return a.dirty = !0 }, m.prototype.fillDustLayer = function() { var a, b, c, d; for (d = this.game.layers.dust, a = 0, b = Math.ceil(this.size.width / 20); 0 <= b ? a <= b : a >= b; 0 <= b ? ++a : --a) c = this.game.make.sprite(Math.random() * this.size.width, Math.random() * this.size.height, "GroundAssets", "BeamDust0000"), c.rotation = 180 * Math.random(), d.add(c); return d.maskGraphics = this.game.make.graphics(0, 0), this.root.addChild(d.maskGraphics), d.mask = d.maskGraphics, d }, m.prototype.createObjects = function(a, b) { var c, d, e, f, g, h; for (e = [], f = 0, g = b.length; f < g; f++) h = b[f], console.log("create", h.name, h.type), c = j.className(h.type), null != c ? (d = new c(this.game, h), e.push(d)) : console.warn("Object type " + h.type + " not found!"); return this.game.MechManager.connectPortals(), e }, m.prototype.createCharObjects = function(a, b) { var c, d, f; for (this.totalDiamonds = 0, c = 0, d = b.length; c < d; c++) f = b[c], console.log("found char object", f.type), "char" === f.type && (null == f.properties || "fb" === f.properties.char ? (this.pers1 = new e(this.game, f.x, f.y, "fb"), this.pers1.signal.add(this.checkEndGame)) : "wg" === f.properties.char && (this.pers2 = new e(this.game, f.x, f.y, "wg"), this.pers2.signal.add(this.checkEndGame))), "door" === f.type && (null == f.properties || "fb" === f.properties.char ? (this.door1 = new Devices.Door(this.game, f.x, f.y, "fb"), this.door1.signal.add(this.checkEndGame)) : "wg" === f.properties.char && (this.door2 = new Devices.Door(this.game, f.x, f.y, "wg"), this.door2.signal.add(this.checkEndGame))), "diamond" === f.type && (new Devices.Diamond(this.game, f.x, f.y, f.properties.char), "silver" !== f.properties.char && this.totalDiamonds++); return this.setupCursorToggle(), this.game.settingsSignal.add(this.onSettingChange) }, m.prototype.onSettingChange = function(a) { if ("controls" === a) return null != this.cursorToggle && (this.cursorToggle.destroy(), this.cursorToggle = null), this.setupCursorToggle() }, m.prototype.setupCursorToggle = function() { if ("single" === this.game.settings.controls) return this.game.TouchManager.register(this.pers1.bodySprite, "tap", function(a) { return function(b) { return a.cursorToggle.setChar("fb", b) } }(this)), this.game.TouchManager.register(this.pers2.bodySprite, "tap", function(a) { return function(b) { return a.cursorToggle.setChar("wg", b) } }(this)), this.cursorToggle = new f(this.game), this.game.layers.ui.addChild(this.cursorToggle), this.cursorToggle.onChange.add(function(a) { return function(b) { return "fb" === b ? (a.pers1.cursors.show(), a.pers2.cursors.hide()) : (a.pers1.cursors.hide(), a.pers2.cursors.show()) } }(this)) }, m.prototype.updateMusic = function() { if (null != this.sounds.levelMusic && this.sounds.levelMusic.stop(), this.game.settings.music) return this.sounds.levelMusic.play() }, m.prototype.checkEndGame = function() { if (!this.ended) return this.door1.isUp && this.door2.isUp && (this.ended = !0, this.game.physics.box2d.paused = !0, this.animateFinish()), this.pers1.isDead || this.pers2.isDead ? (this.ended = !0, this.game.physics.box2d.paused = !0, this.gameOver()) : void 0 }, m.prototype.animateFinish = function() { return this.game.level.sounds.levelMusic.stop(), this.game.level.sounds.levelMusicFinish.play(), this.pers1.animateStairs(this.door1), this.pers2.animateStairs(this.door2), _.delay(function(a) { return function() { return a.gameFinish() } }(this), 1600) }, m.prototype.gameFinish = function() { return this.game.SideBanners.resize(!1), this.levelState.diamonds = this.pers1.data.diamonds + this.pers2.data.diamonds, this.levelState.silverDiamond = this.pers1.data.silverDiamond + this.pers2.data.silverDiamond, this.levelState.time = this.ui.clock.getElapsedSeconds(), this.ui.clock.stop(), window.gameanalytics.GameAnalytics.addProgressionEvent(window.gameanalytics.EGAProgressionStatus.Complete, "Level", this.levelData.id.toString()), this.levelData.totalDiamonds = this.totalDiamonds, this.game.state.add("endGame", g), this.game.state.start("endGame", !1, !1, { success: !0, data: this.levelData, state: this.levelState, retry: this.retry }) }, m.prototype.update = function() { if (this.loadCompleted) return this.showfps && $("#debug-fps").html(this.game.time.fps), this.debug && this.game.debug.box2dWorld(), this.ui.update(), this.useDust && this.updateDust(), null != this.tutorialTexts && this.updateTutorial(), this.camManager.update() }, m.prototype.updateTutorial = function() { var a, b, c, d, e, f, g, h, i, j, k; for (f = this.tutorialTexts, h = [], a = 0, c = f.length; a < c; a++) { for (j = f[a], k = !1, g = j.rects, b = 0, d = g.length; b < d; b++) e = g[b], (e.contains(this.pers1.sprite.x, this.pers1.sprite.y) || e.contains(this.pers2.sprite.x, this.pers2.sprite.y)) && (k = !0); k && !j.shown && (j.visible = !0, j.shown = !0, j.alpha = 0, this.game.add.tween(j).to({ alpha: 1 }, 400, "Linear", !0)), !k && j.shown ? (j.shown = !1, j.alpha = 1, i = this.game.add.tween(j).to({ alpha: 0 }, 400, "Linear", !0), h.push(i.onComplete.add(function(a) { return function(a) { return a.visible = !1 } }()))) : h.push(void 0) } return h }, m.prototype.updateDust = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o; if (null != this.game.layers.dust && this.game.layers.dust.sources.length > 0) { for (i = !1, j = this.game.layers.dust.sources, c = 0, e = j.length; c < e; c++) o = j[c], o.dirty && (i = !0); if (i) { for (this.game.layers.dust.maskGraphics.clear(), this.game.layers.dust.maskGraphics.lineStyle(40, 0, 1), a = !0, k = this.game.layers.dust.sources, d = 0, f = k.length; d < f; d++) o = k[d], null != o.points && o.points.length > 0 && (a = !1, o.drawBeam(this.game.layers.dust.maskGraphics, o.points)); this.game.layers.dust.visible = !a } for (l = this.game.layers.dust.children, m = [], b = h = 0, g = l.length; h < g; b = ++h) n = l[b], n.angle += .002 * (b % 2 * 2 - 1), m.push(n.anchor.set(Math.sin(n.angle), Math.cos(n.angle))); return m } }, m.prototype.retry = function() { return this.game.level.sounds.levelMusic.stop(), window.gameanalytics.GameAnalytics.addProgressionEvent(window.gameanalytics.EGAProgressionStatus.Start, "Level", this.levelData.id.toString()), this.game.state.add("level", m), this.game.state.fade("level", !0, !1, this.levelData), this.killAll() }, m.prototype.gameOver = function() { return this.game.SideBanners.resize(!1), this.ui.clock.stop(), window.gameanalytics.GameAnalytics.addProgressionEvent(window.gameanalytics.EGAProgressionStatus.Fail, "Level", this.levelData.id.toString()), this.game.state.add("endGame", g), this.game.state.start("endGame", !1, !1, { success: !1, data: this.levelData, state: this.levelState, retry: this.retry }) }, m.prototype.quit = function() { return this.game.level.sounds.levelMusic.stop(), window.gameanalytics.GameAnalytics.addProgressionEvent(window.gameanalytics.EGAProgressionStatus.Fail, "Level", this.levelData.id.toString()), this.game.state.fade("levelMenu", !0, !1, this.game.currentTemple), this.killAll() }, m }(Phaser.State) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Common/BackButton", ["./Button", "Phaser"], function(b) { "use strict"; return function(b) { function c(a, b, d, e, f) { c.__super__.constructor.call(this, a, b, d, "MenuAssets", ["BackButton0000", "BackButton0001"], f, "pusher"), this.anchor.set(.5), this.label = a.make.bitmapText(0, 0, a.lang.font, e, 28), this.label.anchor.set(0), this.label.y = -this.label.textHeight / 2 - 12, this.label.x = 40, this.addChild(this.label) } return a(c, b), c }(b) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Buy/BuyMenu", ["../Level/IngameMenu", "../Common/StoneButton", "Phaser"], function(c, d) { "use strict"; return function(c) { function e(b, c) { this.close = a(this.close, this), this.renderContent = a(this.renderContent, this), e.__super__.constructor.call(this, b, c), this.onClose = new Phaser.Signal } return b(e, c), e.prototype.renderContent = function() { var a, b; return b = this.game.make.bitmapText(0, -this.contentSize.halfHeight / 2, this.game.lang.font, this.game.lang.locale("unlock_all"), 26), b.anchor.set(.5), this.board.addChild(b), a = new d(this.game, 0, 0, "1.19€", function(a) { return function() { return store.order("elements_full") } }()), a.anchor.set(.5), this.board.addChild(a), a = new d(this.game, 0, 1.1 * this.contentSize.halfHeight / 2, this.game.lang.locale("Cancel"), this.close), a.anchor.set(.5), this.board.addChild(a) }, e.prototype.close = function() { return this.hide(), _.delay(function(a) { return function() { return a.onClose.dispatch() } }(this), 1e3) }, e }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Common/SoftLockMenu", ["../Level/IngameMenu", "../Common/StoneButton", "Phaser"], function(c, d) { "use strict"; return function(c) { function e(b, c) { this.close = a(this.close, this), this.renderContent = a(this.renderContent, this), e.__super__.constructor.call(this, b, c), this.onClose = new Phaser.Signal } return b(e, c), e.prototype.renderContent = function() { var a, b, c; return c = this.game.lang.locale("this") + " " + this.game.lang.locale(this.options.label) + " " + this.game.lang.locale("not_yet"), b = this.game.make.bitmapText(0, -this.contentSize.halfHeight / 2 + 30, this.game.lang.font, c, 26), b.anchor.set(.5), this.board.addChild(b), b = this.game.make.bitmapText(0, -this.contentSize.halfHeight / 2 + 140, this.game.lang.font, this.game.lang.locale("complete_more"), 22), b.anchor.set(.5), this.board.addChild(b), b = this.game.make.bitmapText(0, -this.contentSize.halfHeight / 2 + 200, this.game.lang.font, this.game.lang.locale("to_unlock"), 22), b.anchor.set(.5), this.board.addChild(b), a = new d(this.game, 0, 1.1 * this.contentSize.halfHeight / 2, this.game.lang.locale("Ok!"), this.close), a.anchor.set(.5), this.board.addChild(a) }, e.prototype.close = function() { return this.hide(), _.delay(function(a) { return function() { return a.onClose.dispatch() } }(this), 1e3) }, e }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/LevelMenu/LevelMenuButtons", ["require", "Phaser", "./LevelButton", "States/Buy/BuyMenu", "States/Common/SoftLockMenu"], function(c) { var d, e, f, g; return f = c("Phaser"), e = c("./LevelButton"), d = c("States/Buy/BuyMenu"), g = c("States/Common/SoftLockMenu"), function(c) { function h(b, c) { this.buttonClick = a(this.buttonClick, this), this.toggleNumbers = a(this.toggleNumbers, this), this.destroy = a(this.destroy, this), this.layoutContent = a(this.layoutContent, this), this.showPopup = a(this.showPopup, this), h.__super__.constructor.call(this, b), this.onClick = new f.Signal, this.templeData = c, this.addContent() } return b(h, c), h.prototype.addContent = function() { var a, b, c, d, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D; for (j = .9 * this.game.realHeight, B = Math.min(1.2 * j, .9 * this.game.realWidth), 3, w = Math.min(j, B) < 800 ? .5 : .6, h = function(a) { return function(a) { return _.find(z.levels, function(b) { return b._id === a }) } }(), z = this.templeData, g = function(a) { return function(b, c) { var d, e, f, g, i, k, l, m, n, o, p, q, r; for (null == c && (c = 1), e = a.game.add.bitmapData(B, j), e.ctx.strokeStyle = a.templeData.color, e.ctx.lineWidth = 16 * w, o = z.edges, i = 0, m = o.length; i < m; i++) f = o[i], q = h(f.source), r = h(f.target), (b || q.state + r.state > 2) && (e.ctx.moveTo(q.x * B, q.y * j), e.ctx.lineTo(r.x * B, r.y * j), e.ctx.stroke()); for (p = z.levels, k = 0, n = p.length; k < n; k++) l = p[k], (b || l.state > 0) && (g = "puzzle" === l.type ? "DiamondPuzzle_Bkg_Mask" : "speed" === l.type ? "DiamondSpeed_Bkg_Mask" : "dark" === l.type ? "DiamondDark_Bkg_Mask" : "Diamond_Bkg_Mask", d = a.game.make.sprite(0, 0, "MenuAssets", g + "0000"), d.scale.set(w * c), e.draw(d, l.x * B - d.width / 2, l.y * j - d.height / 2)); return a.game.make.image(0, 0, e) } }(this), this.imageAll = g(!0), this.imageAllBig = g(!0, 1.2), this.imageDone = g(!1), l = new f.Filter.BevelFilter(this.game, B, j, 180, 0, 0, 1), l.init(), m = new f.Filter.BevelFilter(this.game, B, j, 200, 0, 0, -1), m.init(), t = new f.Filter.BevelFilter(this.game, B, j, 200, 0, 1, 1), t.init(), i = new f.Filter.ColorMatrix(this.game, B, j, 16766496), a = new f.Filter.ColorMatrix(this.game, B, j, parseInt("0x" + this.templeData.color.replace("#", ""))), u = new f.Filter.OutlineFilter(this.game, B, j, 3, 0), u.init(), d = function(a) { return function(b, c) { var d, e; return b.filters = c, d = new f.RenderTexture(a.game, B, j, "treeTexture", void 0, 1), a.game.renderer.renderSession.resolution = 1, d.renderRawXY(b, 0, 0, !0), a.game.renderer.renderSession.resolution = a.game.resolution, a.game.cache.addRenderTexture("treeTexture", d), e = a.game.make.sprite(0, 0, a.game.cache.getRenderTexture("treeTexture").texture), e.x = -B / 2, e.y = -j / 2, a.addChild(e), e } }(this), d(this.imageAllBig, [t, a]), d(this.imageAll, [m, a, u]), d(this.imageDone, [l, i]), this.imageAll.key.destroy(), this.imageAllBig.key.destroy(), this.imageDone.key.destroy(), this.imageAll.destroy(), this.imageAllBig.destroy(), this.imageDone.destroy(), x = function(a) { return function(a) { return 0 === a ? "0000" : 1 === a ? "0000" : 2 === a ? "0001" : 3 === a ? "0002" : 4 === a ? "0003" : void 0 } }(), s = this.game.make.group(0, 0), this.numbers = [], v = z.levels, k = n = 0, p = v.length; n < p; k = ++n) o = v[k], C = o.x * B - B / 2, D = o.y * j - j / 2, o.locked ? (q = new f.Sprite(this.game, C, D, "MenuAssets", "Lock0000"), q.scale.set(w), q.anchor.set(.5), this.addChild(q)) : (c = o.state > 0 ? this.buttonClick : function(a) { return function() { return a.showPopup({ type: "softLock" }) } }(this), b = new e(this.game, C, D, o.type, x(o.state), c), b.scale.set(w), b.anchor.set(.5), b.data = o, this.addChild(b), o.state > 0 && o.isNew && (r = new f.BitmapText(this.game, C, D, this.game.lang.font, this.game.lang.locale("new")), r.x += 40, r.y -= 20, r.scale.set(w), r.anchor.set(.5), s.addChild(r))), y = { font: "28px Arial", fill: "#ffffff", fontWeight: "bold", stroke: "#000000", strokeThickness: 4 }, A = this.game.make.text(C, D + 3, o.id, y), A.anchor.set(.5), A.cacheAsBitmap = !0, A.visible = !1, this.addChild(A), this.numbers.push(A); return this.addChild(s) }, h.prototype.showPopup = function(a) { var b; return console.log("show popup for", a.type), "softLock" === a.type ? b = new g(this.game, { label: "level" }) : "buyTemple" === a.type && (b = new d(this.game)), this.currentMenu = b, b.show(), b.onClose.add(function(a) { return function() { return a.currentMenu.destroy(), a.currentMenu = null } }(this)) }, h.prototype.layoutContent = function() { if (null != this.currentMenu && null != this.currentMenu.layoutContent) return this.currentMenu.layoutContent() }, h.prototype.destroy = function() { return null != this.currentMenu && this.currentMenu.destroy(), h.__super__.destroy.apply(this, arguments) }, h.prototype.toggleNumbers = function(a) { var b, c, d, e, f; for (d = this.numbers, e = [], b = 0, c = d.length; b < c; b++) f = d[b], e.push(f.visible = a); return e }, h.prototype.buttonClick = function(a) { return this.onClick.dispatch(a) }, h }(f.Sprite) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/LevelMenu/LevelMenuGrid", ["./LevelMenuButtons", "Phaser"], function(b) { "use strict"; return function(b) { function c() { return c.__super__.constructor.apply(this, arguments) } return a(c, b), c }(b) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/LevelMenu/LevelMenuTree", ["./LevelMenuButtons", "Phaser"], function(b) { "use strict"; return function(b) { function c() { return c.__super__.constructor.apply(this, arguments) } return a(c, b), c }(b) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Buy/Buy", ["./BuyMenu", "Phaser"], function(c) { "use strict"; return function(d) { function e() { return this.doKill = a(this.doKill, this), this.create = a(this.create, this), this.init = a(this.init, this), e.__super__.constructor.apply(this, arguments) } return b(e, d), e.prototype.init = function(a) { return this.levelState = a }, e.prototype.create = function() { return this.menu = new c(this.game), this.menu.show(), this.menu.onClose.add(this.doKill) }, e.prototype.doKill = function() { return this.menu.destroy(), _.delay(function(a) { return function() { return a.shutdown() } }(this), 1e3) }, e }(Phaser.State) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Complete/GameCompleteMenu", ["../Level/IngameMenu", "../Common/StoneButton", "Phaser"], function(c, d) { "use strict"; return function(c) { function e(b, c) { this.close = a(this.close, this), this.renderContent = a(this.renderContent, this), e.__super__.constructor.call(this, b, c), this.onClose = new Phaser.Signal } return b(e, c), e.prototype.renderContent = function() { var a, b; return b = this.game.make.bitmapText(0, -this.contentSize.halfHeight / 3, this.game.lang.font, this.game.lang.locale("congratulations"), 36), b.anchor.set(.5), this.board.addChild(b), b = this.game.make.bitmapText(0, -this.contentSize.halfHeight / 3 + 1.2 * b.height, this.game.lang.font, this.game.lang.locale("you_completed"), 28), b.anchor.set(.5), this.board.addChild(b), a = new d(this.game, 0, this.contentSize.halfHeight / 2, this.game.lang.locale("Ok"), this.close), a.anchor.set(.5), this.board.addChild(a) }, e.prototype.close = function() { return this.hide(), _.delay(function(a) { return function() { return a.onClose.dispatch() } }(this), 1e3) }, e }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Complete/Complete", ["./GameCompleteMenu", "Phaser"], function(c) { "use strict"; return function(d) { function e() { return this.doKill = a(this.doKill, this), this.create = a(this.create, this), this.preload = a(this.preload, this), this.init = a(this.init, this), e.__super__.constructor.apply(this, arguments) } return b(e, d), e.prototype.init = function(a) { return this.levelState = a }, e.prototype.preload = function() {}, e.prototype.create = function() { var a; return this.menu = new c(this.game, this.levelState), this.menu.show(), this.menu.onClose.add(this.doKill), this.emitter = a = this.game.add.emitter(0, -this.game.realHeight / 2, 200), a.width = this.game.realWidth, a.makeParticles("PopupAssets", ["Confetti0000", "Confetti0001", "Confetti0002", "Confetti0003"]), a.minParticleScale = .5, a.maxParticleScale = 1, a.setYSpeed(100, 200), a.setXSpeed(-5, 5), a.minRotation = 20, a.maxRotation = 50, a.start(!1, 2500, 60, 0) }, e.prototype.doKill = function() { return this.menu.destroy(), this.emitter.on = !1, _.delay(function(a) { return function() { return a.shutdown() } }(this), 5200) }, e }(Phaser.State) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/LevelMenu/LevelMenu", ["require", "Phaser", "../Common/UIState", "./LevelButton", "States/Level/Level", "../Common/BackButton", "../Common/Button", "./LevelMenuGrid", "./LevelMenuTree", "./LevelMenuButtons", "States/Buy/Buy", "States/Complete/Complete"], function(c) { var d, e, f, g, h, i, j, k; return c("Phaser"), k = c("../Common/UIState"), c("./LevelButton"), j = c("States/Level/Level"), d = c("../Common/BackButton"), e = c("../Common/Button"), h = c("./LevelMenuGrid"), i = c("./LevelMenuTree"), c("./LevelMenuButtons"), f = c("States/Buy/Buy"), g = c("States/Complete/Complete"), function(c) { function k() { this.goBack = a(this.goBack, this), this.startLevel = a(this.startLevel, this), this.layoutContent = a(this.layoutContent, this), this.afterAddContent = a(this.afterAddContent, this), this.toggleNumbers = a(this.toggleNumbers, this), this.preload = a(this.preload, this), this.init = a(this.init, this), this.onReady = new Phaser.Signal, k.__super__.constructor.apply(this, arguments) } return b(k, c), k.prototype.init = function(a) { return this.templeData = a, this.game.currentTemple = a }, k.prototype.preload = function() { var a; return k.__super__.preload.apply(this, arguments), a = "assets/atlasses/Temples/" + this.templeData.id, this.game.load.atlasJSONArray("TempleAssets", a + "/TempleAssets.png", a + "/TempleAssets.json"), h5branding.google.sendScreenView("level_menu") }, k.prototype.addContent = function() { var a, b, c, f, g, h; return console.log("createing MenuState"), this.game.stage.backgroundColor = "#000000", h = this.game.realWidth, c = this.game.realHeight, this.bkg = b = this.game.make.tileSprite(-h / 2, -c / 2, h, c, "TempleAssets", "MenuBackground0000"), this.root.addChild(b), "tree" === this.templeData.type ? (this.back = a = new d(this.game, -h / 2 + 100, c / 2 - 100, this.game.lang.locale("Back"), this.goBack), this.root.addChild(this.back), this.showNumBtn = new e(this.game, 0, 0, "", "", this.toggleNumbers), this.showNumBtn.numsVisible = !1, f = this.game.make.bitmapText(0, 0, this.game.lang.font, this.game.lang.locale("level_numbers"), 20), f.anchor.set(.5), this.showNumBtn.label = f, this.showNumBtn.addChild(f), this.root.addChild(this.showNumBtn)) : (c > 800 ? (g = this.game.make.bitmapText(0, -c / 2 + 120, this.game.lang.font, this.game.lang.locale(this.templeData.label), 38), g.anchor.set(0, .5), g.y = -c / 2 + 120, g.x = 0 - g.width / 2) : (g = this.game.make.bitmapText(-h / 2 + 50, -c / 2 + 50, this.game.lang.font, this.game.lang.locale(this.templeData.label), 32), g.anchor.set(0, .5), g.x = -h / 2 + 50, g.y = -c / 2 + 50), this.text = g, this.root.addChild(g), this.back = a = new d(this.game, -h / 2 + 100, 0, this.game.lang.locale("Back"), this.goBack), this.root.addChild(a)), this.afterAddContent(), this.onReady.dispatch() }, k.prototype.toggleNumbers = function() { return this.showNumBtn.numsVisible = !this.showNumBtn.numsVisible, this.buttons.toggleNumbers(this.showNumBtn.numsVisible) }, k.prototype.afterAddContent = function() { return this.game.progress.firstComplete && (this.game.progress.firstComplete = !1, this.game.state.add("gameComplete", g), this.game.state.start("gameComplete", !1, !1, { success: !0 })), ("cordova" === this.game.gameConfig.target || this.game.config.simulateCordova) && (this.unlockButton = new e(this.game, this.game.realWidth / 2 - 100, this.game.realHeight / 2 - 100, "MenuAssets", "UnlockButton0000", function(a) { return function() { return a.game.state.add("buy", f), a.game.state.start("buy", !1, !1, { success: !0 }) } }(this)), this.root.addChild(this.unlockButton)), this.layoutContent() }, k.prototype.layoutContent = function() { var a, b, c; return k.__super__.layoutContent.call(this), c = this.game.realWidth, a = this.game.realHeight, this.bkg.width = c, this.bkg.height = a, this.bkg.x = -c / 2, this.bkg.y = -a / 2, null != this.text && (a > 800 ? (this.text.fontSize = 38, this.text.anchor.set(0, .5), this.text.y = -a / 2 + 100, this.text.x = 0 - this.text.width / 2) : (this.text.fontSize = 32, this.text.anchor.set(0, .5), this.text.x = -c / 2 + 50, this.text.y = -a / 2 + 50)), null != this.back && (this.templeData.type, b = this.back.sprite.height / 4, this.back.x = -c / 2 + this.back.sprite.width / 2 + b, this.back.y = a / 2 - this.back.sprite.height / 2 - b), null != this.unlockButton && (this.unlockButton.x = this.game.realWidth / 2 - 100, this.unlockButton.y = this.game.realHeight / 2 - 100), null != this.showNumBtn && (this.showNumBtn.x = this.game.realWidth / 2 - this.showNumBtn.label.textWidth / 2 - 40, this.showNumBtn.y = this.game.realHeight / 2 - this.showNumBtn.label.textHeight / 2 - 40), null != this.buttons && this.buttons.destroy(), "tree" === this.templeData.type ? (this.buttons = new i(this.game, this.templeData), this.buttons.onClick.add(this.startLevel), this.root.addChild(this.buttons)) : (this.buttons = new h(this.game, this.templeData), this.buttons.onClick.add(this.startLevel), this.root.addChild(this.buttons)) }, k.prototype.startLevel = function(a) { return this.game.progress.setPlayed(a.data), window.gameanalytics.GameAnalytics.addProgressionEvent(window.gameanalytics.EGAProgressionStatus.Start, "Level", a.data.id.toString()), null != this.game.menuMusic && (this.game.menuMusic.fadeOut(500), this.game.menuMusic.onFadeComplete.add(function(a) { return a.stop() })), this.game.state.add("level", j), this.game.state.fade("level", !0, !1, a.data) }, k.prototype.goBack = function() { return "menu" !== this.game.state.current ? this.game.state.fade("menu", !0, !1) : console.log("dasfasdfa") }, k }(k) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Credits/CreditsMenu", ["../Level/IngameMenu", "../Common/StoneButton", "Phaser"], function(c, d) { "use strict"; return function(c) { function e(b, c) { this.close = a(this.close, this), this.show = a(this.show, this), this.renderContent = a(this.renderContent, this), e.__super__.constructor.call(this, b, c), this.onClose = new Phaser.Signal } return b(e, c), e.prototype.renderContent = function() { var a, b, c, e; return this.contentSize.halfWidth, b = this.contentSize.halfHeight, e = this.game.lang.locale("credits_to"), c = this.game.make.bitmapText(0, -160, this.game.lang.font, e, 20, "center"), c.anchor.set(.5), this.board.addChild(c), e = "Oslo Albet \r \r Anna Tamarit \r \r Jan Villanueva", c = this.game.make.bitmapText(0, -40, "font_en", e, 24, "center"), c.anchor.set(.5), this.board.addChild(c), e = "Septimania 2018", c = this.game.make.bitmapText(0, 80, "font_en", e, 16, "center"), c.anchor.set(.5), this.board.addChild(c), a = new d(this.game, 0, 1.1 * b / 2, this.game.lang.locale("Ok"), this.close), a.anchor.set(.5), this.board.addChild(a) }, e.prototype.show = function() { return e.__super__.show.call(this), h5branding.google.sendScreenView("credits") }, e.prototype.close = function() { return this.hide(), _.delay(function(a) { return function() { return a.onClose.dispatch() } }(this), 1e3) }, e }(c) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Menu/SkirbyUpsellButton", ["require", "Phaser", "States/Common/Button"], function(c) { var d; return c("Phaser"), d = c("States/Common/Button"), function(c) { function d(b, c, e) { this.openAffiliateLink = a(this.openAffiliateLink, this), d.__super__.constructor.call(this, b, c, e, "skirby-upsell", null, this.openAffiliateLink), this.anchor.set(.5) } return b(d, c), d.prototype.openAffiliateLink = function() { return window.open("https://skirby.refersion.com/c/4ab1c2", "_blank") }, d }(d) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Menu/Menu", ["require", "Phaser", "../Common/UIState", "../Common/Button", "States/LevelMenu/LevelMenu", "States/Level/Level", "States/Buy/BuyMenu", "States/Settings/SettingsMenu", "States/Credits/CreditsMenu", "States/Menu/TempleHall", "States/Complete/Complete", "../Common/GoldButton", "States/Menu/SkirbyUpsellButton", "h5branding"], function(c) { var d, e, f, g, h, i, j, k, l, m; return c("Phaser"), l = c("../Common/UIState"), d = c("../Common/Button"), h = c("States/LevelMenu/LevelMenu"), i = c("States/Level/Level"), e = c("States/Buy/BuyMenu"), j = c("States/Settings/SettingsMenu"), f = c("States/Credits/CreditsMenu"), c("States/Menu/TempleHall"), c("States/Complete/Complete"), g = c("../Common/GoldButton"), k = c("States/Menu/SkirbyUpsellButton"), m = c("h5branding"), function(c) { function l() { this.layoutContent = a(this.layoutContent, this), this.skipToLevel = a(this.skipToLevel, this), this.startTemple = a(this.startTemple, this), this.showBuy = a(this.showBuy, this), this.showCredits = a(this.showCredits, this), this.showSettings = a(this.showSettings, this), this.afterAddContent = a(this.afterAddContent, this), this.preload = a(this.preload, this), this.onReady = new Phaser.Signal, l.__super__.constructor.apply(this, arguments) } return b(l, c), l.prototype.preload = function() { return l.__super__.preload.apply(this, arguments), m.google.sendScreenView("main_menu") }, l.prototype.afterAddContent = function() { var a, b, c, e, f, h, i, j, l; if (("cordova" === this.game.gameConfig.target || this.game.config.simulateCordova) && (this.unlockButton = new d(this.game, this.game.realWidth / 2 - 100, this.game.realHeight / 2 - 100, "MenuAssets", "UnlockButton0000", this.showBuy, "pusher"), this.root.addChild(this.unlockButton)), "cordova" !== this.game.gameConfig.target && !this.game.config.simulateCordova && (j = this.game.getStoreObjects(), j.length > 0)) for (this.appStoreButtons = [], e = 0, f = j.length; e < f; e++) i = j[e], h = function(a) { return function(a) { return window.open(a.data.url, "_blank") } }(), a = new d(this.game, 0, 0, i.image, null, h, "pusher"), a.data = i, a.anchor.set(1), this.root.addChild(a), this.appStoreButtons.push(a); return c = "multi" === this.game.gameConfig.type ? ["SettingsButton0000", "SettingsButton0001"] : ["SettingsButton0002", "SettingsButton0003"], this.settingsButton = new d(this.game, -this.game.realWidth / 2 + 100, this.game.realHeight / 2 - 100, "MenuAssets", c, this.showSettings, "pusher"), this.root.addChild(this.settingsButton), this.creditsBtn = b = new g(this.game, this.game.realWidth / 2 - 40, -this.game.realHeight / 2 + 40, "?", this.showCredits, 30), this.creditsBtn.hitArea = new PIXI.Circle(0, 0, 3 * b.width), this.root.addChild(b), m.Branding.outGoingLinksAllowed() && (this.upsellButton = l = new k(this.game, this.game.realWidth / 2 - 100, 0), this.root.addChild(l)), this.game.SideBanners.resize(!1), this.layoutContent() }, l.prototype.showSettings = function() { var a; return a = new j(this.game, this.levelState), a.show(), this.currentMenu = a, a.onClose.add(function(b) { return function() { return a.destroy(), b.currentMenu = null, m.google.sendScreenView("main_menu") } }(this)) }, l.prototype.showCredits = function() { var a; return a = new f(this.game), a.show(), this.currentMenu = a, a.onClose.add(function(b) { return function() { return a.destroy(), b.currentMenu = null, m.google.sendScreenView("main_menu") } }(this)) }, l.prototype.showBuy = function() { var a; return a = new e(this.game), a.show(), this.currentMenu = a, a.onClose.add(function(b) { return function() { return a.destroy(), b.currentMenu = null, m.google.sendScreenView("main_menu") } }(this)) }, l.prototype.startTemple = function(a) { return this.game.state.add("levelMenu", h), this.game.state.start("levelMenu", !0, !1, a) }, l.prototype.skipToLevel = function(a) { return a || (a = { id: 0, filename: "", required: 0 }), this.game.state.add("level", i), this.game.state.fade("level", !0, !1, a) }, l.prototype.layoutContent = function() { var a, b, c, d, e; if (l.__super__.layoutContent.call(this), this.game.realWidth, this.game.realHeight, null != this.unlockButton && (this.unlockButton.x = this.game.realWidth / 2 - 100, this.unlockButton.y = this.game.realHeight / 2 - 100, this.game.realWidth <= 900 ? (this.unlockButton.x = this.game.realWidth / 2 - 50, this.unlockButton.scale.set(.7)) : this.unlockButton.scale.set(1)), null != this.appStoreButtons && this.appStoreButtons.length > 0) { for (e = this.appStoreButtons, b = c = 0, d = e.length; c < d; b = ++c) a = e[b], (this.game.realWidth - 800) / 2 < 120 ? a.scale.set(.4) : (this.game.realWidth - 800) / 2 < 180 ? a.scale.set(.45) : a.scale.set(.6), a.x = this.game.realWidth / 2 - 20, a.y = this.game.realHeight / 2 - 20 - b * a.height, "coolmathgames.com" === m.Utils.getSourceSite() && (a.scale.set(.25), a.x = this.game.realWidth / 2 - 20 - b * a.width, a.y = this.game.realHeight / 2 - 20); this.upsellButton && (this.game.realWidth >= 1250 && this.game.realHeight >= 810 ? (this.upsellButton.x = 0, this.upsellButton.y = this.game.realHeight / 2 - 50) : (this.upsellButton.x = this.game.realWidth / 2 - 100, this.upsellButton.y = 0)) } if (null != this.settingsButton && (this.settingsButton.x = -this.game.realWidth / 2 + 100, this.settingsButton.y = this.game.realHeight / 2 - 100, this.game.realWidth <= 900 && (this.settingsButton.x = -this.game.realWidth / 2 + 50)), null != this.creditsBtn && (this.creditsBtn.x = -this.game.realWidth / 2 + 200, this.creditsBtn.y = this.game.realHeight / 2 - 100), null != this.currentMenu) return this.currentMenu.layoutContent() }, l }(l) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Menu/SingleMenu", ["require", "Phaser", "States/Menu/TempleHall", "States/Menu/Menu"], function(c) { var d, e; return c("Phaser"), e = c("States/Menu/TempleHall"), d = c("States/Menu/Menu"), function(c) { function d() { return this.layoutContent = a(this.layoutContent, this), this.addContent = a(this.addContent, this), this.preload = a(this.preload, this), d.__super__.constructor.apply(this, arguments) } return b(d, c), d.prototype.preload = function() { return d.__super__.preload.apply(this, arguments) }, d.prototype.addContent = function() { var a; return this.templeHall = a = new e(this.game, 0, 0), this.root.addChild(a), a.onStart.add(this.startTemple), this.onReady.dispatch(), this.afterAddContent() }, d.prototype.layoutContent = function() { return d.__super__.layoutContent.call(this), this.templeHall.layoutContent() }, d }(d) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Menu/TempleSelector", ["../Common/StoneButton", "../Common/Button", "Phaser"], function(c, d) { "use strict"; return function(c) { function e(b, c, f) { this.destroy = a(this.destroy, this), this.layoutContent = a(this.layoutContent, this), this.getTarget = a(this.getTarget, this), this.update = a(this.update, this), this.showBuyTemple = a(this.showBuyTemple, this), this.showSoftLockWarning = a(this.showSoftLockWarning, this), this.templeClicked = a(this.templeClicked, this), this.resize = a(this.resize, this), this.preload = a(this.preload, this); var g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D; for (e.__super__.constructor.call(this, b, c, f, "MenuBackgrounds", "_default0000"), this.onSelected = new Phaser.Signal, this.onMove = new Phaser.Signal, this.onTarget = new Phaser.Signal, this.onShowPopup = new Phaser.Signal, this.icon_distance = 256, this.strip_height = A = 300, D = this.game.realWidth, this.strip = this.game.make.sprite(1 / 0, 0, "MenuBackgrounds", "_default0000"), this.addChild(this.strip), j = Math.ceil(this.game.realWidth / 256), this.bs = i = [], i[0] = this.game.make.group(), i[1] = this.game.make.group(), p = q = 0, u = i.length; q < u; p = ++q) { for (g = i[p], m = r = 0, y = j; 0 <= y ? r <= y : r >= y; m = 0 <= y ? ++r : --r) h = this.game.make.sprite(-D / 2 + 255 * m, -A, "MenuBackgrounds", "SimpleBackground0000"), g.addChild(h); g.cacheAsBitmap = !0, g.x = -p * g.width, this.strip.addChild(g) } for (C = b.progress.get("temples"), this.icons = [], m = s = 0, v = C.length; s < v; m = ++s) B = C[m], o = B.icon || B.id, B.locked && !this.game.config.devUnlock ? (n = new d(b, B.index * this.icon_distance, -A / 2, "TempleIcons", [o + "Icon0000", o + "Icon0000"], function(a) { return function() { return a.showBuyTemple(B) } }(this)), w = new Phaser.Sprite(this.game, 0, 0, "MenuAssets", "GoldLock0000"), w.scale.set(1), w.anchor.set(.5), n.addChild(w)) : B.softLocked && !this.game.config.devUnlock ? n = new d(b, B.index * this.icon_distance, -A / 2, "TempleIcons", [o + "Icon0000", o + "Icon0000"], this.showSoftLockWarning) : (n = new d(b, B.index * this.icon_distance, -A / 2, "TempleIcons", [o + "Icon0001", o + "Icon0002"], this.templeClicked, null), B.hasNew && (x = new Phaser.Sprite(this.game, 0, 0, "MenuAssets", "NewSign0000"), x.scale.set(.7), x.x += 60, x.y -= 60, x.anchor.set(.5), n.addChild(x))), n.anchor.set(.5), n.data = B, this.icons.push(n), this.strip.addChild(n); this.currentX = this._x = 0, this.v = 0, this.a = 0, this.anchor = 0, b.TouchManager.register(this.strip, "panstart", function(a) { return function(b) { return a.panning = !0 } }(this)), b.TouchManager.register(this.strip, "panmove", function(a) { return function(c) { if (!0 === a.panning) return a._x = a.currentX + c.deltaX / b.camera.scale.x, a.v = 10 * c.overallVelocityX } }(this)), b.TouchManager.register(this.strip, "panend", function(a) { return function(b) { return a.panning = !1, a.didpan = !0 } }(this)), l = this.game.make.group(0, 0), this.cover = k = this.game.make.sprite(0, 50, "MenuBackgrounds", "SliderHolder0000"), k.anchor.set(.5, 1), this.leftSide = t = this.game.make.tileSprite(-k.width / 2, 50, (this.game.realWidth - k.width) / 2, k.height, "MenuBackgrounds", "HolderTexture0000"), this.rigthSide = z = this.game.make.tileSprite(k.width / 2, 50, (this.game.realWidth - k.width) / 2, k.height, "MenuBackgrounds", "HolderTexture0000"), t.anchor.set(1, 1), z.anchor.set(0, 1), l.addChild(k), l.addChild(t), l.addChild(z), k.cacheAsBitmap = !0, t.cacheAsBitmap = !0, z.cacheAsBitmap = !0, this.addChild(l), b.TouchManager.register(t, "touchstart", function(a) { return function(a) { return console.log("prevent event") } }()), b.TouchManager.register(t, "mousedown", function(a) { return function(a) { return console.log("prevent event") } }()), b.TouchManager.register(t, "panstart", function(a) { return function(a) { return console.log("prevent event") } }()), b.TouchManager.register(z, "touchstart", function(a) { return function(a) { return console.log("prevent event") } }()), b.TouchManager.register(z, "mousedown", function(a) { return function(a) { return console.log("prevent event") } }()), b.TouchManager.register(z, "panstart", function(a) { return function(a) { return console.log("prevent event") } }()), p = null != this.game.currentTemple ? this.game.currentTemple.index : 0, this._x = this.anchor = -this.icon_distance * p } return b(e, c), e.prototype.preload = function() {}, e.prototype.resize = function() { var a; return a = this.game.realWidth, this.background.width = a, this.background.x = -a / 2, this.leftSide.width = (this.game.realWidth - this.cover.width) / 2, this.rigthSide.width = (this.game.realWidth - this.cover.width) / 2, this.leftSide.x = -this.cover.width / 2, this.rigthSide.x = this.cover.width / 2 }, e.prototype.templeClicked = function(a) { return this.didpan || (this.game.currentSounds.pusher.play(), console.log("clicked temple" + a.data.id), this.onSelected.dispatch(a.data)), this.didpan = !1 }, e.prototype.showSoftLockWarning = function() { return this.didpan || (console.log("should trigger to show 'complete more levels'"), this.onShowPopup.dispatch({ type: "softLock" })), this.didpan = !1 }, e.prototype.showBuyTemple = function(a) { return this.didpan || (console.log("should trigger to show 'buy this temple'"), this.onShowPopup.dispatch({ type: "buyTemple", value: a })), this.didpan = !1 }, e.prototype.update = function() { var a, b, c, d, e, f, g, h, i, j, k; for (this.panning ? this.a = 0 : (b = Math.min(.04, this.game.time.elapsed / 1e3), this.a = (this.anchor - this._x) * b * .25, this.v += this.a, this.v *= .9, this._x += this.v, this.currentX = this._x), this.anchor = this.icon_distance * Math.round(this._x / this.icon_distance), i = this.icons, e = 0, g = i.length; e < g; e++) d = i[e], d.x + this._x >= ((this.icons.length - 2) / 2 + 1) * this.icon_distance ? d.x -= this.icons.length * this.icon_distance : d.x + this._x < -((this.icons.length - 2) / 2 + 1) * this.icon_distance && (d.x += this.icons.length * this.icon_distance); for (j = this.bs, c = f = 0, h = j.length; f < h; c = ++f) a = j[c], a.x + this._x > a.width && (a.x -= 2 * a.width), a.x + this._x < -a.width && (a.x += 2 * a.width); if (this.lastAnchor !== this.anchor && (this.lastAnchor = this.anchor, k = this.getTarget(), this.onTarget.dispatch(k)), this.strip.x !== Math.round(this._x)) return this.strip.x = Math.round(this._x), this.onMove.dispatch() }, e.prototype.getTarget = function() { return this.icons.sort(function(a) { return function(b, c) { return Math.abs(a._x + b.x) - Math.abs(a._x + c.x) } }(this))[0] }, e.prototype.layoutContent = function() { return this.leftSide.width = (this.game.realWidth - this.cover.width) / 2, this.rigthSide.width = (this.game.realWidth - this.cover.width) / 2 }, e.prototype.destroy = function() { return this.game.TouchManager.unregister(this.leftSide, "touchstart"), this.game.TouchManager.unregister(this.leftSide, "mousedown"), this.game.TouchManager.unregister(this.leftSide, "panstart"), this.game.TouchManager.unregister(this.rigthSide, "touchstart"), this.game.TouchManager.unregister(this.rigthSide, "mousedown"), this.game.TouchManager.unregister(this.rigthSide, "panstart"), this.game.TouchManager.unregister(this.strip, "panstart"), this.game.TouchManager.unregister(this.strip, "panmove"), this.game.TouchManager.unregister(this.strip, "panend"), e.__super__.destroy.apply(this, arguments) }, e }(Phaser.Sprite) }) }.call(this), Phaser.Filter.BWMatrix = function(a, b, c, d) { Phaser.Filter.call(this, a), this.passes = [this]; offset = 1.7, this.uniforms = { matrix: { type: "mat4", value: [.3, .6, .1, 0, .3, .6, .1, 0, .3, .6, .1, 0, 0, 0, 0, 1] } }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float invert;", "uniform mat4 matrix;", "uniform sampler2D uSampler;", "void main(void) {", " gl_FragColor = texture2D(uSampler, vTextureCoord) * matrix;", "}"] }, Phaser.Filter.BWMatrix.prototype = Object.create(Phaser.Filter.prototype), Phaser.Filter.BWMatrix.prototype.constructor = Phaser.Filter, Object.defineProperty(Phaser.Filter.BWMatrix.prototype, "color", { set: function(a) { var b = ((16711680 & a) >> 16) / 255, c = ((65280 & a) >> 8) / 255, d = (255 & a) / 255; this.uniforms.outlineColor.value = { x: b, y: c, z: d, w: 1 }, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.BWMatrix.prototype, "viewWidth", { set: function(a) { this.uniforms.pixelWidth.value = 1 / a, this.dirty = !0 } }), Object.defineProperty(Phaser.Filter.BWMatrix.prototype, "viewHeight", { set: function(a) { this.uniforms.pixelHeight.value = 1 / a, this.dirty = !0 } }), define("bwMatrix", ["Phaser"], function(a) { return function() { return a.bwMatrix } }(this)), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Menu/MultiHall", ["require", "Phaser", "../Common/GoldButton", "../Common/Navies", "States/Menu/TempleSelector", "States/Buy/BuyMenu", "States/Common/SoftLockMenu", "bwMatrix"], function(c) { var d, e, f, g, h; return f = c("Phaser"), c("../Common/GoldButton"), e = c("../Common/Navies"), h = c("States/Menu/TempleSelector"), d = c("States/Buy/BuyMenu"), g = c("States/Common/SoftLockMenu"), c("bwMatrix"), function(c) { function i(b, c, d) { this.destroy = a(this.destroy, this), this.showPopup = a(this.showPopup, this), this.layoutContent = a(this.layoutContent, this), this.update = a(this.update, this), this.drawBackgrounds = a(this.drawBackgrounds, this), this.setBackground = a(this.setBackground, this); var g, j; i.__super__.constructor.call(this, b, c, d), this.templeSelector = g = new h(this.game, 0, this.game.realHeight / 2), this.w = this.game.realWidth, this.h = this.game.realHeight, this.paralaxFactor = 3, this.bkg = this.drawBackgrounds(), this.addChild(this.bkg), this.title = j = this.game.make.sprite(0, 0, "GameName"), j.anchor.set(.5, .5), j.cacheAsBitmap = !0, this.addChild(j), this.onStart = new f.Signal, g.onTarget.add(_.debounce(this.setBackground, 800)), g.onSelected.add(function(a) { return function(b) { return a.onStart.dispatch(b) } }(this)), g.onShowPopup.add(this.showPopup), this.addChild(g), this.navies = new e(this.game, 0, 0), this.addChild(this.navies), this.game.time.advancedTiming = !0, this.setBackground(g.getTarget(), !1) } return b(i, c), i.prototype.setBackground = function(a, b) { var c, d; if (null == b && (b = !0), c = this.backgroundImages[a.data.id], this.currentBkg !== c) return b && (c.alpha = 0, d = this.game.add.tween(c).to({ alpha: 1 }, 800, f.Easing.Quadratic.InOut, !0), d.onComplete.add(function(a) { return function() { return c.alpha = 1 } }())), this.currentBkg = c, this.bkg.addChild(c), this.bkg.bringToTop(c) }, i.prototype.drawBackgrounds = function() { var a, b, c, d, e, f, g, h, i, j, k; for (k = this.game.progress.get("temples"), this.backgroundImages = {}, this.bkgBmd = a = this.game.make.bitmapData(1366, 768), a.fill(0, 0, 0, 1), c = this.game.make.sprite(0, 0, a), c.anchor.set(.5), d = f = 0, g = k.length; f < g; d = ++f) j = k[d], i = j.id, e = "TempleHall" + i.charAt(0).toUpperCase() + i.slice(1), j.locked || j.softLocked ? b = c : (b = this.game.make.sprite(0, 0, e), b.anchor.set(.5), h = Math.max(this.w / 1366, this.h / 768), b.scale.set(h), b.cacheAsBitmap = !0), this.backgroundImages[j.id] = b; return this.game.make.group(0, 0) }, i.prototype.update = function() { return this.game.config.showFps && $("#debug-fps").html(this.game.time.fps), this.templeSelector.update(), this.navies.update() }, i.prototype.layoutContent = function() { var a, b, c, d; this.w = this.game.realWidth, this.h = this.game.realHeight, d = Math.max(this.w / 1366, this.h / 768), c = this.backgroundImages; for (b in c) a = c[b], a.scale.set(d), a.x = 0; return this.templeSelector.y = this.game.realHeight / 2, this.templeSelector.layoutContent(), this.title.y = -this.game.realHeight / 2 + (this.game.realHeight - this.templeSelector.height) / 2 - this.title.height / 2, this.navies.y = this.game.realHeight / 2 - this.templeSelector.strip_height / 2 }, i.prototype.showPopup = function(a) { var b; return console.log("show popup for", a.type), "softLock" === a.type ? b = new g(this.game, { label: "temple" }) : "buyTemple" === a.type && (b = new d(this.game)), b.show(), b.onClose.add(b.destroy) }, i.prototype.destroy = function() { return this.bkgBmd.destroy(), i.__super__.destroy.apply(this, arguments) }, i }(f.Sprite) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Menu/MultiMenu", ["require", "Phaser", "States/Menu/Menu", "States/Menu/MultiHall", "States/Menu/TempleSelector"], function(c) { var d, e; return c("Phaser"), d = c("States/Menu/Menu"), e = c("States/Menu/MultiHall"), c("States/Menu/TempleSelector"), function(c) { function d() { return this.shutdown = a(this.shutdown, this), this.layoutContent = a(this.layoutContent, this), this.update = a(this.update, this), this.addContent = a(this.addContent, this), this.preload = a(this.preload, this), d.__super__.constructor.apply(this, arguments) } return b(d, c), d.prototype.preload = function() { return d.__super__.preload.apply(this, arguments) }, d.prototype.addContent = function() { var a; return this.inputEnableChildren = !0, this.templeHall = a = new e(this.game, 0, 0), this.root.addChild(a), a.onStart.add(this.startTemple), this.afterAddContent(), this.onReady.dispatch() }, d.prototype.update = function() { if (null != this.templeHall) return this.templeHall.update() }, d.prototype.layoutContent = function() { return d.__super__.layoutContent.call(this), this.templeHall.layoutContent() }, d.prototype.shutdown = function() { return this.templeHall.destroy() }, d }(d) }) }.call(this), function() { var a = "object" == typeof self && self.self === self && self || "object" == typeof global && global.global === global && global || this || {}, b = a._, c = Array.prototype, d = Object.prototype, e = "undefined" != typeof Symbol ? Symbol.prototype : null, f = c.push, g = c.slice, h = d.toString, i = d.hasOwnProperty, j = Array.isArray, k = Object.keys, l = Object.create, m = function() {}, n = function(a) { return a instanceof n ? a : this instanceof n ? void(this._wrapped = a) : new n(a) }; "undefined" == typeof exports || exports.nodeType ? a._ = n : ("undefined" != typeof module && !module.nodeType && module.exports && (exports = module.exports = n), exports._ = n), n.VERSION = "1.9.1"; var o, p = function(a, b, c) { if (void 0 === b) return a; switch (null == c ? 3 : c) { case 1: return function(c) { return a.call(b, c) }; case 3: return function(c, d, e) { return a.call(b, c, d, e) }; case 4: return function(c, d, e, f) { return a.call(b, c, d, e, f) } } return function() { return a.apply(b, arguments) } }, q = function(a, b, c) { return n.iteratee !== o ? n.iteratee(a, b) : null == a ? n.identity : n.isFunction(a) ? p(a, b, c) : n.isObject(a) && !n.isArray(a) ? n.matcher(a) : n.property(a) }; n.iteratee = o = function(a, b) { return q(a, b, 1 / 0) }; var r = function(a, b) { return b = null == b ? a.length - 1 : +b, function() { for (var c = Math.max(arguments.length - b, 0), d = Array(c), e = 0; e < c; e++) d[e] = arguments[e + b]; switch (b) { case 0: return a.call(this, d); case 1: return a.call(this, arguments[0], d); case 2: return a.call(this, arguments[0], arguments[1], d) } var f = Array(b + 1); for (e = 0; e < b; e++) f[e] = arguments[e]; return f[b] = d, a.apply(this, f) } }, s = function(a) { if (!n.isObject(a)) return {}; if (l) return l(a); m.prototype = a; var b = new m; return m.prototype = null, b }, t = function(a) { return function(b) { return null == b ? void 0 : b[a] } }, u = function(a, b) { return null != a && i.call(a, b) }, v = function(a, b) { for (var c = b.length, d = 0; d < c; d++) { if (null == a) return; a = a[b[d]] } return c ? a : void 0 }, w = Math.pow(2, 53) - 1, x = t("length"), y = function(a) { var b = x(a); return "number" == typeof b && b >= 0 && b <= w }; n.each = n.forEach = function(a, b, c) { b = p(b, c); var d, e; if (y(a)) for (d = 0, e = a.length; d < e; d++) b(a[d], d, a); else { var f = n.keys(a); for (d = 0, e = f.length; d < e; d++) b(a[f[d]], f[d], a) } return a }, n.map = n.collect = function(a, b, c) { b = q(b, c); for (var d = !y(a) && n.keys(a), e = (d || a).length, f = Array(e), g = 0; g < e; g++) { var h = d ? d[g] : g; f[g] = b(a[h], h, a) } return f }; var z = function(a) { var b = function(b, c, d, e) { var f = !y(b) && n.keys(b), g = (f || b).length, h = a > 0 ? 0 : g - 1; for (e || (d = b[f ? f[h] : h], h += a); h >= 0 && h < g; h += a) { var i = f ? f[h] : h; d = c(d, b[i], i, b) } return d }; return function(a, c, d, e) { var f = arguments.length >= 3; return b(a, p(c, e, 4), d, f) } }; n.reduce = n.foldl = n.inject = z(1), n.reduceRight = n.foldr = z(-1), n.find = n.detect = function(a, b, c) { var d = y(a) ? n.findIndex : n.findKey, e = d(a, b, c); if (void 0 !== e && -1 !== e) return a[e] }, n.filter = n.select = function(a, b, c) { var d = []; return b = q(b, c), n.each(a, function(a, c, e) { b(a, c, e) && d.push(a) }), d }, n.reject = function(a, b, c) { return n.filter(a, n.negate(q(b)), c) }, n.every = n.all = function(a, b, c) { b = q(b, c); for (var d = !y(a) && n.keys(a), e = (d || a).length, f = 0; f < e; f++) { var g = d ? d[f] : f; if (!b(a[g], g, a)) return !1 } return !0 }, n.some = n.any = function(a, b, c) { b = q(b, c); for (var d = !y(a) && n.keys(a), e = (d || a).length, f = 0; f < e; f++) { var g = d ? d[f] : f; if (b(a[g], g, a)) return !0 } return !1 }, n.contains = n.includes = n.include = function(a, b, c, d) { return y(a) || (a = n.values(a)), ("number" != typeof c || d) && (c = 0), n.indexOf(a, b, c) >= 0 }, n.invoke = r(function(a, b, c) { var d, e; return n.isFunction(b) ? e = b : n.isArray(b) && (d = b.slice(0, -1), b = b[b.length - 1]), n.map(a, function(a) { var f = e; if (!f) { if (d && d.length && (a = v(a, d)), null == a) return; f = a[b] } return null == f ? f : f.apply(a, c) }) }), n.pluck = function(a, b) { return n.map(a, n.property(b)) }, n.where = function(a, b) { return n.filter(a, n.matcher(b)) }, n.findWhere = function(a, b) { return n.find(a, n.matcher(b)) }, n.max = function(a, b, c) { var d, e, f = -1 / 0, g = -1 / 0; if (null == b || "number" == typeof b && "object" != typeof a[0] && null != a) { a = y(a) ? a : n.values(a); for (var h = 0, i = a.length; h < i; h++) null != (d = a[h]) && d > f && (f = d) } else b = q(b, c), n.each(a, function(a, c, d) { ((e = b(a, c, d)) > g || e === -1 / 0 && f === -1 / 0) && (f = a, g = e) }); return f }, n.min = function(a, b, c) { var d, e, f = 1 / 0, g = 1 / 0; if (null == b || "number" == typeof b && "object" != typeof a[0] && null != a) { a = y(a) ? a : n.values(a); for (var h = 0, i = a.length; h < i; h++) null != (d = a[h]) && d < f && (f = d) } else b = q(b, c), n.each(a, function(a, c, d) { ((e = b(a, c, d)) < g || e === 1 / 0 && f === 1 / 0) && (f = a, g = e) }); return f }, n.shuffle = function(a) { return n.sample(a, 1 / 0) }, n.sample = function(a, b, c) { if (null == b || c) return y(a) || (a = n.values(a)), a[n.random(a.length - 1)]; var d = y(a) ? n.clone(a) : n.values(a), e = x(d); b = Math.max(Math.min(b, e), 0); for (var f = e - 1, g = 0; g < b; g++) { var h = n.random(g, f), i = d[g]; d[g] = d[h], d[h] = i } return d.slice(0, b) }, n.sortBy = function(a, b, c) { var d = 0; return b = q(b, c), n.pluck(n.map(a, function(a, c, e) { return { value: a, index: d++, criteria: b(a, c, e) } }).sort(function(a, b) { var c = a.criteria, d = b.criteria; if (c !== d) { if (c > d || void 0 === c) return 1; if (c < d || void 0 === d) return -1 } return a.index - b.index }), "value") }; var A = function(a, b) { return function(c, d, e) { var f = b ? [ [], [] ] : {}; return d = q(d, e), n.each(c, function(b, e) { var g = d(b, e, c); a(f, b, g) }), f } }; n.groupBy = A(function(a, b, c) { u(a, c) ? a[c].push(b) : a[c] = [b] }), n.indexBy = A(function(a, b, c) { a[c] = b }), n.countBy = A(function(a, b, c) { u(a, c) ? a[c]++ : a[c] = 1 }); var B = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; n.toArray = function(a) { return a ? n.isArray(a) ? g.call(a) : n.isString(a) ? a.match(B) : y(a) ? n.map(a, n.identity) : n.values(a) : [] }, n.size = function(a) { return null == a ? 0 : y(a) ? a.length : n.keys(a).length }, n.partition = A(function(a, b, c) { a[c ? 0 : 1].push(b) }, !0), n.first = n.head = n.take = function(a, b, c) { return null == a || a.length < 1 ? null == b ? void 0 : [] : null == b || c ? a[0] : n.initial(a, a.length - b) }, n.initial = function(a, b, c) { return g.call(a, 0, Math.max(0, a.length - (null == b || c ? 1 : b))) }, n.last = function(a, b, c) { return null == a || a.length < 1 ? null == b ? void 0 : [] : null == b || c ? a[a.length - 1] : n.rest(a, Math.max(0, a.length - b)) }, n.rest = n.tail = n.drop = function(a, b, c) { return g.call(a, null == b || c ? 1 : b) }, n.compact = function(a) { return n.filter(a, Boolean) }; var C = function(a, b, c, d) { d = d || []; for (var e = d.length, f = 0, g = x(a); f < g; f++) { var h = a[f]; if (y(h) && (n.isArray(h) || n.isArguments(h))) if (b) for (var i = 0, j = h.length; i < j;) d[e++] = h[i++]; else C(h, b, c, d), e = d.length; else c || (d[e++] = h) } return d }; n.flatten = function(a, b) { return C(a, b, !1) }, n.without = r(function(a, b) { return n.difference(a, b) }), n.uniq = n.unique = function(a, b, c, d) { n.isBoolean(b) || (d = c, c = b, b = !1), null != c && (c = q(c, d)); for (var e = [], f = [], g = 0, h = x(a); g < h; g++) { var i = a[g], j = c ? c(i, g, a) : i; b && !c ? (g && f === j || e.push(i), f = j) : c ? n.contains(f, j) || (f.push(j), e.push(i)) : n.contains(e, i) || e.push(i) } return e }, n.union = r(function(a) { return n.uniq(C(a, !0, !0)) }), n.intersection = function(a) { for (var b = [], c = arguments.length, d = 0, e = x(a); d < e; d++) { var f = a[d]; if (!n.contains(b, f)) { var g; for (g = 1; g < c && n.contains(arguments[g], f); g++); g === c && b.push(f) } } return b }, n.difference = r(function(a, b) { return b = C(b, !0, !0), n.filter(a, function(a) { return !n.contains(b, a) }) }), n.unzip = function(a) { for (var b = a && n.max(a, x).length || 0, c = Array(b), d = 0; d < b; d++) c[d] = n.pluck(a, d); return c }, n.zip = r(n.unzip), n.object = function(a, b) { for (var c = {}, d = 0, e = x(a); d < e; d++) b ? c[a[d]] = b[d] : c[a[d][0]] = a[d][1]; return c }; var D = function(a) { return function(b, c, d) { c = q(c, d); for (var e = x(b), f = a > 0 ? 0 : e - 1; f >= 0 && f < e; f += a) if (c(b[f], f, b)) return f; return -1 } }; n.findIndex = D(1), n.findLastIndex = D(-1), n.sortedIndex = function(a, b, c, d) { c = q(c, d, 1); for (var e = c(b), f = 0, g = x(a); f < g;) { var h = Math.floor((f + g) / 2); c(a[h]) < e ? f = h + 1 : g = h } return f }; var E = function(a, b, c) { return function(d, e, f) { var h = 0, i = x(d); if ("number" == typeof f) a > 0 ? h = f >= 0 ? f : Math.max(f + i, h) : i = f >= 0 ? Math.min(f + 1, i) : f + i + 1; else if (c && f && i) return f = c(d, e), d[f] === e ? f : -1; if (e !== e) return f = b(g.call(d, h, i), n.isNaN), f >= 0 ? f + h : -1; for (f = a > 0 ? h : i - 1; f >= 0 && f < i; f += a) if (d[f] === e) return f; return -1 } }; n.indexOf = E(1, n.findIndex, n.sortedIndex), n.lastIndexOf = E(-1, n.findLastIndex), n.range = function(a, b, c) { null == b && (b = a || 0, a = 0), c || (c = b < a ? -1 : 1); for (var d = Math.max(Math.ceil((b - a) / c), 0), e = Array(d), f = 0; f < d; f++, a += c) e[f] = a; return e }, n.chunk = function(a, b) { if (null == b || b < 1) return []; for (var c = [], d = 0, e = a.length; d < e;) c.push(g.call(a, d, d += b)); return c }; var F = function(a, b, c, d, e) { if (!(d instanceof b)) return a.apply(c, e); var f = s(a.prototype), g = a.apply(f, e); return n.isObject(g) ? g : f }; n.bind = r(function(a, b, c) { if (!n.isFunction(a)) throw new TypeError("Bind must be called on a function"); var d = r(function(e) { return F(a, d, b, this, c.concat(e)) }); return d }), n.partial = r(function(a, b) { var c = n.partial.placeholder, d = function() { for (var e = 0, f = b.length, g = Array(f), h = 0; h < f; h++) g[h] = b[h] === c ? arguments[e++] : b[h]; for (; e < arguments.length;) g.push(arguments[e++]); return F(a, d, this, this, g) }; return d }), n.partial.placeholder = n, n.bindAll = r(function(a, b) { b = C(b, !1, !1); var c = b.length; if (c < 1) throw new Error("bindAll must be passed function names"); for (; c--;) { var d = b[c]; a[d] = n.bind(a[d], a) } }), n.memoize = function(a, b) { var c = function(d) { var e = c.cache, f = "" + (b ? b.apply(this, arguments) : d); return u(e, f) || (e[f] = a.apply(this, arguments)), e[f] }; return c.cache = {}, c }, n.delay = r(function(a, b, c) { return setTimeout(function() { return a.apply(null, c) }, b) }), n.defer = n.partial(n.delay, n, 1), n.throttle = function(a, b, c) { var d, e, f, g, h = 0; c || (c = {}); var i = function() { h = !1 === c.leading ? 0 : n.now(), d = null, g = a.apply(e, f), d || (e = f = null) }, j = function() { var j = n.now(); h || !1 !== c.leading || (h = j); var k = b - (j - h); return e = this, f = arguments, k <= 0 || k > b ? (d && (clearTimeout(d), d = null), h = j, g = a.apply(e, f), d || (e = f = null)) : d || !1 === c.trailing || (d = setTimeout(i, k)), g }; return j.cancel = function() { clearTimeout(d), h = 0, d = e = f = null }, j }, n.debounce = function(a, b, c) { var d, e, f = function(b, c) { d = null, c && (e = a.apply(b, c)) }, g = r(function(g) { if (d && clearTimeout(d), c) { var h = !d; d = setTimeout(f, b), h && (e = a.apply(this, g)) } else d = n.delay(f, b, this, g); return e }); return g.cancel = function() { clearTimeout(d), d = null }, g }, n.wrap = function(a, b) { return n.partial(b, a) }, n.negate = function(a) { return function() { return !a.apply(this, arguments) } }, n.compose = function() { var a = arguments, b = a.length - 1; return function() { for (var c = b, d = a[b].apply(this, arguments); c--;) d = a[c].call(this, d); return d } }, n.after = function(a, b) { return function() { if (--a < 1) return b.apply(this, arguments) } }, n.before = function(a, b) { var c; return function() { return --a > 0 && (c = b.apply(this, arguments)), a <= 1 && (b = null), c } }, n.once = n.partial(n.before, 2), n.restArguments = r; var G = !{ toString: null }.propertyIsEnumerable("toString"), H = ["valueOf", "isPrototypeOf", "toString", "propertyIsEnumerable", "hasOwnProperty", "toLocaleString"], I = function(a, b) { var c = H.length, e = a.constructor, f = n.isFunction(e) && e.prototype || d, g = "constructor"; for (u(a, g) && !n.contains(b, g) && b.push(g); c--;)(g = H[c]) in a && a[g] !== f[g] && !n.contains(b, g) && b.push(g) }; n.keys = function(a) { if (!n.isObject(a)) return []; if (k) return k(a); var b = []; for (var c in a) u(a, c) && b.push(c); return G && I(a, b), b }, n.allKeys = function(a) { if (!n.isObject(a)) return []; var b = []; for (var c in a) b.push(c); return G && I(a, b), b }, n.values = function(a) { for (var b = n.keys(a), c = b.length, d = Array(c), e = 0; e < c; e++) d[e] = a[b[e]]; return d }, n.mapObject = function(a, b, c) { b = q(b, c); for (var d = n.keys(a), e = d.length, f = {}, g = 0; g < e; g++) { var h = d[g]; f[h] = b(a[h], h, a) } return f }, n.pairs = function(a) { for (var b = n.keys(a), c = b.length, d = Array(c), e = 0; e < c; e++) d[e] = [b[e], a[b[e]]]; return d }, n.invert = function(a) { for (var b = {}, c = n.keys(a), d = 0, e = c.length; d < e; d++) b[a[c[d]]] = c[d]; return b }, n.functions = n.methods = function(a) { var b = []; for (var c in a) n.isFunction(a[c]) && b.push(c); return b.sort() }; var J = function(a, b) { return function(c) { var d = arguments.length; if (b && (c = Object(c)), d < 2 || null == c) return c; for (var e = 1; e < d; e++) for (var f = arguments[e], g = a(f), h = g.length, i = 0; i < h; i++) { var j = g[i]; b && void 0 !== c[j] || (c[j] = f[j]) } return c } }; n.extend = J(n.allKeys), n.extendOwn = n.assign = J(n.keys), n.findKey = function(a, b, c) { b = q(b, c); for (var d, e = n.keys(a), f = 0, g = e.length; f < g; f++) if (d = e[f], b(a[d], d, a)) return d }; var K = function(a, b, c) { return b in c }; n.pick = r(function(a, b) { var c = {}, d = b[0]; if (null == a) return c; n.isFunction(d) ? (b.length > 1 && (d = p(d, b[1])), b = n.allKeys(a)) : (d = K, b = C(b, !1, !1), a = Object(a)); for (var e = 0, f = b.length; e < f; e++) { var g = b[e], h = a[g]; d(h, g, a) && (c[g] = h) } return c }), n.omit = r(function(a, b) { var c, d = b[0]; return n.isFunction(d) ? (d = n.negate(d), b.length > 1 && (c = b[1])) : (b = n.map(C(b, !1, !1), String), d = function(a, c) { return !n.contains(b, c) }), n.pick(a, d, c) }), n.defaults = J(n.allKeys, !0), n.create = function(a, b) { var c = s(a); return b && n.extendOwn(c, b), c }, n.clone = function(a) { return n.isObject(a) ? n.isArray(a) ? a.slice() : n.extend({}, a) : a }, n.tap = function(a, b) { return b(a), a }, n.isMatch = function(a, b) { var c = n.keys(b), d = c.length; if (null == a) return !d; for (var e = Object(a), f = 0; f < d; f++) { var g = c[f]; if (b[g] !== e[g] || !(g in e)) return !1 } return !0 }; var L, M; L = function(a, b, c, d) { if (a === b) return 0 !== a || 1 / a == 1 / b; if (null == a || null == b) return !1; if (a !== a) return b !== b; var e = typeof a; return ("function" === e || "object" === e || "object" == typeof b) && M(a, b, c, d) }, M = function(a, b, c, d) { a instanceof n && (a = a._wrapped), b instanceof n && (b = b._wrapped); var f = h.call(a); if (f !== h.call(b)) return !1; switch (f) { case "[object RegExp]": case "[object String]": return "" + a == "" + b; case "[object Number]": return +a != +a ? +b != +b : 0 == +a ? 1 / +a == 1 / b : +a == +b; case "[object Date]": case "[object Boolean]": return +a == +b; case "[object Symbol]": return e.valueOf.call(a) === e.valueOf.call(b) } var g = "[object Array]" === f; if (!g) { if ("object" != typeof a || "object" != typeof b) return !1; var i = a.constructor, j = b.constructor; if (i !== j && !(n.isFunction(i) && i instanceof i && n.isFunction(j) && j instanceof j) && "constructor" in a && "constructor" in b) return !1 } c = c || [], d = d || []; for (var k = c.length; k--;) if (c[k] === a) return d[k] === b; if (c.push(a), d.push(b), g) { if ((k = a.length) !== b.length) return !1; for (; k--;) if (!L(a[k], b[k], c, d)) return !1 } else { var l, m = n.keys(a); if (k = m.length, n.keys(b).length !== k) return !1; for (; k--;) if (l = m[k], !u(b, l) || !L(a[l], b[l], c, d)) return !1 } return c.pop(), d.pop(), !0 }, n.isEqual = function(a, b) { return L(a, b) }, n.isEmpty = function(a) { return null == a || (y(a) && (n.isArray(a) || n.isString(a) || n.isArguments(a)) ? 0 === a.length : 0 === n.keys(a).length) }, n.isElement = function(a) { return !(!a || 1 !== a.nodeType) }, n.isArray = j || function(a) { return "[object Array]" === h.call(a) }, n.isObject = function(a) { var b = typeof a; return "function" === b || "object" === b && !!a }, n.each(["Arguments", "Function", "String", "Number", "Date", "RegExp", "Error", "Symbol", "Map", "WeakMap", "Set", "WeakSet"], function(a) { n["is" + a] = function(b) { return h.call(b) === "[object " + a + "]" } }), n.isArguments(arguments) || (n.isArguments = function(a) { return u(a, "callee") }); var N = a.document && a.document.childNodes; "function" != typeof /./ && "object" != typeof Int8Array && "function" != typeof N && (n.isFunction = function(a) { return "function" == typeof a || !1 }), n.isFinite = function(a) { return !n.isSymbol(a) && isFinite(a) && !isNaN(parseFloat(a)) }, n.isNaN = function(a) { return n.isNumber(a) && isNaN(a) }, n.isBoolean = function(a) { return !0 === a || !1 === a || "[object Boolean]" === h.call(a) }, n.isNull = function(a) { return null === a }, n.isUndefined = function(a) { return void 0 === a }, n.has = function(a, b) { if (!n.isArray(b)) return u(a, b); for (var c = b.length, d = 0; d < c; d++) { var e = b[d]; if (null == a || !i.call(a, e)) return !1; a = a[e] } return !!c }, n.noConflict = function() { return a._ = b, this }, n.identity = function(a) { return a }, n.constant = function(a) { return function() { return a } }, n.noop = function() {}, n.property = function(a) { return n.isArray(a) ? function(b) { return v(b, a) } : t(a) }, n.propertyOf = function(a) { return null == a ? function() {} : function(b) { return n.isArray(b) ? v(a, b) : a[b] } }, n.matcher = n.matches = function(a) { return a = n.extendOwn({}, a), function(b) { return n.isMatch(b, a) } }, n.times = function(a, b, c) { var d = Array(Math.max(0, a)); b = p(b, c, 1); for (var e = 0; e < a; e++) d[e] = b(e); return d }, n.random = function(a, b) { return null == b && (b = a, a = 0), a + Math.floor(Math.random() * (b - a + 1)) }, n.now = Date.now || function() { return (new Date).getTime() }; var O = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "`": "`" }, P = n.invert(O), Q = function(a) { var b = function(b) { return a[b] }, c = "(?:" + n.keys(a).join("|") + ")", d = RegExp(c), e = RegExp(c, "g"); return function(a) { return a = null == a ? "" : "" + a, d.test(a) ? a.replace(e, b) : a } }; n.escape = Q(O), n.unescape = Q(P), n.result = function(a, b, c) { n.isArray(b) || (b = [b]); var d = b.length; if (!d) return n.isFunction(c) ? c.call(a) : c; for (var e = 0; e < d; e++) { var f = null == a ? void 0 : a[b[e]]; void 0 === f && (f = c, e = d), a = n.isFunction(f) ? f.call(a) : f } return a }; var R = 0; n.uniqueId = function(a) { var b = ++R + ""; return a ? a + b : b }, n.templateSettings = { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g, escape: /<%-([\s\S]+?)%>/g }; var S = /(.)^/, T = { "'": "'", "\\": "\\", "\r": "r", "\n": "n", "
": "u2028", "
": "u2029" }, U = /\\|'|\r|\n|\u2028|\u2029/g, V = function(a) { return "\\" + T[a] }; n.template = function(a, b, c) {!b && c && (b = c), b = n.defaults({}, b, n.templateSettings); var d = RegExp([(b.escape || S).source, (b.interpolate || S).source, (b.evaluate || S).source].join("|") + "|$", "g"), e = 0, f = "__p+='"; a.replace(d, function(b, c, d, g, h) { return f += a.slice(e, h).replace(U, V), e = h + b.length, c ? f += "'+\n((__t=(" + c + "))==null?'':_.escape(__t))+\n'" : d ? f += "'+\n((__t=(" + d + "))==null?'':__t)+\n'" : g && (f += "';\n" + g + "\n__p+='"), b }), f += "';\n", b.variable || (f = "with(obj||{}){\n" + f + "}\n"), f = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + f + "return __p;\n"; var g; try { g = new Function(b.variable || "obj", "_", f) } catch (a) { throw a.source = f, a } var h = function(a) { return g.call(this, a, n) }; return h.source = "function(" + (b.variable || "obj") + "){\n" + f + "}", h }, n.chain = function(a) { var b = n(a); return b._chain = !0, b }; var W = function(a, b) { return a._chain ? n(b).chain() : b }; n.mixin = function(a) { return n.each(n.functions(a), function(b) { var c = n[b] = a[b]; n.prototype[b] = function() { var a = [this._wrapped]; return f.apply(a, arguments), W(this, c.apply(n, a)) } }), n }, n.mixin(n), n.each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(a) { var b = c[a]; n.prototype[a] = function() { var c = this._wrapped; return b.apply(c, arguments), "shift" !== a && "splice" !== a || 0 !== c.length || delete c[0], W(this, c) } }), n.each(["concat", "join", "slice"], function(a) { var b = c[a]; n.prototype[a] = function() { return W(this, b.apply(this._wrapped, arguments)) } }), n.prototype.value = function() { return this._wrapped }, n.prototype.valueOf = n.prototype.toJSON = n.prototype.value, n.prototype.toString = function() { return String(this._wrapped) }, "function" == typeof define && define.amd && define("underscore", [], function() { return n }) }(), function(a, b) { "use strict"; "object" == typeof module && "object" == typeof module.exports ? module.exports = a.document ? b(a, !0) : function(a) { if (!a.document) throw new Error("jQuery requires a window with a document"); return b(a) } : b(a) }("undefined" != typeof window ? window : this, function(a, b) { function c(a, b) { b = b || _; var c = b.createElement("script"); c.text = a, b.head.appendChild(c).parentNode.removeChild(c) } function d(a) { var b = !!a && "length" in a && a.length, c = la.type(a); return "function" !== c && !la.isWindow(a) && ("array" === c || 0 === b || "number" == typeof b && b > 0 && b - 1 in a) } function e(a, b, c) { if (la.isFunction(b)) return la.grep(a, function(a, d) { return !!b.call(a, d, a) !== c }); if (b.nodeType) return la.grep(a, function(a) { return a === b !== c }); if ("string" == typeof b) { if (va.test(b)) return la.filter(b, a, c); b = la.filter(b, a) } return la.grep(a, function(a) { return ea.call(b, a) > -1 !== c && 1 === a.nodeType }) } function f(a, b) { for (; (a = a[b]) && 1 !== a.nodeType;); return a } function g(a) { var b = {}; return la.each(a.match(Aa) || [], function(a, c) { b[c] = !0 }), b } function h(a) { return a } function i(a) { throw a } function j(a, b, c) { var d; try { a && la.isFunction(d = a.promise) ? d.call(a).done(b).fail(c) : a && la.isFunction(d = a.then) ? d.call(a, b, c) : b.call(void 0, a) } catch (a) { c.call(void 0, a) } } function k() { _.removeEventListener("DOMContentLoaded", k), a.removeEventListener("load", k), la.ready() } function l() { this.expando = la.expando + l.uid++ } function m(a, b, c) { var d; if (void 0 === c && 1 === a.nodeType) if (d = "data-" + b.replace(Ia, "-$&").toLowerCase(), "string" == typeof(c = a.getAttribute(d))) { try { c = "true" === c || "false" !== c && ("null" === c ? null : +c + "" === c ? +c : Ha.test(c) ? JSON.parse(c) : c) } catch (a) {} Ga.set(a, b, c) } else c = void 0; return c } function n(a, b, c, d) { var e, f = 1, g = 20, h = d ? function() { return d.cur() } : function() { return la.css(a, b, "") }, i = h(), j = c && c[3] || (la.cssNumber[b] ? "" : "px"), k = (la.cssNumber[b] || "px" !== j && +i) && Ka.exec(la.css(a, b)); if (k && k[3] !== j) { j = j || k[3], c = c || [], k = +i || 1; do { f = f || ".5", k /= f, la.style(a, b, k + j) } while (f !== (f = h() / i) && 1 !== f && --g) } return c && (k = +k || +i || 0, e = c[1] ? k + (c[1] + 1) * c[2] : +c[2], d && (d.unit = j, d.start = k, d.end = e)), e } function o(a) { var b, c = a.ownerDocument, d = a.nodeName, e = Oa[d]; return e || (b = c.body.appendChild(c.createElement(d)), e = la.css(b, "display"), b.parentNode.removeChild(b), "none" === e && (e = "block"), Oa[d] = e, e) } function p(a, b) { for (var c, d, e = [], f = 0, g = a.length; f < g; f++) d = a[f], d.style && (c = d.style.display, b ? ("none" === c && (e[f] = Fa.get(d, "display") || null, e[f] || (d.style.display = "")), "" === d.style.display && Ma(d) && (e[f] = o(d))) : "none" !== c && (e[f] = "none", Fa.set(d, "display", c))); for (f = 0; f < g; f++) null != e[f] && (a[f].style.display = e[f]); return a } function q(a, b) { var c = void 0 !== a.getElementsByTagName ? a.getElementsByTagName(b || "*") : void 0 !== a.querySelectorAll ? a.querySelectorAll(b || "*") : []; return void 0 === b || b && la.nodeName(a, b) ? la.merge([a], c) : c } function r(a, b) { for (var c = 0, d = a.length; c < d; c++) Fa.set(a[c], "globalEval", !b || Fa.get(b[c], "globalEval")) } function s(a, b, c, d, e) { for (var f, g, h, i, j, k, l = b.createDocumentFragment(), m = [], n = 0, o = a.length; n < o; n++) if ((f = a[n]) || 0 === f) if ("object" === la.type(f)) la.merge(m, f.nodeType ? [f] : f); else if (Ta.test(f)) { for (g = g || l.appendChild(b.createElement("div")), h = (Qa.exec(f) || ["", ""])[1].toLowerCase(), i = Sa[h] || Sa._default, g.innerHTML = i[1] + la.htmlPrefilter(f) + i[2], k = i[0]; k--;) g = g.lastChild; la.merge(m, g.childNodes), g = l.firstChild, g.textContent = "" } else m.push(b.createTextNode(f)); for (l.textContent = "", n = 0; f = m[n++];) if (d && la.inArray(f, d) > -1) e && e.push(f); else if (j = la.contains(f.ownerDocument, f), g = q(l.appendChild(f), "script"), j && r(g), c) for (k = 0; f = g[k++];) Ra.test(f.type || "") && c.push(f); return l } function t() { return !0 } function u() { return !1 } function v() { try { return _.activeElement } catch (a) {} } function w(a, b, c, d, e, f) { var g, h; if ("object" == typeof b) { "string" != typeof c && (d = d || c, c = void 0); for (h in b) w(a, h, c, d, b[h], f); return a } if (null == d && null == e ? (e = c, d = c = void 0) : null == e && ("string" == typeof c ? (e = d, d = void 0) : (e = d, d = c, c = void 0)), !1 === e) e = u; else if (!e) return a; return 1 === f && (g = e, e = function(a) { return la().off(a), g.apply(this, arguments) }, e.guid = g.guid || (g.guid = la.guid++)), a.each(function() { la.event.add(this, b, e, d, c) }) } function x(a, b) { return la.nodeName(a, "table") && la.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a : a } function y(a) { return a.type = (null !== a.getAttribute("type")) + "/" + a.type, a } function z(a) { var b = _a.exec(a.type); return b ? a.type = b[1] : a.removeAttribute("type"), a } function A(a, b) { var c, d, e, f, g, h, i, j; if (1 === b.nodeType) { if (Fa.hasData(a) && (f = Fa.access(a), g = Fa.set(b, f), j = f.events)) { delete g.handle, g.events = {}; for (e in j) for (c = 0, d = j[e].length; c < d; c++) la.event.add(b, e, j[e][c]) } Ga.hasData(a) && (h = Ga.access(a), i = la.extend({}, h), Ga.set(b, i)) } } function B(a, b) { var c = b.nodeName.toLowerCase(); "input" === c && Pa.test(a.type) ? b.checked = a.checked : "input" !== c && "textarea" !== c || (b.defaultValue = a.defaultValue) } function C(a, b, d, e) { b = ca.apply([], b); var f, g, h, i, j, k, l = 0, m = a.length, n = m - 1, o = b[0], p = la.isFunction(o); if (p || m > 1 && "string" == typeof o && !ka.checkClone && $a.test(o)) return a.each(function(c) { var f = a.eq(c); p && (b[0] = o.call(this, c, f.html())), C(f, b, d, e) }); if (m && (f = s(b, a[0].ownerDocument, !1, a, e), g = f.firstChild, 1 === f.childNodes.length && (f = g), g || e)) { for (h = la.map(q(f, "script"), y), i = h.length; l < m; l++) j = f, l !== n && (j = la.clone(j, !0, !0), i && la.merge(h, q(j, "script"))), d.call(a[l], j, l); if (i) for (k = h[h.length - 1].ownerDocument, la.map(h, z), l = 0; l < i; l++) j = h[l], Ra.test(j.type || "") && !Fa.access(j, "globalEval") && la.contains(k, j) && (j.src ? la._evalUrl && la._evalUrl(j.src) : c(j.textContent.replace(ab, ""), k)) } return a } function D(a, b, c) { for (var d, e = b ? la.filter(b, a) : a, f = 0; null != (d = e[f]); f++) c || 1 !== d.nodeType || la.cleanData(q(d)), d.parentNode && (c && la.contains(d.ownerDocument, d) && r(q(d, "script")), d.parentNode.removeChild(d)); return a } function E(a, b, c) { var d, e, f, g, h = a.style; return c = c || db(a), c && (g = c.getPropertyValue(b) || c[b], "" !== g || la.contains(a.ownerDocument, a) || (g = la.style(a, b)), !ka.pixelMarginRight() && cb.test(g) && bb.test(b) && (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = g, g = c.width, h.width = d, h.minWidth = e, h.maxWidth = f)), void 0 !== g ? g + "" : g } function F(a, b) { return { get: function() { return a() ? void delete this.get : (this.get = b).apply(this, arguments) } } } function G(a) { if (a in ib) return a; for (var b = a[0].toUpperCase() + a.slice(1), c = hb.length; c--;) if ((a = hb[c] + b) in ib) return a } function H(a, b, c) { var d = Ka.exec(b); return d ? Math.max(0, d[2] - (c || 0)) + (d[3] || "px") : b } function I(a, b, c, d, e) { for (var f = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, g = 0; f < 4; f += 2) "margin" === c && (g += la.css(a, c + La[f], !0, e)), d ? ("content" === c && (g -= la.css(a, "padding" + La[f], !0, e)), "margin" !== c && (g -= la.css(a, "border" + La[f] + "Width", !0, e))) : (g += la.css(a, "padding" + La[f], !0, e), "padding" !== c && (g += la.css(a, "border" + La[f] + "Width", !0, e))); return g } function J(a, b, c) { var d, e = !0, f = db(a), g = "border-box" === la.css(a, "boxSizing", !1, f); if (a.getClientRects().length && (d = a.getBoundingClientRect()[b]), d <= 0 || null == d) { if (d = E(a, b, f), (d < 0 || null == d) && (d = a.style[b]), cb.test(d)) return d; e = g && (ka.boxSizingReliable() || d === a.style[b]), d = parseFloat(d) || 0 } return d + I(a, b, c || (g ? "border" : "content"), e, f) + "px" } function K(a, b, c, d, e) { return new K.prototype.init(a, b, c, d, e) } function L() { kb && (a.requestAnimationFrame(L), la.fx.tick()) } function M() { return a.setTimeout(function() { jb = void 0 }), jb = la.now() } function N(a, b) { var c, d = 0, e = { height: a }; for (b = b ? 1 : 0; d < 4; d += 2 - b) c = La[d], e["margin" + c] = e["padding" + c] = a; return b && (e.opacity = e.width = a), e } function O(a, b, c) { for (var d, e = (R.tweeners[b] || []).concat(R.tweeners["*"]), f = 0, g = e.length; f < g; f++) if (d = e[f].call(c, b, a)) return d } function P(a, b, c) { var d, e, f, g, h, i, j, k, l = "width" in b || "height" in b, m = this, n = {}, o = a.style, q = a.nodeType && Ma(a), r = Fa.get(a, "fxshow"); c.queue || (g = la._queueHooks(a, "fx"), null == g.unqueued && (g.unqueued = 0, h = g.empty.fire, g.empty.fire = function() { g.unqueued || h() }), g.unqueued++, m.always(function() { m.always(function() { g.unqueued--, la.queue(a, "fx").length || g.empty.fire() }) })); for (d in b) if (e = b[d], lb.test(e)) { if (delete b[d], f = f || "toggle" === e, e === (q ? "hide" : "show")) { if ("show" !== e || !r || void 0 === r[d]) continue; q = !0 } n[d] = r && r[d] || la.style(a, d) } if ((i = !la.isEmptyObject(b)) || !la.isEmptyObject(n)) { l && 1 === a.nodeType && (c.overflow = [o.overflow, o.overflowX, o.overflowY], j = r && r.display, null == j && (j = Fa.get(a, "display")), k = la.css(a, "display"), "none" === k && (j ? k = j : (p([a], !0), j = a.style.display || j, k = la.css(a, "display"), p([a]))), ("inline" === k || "inline-block" === k && null != j) && "none" === la.css(a, "float") && (i || (m.done(function() { o.display = j }), null == j && (k = o.display, j = "none" === k ? "" : k)), o.display = "inline-block")), c.overflow && (o.overflow = "hidden", m.always(function() { o.overflow = c.overflow[0], o.overflowX = c.overflow[1], o.overflowY = c.overflow[2] })), i = !1; for (d in n) i || (r ? "hidden" in r && (q = r.hidden) : r = Fa.access(a, "fxshow", { display: j }), f && (r.hidden = !q), q && p([a], !0), m.done(function() { q || p([a]), Fa.remove(a, "fxshow"); for (d in n) la.style(a, d, n[d]) })), i = O(q ? r[d] : 0, d, m), d in r || (r[d] = i.start, q && (i.end = i.start, i.start = 0)) } } function Q(a, b) { var c, d, e, f, g; for (c in a) if (d = la.camelCase(c), e = b[d], f = a[c], la.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), (g = la.cssHooks[d]) && "expand" in g) { f = g.expand(f), delete a[d]; for (c in f) c in a || (a[c] = f[c], b[c] = e) } else b[d] = e } function R(a, b, c) { var d, e, f = 0, g = R.prefilters.length, h = la.Deferred().always(function() { delete i.elem }), i = function() { if (e) return !1; for (var b = jb || M(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; g < i; g++) j.tweens[g].run(f); return h.notifyWith(a, [j, f, c]), f < 1 && i ? c : (h.resolveWith(a, [j]), !1) }, j = h.promise({ elem: a, props: la.extend({}, b), opts: la.extend(!0, { specialEasing: {}, easing: la.easing._default }, c), originalProperties: b, originalOptions: c, startTime: jb || M(), duration: c.duration, tweens: [], createTween: function(b, c) { var d = la.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing); return j.tweens.push(d), d }, stop: function(b) { var c = 0, d = b ? j.tweens.length : 0; if (e) return this; for (e = !0; c < d; c++) j.tweens[c].run(1); return b ? (h.notifyWith(a, [j, 1, 0]), h.resolveWith(a, [j, b])) : h.rejectWith(a, [j, b]), this } }), k = j.props; for (Q(k, j.opts.specialEasing); f < g; f++) if (d = R.prefilters[f].call(j, a, k, j.opts)) return la.isFunction(d.stop) && (la._queueHooks(j.elem, j.opts.queue).stop = la.proxy(d.stop, d)), d; return la.map(k, O, j), la.isFunction(j.opts.start) && j.opts.start.call(a, j), la.fx.timer(la.extend(i, { elem: a, anim: j, queue: j.opts.queue })), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always) } function S(a) { return a.getAttribute && a.getAttribute("class") || "" } function T(a, b, c, d) { var e; if (la.isArray(b)) la.each(b, function(b, e) { c || yb.test(a) ? d(a, e) : T(a + "[" + ("object" == typeof e && null != e ? b : "") + "]", e, c, d) }); else if (c || "object" !== la.type(b)) d(a, b); else for (e in b) T(a + "[" + e + "]", b[e], c, d) } function U(a) { return function(b, c) { "string" != typeof b && (c = b, b = "*"); var d, e = 0, f = b.toLowerCase().match(Aa) || []; if (la.isFunction(c)) for (; d = f[e++];) "+" === d[0] ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c) } } function V(a, b, c, d) { function e(h) { var i; return f[h] = !0, la.each(a[h] || [], function(a, h) { var j = h(b, c, d); return "string" != typeof j || g || f[j] ? g ? !(i = j) : void 0 : (b.dataTypes.unshift(j), e(j), !1) }), i } var f = {}, g = a === Kb; return e(b.dataTypes[0]) || !f["*"] && e("*") } function W(a, b) { var c, d, e = la.ajaxSettings.flatOptions || {}; for (c in b) void 0 !== b[c] && ((e[c] ? a : d || (d = {}))[c] = b[c]); return d && la.extend(!0, a, d), a } function X(a, b, c) { for (var d, e, f, g, h = a.contents, i = a.dataTypes; "*" === i[0];) i.shift(), void 0 === d && (d = a.mimeType || b.getResponseHeader("Content-Type")); if (d) for (e in h) if (h[e] && h[e].test(d)) { i.unshift(e); break } if (i[0] in c) f = i[0]; else { for (e in c) { if (!i[0] || a.converters[e + " " + i[0]]) { f = e; break } g || (g = e) } f = f || g } if (f) return f !== i[0] && i.unshift(f), c[f] } function Y(a, b, c, d) { var e, f, g, h, i, j = {}, k = a.dataTypes.slice(); if (k[1]) for (g in a.converters) j[g.toLowerCase()] = a.converters[g]; for (f = k.shift(); f;) if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift()) if ("*" === f) f = i; else if ("*" !== i && i !== f) { if (!(g = j[i + " " + f] || j["* " + f])) for (e in j) if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) {!0 === g ? g = j[e] : !0 !== j[e] && (f = h[0], k.unshift(h[1])); break } if (!0 !== g) if (g && a.throws) b = g(b); else try { b = g(b) } catch (a) { return { state: "parsererror", error: g ? a : "No conversion from " + i + " to " + f } } } return { state: "success", data: b } } function Z(a) { return la.isWindow(a) ? a : 9 === a.nodeType && a.defaultView } var $ = [], _ = a.document, aa = Object.getPrototypeOf, ba = $.slice, ca = $.concat, da = $.push, ea = $.indexOf, fa = {}, ga = fa.toString, ha = fa.hasOwnProperty, ia = ha.toString, ja = ia.call(Object), ka = {}, la = function(a, b) { return new la.fn.init(a, b) }, ma = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, na = /^-ms-/, oa = /-([a-z])/g, pa = function(a, b) { return b.toUpperCase() }; la.fn = la.prototype = { jquery: "3.1.0", constructor: la, length: 0, toArray: function() { return ba.call(this) }, get: function(a) { return null != a ? a < 0 ? this[a + this.length] : this[a] : ba.call(this) }, pushStack: function(a) { var b = la.merge(this.constructor(), a); return b.prevObject = this, b }, each: function(a) { return la.each(this, a) }, map: function(a) { return this.pushStack(la.map(this, function(b, c) { return a.call(b, c, b) })) }, slice: function() { return this.pushStack(ba.apply(this, arguments)) }, first: function() { return this.eq(0) }, last: function() { return this.eq(-1) }, eq: function(a) { var b = this.length, c = +a + (a < 0 ? b : 0); return this.pushStack(c >= 0 && c < b ? [this[c]] : []) }, end: function() { return this.prevObject || this.constructor() }, push: da, sort: $.sort, splice: $.splice }, la.extend = la.fn.extend = function() { var a, b, c, d, e, f, g = arguments[0] || {}, h = 1, i = arguments.length, j = !1; for ("boolean" == typeof g && (j = g, g = arguments[h] || {}, h++), "object" == typeof g || la.isFunction(g) || (g = {}), h === i && (g = this, h--); h < i; h++) if (null != (a = arguments[h])) for (b in a) c = g[b], d = a[b], g !== d && (j && d && (la.isPlainObject(d) || (e = la.isArray(d))) ? (e ? (e = !1, f = c && la.isArray(c) ? c : []) : f = c && la.isPlainObject(c) ? c : {}, g[b] = la.extend(j, f, d)) : void 0 !== d && (g[b] = d)); return g }, la.extend({ expando: "jQuery" + ("3.1.0" + Math.random()).replace(/\D/g, ""), isReady: !0, error: function(a) { throw new Error(a) }, noop: function() {}, isFunction: function(a) { return "function" === la.type(a) }, isArray: Array.isArray, isWindow: function(a) { return null != a && a === a.window }, isNumeric: function(a) { var b = la.type(a); return ("number" === b || "string" === b) && !isNaN(a - parseFloat(a)) }, isPlainObject: function(a) { var b, c; return !(!a || "[object Object]" !== ga.call(a)) && (!(b = aa(a)) || "function" == typeof(c = ha.call(b, "constructor") && b.constructor) && ia.call(c) === ja) }, isEmptyObject: function(a) { var b; for (b in a) return !1; return !0 }, type: function(a) { return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? fa[ga.call(a)] || "object" : typeof a }, globalEval: function(a) { c(a) }, camelCase: function(a) { return a.replace(na, "ms-").replace(oa, pa) }, nodeName: function(a, b) { return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase() }, each: function(a, b) { var c, e = 0; if (d(a)) for (c = a.length; e < c && !1 !== b.call(a[e], e, a[e]); e++); else for (e in a) if (!1 === b.call(a[e], e, a[e])) break; return a }, trim: function(a) { return null == a ? "" : (a + "").replace(ma, "") }, makeArray: function(a, b) { var c = b || []; return null != a && (d(Object(a)) ? la.merge(c, "string" == typeof a ? [a] : a) : da.call(c, a)), c }, inArray: function(a, b, c) { return null == b ? -1 : ea.call(b, a, c) }, merge: function(a, b) { for (var c = +b.length, d = 0, e = a.length; d < c; d++) a[e++] = b[d]; return a.length = e, a }, grep: function(a, b, c) { for (var d = [], e = 0, f = a.length, g = !c; e < f; e++) !b(a[e], e) !== g && d.push(a[e]); return d }, map: function(a, b, c) { var e, f, g = 0, h = []; if (d(a)) for (e = a.length; g < e; g++) null != (f = b(a[g], g, c)) && h.push(f); else for (g in a) null != (f = b(a[g], g, c)) && h.push(f); return ca.apply([], h) }, guid: 1, proxy: function(a, b) { var c, d, e; if ("string" == typeof b && (c = a[b], b = a, a = c), la.isFunction(a)) return d = ba.call(arguments, 2), e = function() { return a.apply(b || this, d.concat(ba.call(arguments))) }, e.guid = a.guid = a.guid || la.guid++, e }, now: Date.now, support: ka }), "function" == typeof Symbol && (la.fn[Symbol.iterator] = $[Symbol.iterator]), la.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(a, b) { fa["[object " + b + "]"] = b.toLowerCase() }); var qa = function(a) { function b(a, b, c, d) { var e, f, g, h, i, k, m, n = b && b.ownerDocument, o = b ? b.nodeType : 9; if (c = c || [], "string" != typeof a || !a || 1 !== o && 9 !== o && 11 !== o) return c; if (!d && ((b ? b.ownerDocument || b : N) !== F && E(b), b = b || F, H)) { if (11 !== o && (i = pa.exec(a))) if (e = i[1]) { if (9 === o) { if (!(g = b.getElementById(e))) return c; if (g.id === e) return c.push(g), c } else if (n && (g = n.getElementById(e)) && L(b, g) && g.id === e) return c.push(g), c } else { if (i[2]) return Y.apply(c, b.getElementsByTagName(a)), c; if ((e = i[3]) && u.getElementsByClassName && b.getElementsByClassName) return Y.apply(c, b.getElementsByClassName(e)), c } if (u.qsa && !S[a + " "] && (!I || !I.test(a))) { if (1 !== o) n = b, m = a; else if ("object" !== b.nodeName.toLowerCase()) { for ((h = b.getAttribute("id")) ? h = h.replace(ta, ua) : b.setAttribute("id", h = M), k = y(a), f = k.length; f--;) k[f] = "#" + h + " " + l(k[f]); m = k.join(","), n = qa.test(a) && j(b.parentNode) || b } if (m) try { return Y.apply(c, n.querySelectorAll(m)), c } catch (a) {} finally { h === M && b.removeAttribute("id") } } } return A(a.replace(fa, "$1"), b, c, d) } function c() { function a(c, d) { return b.push(c + " ") > v.cacheLength && delete a[b.shift()], a[c + " "] = d } var b = []; return a } function d(a) { return a[M] = !0, a } function e(a) { var b = F.createElement("fieldset"); try { return !!a(b) } catch (a) { return !1 } finally { b.parentNode && b.parentNode.removeChild(b), b = null } } function f(a, b) { for (var c = a.split("|"), d = c.length; d--;) v.attrHandle[c[d]] = b } function g(a, b) { var c = b && a, d = c && 1 === a.nodeType && 1 === b.nodeType && a.sourceIndex - b.sourceIndex; if (d) return d; if (c) for (; c = c.nextSibling;) if (c === b) return -1; return a ? 1 : -1 } function h(a) { return function(b) { return "label" in b && b.disabled === a || "form" in b && b.disabled === a || "form" in b && !1 === b.disabled && (b.isDisabled === a || b.isDisabled !== !a && ("label" in b || !wa(b)) !== a) } } function i(a) { return d(function(b) { return b = +b, d(function(c, d) { for (var e, f = a([], c.length, b), g = f.length; g--;) c[e = f[g]] && (c[e] = !(d[e] = c[e])) }) }) } function j(a) { return a && void 0 !== a.getElementsByTagName && a } function k() {} function l(a) { for (var b = 0, c = a.length, d = ""; b < c; b++) d += a[b].value; return d } function m(a, b, c) { var d = b.dir, e = b.next, f = e || d, g = c && "parentNode" === f, h = P++; return b.first ? function(b, c, e) { for (; b = b[d];) if (1 === b.nodeType || g) return a(b, c, e) } : function(b, c, i) { var j, k, l, m = [O, h]; if (i) { for (; b = b[d];) if ((1 === b.nodeType || g) && a(b, c, i)) return !0 } else for (; b = b[d];) if (1 === b.nodeType || g) if (l = b[M] || (b[M] = {}), k = l[b.uniqueID] || (l[b.uniqueID] = {}), e && e === b.nodeName.toLowerCase()) b = b[d] || b; else { if ((j = k[f]) && j[0] === O && j[1] === h) return m[2] = j[2]; if (k[f] = m, m[2] = a(b, c, i)) return !0 } } } function n(a) { return a.length > 1 ? function(b, c, d) { for (var e = a.length; e--;) if (!a[e](b, c, d)) return !1; return !0 } : a[0] } function o(a, c, d) { for (var e = 0, f = c.length; e < f; e++) b(a, c[e], d); return d } function p(a, b, c, d, e) { for (var f, g = [], h = 0, i = a.length, j = null != b; h < i; h++)(f = a[h]) && (c && !c(f, d, e) || (g.push(f), j && b.push(h))); return g } function q(a, b, c, e, f, g) { return e && !e[M] && (e = q(e)), f && !f[M] && (f = q(f, g)), d(function(d, g, h, i) { var j, k, l, m = [], n = [], q = g.length, r = d || o(b || "*", h.nodeType ? [h] : h, []), s = !a || !d && b ? r : p(r, m, a, h, i), t = c ? f || (d ? a : q || e) ? [] : g : s; if (c && c(s, t, h, i), e) for (j = p(t, n), e(j, [], h, i), k = j.length; k--;)(l = j[k]) && (t[n[k]] = !(s[n[k]] = l)); if (d) { if (f || a) { if (f) { for (j = [], k = t.length; k--;)(l = t[k]) && j.push(s[k] = l); f(null, t = [], j, i) } for (k = t.length; k--;)(l = t[k]) && (j = f ? $(d, l) : m[k]) > -1 && (d[j] = !(g[j] = l)) } } else t = p(t === g ? t.splice(q, t.length) : t), f ? f(null, g, t, i) : Y.apply(g, t) }) } function r(a) { for (var b, c, d, e = a.length, f = v.relative[a[0].type], g = f || v.relative[" "], h = f ? 1 : 0, i = m(function(a) { return a === b }, g, !0), j = m(function(a) { return $(b, a) > -1 }, g, !0), k = [function(a, c, d) { var e = !f && (d || c !== B) || ((b = c).nodeType ? i(a, c, d) : j(a, c, d)); return b = null, e }]; h < e; h++) if (c = v.relative[a[h].type]) k = [m(n(k), c)]; else { if (c = v.filter[a[h].type].apply(null, a[h].matches), c[M]) { for (d = ++h; d < e && !v.relative[a[d].type]; d++); return q(h > 1 && n(k), h > 1 && l(a.slice(0, h - 1).concat({ value: " " === a[h - 2].type ? "*" : "" })).replace(fa, "$1"), c, h < d && r(a.slice(h, d)), d < e && r(a = a.slice(d)), d < e && l(a)) } k.push(c) } return n(k) } function s(a, c) { var e = c.length > 0, f = a.length > 0, g = function(d, g, h, i, j) { var k, l, m, n = 0, o = "0", q = d && [], r = [], s = B, t = d || f && v.find.TAG("*", j), u = O += null == s ? 1 : Math.random() || .1, w = t.length; for (j && (B = g === F || g || j); o !== w && null != (k = t[o]); o++) { if (f && k) { for (l = 0, g || k.ownerDocument === F || (E(k), h = !H); m = a[l++];) if (m(k, g || F, h)) { i.push(k); break } j && (O = u) } e && ((k = !m && k) && n--, d && q.push(k)) } if (n += o, e && o !== n) { for (l = 0; m = c[l++];) m(q, r, g, h); if (d) { if (n > 0) for (; o--;) q[o] || r[o] || (r[o] = W.call(i)); r = p(r) } Y.apply(i, r), j && !d && r.length > 0 && n + c.length > 1 && b.uniqueSort(i) } return j && (O = u, B = s), q }; return e ? d(g) : g } var t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M = "sizzle" + 1 * new Date, N = a.document, O = 0, P = 0, Q = c(), R = c(), S = c(), T = function(a, b) { return a === b && (D = !0), 0 }, U = {}.hasOwnProperty, V = [], W = V.pop, X = V.push, Y = V.push, Z = V.slice, $ = function(a, b) { for (var c = 0, d = a.length; c < d; c++) if (a[c] === b) return c; return -1 }, _ = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", aa = "[\\x20\\t\\r\\n\\f]", ba = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", ca = "\\[" + aa + "*(" + ba + ")(?:" + aa + "*([*^$|!~]?=)" + aa + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + ba + "))|)" + aa + "*\\]", da = ":(" + ba + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + ca + ")*)|.*)\\)|)", ea = new RegExp(aa + "+", "g"), fa = new RegExp("^" + aa + "+|((?:^|[^\\\\])(?:\\\\.)*)" + aa + "+$", "g"), ga = new RegExp("^" + aa + "*," + aa + "*"), ha = new RegExp("^" + aa + "*([>+~]|" + aa + ")" + aa + "*"), ia = new RegExp("=" + aa + "*([^\\]'\"]*?)" + aa + "*\\]", "g"), ja = new RegExp(da), ka = new RegExp("^" + ba + "$"), la = { ID: new RegExp("^#(" + ba + ")"), CLASS: new RegExp("^\\.(" + ba + ")"), TAG: new RegExp("^(" + ba + "|[*])"), ATTR: new RegExp("^" + ca), PSEUDO: new RegExp("^" + da), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + aa + "*(even|odd|(([+-]|)(\\d*)n|)" + aa + "*(?:([+-]|)" + aa + "*(\\d+)|))" + aa + "*\\)|)", "i"), bool: new RegExp("^(?:" + _ + ")$", "i"), needsContext: new RegExp("^" + aa + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + aa + "*((?:-\\d)?\\d*)" + aa + "*\\)|)(?=[^-]|$)", "i") }, ma = /^(?:input|select|textarea|button)$/i, na = /^h\d$/i, oa = /^[^{]+\{\s*\[native \w/, pa = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, qa = /[+~]/, ra = new RegExp("\\\\([\\da-f]{1,6}" + aa + "?|(" + aa + ")|.)", "ig"), sa = function(a, b, c) { var d = "0x" + b - 65536; return d !== d || c ? b : d < 0 ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320) }, ta = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, ua = function(a, b) { return b ? "\0" === a ? "�" : a.slice(0, -1) + "\\" + a.charCodeAt(a.length - 1).toString(16) + " " : "\\" + a }, va = function() { E() }, wa = m(function(a) { return !0 === a.disabled }, { dir: "parentNode", next: "legend" }); try { Y.apply(V = Z.call(N.childNodes), N.childNodes), V[N.childNodes.length].nodeType } catch (a) { Y = { apply: V.length ? function(a, b) { X.apply(a, Z.call(b)) } : function(a, b) { for (var c = a.length, d = 0; a[c++] = b[d++];); a.length = c - 1 } } } u = b.support = {}, x = b.isXML = function(a) { var b = a && (a.ownerDocument || a).documentElement; return !!b && "HTML" !== b.nodeName }, E = b.setDocument = function(a) { var b, c, d = a ? a.ownerDocument || a : N; return d !== F && 9 === d.nodeType && d.documentElement ? (F = d, G = F.documentElement, H = !x(F), N !== F && (c = F.defaultView) && c.top !== c && (c.addEventListener ? c.addEventListener("unload", va, !1) : c.attachEvent && c.attachEvent("onunload", va)), u.attributes = e(function(a) { return a.className = "i", !a.getAttribute("className") }), u.getElementsByTagName = e(function(a) { return a.appendChild(F.createComment("")), !a.getElementsByTagName("*").length }), u.getElementsByClassName = oa.test(F.getElementsByClassName), u.getById = e(function(a) { return G.appendChild(a).id = M, !F.getElementsByName || !F.getElementsByName(M).length }), u.getById ? (v.find.ID = function(a, b) { if (void 0 !== b.getElementById && H) { var c = b.getElementById(a); return c ? [c] : [] } }, v.filter.ID = function(a) { var b = a.replace(ra, sa); return function(a) { return a.getAttribute("id") === b } }) : (delete v.find.ID, v.filter.ID = function(a) { var b = a.replace(ra, sa); return function(a) { var c = void 0 !== a.getAttributeNode && a.getAttributeNode("id"); return c && c.value === b } }), v.find.TAG = u.getElementsByTagName ? function(a, b) { return void 0 !== b.getElementsByTagName ? b.getElementsByTagName(a) : u.qsa ? b.querySelectorAll(a) : void 0 } : function(a, b) { var c, d = [], e = 0, f = b.getElementsByTagName(a); if ("*" === a) { for (; c = f[e++];) 1 === c.nodeType && d.push(c); return d } return f }, v.find.CLASS = u.getElementsByClassName && function(a, b) { if (void 0 !== b.getElementsByClassName && H) return b.getElementsByClassName(a) }, J = [], I = [], (u.qsa = oa.test(F.querySelectorAll)) && (e(function(a) { G.appendChild(a).innerHTML = "<a id='" + M + "'></a><select id='" + M + "-\r\\' msallowcapture=''><option selected=''></option></select>", a.querySelectorAll("[msallowcapture^='']").length && I.push("[*^$]=" + aa + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || I.push("\\[" + aa + "*(?:value|" + _ + ")"), a.querySelectorAll("[id~=" + M + "-]").length || I.push("~="), a.querySelectorAll(":checked").length || I.push(":checked"), a.querySelectorAll("a#" + M + "+*").length || I.push(".#.+[+~]") }), e(function(a) { a.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>"; var b = F.createElement("input"); b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && I.push("name" + aa + "*[*^$|!~]?="), 2 !== a.querySelectorAll(":enabled").length && I.push(":enabled", ":disabled"), G.appendChild(a).disabled = !0, 2 !== a.querySelectorAll(":disabled").length && I.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), I.push(",.*:") })), (u.matchesSelector = oa.test(K = G.matches || G.webkitMatchesSelector || G.mozMatchesSelector || G.oMatchesSelector || G.msMatchesSelector)) && e(function(a) { u.disconnectedMatch = K.call(a, "*"), K.call(a, "[s!='']:x"), J.push("!=", da) }), I = I.length && new RegExp(I.join("|")), J = J.length && new RegExp(J.join("|")), b = oa.test(G.compareDocumentPosition), L = b || oa.test(G.contains) ? function(a, b) { var c = 9 === a.nodeType ? a.documentElement : a, d = b && b.parentNode; return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d))) } : function(a, b) { if (b) for (; b = b.parentNode;) if (b === a) return !0; return !1 }, T = b ? function(a, b) { if (a === b) return D = !0, 0; var c = !a.compareDocumentPosition - !b.compareDocumentPosition; return c || (c = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & c || !u.sortDetached && b.compareDocumentPosition(a) === c ? a === F || a.ownerDocument === N && L(N, a) ? -1 : b === F || b.ownerDocument === N && L(N, b) ? 1 : C ? $(C, a) - $(C, b) : 0 : 4 & c ? -1 : 1) } : function(a, b) { if (a === b) return D = !0, 0; var c, d = 0, e = a.parentNode, f = b.parentNode, h = [a], i = [b]; if (!e || !f) return a === F ? -1 : b === F ? 1 : e ? -1 : f ? 1 : C ? $(C, a) - $(C, b) : 0; if (e === f) return g(a, b); for (c = a; c = c.parentNode;) h.unshift(c); for (c = b; c = c.parentNode;) i.unshift(c); for (; h[d] === i[d];) d++; return d ? g(h[d], i[d]) : h[d] === N ? -1 : i[d] === N ? 1 : 0 }, F) : F }, b.matches = function(a, c) { return b(a, null, null, c) }, b.matchesSelector = function(a, c) { if ((a.ownerDocument || a) !== F && E(a), c = c.replace(ia, "='$1']"), u.matchesSelector && H && !S[c + " "] && (!J || !J.test(c)) && (!I || !I.test(c))) try { var d = K.call(a, c); if (d || u.disconnectedMatch || a.document && 11 !== a.document.nodeType) return d } catch (a) {} return b(c, F, null, [a]).length > 0 }, b.contains = function(a, b) { return (a.ownerDocument || a) !== F && E(a), L(a, b) }, b.attr = function(a, b) { (a.ownerDocument || a) !== F && E(a); var c = v.attrHandle[b.toLowerCase()], d = c && U.call(v.attrHandle, b.toLowerCase()) ? c(a, b, !H) : void 0; return void 0 !== d ? d : u.attributes || !H ? a.getAttribute(b) : (d = a.getAttributeNode(b)) && d.specified ? d.value : null }, b.escape = function(a) { return (a + "").replace(ta, ua) }, b.error = function(a) { throw new Error("Syntax error, unrecognized expression: " + a) }, b.uniqueSort = function(a) { var b, c = [], d = 0, e = 0; if (D = !u.detectDuplicates, C = !u.sortStable && a.slice(0), a.sort(T), D) { for (; b = a[e++];) b === a[e] && (d = c.push(e)); for (; d--;) a.splice(c[d], 1) } return C = null, a }, w = b.getText = function(a) { var b, c = "", d = 0, e = a.nodeType; if (e) { if (1 === e || 9 === e || 11 === e) { if ("string" == typeof a.textContent) return a.textContent; for (a = a.firstChild; a; a = a.nextSibling) c += w(a) } else if (3 === e || 4 === e) return a.nodeValue } else for (; b = a[d++];) c += w(b); return c }, v = b.selectors = { cacheLength: 50, createPseudo: d, match: la, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function(a) { return a[1] = a[1].replace(ra, sa), a[3] = (a[3] || a[4] || a[5] || "").replace(ra, sa), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4) }, CHILD: function(a) { return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || b.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && b.error(a[0]), a }, PSEUDO: function(a) { var b, c = !a[6] && a[2]; return la.CHILD.test(a[0]) ? null : (a[3] ? a[2] = a[4] || a[5] || "" : c && ja.test(c) && (b = y(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3)) } }, filter: { TAG: function(a) { var b = a.replace(ra, sa).toLowerCase(); return "*" === a ? function() { return !0 } : function(a) { return a.nodeName && a.nodeName.toLowerCase() === b } }, CLASS: function(a) { var b = Q[a + " "]; return b || (b = new RegExp("(^|" + aa + ")" + a + "(" + aa + "|$)")) && Q(a, function(a) { return b.test("string" == typeof a.className && a.className || void 0 !== a.getAttribute && a.getAttribute("class") || "") }) }, ATTR: function(a, c, d) { return function(e) { var f = b.attr(e, a); return null == f ? "!=" === c : !c || (f += "", "=" === c ? f === d : "!=" === c ? f !== d : "^=" === c ? d && 0 === f.indexOf(d) : "*=" === c ? d && f.indexOf(d) > -1 : "$=" === c ? d && f.slice(-d.length) === d : "~=" === c ? (" " + f.replace(ea, " ") + " ").indexOf(d) > -1 : "|=" === c && (f === d || f.slice(0, d.length + 1) === d + "-")) } }, CHILD: function(a, b, c, d, e) { var f = "nth" !== a.slice(0, 3), g = "last" !== a.slice(-4), h = "of-type" === b; return 1 === d && 0 === e ? function(a) { return !!a.parentNode } : function(b, c, i) { var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling", q = b.parentNode, r = h && b.nodeName.toLowerCase(), s = !i && !h, t = !1; if (q) { if (f) { for (; p;) { for (m = b; m = m[p];) if (h ? m.nodeName.toLowerCase() === r : 1 === m.nodeType) return !1; o = p = "only" === a && !o && "nextSibling" } return !0 } if (o = [g ? q.firstChild : q.lastChild], g && s) { for (m = q, l = m[M] || (m[M] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), j = k[a] || [], n = j[0] === O && j[1], t = n && j[2], m = n && q.childNodes[n]; m = ++n && m && m[p] || (t = n = 0) || o.pop();) if (1 === m.nodeType && ++t && m === b) { k[a] = [O, n, t]; break } } else if (s && (m = b, l = m[M] || (m[M] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), j = k[a] || [], n = j[0] === O && j[1], t = n), !1 === t) for (; (m = ++n && m && m[p] || (t = n = 0) || o.pop()) && ((h ? m.nodeName.toLowerCase() !== r : 1 !== m.nodeType) || !++t || (s && (l = m[M] || (m[M] = {}), k = l[m.uniqueID] || (l[m.uniqueID] = {}), k[a] = [O, t]), m !== b));); return (t -= e) === d || t % d == 0 && t / d >= 0 } } }, PSEUDO: function(a, c) { var e, f = v.pseudos[a] || v.setFilters[a.toLowerCase()] || b.error("unsupported pseudo: " + a); return f[M] ? f(c) : f.length > 1 ? (e = [a, a, "", c], v.setFilters.hasOwnProperty(a.toLowerCase()) ? d(function(a, b) { for (var d, e = f(a, c), g = e.length; g--;) d = $(a, e[g]), a[d] = !(b[d] = e[g]) }) : function(a) { return f(a, 0, e) }) : f } }, pseudos: { not: d(function(a) { var b = [], c = [], e = z(a.replace(fa, "$1")); return e[M] ? d(function(a, b, c, d) { for (var f, g = e(a, null, d, []), h = a.length; h--;)(f = g[h]) && (a[h] = !(b[h] = f)) }) : function(a, d, f) { return b[0] = a, e(b, null, f, c), b[0] = null, !c.pop() } }), has: d(function(a) { return function(c) { return b(a, c).length > 0 } }), contains: d(function(a) { return a = a.replace(ra, sa), function(b) { return (b.textContent || b.innerText || w(b)).indexOf(a) > -1 } }), lang: d(function(a) { return ka.test(a || "") || b.error("unsupported lang: " + a), a = a.replace(ra, sa).toLowerCase(), function(b) { var c; do { if (c = H ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang")) return (c = c.toLowerCase()) === a || 0 === c.indexOf(a + "-") } while ((b = b.parentNode) && 1 === b.nodeType); return !1 } }), target: function(b) { var c = a.location && a.location.hash; return c && c.slice(1) === b.id }, root: function(a) { return a === G }, focus: function(a) { return a === F.activeElement && (!F.hasFocus || F.hasFocus()) && !!(a.type || a.href || ~a.tabIndex) }, enabled: h(!1), disabled: h(!0), checked: function(a) { var b = a.nodeName.toLowerCase(); return "input" === b && !!a.checked || "option" === b && !!a.selected }, selected: function(a) { return a.parentNode && a.parentNode.selectedIndex, !0 === a.selected }, empty: function(a) { for (a = a.firstChild; a; a = a.nextSibling) if (a.nodeType < 6) return !1; return !0 }, parent: function(a) { return !v.pseudos.empty(a) }, header: function(a) { return na.test(a.nodeName) }, input: function(a) { return ma.test(a.nodeName) }, button: function(a) { var b = a.nodeName.toLowerCase(); return "input" === b && "button" === a.type || "button" === b }, text: function(a) { var b; return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase()) }, first: i(function() { return [0] }), last: i(function(a, b) { return [b - 1] }), eq: i(function(a, b, c) { return [c < 0 ? c + b : c] }), even: i(function(a, b) { for (var c = 0; c < b; c += 2) a.push(c); return a }), odd: i(function(a, b) { for (var c = 1; c < b; c += 2) a.push(c); return a }), lt: i(function(a, b, c) { for (var d = c < 0 ? c + b : c; --d >= 0;) a.push(d); return a }), gt: i(function(a, b, c) { for (var d = c < 0 ? c + b : c; ++d < b;) a.push(d); return a }) } }, v.pseudos.nth = v.pseudos.eq; for (t in { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) v.pseudos[t] = function(a) { return function(b) { return "input" === b.nodeName.toLowerCase() && b.type === a } }(t); for (t in { submit: !0, reset: !0 }) v.pseudos[t] = function(a) { return function(b) { var c = b.nodeName.toLowerCase(); return ("input" === c || "button" === c) && b.type === a } }(t); return k.prototype = v.filters = v.pseudos, v.setFilters = new k, y = b.tokenize = function(a, c) { var d, e, f, g, h, i, j, k = R[a + " "]; if (k) return c ? 0 : k.slice(0); for (h = a, i = [], j = v.preFilter; h;) { d && !(e = ga.exec(h)) || (e && (h = h.slice(e[0].length) || h), i.push(f = [])), d = !1, (e = ha.exec(h)) && (d = e.shift(), f.push({ value: d, type: e[0].replace(fa, " ") }), h = h.slice(d.length)); for (g in v.filter) !(e = la[g].exec(h)) || j[g] && !(e = j[g](e)) || (d = e.shift(), f.push({ value: d, type: g, matches: e }), h = h.slice(d.length)); if (!d) break } return c ? h.length : h ? b.error(a) : R(a, i).slice(0) }, z = b.compile = function(a, b) { var c, d = [], e = [], f = S[a + " "]; if (!f) { for (b || (b = y(a)), c = b.length; c--;) f = r(b[c]), f[M] ? d.push(f) : e.push(f); f = S(a, s(e, d)), f.selector = a } return f }, A = b.select = function(a, b, c, d) { var e, f, g, h, i, k = "function" == typeof a && a, m = !d && y(a = k.selector || a); if (c = c || [], 1 === m.length) { if (f = m[0] = m[0].slice(0), f.length > 2 && "ID" === (g = f[0]).type && u.getById && 9 === b.nodeType && H && v.relative[f[1].type]) { if (!(b = (v.find.ID(g.matches[0].replace(ra, sa), b) || [])[0])) return c; k && (b = b.parentNode), a = a.slice(f.shift().value.length) } for (e = la.needsContext.test(a) ? 0 : f.length; e-- && (g = f[e], !v.relative[h = g.type]);) if ((i = v.find[h]) && (d = i(g.matches[0].replace(ra, sa), qa.test(f[0].type) && j(b.parentNode) || b))) { if (f.splice(e, 1), !(a = d.length && l(f))) return Y.apply(c, d), c; break } } return (k || z(a, m))(d, b, !H, c, !b || qa.test(a) && j(b.parentNode) || b), c }, u.sortStable = M.split("").sort(T).join("") === M, u.detectDuplicates = !!D, E(), u.sortDetached = e(function(a) { return 1 & a.compareDocumentPosition(F.createElement("fieldset")) }), e(function(a) { return a.innerHTML = "<a href='#'></a>", "#" === a.firstChild.getAttribute("href") }) || f("type|href|height|width", function(a, b, c) { if (!c) return a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2) }), u.attributes && e(function(a) { return a.innerHTML = "<input/>", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value") }) || f("value", function(a, b, c) { if (!c && "input" === a.nodeName.toLowerCase()) return a.defaultValue }), e(function(a) { return null == a.getAttribute("disabled") }) || f(_, function(a, b, c) { var d; if (!c) return !0 === a[b] ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null }), b }(a); la.find = qa, la.expr = qa.selectors, la.expr[":"] = la.expr.pseudos, la.uniqueSort = la.unique = qa.uniqueSort, la.text = qa.getText, la.isXMLDoc = qa.isXML, la.contains = qa.contains, la.escapeSelector = qa.escape; var ra = function(a, b, c) { for (var d = [], e = void 0 !== c; (a = a[b]) && 9 !== a.nodeType;) if (1 === a.nodeType) { if (e && la(a).is(c)) break; d.push(a) } return d }, sa = function(a, b) { for (var c = []; a; a = a.nextSibling) 1 === a.nodeType && a !== b && c.push(a); return c }, ta = la.expr.match.needsContext, ua = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i, va = /^.[^:#\[\.,]*$/; la.filter = function(a, b, c) { var d = b[0]; return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? la.find.matchesSelector(d, a) ? [d] : [] : la.find.matches(a, la.grep(b, function(a) { return 1 === a.nodeType })) }, la.fn.extend({ find: function(a) { var b, c, d = this.length, e = this; if ("string" != typeof a) return this.pushStack(la(a).filter(function() { for (b = 0; b < d; b++) if (la.contains(e[b], this)) return !0 })); for (c = this.pushStack([]), b = 0; b < d; b++) la.find(a, e[b], c); return d > 1 ? la.uniqueSort(c) : c }, filter: function(a) { return this.pushStack(e(this, a || [], !1)) }, not: function(a) { return this.pushStack(e(this, a || [], !0)) }, is: function(a) { return !!e(this, "string" == typeof a && ta.test(a) ? la(a) : a || [], !1).length } }); var wa, xa = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/; (la.fn.init = function(a, b, c) { var d, e; if (!a) return this; if (c = c || wa, "string" == typeof a) { if (!(d = "<" === a[0] && ">" === a[a.length - 1] && a.length >= 3 ? [null, a, null] : xa.exec(a)) || !d[1] && b) return !b || b.jquery ? (b || c).find(a) : this.constructor(b).find(a); if (d[1]) { if (b = b instanceof la ? b[0] : b, la.merge(this, la.parseHTML(d[1], b && b.nodeType ? b.ownerDocument || b : _, !0)), ua.test(d[1]) && la.isPlainObject(b)) for (d in b) la.isFunction(this[d]) ? this[d](b[d]) : this.attr(d, b[d]); return this } return e = _.getElementById(d[2]), e && (this[0] = e, this.length = 1), this } return a.nodeType ? (this[0] = a, this.length = 1, this) : la.isFunction(a) ? void 0 !== c.ready ? c.ready(a) : a(la) : la.makeArray(a, this) }).prototype = la.fn, wa = la(_); var ya = /^(?:parents|prev(?:Until|All))/, za = { children: !0, contents: !0, next: !0, prev: !0 }; la.fn.extend({ has: function(a) { var b = la(a, this), c = b.length; return this.filter(function() { for (var a = 0; a < c; a++) if (la.contains(this, b[a])) return !0 }) }, closest: function(a, b) { var c, d = 0, e = this.length, f = [], g = "string" != typeof a && la(a); if (!ta.test(a)) for (; d < e; d++) for (c = this[d]; c && c !== b; c = c.parentNode) if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && la.find.matchesSelector(c, a))) { f.push(c); break } return this.pushStack(f.length > 1 ? la.uniqueSort(f) : f) }, index: function(a) { return a ? "string" == typeof a ? ea.call(la(a), this[0]) : ea.call(this, a.jquery ? a[0] : a) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, add: function(a, b) { return this.pushStack(la.uniqueSort(la.merge(this.get(), la(a, b)))) }, addBack: function(a) { return this.add(null == a ? this.prevObject : this.prevObject.filter(a)) } }), la.each({ parent: function(a) { var b = a.parentNode; return b && 11 !== b.nodeType ? b : null }, parents: function(a) { return ra(a, "parentNode") }, parentsUntil: function(a, b, c) { return ra(a, "parentNode", c) }, next: function(a) { return f(a, "nextSibling") }, prev: function(a) { return f(a, "previousSibling") }, nextAll: function(a) { return ra(a, "nextSibling") }, prevAll: function(a) { return ra(a, "previousSibling") }, nextUntil: function(a, b, c) { return ra(a, "nextSibling", c) }, prevUntil: function(a, b, c) { return ra(a, "previousSibling", c) }, siblings: function(a) { return sa((a.parentNode || {}).firstChild, a) }, children: function(a) { return sa(a.firstChild) }, contents: function(a) { return a.contentDocument || la.merge([], a.childNodes) } }, function(a, b) { la.fn[a] = function(c, d) { var e = la.map(this, b, c); return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = la.filter(d, e)), this.length > 1 && (za[a] || la.uniqueSort(e), ya.test(a) && e.reverse()), this.pushStack(e) } }); var Aa = /\S+/g; la.Callbacks = function(a) { a = "string" == typeof a ? g(a) : la.extend({}, a); var b, c, d, e, f = [], h = [], i = -1, j = function() { for (e = a.once, d = b = !0; h.length; i = -1) for (c = h.shift(); ++i < f.length;) !1 === f[i].apply(c[0], c[1]) && a.stopOnFalse && (i = f.length, c = !1); a.memory || (c = !1), b = !1, e && (f = c ? [] : "") }, k = { add: function() { return f && (c && !b && (i = f.length - 1, h.push(c)), function b(c) { la.each(c, function(c, d) { la.isFunction(d) ? a.unique && k.has(d) || f.push(d) : d && d.length && "string" !== la.type(d) && b(d) }) }(arguments), c && !b && j()), this }, remove: function() { return la.each(arguments, function(a, b) { for (var c; (c = la.inArray(b, f, c)) > -1;) f.splice(c, 1), c <= i && i-- }), this }, has: function(a) { return a ? la.inArray(a, f) > -1 : f.length > 0 }, empty: function() { return f && (f = []), this }, disable: function() { return e = h = [], f = c = "", this }, disabled: function() { return !f }, lock: function() { return e = h = [], c || b || (f = c = ""), this }, locked: function() { return !!e }, fireWith: function(a, c) { return e || (c = c || [], c = [a, c.slice ? c.slice() : c], h.push(c), b || j()), this }, fire: function() { return k.fireWith(this, arguments), this }, fired: function() { return !!d } }; return k }, la.extend({ Deferred: function(b) { var c = [ ["notify", "progress", la.Callbacks("memory"), la.Callbacks("memory"), 2], ["resolve", "done", la.Callbacks("once memory"), la.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", la.Callbacks("once memory"), la.Callbacks("once memory"), 1, "rejected"] ], d = "pending", e = { state: function() { return d }, always: function() { return f.done(arguments).fail(arguments), this }, catch: function(a) { return e.then(null, a) }, pipe: function() { var a = arguments; return la.Deferred(function(b) { la.each(c, function(c, d) { var e = la.isFunction(a[d[4]]) && a[d[4]]; f[d[1]](function() { var a = e && e.apply(this, arguments); a && la.isFunction(a.promise) ? a.promise().progress(b.notify).done(b.resolve).fail(b.reject) : b[d[0] + "With"](this, e ? [a] : arguments) }) }), a = null }).promise() }, then: function(b, d, e) { function f(b, c, d, e) { return function() { var j = this, k = arguments, l = function() { var a, l; if (!(b < g)) { if ((a = d.apply(j, k)) === c.promise()) throw new TypeError("Thenable self-resolution"); l = a && ("object" == typeof a || "function" == typeof a) && a.then, la.isFunction(l) ? e ? l.call(a, f(g, c, h, e), f(g, c, i, e)) : (g++, l.call(a, f(g, c, h, e), f(g, c, i, e), f(g, c, h, c.notifyWith))) : (d !== h && (j = void 0, k = [a]), (e || c.resolveWith)(j, k)) } }, m = e ? l : function() { try { l() } catch (a) { la.Deferred.exceptionHook && la.Deferred.exceptionHook(a, m.stackTrace), b + 1 >= g && (d !== i && (j = void 0, k = [a]), c.rejectWith(j, k)) } }; b ? m() : (la.Deferred.getStackHook && (m.stackTrace = la.Deferred.getStackHook()), a.setTimeout(m)) } } var g = 0; return la.Deferred(function(a) { c[0][3].add(f(0, a, la.isFunction(e) ? e : h, a.notifyWith)), c[1][3].add(f(0, a, la.isFunction(b) ? b : h)), c[2][3].add(f(0, a, la.isFunction(d) ? d : i)) }).promise() }, promise: function(a) { return null != a ? la.extend(a, e) : e } }, f = {}; return la.each(c, function(a, b) { var g = b[2], h = b[5]; e[b[1]] = g.add, h && g.add(function() { d = h }, c[3 - a][2].disable, c[0][2].lock), g.add(b[3].fire), f[b[0]] = function() { return f[b[0] + "With"](this === f ? void 0 : this, arguments), this }, f[b[0] + "With"] = g.fireWith }), e.promise(f), b && b.call(f, f), f }, when: function(a) { var b = arguments.length, c = b, d = Array(c), e = ba.call(arguments), f = la.Deferred(), g = function(a) { return function(c) { d[a] = this, e[a] = arguments.length > 1 ? ba.call(arguments) : c, --b || f.resolveWith(d, e) } }; if (b <= 1 && (j(a, f.done(g(c)).resolve, f.reject), "pending" === f.state() || la.isFunction(e[c] && e[c].then))) return f.then(); for (; c--;) j(e[c], g(c), f.reject); return f.promise() } }); var Ba = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; la.Deferred.exceptionHook = function(b, c) { a.console && a.console.warn && b && Ba.test(b.name) && a.console.warn("jQuery.Deferred exception: " + b.message, b.stack, c) }, la.readyException = function(b) { a.setTimeout(function() { throw b }) }; var Ca = la.Deferred(); la.fn.ready = function(a) { return Ca.then(a).catch(function(a) { la.readyException(a) }), this }, la.extend({ isReady: !1, readyWait: 1, holdReady: function(a) { a ? la.readyWait++ : la.ready(!0) }, ready: function(a) { (!0 === a ? --la.readyWait : la.isReady) || (la.isReady = !0, !0 !== a && --la.readyWait > 0 || Ca.resolveWith(_, [la])) } }), la.ready.then = Ca.then, "complete" === _.readyState || "loading" !== _.readyState && !_.documentElement.doScroll ? a.setTimeout(la.ready) : (_.addEventListener("DOMContentLoaded", k), a.addEventListener("load", k)); var Da = function(a, b, c, d, e, f, g) { var h = 0, i = a.length, j = null == c; if ("object" === la.type(c)) { e = !0; for (h in c) Da(a, b, h, c[h], !0, f, g) } else if (void 0 !== d && (e = !0, la.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function(a, b, c) { return j.call(la(a), c) })), b)) for (; h < i; h++) b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c))); return e ? a : j ? b.call(a) : i ? b(a[0], c) : f }, Ea = function(a) { return 1 === a.nodeType || 9 === a.nodeType || !+a.nodeType }; l.uid = 1, l.prototype = { cache: function(a) { var b = a[this.expando]; return b || (b = {}, Ea(a) && (a.nodeType ? a[this.expando] = b : Object.defineProperty(a, this.expando, { value: b, configurable: !0 }))), b }, set: function(a, b, c) { var d, e = this.cache(a); if ("string" == typeof b) e[la.camelCase(b)] = c; else for (d in b) e[la.camelCase(d)] = b[d]; return e }, get: function(a, b) { return void 0 === b ? this.cache(a) : a[this.expando] && a[this.expando][la.camelCase(b)] }, access: function(a, b, c) { return void 0 === b || b && "string" == typeof b && void 0 === c ? this.get(a, b) : (this.set(a, b, c), void 0 !== c ? c : b) }, remove: function(a, b) { var c, d = a[this.expando]; if (void 0 !== d) { if (void 0 !== b) { la.isArray(b) ? b = b.map(la.camelCase) : (b = la.camelCase(b), b = b in d ? [b] : b.match(Aa) || []), c = b.length; for (; c--;) delete d[b[c]] }(void 0 === b || la.isEmptyObject(d)) && (a.nodeType ? a[this.expando] = void 0 : delete a[this.expando]) } }, hasData: function(a) { var b = a[this.expando]; return void 0 !== b && !la.isEmptyObject(b) } }; var Fa = new l, Ga = new l, Ha = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, Ia = /[A-Z]/g; la.extend({ hasData: function(a) { return Ga.hasData(a) || Fa.hasData(a) }, data: function(a, b, c) { return Ga.access(a, b, c) }, removeData: function(a, b) { Ga.remove(a, b) }, _data: function(a, b, c) { return Fa.access(a, b, c) }, _removeData: function(a, b) { Fa.remove(a, b) } }), la.fn.extend({ data: function(a, b) { var c, d, e, f = this[0], g = f && f.attributes; if (void 0 === a) { if (this.length && (e = Ga.get(f), 1 === f.nodeType && !Fa.get(f, "hasDataAttrs"))) { for (c = g.length; c--;) g[c] && (d = g[c].name, 0 === d.indexOf("data-") && (d = la.camelCase(d.slice(5)), m(f, d, e[d]))); Fa.set(f, "hasDataAttrs", !0) } return e } return "object" == typeof a ? this.each(function() { Ga.set(this, a) }) : Da(this, function(b) { var c; if (f && void 0 === b) { if (void 0 !== (c = Ga.get(f, a))) return c; if (void 0 !== (c = m(f, a))) return c } else this.each(function() { Ga.set(this, a, b) }) }, null, b, arguments.length > 1, null, !0) }, removeData: function(a) { return this.each(function() { Ga.remove(this, a) }) } }), la.extend({ queue: function(a, b, c) { var d; if (a) return b = (b || "fx") + "queue", d = Fa.get(a, b), c && (!d || la.isArray(c) ? d = Fa.access(a, b, la.makeArray(c)) : d.push(c)), d || [] }, dequeue: function(a, b) { b = b || "fx"; var c = la.queue(a, b), d = c.length, e = c.shift(), f = la._queueHooks(a, b), g = function() { la.dequeue(a, b) }; "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire() }, _queueHooks: function(a, b) { var c = b + "queueHooks"; return Fa.get(a, c) || Fa.access(a, c, { empty: la.Callbacks("once memory").add(function() { Fa.remove(a, [b + "queue", c]) }) }) } }), la.fn.extend({ queue: function(a, b) { var c = 2; return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? la.queue(this[0], a) : void 0 === b ? this : this.each(function() { var c = la.queue(this, a, b); la._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && la.dequeue(this, a) }) }, dequeue: function(a) { return this.each(function() { la.dequeue(this, a) }) }, clearQueue: function(a) { return this.queue(a || "fx", []) }, promise: function(a, b) { var c, d = 1, e = la.Deferred(), f = this, g = this.length, h = function() {--d || e.resolveWith(f, [f]) }; for ("string" != typeof a && (b = a, a = void 0), a = a || "fx"; g--;)(c = Fa.get(f[g], a + "queueHooks")) && c.empty && (d++, c.empty.add(h)); return h(), e.promise(b) } }); var Ja = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, Ka = new RegExp("^(?:([+-])=|)(" + Ja + ")([a-z%]*)$", "i"), La = ["Top", "Right", "Bottom", "Left"], Ma = function(a, b) { return a = b || a, "none" === a.style.display || "" === a.style.display && la.contains(a.ownerDocument, a) && "none" === la.css(a, "display") }, Na = function(a, b, c, d) { var e, f, g = {}; for (f in b) g[f] = a.style[f], a.style[f] = b[f]; e = c.apply(a, d || []); for (f in b) a.style[f] = g[f]; return e }, Oa = {}; la.fn.extend({ show: function() { return p(this, !0) }, hide: function() { return p(this) }, toggle: function(a) { return "boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function() { Ma(this) ? la(this).show() : la(this).hide() }) } }); var Pa = /^(?:checkbox|radio)$/i, Qa = /<([a-z][^\/\0>\x20\t\r\n\f]+)/i, Ra = /^$|\/(?:java|ecma)script/i, Sa = { option: [1, "<select multiple='multiple'>", "</select>"], thead: [1, "<table>", "</table>"], col: [2, "<table><colgroup>", "</colgroup></table>"], tr: [2, "<table><tbody>", "</tbody></table>"], td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], _default: [0, "", ""] }; Sa.optgroup = Sa.option, Sa.tbody = Sa.tfoot = Sa.colgroup = Sa.caption = Sa.thead, Sa.th = Sa.td; var Ta = /<|&#?\w+;/; ! function() { var a = _.createDocumentFragment(), b = a.appendChild(_.createElement("div")), c = _.createElement("input"); c.setAttribute("type", "radio"), c.setAttribute("checked", "checked"), c.setAttribute("name", "t"), b.appendChild(c), ka.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, b.innerHTML = "<textarea>x</textarea>", ka.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue }(); var Ua = _.documentElement, Va = /^key/, Wa = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, Xa = /^([^.]*)(?:\.(.+)|)/; la.event = { global: {}, add: function(a, b, c, d, e) { var f, g, h, i, j, k, l, m, n, o, p, q = Fa.get(a); if (q) for (c.handler && (f = c, c = f.handler, e = f.selector), e && la.find.matchesSelector(Ua, e), c.guid || (c.guid = la.guid++), (i = q.events) || (i = q.events = {}), (g = q.handle) || (g = q.handle = function(b) { return void 0 !== la && la.event.triggered !== b.type ? la.event.dispatch.apply(a, arguments) : void 0 }), b = (b || "").match(Aa) || [""], j = b.length; j--;) h = Xa.exec(b[j]) || [], n = p = h[1], o = (h[2] || "").split(".").sort(), n && (l = la.event.special[n] || {}, n = (e ? l.delegateType : l.bindType) || n, l = la.event.special[n] || {}, k = la.extend({ type: n, origType: p, data: d, handler: c, guid: c.guid, selector: e, needsContext: e && la.expr.match.needsContext.test(e), namespace: o.join(".") }, f), (m = i[n]) || (m = i[n] = [], m.delegateCount = 0, l.setup && !1 !== l.setup.call(a, d, o, g) || a.addEventListener && a.addEventListener(n, g)), l.add && (l.add.call(a, k), k.handler.guid || (k.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, k) : m.push(k), la.event.global[n] = !0) }, remove: function(a, b, c, d, e) { var f, g, h, i, j, k, l, m, n, o, p, q = Fa.hasData(a) && Fa.get(a); if (q && (i = q.events)) { for (b = (b || "").match(Aa) || [""], j = b.length; j--;) if (h = Xa.exec(b[j]) || [], n = p = h[1], o = (h[2] || "").split(".").sort(), n) { for (l = la.event.special[n] || {}, n = (d ? l.delegateType : l.bindType) || n, m = i[n] || [], h = h[2] && new RegExp("(^|\\.)" + o.join("\\.(?:.*\\.|)") + "(\\.|$)"), g = f = m.length; f--;) k = m[f], !e && p !== k.origType || c && c.guid !== k.guid || h && !h.test(k.namespace) || d && d !== k.selector && ("**" !== d || !k.selector) || (m.splice(f, 1), k.selector && m.delegateCount--, l.remove && l.remove.call(a, k)); g && !m.length && (l.teardown && !1 !== l.teardown.call(a, o, q.handle) || la.removeEvent(a, n, q.handle), delete i[n]) } else for (n in i) la.event.remove(a, n + b[j], c, d, !0); la.isEmptyObject(i) && Fa.remove(a, "handle events") } }, dispatch: function(a) { var b, c, d, e, f, g, h = la.event.fix(a), i = new Array(arguments.length), j = (Fa.get(this, "events") || {})[h.type] || [], k = la.event.special[h.type] || {}; for (i[0] = h, b = 1; b < arguments.length; b++) i[b] = arguments[b]; if (h.delegateTarget = this, !k.preDispatch || !1 !== k.preDispatch.call(this, h)) { for (g = la.event.handlers.call(this, h, j), b = 0; (e = g[b++]) && !h.isPropagationStopped();) for (h.currentTarget = e.elem, c = 0; (f = e.handlers[c++]) && !h.isImmediatePropagationStopped();) h.rnamespace && !h.rnamespace.test(f.namespace) || (h.handleObj = f, h.data = f.data, void 0 !== (d = ((la.event.special[f.origType] || {}).handle || f.handler).apply(e.elem, i)) && !1 === (h.result = d) && (h.preventDefault(), h.stopPropagation())); return k.postDispatch && k.postDispatch.call(this, h), h.result } }, handlers: function(a, b) { var c, d, e, f, g = [], h = b.delegateCount, i = a.target; if (h && i.nodeType && ("click" !== a.type || isNaN(a.button) || a.button < 1)) for (; i !== this; i = i.parentNode || this) if (1 === i.nodeType && (!0 !== i.disabled || "click" !== a.type)) { for (d = [], c = 0; c < h; c++) f = b[c], e = f.selector + " ", void 0 === d[e] && (d[e] = f.needsContext ? la(e, this).index(i) > -1 : la.find(e, this, null, [i]).length), d[e] && d.push(f); d.length && g.push({ elem: i, handlers: d }) } return h < b.length && g.push({ elem: this, handlers: b.slice(h) }), g }, addProp: function(a, b) { Object.defineProperty(la.Event.prototype, a, { enumerable: !0, configurable: !0, get: la.isFunction(b) ? function() { if (this.originalEvent) return b(this.originalEvent) } : function() { if (this.originalEvent) return this.originalEvent[a] }, set: function(b) { Object.defineProperty(this, a, { enumerable: !0, configurable: !0, writable: !0, value: b }) } }) }, fix: function(a) { return a[la.expando] ? a : new la.Event(a) }, special: { load: { noBubble: !0 }, focus: { trigger: function() { if (this !== v() && this.focus) return this.focus(), !1 }, delegateType: "focusin" }, blur: { trigger: function() { if (this === v() && this.blur) return this.blur(), !1 }, delegateType: "focusout" }, click: { trigger: function() { if ("checkbox" === this.type && this.click && la.nodeName(this, "input")) return this.click(), !1 }, _default: function(a) { return la.nodeName(a.target, "a") } }, beforeunload: { postDispatch: function(a) { void 0 !== a.result && a.originalEvent && (a.originalEvent.returnValue = a.result) } } } }, la.removeEvent = function(a, b, c) { a.removeEventListener && a.removeEventListener(b, c) }, la.Event = function(a, b) { if (!(this instanceof la.Event)) return new la.Event(a, b); a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && !1 === a.returnValue ? t : u, this.target = a.target && 3 === a.target.nodeType ? a.target.parentNode : a.target, this.currentTarget = a.currentTarget, this.relatedTarget = a.relatedTarget) : this.type = a, b && la.extend(this, b), this.timeStamp = a && a.timeStamp || la.now(), this[la.expando] = !0 }, la.Event.prototype = { constructor: la.Event, isDefaultPrevented: u, isPropagationStopped: u, isImmediatePropagationStopped: u, isSimulated: !1, preventDefault: function() { var a = this.originalEvent; this.isDefaultPrevented = t, a && !this.isSimulated && a.preventDefault() }, stopPropagation: function() { var a = this.originalEvent; this.isPropagationStopped = t, a && !this.isSimulated && a.stopPropagation() }, stopImmediatePropagation: function() { var a = this.originalEvent; this.isImmediatePropagationStopped = t, a && !this.isSimulated && a.stopImmediatePropagation(), this.stopPropagation() } }, la.each({ altKey: !0, bubbles: !0, cancelable: !0, changedTouches: !0, ctrlKey: !0, detail: !0, eventPhase: !0, metaKey: !0, pageX: !0, pageY: !0, shiftKey: !0, view: !0, char: !0, charCode: !0, key: !0, keyCode: !0, button: !0, buttons: !0, clientX: !0, clientY: !0, offsetX: !0, offsetY: !0, pointerId: !0, pointerType: !0, screenX: !0, screenY: !0, targetTouches: !0, toElement: !0, touches: !0, which: function(a) { var b = a.button; return null == a.which && Va.test(a.type) ? null != a.charCode ? a.charCode : a.keyCode : !a.which && void 0 !== b && Wa.test(a.type) ? 1 & b ? 1 : 2 & b ? 3 : 4 & b ? 2 : 0 : a.which } }, la.event.addProp), la.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function(a, b) { la.event.special[a] = { delegateType: b, bindType: b, handle: function(a) { var c, d = this, e = a.relatedTarget, f = a.handleObj; return e && (e === d || la.contains(d, e)) || (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c } } }), la.fn.extend({ on: function(a, b, c, d) { return w(this, a, b, c, d) }, one: function(a, b, c, d) { return w(this, a, b, c, d, 1) }, off: function(a, b, c) { var d, e; if (a && a.preventDefault && a.handleObj) return d = a.handleObj, la(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this; if ("object" == typeof a) { for (e in a) this.off(e, b, a[e]); return this } return !1 !== b && "function" != typeof b || (c = b, b = void 0), !1 === c && (c = u), this.each(function() { la.event.remove(this, a, c, b) }) } }); var Ya = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, Za = /<script|<style|<link/i, $a = /checked\s*(?:[^=]|=\s*.checked.)/i, _a = /^true\/(.*)/, ab = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; la.extend({ htmlPrefilter: function(a) { return a.replace(Ya, "<$1></$2>") }, clone: function(a, b, c) { var d, e, f, g, h = a.cloneNode(!0), i = la.contains(a.ownerDocument, a); if (!(ka.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || la.isXMLDoc(a))) for (g = q(h), f = q(a), d = 0, e = f.length; d < e; d++) B(f[d], g[d]); if (b) if (c) for (f = f || q(a), g = g || q(h), d = 0, e = f.length; d < e; d++) A(f[d], g[d]); else A(a, h); return g = q(h, "script"), g.length > 0 && r(g, !i && q(a, "script")), h }, cleanData: function(a) { for (var b, c, d, e = la.event.special, f = 0; void 0 !== (c = a[f]); f++) if (Ea(c)) { if (b = c[Fa.expando]) { if (b.events) for (d in b.events) e[d] ? la.event.remove(c, d) : la.removeEvent(c, d, b.handle); c[Fa.expando] = void 0 } c[Ga.expando] && (c[Ga.expando] = void 0) } } }), la.fn.extend({ detach: function(a) { return D(this, a, !0) }, remove: function(a) { return D(this, a) }, text: function(a) { return Da(this, function(a) { return void 0 === a ? la.text(this) : this.empty().each(function() { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = a) }) }, null, a, arguments.length) }, append: function() { return C(this, arguments, function(a) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { x(this, a).appendChild(a) } }) }, prepend: function() { return C(this, arguments, function(a) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var b = x(this, a); b.insertBefore(a, b.firstChild) } }) }, before: function() { return C(this, arguments, function(a) { this.parentNode && this.parentNode.insertBefore(a, this) }) }, after: function() { return C(this, arguments, function(a) { this.parentNode && this.parentNode.insertBefore(a, this.nextSibling) }) }, empty: function() { for (var a, b = 0; null != (a = this[b]); b++) 1 === a.nodeType && (la.cleanData(q(a, !1)), a.textContent = ""); return this }, clone: function(a, b) { return a = null != a && a, b = null == b ? a : b, this.map(function() { return la.clone(this, a, b) }) }, html: function(a) { return Da(this, function(a) { var b = this[0] || {}, c = 0, d = this.length; if (void 0 === a && 1 === b.nodeType) return b.innerHTML; if ("string" == typeof a && !Za.test(a) && !Sa[(Qa.exec(a) || ["", ""])[1].toLowerCase()]) { a = la.htmlPrefilter(a); try { for (; c < d; c++) b = this[c] || {}, 1 === b.nodeType && (la.cleanData(q(b, !1)), b.innerHTML = a); b = 0 } catch (a) {} } b && this.empty().append(a) }, null, a, arguments.length) }, replaceWith: function() { var a = []; return C(this, arguments, function(b) { var c = this.parentNode; la.inArray(this, a) < 0 && (la.cleanData(q(this)), c && c.replaceChild(b, this)) }, a) } }), la.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function(a, b) { la.fn[a] = function(a) { for (var c, d = [], e = la(a), f = e.length - 1, g = 0; g <= f; g++) c = g === f ? this : this.clone(!0), la(e[g])[b](c), da.apply(d, c.get()); return this.pushStack(d) } }); var bb = /^margin/, cb = new RegExp("^(" + Ja + ")(?!px)[a-z%]+$", "i"), db = function(b) { var c = b.ownerDocument.defaultView; return c && c.opener || (c = a), c.getComputedStyle(b) }; ! function() { function b() { if (h) { h.style.cssText = "box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%", h.innerHTML = "", Ua.appendChild(g); var b = a.getComputedStyle(h); c = "1%" !== b.top, f = "2px" === b.marginLeft, d = "4px" === b.width, h.style.marginRight = "50%", e = "4px" === b.marginRight, Ua.removeChild(g), h = null } } var c, d, e, f, g = _.createElement("div"), h = _.createElement("div"); h.style && (h.style.backgroundClip = "content-box", h.cloneNode(!0).style.backgroundClip = "", ka.clearCloneStyle = "content-box" === h.style.backgroundClip, g.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute", g.appendChild(h), la.extend(ka, { pixelPosition: function() { return b(), c }, boxSizingReliable: function() { return b(), d }, pixelMarginRight: function() { return b(), e }, reliableMarginLeft: function() { return b(), f } })) }(); var eb = /^(none|table(?!-c[ea]).+)/, fb = { position: "absolute", visibility: "hidden", display: "block" }, gb = { letterSpacing: "0", fontWeight: "400" }, hb = ["Webkit", "Moz", "ms"], ib = _.createElement("div").style; la.extend({ cssHooks: { opacity: { get: function(a, b) { if (b) { var c = E(a, "opacity"); return "" === c ? "1" : c } } } }, cssNumber: { animationIterationCount: !0, columnCount: !0, fillOpacity: !0, flexGrow: !0, flexShrink: !0, fontWeight: !0, lineHeight: !0, opacity: !0, order: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0 }, cssProps: { float: "cssFloat" }, style: function(a, b, c, d) { if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) { var e, f, g, h = la.camelCase(b), i = a.style; if (b = la.cssProps[h] || (la.cssProps[h] = G(h) || h), g = la.cssHooks[b] || la.cssHooks[h], void 0 === c) return g && "get" in g && void 0 !== (e = g.get(a, !1, d)) ? e : i[b]; f = typeof c, "string" === f && (e = Ka.exec(c)) && e[1] && (c = n(a, b, e), f = "number"), null != c && c === c && ("number" === f && (c += e && e[3] || (la.cssNumber[h] ? "" : "px")), ka.clearCloneStyle || "" !== c || 0 !== b.indexOf("background") || (i[b] = "inherit"), g && "set" in g && void 0 === (c = g.set(a, c, d)) || (i[b] = c)) } }, css: function(a, b, c, d) { var e, f, g, h = la.camelCase(b); return b = la.cssProps[h] || (la.cssProps[h] = G(h) || h), g = la.cssHooks[b] || la.cssHooks[h], g && "get" in g && (e = g.get(a, !0, c)), void 0 === e && (e = E(a, b, d)), "normal" === e && b in gb && (e = gb[b]), "" === c || c ? (f = parseFloat(e), !0 === c || isFinite(f) ? f || 0 : e) : e } }), la.each(["height", "width"], function(a, b) { la.cssHooks[b] = { get: function(a, c, d) { if (c) return !eb.test(la.css(a, "display")) || a.getClientRects().length && a.getBoundingClientRect().width ? J(a, b, d) : Na(a, fb, function() { return J(a, b, d) }) }, set: function(a, c, d) { var e, f = d && db(a), g = d && I(a, b, d, "border-box" === la.css(a, "boxSizing", !1, f), f); return g && (e = Ka.exec(c)) && "px" !== (e[3] || "px") && (a.style[b] = c, c = la.css(a, b)), H(a, c, g) } } }), la.cssHooks.marginLeft = F(ka.reliableMarginLeft, function(a, b) { if (b) return (parseFloat(E(a, "marginLeft")) || a.getBoundingClientRect().left - Na(a, { marginLeft: 0 }, function() { return a.getBoundingClientRect().left })) + "px" }), la.each({ margin: "", padding: "", border: "Width" }, function(a, b) { la.cssHooks[a + b] = { expand: function(c) { for (var d = 0, e = {}, f = "string" == typeof c ? c.split(" ") : [c]; d < 4; d++) e[a + La[d] + b] = f[d] || f[d - 2] || f[0]; return e } }, bb.test(a) || (la.cssHooks[a + b].set = H) }), la.fn.extend({ css: function(a, b) { return Da(this, function(a, b, c) { var d, e, f = {}, g = 0; if (la.isArray(b)) { for (d = db(a), e = b.length; g < e; g++) f[b[g]] = la.css(a, b[g], !1, d); return f } return void 0 !== c ? la.style(a, b, c) : la.css(a, b) }, a, b, arguments.length > 1) } }), la.Tween = K, K.prototype = { constructor: K, init: function(a, b, c, d, e, f) { this.elem = a, this.prop = c, this.easing = e || la.easing._default, this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (la.cssNumber[c] ? "" : "px") }, cur: function() { var a = K.propHooks[this.prop]; return a && a.get ? a.get(this) : K.propHooks._default.get(this) }, run: function(a) { var b, c = K.propHooks[this.prop]; return this.options.duration ? this.pos = b = la.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : this.pos = b = a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : K.propHooks._default.set(this), this } }, K.prototype.init.prototype = K.prototype, K.propHooks = { _default: { get: function(a) { var b; return 1 !== a.elem.nodeType || null != a.elem[a.prop] && null == a.elem.style[a.prop] ? a.elem[a.prop] : (b = la.css(a.elem, a.prop, ""), b && "auto" !== b ? b : 0) }, set: function(a) { la.fx.step[a.prop] ? la.fx.step[a.prop](a) : 1 !== a.elem.nodeType || null == a.elem.style[la.cssProps[a.prop]] && !la.cssHooks[a.prop] ? a.elem[a.prop] = a.now : la.style(a.elem, a.prop, a.now + a.unit) } } }, K.propHooks.scrollTop = K.propHooks.scrollLeft = { set: function(a) { a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now) } }, la.easing = { linear: function(a) { return a }, swing: function(a) { return .5 - Math.cos(a * Math.PI) / 2 }, _default: "swing" }, la.fx = K.prototype.init, la.fx.step = {}; var jb, kb, lb = /^(?:toggle|show|hide)$/, mb = /queueHooks$/; la.Animation = la.extend(R, { tweeners: { "*": [function(a, b) { var c = this.createTween(a, b); return n(c.elem, a, Ka.exec(b), c), c }] }, tweener: function(a, b) { la.isFunction(a) ? (b = a, a = ["*"]) : a = a.match(Aa); for (var c, d = 0, e = a.length; d < e; d++) c = a[d], R.tweeners[c] = R.tweeners[c] || [], R.tweeners[c].unshift(b) }, prefilters: [P], prefilter: function(a, b) { b ? R.prefilters.unshift(a) : R.prefilters.push(a) } }), la.speed = function(a, b, c) { var d = a && "object" == typeof a ? la.extend({}, a) : { complete: c || !c && b || la.isFunction(a) && a, duration: a, easing: c && b || b && !la.isFunction(b) && b }; return la.fx.off || _.hidden ? d.duration = 0 : d.duration = "number" == typeof d.duration ? d.duration : d.duration in la.fx.speeds ? la.fx.speeds[d.duration] : la.fx.speeds._default, null != d.queue && !0 !== d.queue || (d.queue = "fx"), d.old = d.complete, d.complete = function() { la.isFunction(d.old) && d.old.call(this), d.queue && la.dequeue(this, d.queue) }, d }, la.fn.extend({ fadeTo: function(a, b, c, d) { return this.filter(Ma).css("opacity", 0).show().end().animate({ opacity: b }, a, c, d) }, animate: function(a, b, c, d) { var e = la.isEmptyObject(a), f = la.speed(b, c, d), g = function() { var b = R(this, la.extend({}, a), f); (e || Fa.get(this, "finish")) && b.stop(!0) }; return g.finish = g, e || !1 === f.queue ? this.each(g) : this.queue(f.queue, g) }, stop: function(a, b, c) { var d = function(a) { var b = a.stop; delete a.stop, b(c) }; return "string" != typeof a && (c = b, b = a, a = void 0), b && !1 !== a && this.queue(a || "fx", []), this.each(function() { var b = !0, e = null != a && a + "queueHooks", f = la.timers, g = Fa.get(this); if (e) g[e] && g[e].stop && d(g[e]); else for (e in g) g[e] && g[e].stop && mb.test(e) && d(g[e]); for (e = f.length; e--;) f[e].elem !== this || null != a && f[e].queue !== a || (f[e].anim.stop(c), b = !1, f.splice(e, 1));!b && c || la.dequeue(this, a) }) }, finish: function(a) { return !1 !== a && (a = a || "fx"), this.each(function() { var b, c = Fa.get(this), d = c[a + "queue"], e = c[a + "queueHooks"], f = la.timers, g = d ? d.length : 0; for (c.finish = !0, la.queue(this, a, []), e && e.stop && e.stop.call(this, !0), b = f.length; b--;) f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1)); for (b = 0; b < g; b++) d[b] && d[b].finish && d[b].finish.call(this); delete c.finish }) } }), la.each(["toggle", "show", "hide"], function(a, b) { var c = la.fn[b]; la.fn[b] = function(a, d, e) { return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(N(b, !0), a, d, e) } }), la.each({ slideDown: N("show"), slideUp: N("hide"), slideToggle: N("toggle"), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function(a, b) { la.fn[a] = function(a, c, d) { return this.animate(b, a, c, d) } }), la.timers = [], la.fx.tick = function() { var a, b = 0, c = la.timers; for (jb = la.now(); b < c.length; b++)(a = c[b])() || c[b] !== a || c.splice(b--, 1); c.length || la.fx.stop(), jb = void 0 }, la.fx.timer = function(a) { la.timers.push(a), a() ? la.fx.start() : la.timers.pop() }, la.fx.interval = 13, la.fx.start = function() { kb || (kb = a.requestAnimationFrame ? a.requestAnimationFrame(L) : a.setInterval(la.fx.tick, la.fx.interval)) }, la.fx.stop = function() { a.cancelAnimationFrame ? a.cancelAnimationFrame(kb) : a.clearInterval(kb), kb = null }, la.fx.speeds = { slow: 600, fast: 200, _default: 400 }, la.fn.delay = function(b, c) { return b = la.fx ? la.fx.speeds[b] || b : b, c = c || "fx", this.queue(c, function(c, d) { var e = a.setTimeout(c, b); d.stop = function() { a.clearTimeout(e) } }) }, function() { var a = _.createElement("input"), b = _.createElement("select"), c = b.appendChild(_.createElement("option")); a.type = "checkbox", ka.checkOn = "" !== a.value, ka.optSelected = c.selected, a = _.createElement("input"), a.value = "t", a.type = "radio", ka.radioValue = "t" === a.value }(); var nb, ob = la.expr.attrHandle; la.fn.extend({ attr: function(a, b) { return Da(this, la.attr, a, b, arguments.length > 1) }, removeAttr: function(a) { return this.each(function() { la.removeAttr(this, a) }) } }), la.extend({ attr: function(a, b, c) { var d, e, f = a.nodeType; if (3 !== f && 8 !== f && 2 !== f) return void 0 === a.getAttribute ? la.prop(a, b, c) : (1 === f && la.isXMLDoc(a) || (e = la.attrHooks[b.toLowerCase()] || (la.expr.match.bool.test(b) ? nb : void 0)), void 0 !== c ? null === c ? void la.removeAttr(a, b) : e && "set" in e && void 0 !== (d = e.set(a, c, b)) ? d : (a.setAttribute(b, c + ""), c) : e && "get" in e && null !== (d = e.get(a, b)) ? d : (d = la.find.attr(a, b), null == d ? void 0 : d)) }, attrHooks: { type: { set: function(a, b) { if (!ka.radioValue && "radio" === b && la.nodeName(a, "input")) { var c = a.value; return a.setAttribute("type", b), c && (a.value = c), b } } } }, removeAttr: function(a, b) { var c, d = 0, e = b && b.match(Aa); if (e && 1 === a.nodeType) for (; c = e[d++];) a.removeAttribute(c) } }), nb = { set: function(a, b, c) { return !1 === b ? la.removeAttr(a, c) : a.setAttribute(c, c), c } }, la.each(la.expr.match.bool.source.match(/\w+/g), function(a, b) { var c = ob[b] || la.find.attr; ob[b] = function(a, b, d) { var e, f, g = b.toLowerCase(); return d || (f = ob[g], ob[g] = e, e = null != c(a, b, d) ? g : null, ob[g] = f), e } }); var pb = /^(?:input|select|textarea|button)$/i, qb = /^(?:a|area)$/i; la.fn.extend({ prop: function(a, b) { return Da(this, la.prop, a, b, arguments.length > 1) }, removeProp: function(a) { return this.each(function() { delete this[la.propFix[a] || a] }) } }), la.extend({ prop: function(a, b, c) { var d, e, f = a.nodeType; if (3 !== f && 8 !== f && 2 !== f) return 1 === f && la.isXMLDoc(a) || (b = la.propFix[b] || b, e = la.propHooks[b]), void 0 !== c ? e && "set" in e && void 0 !== (d = e.set(a, c, b)) ? d : a[b] = c : e && "get" in e && null !== (d = e.get(a, b)) ? d : a[b] }, propHooks: { tabIndex: { get: function(a) { var b = la.find.attr(a, "tabindex"); return b ? parseInt(b, 10) : pb.test(a.nodeName) || qb.test(a.nodeName) && a.href ? 0 : -1 } } }, propFix: { for: "htmlFor", class: "className" } }), ka.optSelected || (la.propHooks.selected = { get: function(a) { var b = a.parentNode; return b && b.parentNode && b.parentNode.selectedIndex, null }, set: function(a) { var b = a.parentNode; b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex) } }), la.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() { la.propFix[this.toLowerCase()] = this }); var rb = /[\t\r\n\f]/g; la.fn.extend({ addClass: function(a) { var b, c, d, e, f, g, h, i = 0; if (la.isFunction(a)) return this.each(function(b) { la(this).addClass(a.call(this, b, S(this))) }); if ("string" == typeof a && a) for (b = a.match(Aa) || []; c = this[i++];) if (e = S(c), d = 1 === c.nodeType && (" " + e + " ").replace(rb, " ")) { for (g = 0; f = b[g++];) d.indexOf(" " + f + " ") < 0 && (d += f + " "); h = la.trim(d), e !== h && c.setAttribute("class", h) } return this }, removeClass: function(a) { var b, c, d, e, f, g, h, i = 0; if (la.isFunction(a)) return this.each(function(b) { la(this).removeClass(a.call(this, b, S(this))) }); if (!arguments.length) return this.attr("class", ""); if ("string" == typeof a && a) for (b = a.match(Aa) || []; c = this[i++];) if (e = S(c), d = 1 === c.nodeType && (" " + e + " ").replace(rb, " ")) { for (g = 0; f = b[g++];) for (; d.indexOf(" " + f + " ") > -1;) d = d.replace(" " + f + " ", " "); h = la.trim(d), e !== h && c.setAttribute("class", h) } return this }, toggleClass: function(a, b) { var c = typeof a; return "boolean" == typeof b && "string" === c ? b ? this.addClass(a) : this.removeClass(a) : la.isFunction(a) ? this.each(function(c) { la(this).toggleClass(a.call(this, c, S(this), b), b) }) : this.each(function() { var b, d, e, f; if ("string" === c) for (d = 0, e = la(this), f = a.match(Aa) || []; b = f[d++];) e.hasClass(b) ? e.removeClass(b) : e.addClass(b); else void 0 !== a && "boolean" !== c || (b = S(this), b && Fa.set(this, "__className__", b), this.setAttribute && this.setAttribute("class", b || !1 === a ? "" : Fa.get(this, "__className__") || "")) }) }, hasClass: function(a) { var b, c, d = 0; for (b = " " + a + " "; c = this[d++];) if (1 === c.nodeType && (" " + S(c) + " ").replace(rb, " ").indexOf(b) > -1) return !0; return !1 } }); var sb = /\r/g, tb = /[\x20\t\r\n\f]+/g; la.fn.extend({ val: function(a) { var b, c, d, e = this[0]; { if (arguments.length) return d = la.isFunction(a), this.each(function(c) { var e; 1 === this.nodeType && (e = d ? a.call(this, c, la(this).val()) : a, null == e ? e = "" : "number" == typeof e ? e += "" : la.isArray(e) && (e = la.map(e, function(a) { return null == a ? "" : a + "" })), (b = la.valHooks[this.type] || la.valHooks[this.nodeName.toLowerCase()]) && "set" in b && void 0 !== b.set(this, e, "value") || (this.value = e)) }); if (e) return (b = la.valHooks[e.type] || la.valHooks[e.nodeName.toLowerCase()]) && "get" in b && void 0 !== (c = b.get(e, "value")) ? c : (c = e.value, "string" == typeof c ? c.replace(sb, "") : null == c ? "" : c) } } }), la.extend({ valHooks: { option: { get: function(a) { var b = la.find.attr(a, "value"); return null != b ? b : la.trim(la.text(a)).replace(tb, " ") } }, select: { get: function(a) { for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type, g = f ? null : [], h = f ? e + 1 : d.length, i = e < 0 ? h : f ? e : 0; i < h; i++) if (c = d[i], (c.selected || i === e) && !c.disabled && (!c.parentNode.disabled || !la.nodeName(c.parentNode, "optgroup"))) { if (b = la(c).val(), f) return b; g.push(b) } return g }, set: function(a, b) { for (var c, d, e = a.options, f = la.makeArray(b), g = e.length; g--;) d = e[g], (d.selected = la.inArray(la.valHooks.option.get(d), f) > -1) && (c = !0); return c || (a.selectedIndex = -1), f } } } }), la.each(["radio", "checkbox"], function() { la.valHooks[this] = { set: function(a, b) { if (la.isArray(b)) return a.checked = la.inArray(la(a).val(), b) > -1 } }, ka.checkOn || (la.valHooks[this].get = function(a) { return null === a.getAttribute("value") ? "on" : a.value }) }); var ub = /^(?:focusinfocus|focusoutblur)$/; la.extend(la.event, { trigger: function(b, c, d, e) { var f, g, h, i, j, k, l, m = [d || _], n = ha.call(b, "type") ? b.type : b, o = ha.call(b, "namespace") ? b.namespace.split(".") : []; if (g = h = d = d || _, 3 !== d.nodeType && 8 !== d.nodeType && !ub.test(n + la.event.triggered) && (n.indexOf(".") > -1 && (o = n.split("."), n = o.shift(), o.sort()), j = n.indexOf(":") < 0 && "on" + n, b = b[la.expando] ? b : new la.Event(n, "object" == typeof b && b), b.isTrigger = e ? 2 : 3, b.namespace = o.join("."), b.rnamespace = b.namespace ? new RegExp("(^|\\.)" + o.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : la.makeArray(c, [b]), l = la.event.special[n] || {}, e || !l.trigger || !1 !== l.trigger.apply(d, c))) { if (!e && !l.noBubble && !la.isWindow(d)) { for (i = l.delegateType || n, ub.test(i + n) || (g = g.parentNode); g; g = g.parentNode) m.push(g), h = g; h === (d.ownerDocument || _) && m.push(h.defaultView || h.parentWindow || a) } for (f = 0; (g = m[f++]) && !b.isPropagationStopped();) b.type = f > 1 ? i : l.bindType || n, k = (Fa.get(g, "events") || {})[b.type] && Fa.get(g, "handle"), k && k.apply(g, c), (k = j && g[j]) && k.apply && Ea(g) && (b.result = k.apply(g, c), !1 === b.result && b.preventDefault()); return b.type = n, e || b.isDefaultPrevented() || l._default && !1 !== l._default.apply(m.pop(), c) || !Ea(d) || j && la.isFunction(d[n]) && !la.isWindow(d) && (h = d[j], h && (d[j] = null), la.event.triggered = n, d[n](), la.event.triggered = void 0, h && (d[j] = h)), b.result } }, simulate: function(a, b, c) { var d = la.extend(new la.Event, c, { type: a, isSimulated: !0 }); la.event.trigger(d, null, b) } }), la.fn.extend({ trigger: function(a, b) { return this.each(function() { la.event.trigger(a, b, this) }) }, triggerHandler: function(a, b) { var c = this[0]; if (c) return la.event.trigger(a, b, c, !0) } }), la.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function(a, b) { la.fn[b] = function(a, c) { return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b) } }), la.fn.extend({ hover: function(a, b) { return this.mouseenter(a).mouseleave(b || a) } }), ka.focusin = "onfocusin" in a, ka.focusin || la.each({ focus: "focusin", blur: "focusout" }, function(a, b) { var c = function(a) { la.event.simulate(b, a.target, la.event.fix(a)) }; la.event.special[b] = { setup: function() { var d = this.ownerDocument || this, e = Fa.access(d, b); e || d.addEventListener(a, c, !0), Fa.access(d, b, (e || 0) + 1) }, teardown: function() { var d = this.ownerDocument || this, e = Fa.access(d, b) - 1; e ? Fa.access(d, b, e) : (d.removeEventListener(a, c, !0), Fa.remove(d, b)) } } }); var vb = a.location, wb = la.now(), xb = /\?/; la.parseXML = function(b) { var c; if (!b || "string" != typeof b) return null; try { c = (new a.DOMParser).parseFromString(b, "text/xml") } catch (a) { c = void 0 } return c && !c.getElementsByTagName("parsererror").length || la.error("Invalid XML: " + b), c }; var yb = /\[\]$/, zb = /\r?\n/g, Ab = /^(?:submit|button|image|reset|file)$/i, Bb = /^(?:input|select|textarea|keygen)/i; la.param = function(a, b) { var c, d = [], e = function(a, b) { var c = la.isFunction(b) ? b() : b; d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(null == c ? "" : c) }; if (la.isArray(a) || a.jquery && !la.isPlainObject(a)) la.each(a, function() { e(this.name, this.value) }); else for (c in a) T(c, a[c], b, e); return d.join("&") }, la.fn.extend({ serialize: function() { return la.param(this.serializeArray()) }, serializeArray: function() { return this.map(function() { var a = la.prop(this, "elements"); return a ? la.makeArray(a) : this }).filter(function() { var a = this.type; return this.name && !la(this).is(":disabled") && Bb.test(this.nodeName) && !Ab.test(a) && (this.checked || !Pa.test(a)) }).map(function(a, b) { var c = la(this).val(); return null == c ? null : la.isArray(c) ? la.map(c, function(a) { return { name: b.name, value: a.replace(zb, "\r\n") } }) : { name: b.name, value: c.replace(zb, "\r\n") } }).get() } }); var Cb = /%20/g, Db = /#.*$/, Eb = /([?&])_=[^&]*/, Fb = /^(.*?):[ \t]*([^\r\n]*)$/gm, Gb = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, Hb = /^(?:GET|HEAD)$/, Ib = /^\/\//, Jb = {}, Kb = {}, Lb = "*/".concat("*"), Mb = _.createElement("a"); Mb.href = vb.href, la.extend({ active: 0, lastModified: {}, etag: {}, ajaxSettings: { url: vb.href, type: "GET", isLocal: Gb.test(vb.protocol), global: !0, processData: !0, async: !0, contentType: "application/x-www-form-urlencoded; charset=UTF-8", accepts: { "*": Lb, text: "text/plain", html: "text/html", xml: "application/xml, text/xml", json: "application/json, text/javascript" }, contents: { xml: /\bxml\b/, html: /\bhtml/, json: /\bjson\b/ }, responseFields: { xml: "responseXML", text: "responseText", json: "responseJSON" }, converters: { "* text": String, "text html": !0, "text json": JSON.parse, "text xml": la.parseXML }, flatOptions: { url: !0, context: !0 } }, ajaxSetup: function(a, b) { return b ? W(W(a, la.ajaxSettings), b) : W(la.ajaxSettings, a) }, ajaxPrefilter: U(Jb), ajaxTransport: U(Kb), ajax: function(b, c) { function d(b, c, d, h) { var j, m, n, u, v, w = c; k || (k = !0, i && a.clearTimeout(i), e = void 0, g = h || "", x.readyState = b > 0 ? 4 : 0, j = b >= 200 && b < 300 || 304 === b, d && (u = X(o, x, d)), u = Y(o, u, x, j), j ? (o.ifModified && (v = x.getResponseHeader("Last-Modified"), v && (la.lastModified[f] = v), (v = x.getResponseHeader("etag")) && (la.etag[f] = v)), 204 === b || "HEAD" === o.type ? w = "nocontent" : 304 === b ? w = "notmodified" : (w = u.state, m = u.data, n = u.error, j = !n)) : (n = w, !b && w || (w = "error", b < 0 && (b = 0))), x.status = b, x.statusText = (c || w) + "", j ? r.resolveWith(p, [m, w, x]) : r.rejectWith(p, [x, w, n]), x.statusCode(t), t = void 0, l && q.trigger(j ? "ajaxSuccess" : "ajaxError", [x, o, j ? m : n]), s.fireWith(p, [x, w]), l && (q.trigger("ajaxComplete", [x, o]), --la.active || la.event.trigger("ajaxStop"))) } "object" == typeof b && (c = b, b = void 0), c = c || {}; var e, f, g, h, i, j, k, l, m, n, o = la.ajaxSetup({}, c), p = o.context || o, q = o.context && (p.nodeType || p.jquery) ? la(p) : la.event, r = la.Deferred(), s = la.Callbacks("once memory"), t = o.statusCode || {}, u = {}, v = {}, w = "canceled", x = { readyState: 0, getResponseHeader: function(a) { var b; if (k) { if (!h) for (h = {}; b = Fb.exec(g);) h[b[1].toLowerCase()] = b[2]; b = h[a.toLowerCase()] } return null == b ? null : b }, getAllResponseHeaders: function() { return k ? g : null }, setRequestHeader: function(a, b) { return null == k && (a = v[a.toLowerCase()] = v[a.toLowerCase()] || a, u[a] = b), this }, overrideMimeType: function(a) { return null == k && (o.mimeType = a), this }, statusCode: function(a) { var b; if (a) if (k) x.always(a[x.status]); else for (b in a) t[b] = [t[b], a[b]]; return this }, abort: function(a) { var b = a || w; return e && e.abort(b), d(0, b), this } }; if (r.promise(x), o.url = ((b || o.url || vb.href) + "").replace(Ib, vb.protocol + "//"), o.type = c.method || c.type || o.method || o.type, o.dataTypes = (o.dataType || "*").toLowerCase().match(Aa) || [""], null == o.crossDomain) { j = _.createElement("a"); try { j.href = o.url, j.href = j.href, o.crossDomain = Mb.protocol + "//" + Mb.host != j.protocol + "//" + j.host } catch (a) { o.crossDomain = !0 } } if (o.data && o.processData && "string" != typeof o.data && (o.data = la.param(o.data, o.traditional)), V(Jb, o, c, x), k) return x; l = la.event && o.global, l && 0 == la.active++ && la.event.trigger("ajaxStart"), o.type = o.type.toUpperCase(), o.hasContent = !Hb.test(o.type), f = o.url.replace(Db, ""), o.hasContent ? o.data && o.processData && 0 === (o.contentType || "").indexOf("application/x-www-form-urlencoded") && (o.data = o.data.replace(Cb, "+")) : (n = o.url.slice(f.length), o.data && (f += (xb.test(f) ? "&" : "?") + o.data, delete o.data), !1 === o.cache && (f = f.replace(Eb, ""), n = (xb.test(f) ? "&" : "?") + "_=" + wb++ + n), o.url = f + n), o.ifModified && (la.lastModified[f] && x.setRequestHeader("If-Modified-Since", la.lastModified[f]), la.etag[f] && x.setRequestHeader("If-None-Match", la.etag[f])), (o.data && o.hasContent && !1 !== o.contentType || c.contentType) && x.setRequestHeader("Content-Type", o.contentType), x.setRequestHeader("Accept", o.dataTypes[0] && o.accepts[o.dataTypes[0]] ? o.accepts[o.dataTypes[0]] + ("*" !== o.dataTypes[0] ? ", " + Lb + "; q=0.01" : "") : o.accepts["*"]); for (m in o.headers) x.setRequestHeader(m, o.headers[m]); if (o.beforeSend && (!1 === o.beforeSend.call(p, x, o) || k)) return x.abort(); if (w = "abort", s.add(o.complete), x.done(o.success), x.fail(o.error), e = V(Kb, o, c, x)) { if (x.readyState = 1, l && q.trigger("ajaxSend", [x, o]), k) return x; o.async && o.timeout > 0 && (i = a.setTimeout(function() { x.abort("timeout") }, o.timeout)); try { k = !1, e.send(u, d) } catch (a) { if (k) throw a; d(-1, a) } } else d(-1, "No Transport"); return x }, getJSON: function(a, b, c) { return la.get(a, b, c, "json") }, getScript: function(a, b) { return la.get(a, void 0, b, "script") } }), la.each(["get", "post"], function(a, b) { la[b] = function(a, c, d, e) { return la.isFunction(c) && (e = e || d, d = c, c = void 0), la.ajax(la.extend({ url: a, type: b, dataType: e, data: c, success: d }, la.isPlainObject(a) && a)) } }), la._evalUrl = function(a) { return la.ajax({ url: a, type: "GET", dataType: "script", cache: !0, async: !1, global: !1, throws: !0 }) }, la.fn.extend({ wrapAll: function(a) { var b; return this[0] && (la.isFunction(a) && (a = a.call(this[0])), b = la(a, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && b.insertBefore(this[0]), b.map(function() { for (var a = this; a.firstElementChild;) a = a.firstElementChild; return a }).append(this)), this }, wrapInner: function(a) { return la.isFunction(a) ? this.each(function(b) { la(this).wrapInner(a.call(this, b)) }) : this.each(function() { var b = la(this), c = b.contents(); c.length ? c.wrapAll(a) : b.append(a) }) }, wrap: function(a) { var b = la.isFunction(a); return this.each(function(c) { la(this).wrapAll(b ? a.call(this, c) : a) }) }, unwrap: function(a) { return this.parent(a).not("body").each(function() { la(this).replaceWith(this.childNodes) }), this } }), la.expr.pseudos.hidden = function(a) { return !la.expr.pseudos.visible(a) }, la.expr.pseudos.visible = function(a) { return !!(a.offsetWidth || a.offsetHeight || a.getClientRects().length) }, la.ajaxSettings.xhr = function() { try { return new a.XMLHttpRequest } catch (a) {} }; var Nb = { 0: 200, 1223: 204 }, Ob = la.ajaxSettings.xhr(); ka.cors = !!Ob && "withCredentials" in Ob, ka.ajax = Ob = !!Ob, la.ajaxTransport(function(b) { var c, d; if (ka.cors || Ob && !b.crossDomain) return { send: function(e, f) { var g, h = b.xhr(); if (h.open(b.type, b.url, b.async, b.username, b.password), b.xhrFields) for (g in b.xhrFields) h[g] = b.xhrFields[g]; b.mimeType && h.overrideMimeType && h.overrideMimeType(b.mimeType), b.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"); for (g in e) h.setRequestHeader(g, e[g]); c = function(a) { return function() { c && (c = d = h.onload = h.onerror = h.onabort = h.onreadystatechange = null, "abort" === a ? h.abort() : "error" === a ? "number" != typeof h.status ? f(0, "error") : f(h.status, h.statusText) : f(Nb[h.status] || h.status, h.statusText, "text" !== (h.responseType || "text") || "string" != typeof h.responseText ? { binary: h.response } : { text: h.responseText }, h.getAllResponseHeaders())) } }, h.onload = c(), d = h.onerror = c("error"), void 0 !== h.onabort ? h.onabort = d : h.onreadystatechange = function() { 4 === h.readyState && a.setTimeout(function() { c && d() }) }, c = c("abort"); try { h.send(b.hasContent && b.data || null) } catch (a) { if (c) throw a } }, abort: function() { c && c() } } }), la.ajaxPrefilter(function(a) { a.crossDomain && (a.contents.script = !1) }), la.ajaxSetup({ accepts: { script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, contents: { script: /\b(?:java|ecma)script\b/ }, converters: { "text script": function(a) { return la.globalEval(a), a } } }), la.ajaxPrefilter("script", function(a) { void 0 === a.cache && (a.cache = !1), a.crossDomain && (a.type = "GET") }), la.ajaxTransport("script", function(a) { if (a.crossDomain) { var b, c; return { send: function(d, e) { b = la("<script>").prop({ charset: a.scriptCharset, src: a.url }).on("load error", c = function(a) { b.remove(), c = null, a && e("error" === a.type ? 404 : 200, a.type) }), _.head.appendChild(b[0]) }, abort: function() { c && c() } } } }); var Pb = [], Qb = /(=)\?(?=&|$)|\?\?/; la.ajaxSetup({ jsonp: "callback", jsonpCallback: function() { var a = Pb.pop() || la.expando + "_" + wb++; return this[a] = !0, a } }), la.ajaxPrefilter("json jsonp", function(b, c, d) { var e, f, g, h = !1 !== b.jsonp && (Qb.test(b.url) ? "url" : "string" == typeof b.data && 0 === (b.contentType || "").indexOf("application/x-www-form-urlencoded") && Qb.test(b.data) && "data"); if (h || "jsonp" === b.dataTypes[0]) return e = b.jsonpCallback = la.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, h ? b[h] = b[h].replace(Qb, "$1" + e) : !1 !== b.jsonp && (b.url += (xb.test(b.url) ? "&" : "?") + b.jsonp + "=" + e), b.converters["script json"] = function() { return g || la.error(e + " was not called"), g[0] }, b.dataTypes[0] = "json", f = a[e], a[e] = function() { g = arguments }, d.always(function() { void 0 === f ? la(a).removeProp(e) : a[e] = f, b[e] && (b.jsonpCallback = c.jsonpCallback, Pb.push(e)), g && la.isFunction(f) && f(g[0]), g = f = void 0 }), "script" }), ka.createHTMLDocument = function() { var a = _.implementation.createHTMLDocument("").body; return a.innerHTML = "<form></form><form></form>", 2 === a.childNodes.length }(), la.parseHTML = function(a, b, c) { if ("string" != typeof a) return []; "boolean" == typeof b && (c = b, b = !1); var d, e, f; return b || (ka.createHTMLDocument ? (b = _.implementation.createHTMLDocument(""), d = b.createElement("base"), d.href = _.location.href, b.head.appendChild(d)) : b = _), e = ua.exec(a), f = !c && [], e ? [b.createElement(e[1])] : (e = s([a], b, f), f && f.length && la(f).remove(), la.merge([], e.childNodes)) }, la.fn.load = function(a, b, c) { var d, e, f, g = this, h = a.indexOf(" "); return h > -1 && (d = la.trim(a.slice(h)), a = a.slice(0, h)), la.isFunction(b) ? (c = b, b = void 0) : b && "object" == typeof b && (e = "POST"), g.length > 0 && la.ajax({ url: a, type: e || "GET", dataType: "html", data: b }).done(function(a) { f = arguments, g.html(d ? la("<div>").append(la.parseHTML(a)).find(d) : a) }).always(c && function(a, b) { g.each(function() { c.apply(this, f || [a.responseText, b, a]) }) }), this }, la.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(a, b) { la.fn[b] = function(a) { return this.on(b, a) } }), la.expr.pseudos.animated = function(a) { return la.grep(la.timers, function(b) { return a === b.elem }).length }, la.offset = { setOffset: function(a, b, c) { var d, e, f, g, h, i, j, k = la.css(a, "position"), l = la(a), m = {}; "static" === k && (a.style.position = "relative"), h = l.offset(), f = la.css(a, "top"), i = la.css(a, "left"), j = ("absolute" === k || "fixed" === k) && (f + i).indexOf("auto") > -1, j ? (d = l.position(), g = d.top, e = d.left) : (g = parseFloat(f) || 0, e = parseFloat(i) || 0), la.isFunction(b) && (b = b.call(a, c, la.extend({}, h))), null != b.top && (m.top = b.top - h.top + g), null != b.left && (m.left = b.left - h.left + e), "using" in b ? b.using.call(a, m) : l.css(m) } }, la.fn.extend({ offset: function(a) { if (arguments.length) return void 0 === a ? this : this.each(function(b) { la.offset.setOffset(this, a, b) }); var b, c, d, e, f = this[0]; if (f) return f.getClientRects().length ? (d = f.getBoundingClientRect(), d.width || d.height ? (e = f.ownerDocument, c = Z(e), b = e.documentElement, { top: d.top + c.pageYOffset - b.clientTop, left: d.left + c.pageXOffset - b.clientLeft }) : d) : { top: 0, left: 0 } }, position: function() { if (this[0]) { var a, b, c = this[0], d = { top: 0, left: 0 }; return "fixed" === la.css(c, "position") ? b = c.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), la.nodeName(a[0], "html") || (d = a.offset()), d = { top: d.top + la.css(a[0], "borderTopWidth", !0), left: d.left + la.css(a[0], "borderLeftWidth", !0) }), { top: b.top - d.top - la.css(c, "marginTop", !0), left: b.left - d.left - la.css(c, "marginLeft", !0) } } }, offsetParent: function() { return this.map(function() { for (var a = this.offsetParent; a && "static" === la.css(a, "position");) a = a.offsetParent; return a || Ua }) } }), la.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function(a, b) { var c = "pageYOffset" === b; la.fn[a] = function(d) { return Da(this, function(a, d, e) { var f = Z(a); if (void 0 === e) return f ? f[b] : a[d]; f ? f.scrollTo(c ? f.pageXOffset : e, c ? e : f.pageYOffset) : a[d] = e }, a, d, arguments.length) } }), la.each(["top", "left"], function(a, b) { la.cssHooks[b] = F(ka.pixelPosition, function(a, c) { if (c) return c = E(a, b), cb.test(c) ? la(a).position()[b] + "px" : c }) }), la.each({ Height: "height", Width: "width" }, function(a, b) { la.each({ padding: "inner" + a, content: b, "": "outer" + a }, function(c, d) { la.fn[d] = function(e, f) { var g = arguments.length && (c || "boolean" != typeof e), h = c || (!0 === e || !0 === f ? "margin" : "border"); return Da(this, function(b, c, e) { var f; return la.isWindow(b) ? 0 === d.indexOf("outer") ? b["inner" + a] : b.document.documentElement["client" + a] : 9 === b.nodeType ? (f = b.documentElement, Math.max(b.body["scroll" + a], f["scroll" + a], b.body["offset" + a], f["offset" + a], f["client" + a])) : void 0 === e ? la.css(b, c, h) : la.style(b, c, e, h) }, b, g ? e : void 0, g) } }) }), la.fn.extend({ bind: function(a, b, c) { return this.on(a, null, b, c) }, unbind: function(a, b) { return this.off(a, null, b) }, delegate: function(a, b, c, d) { return this.on(b, a, c, d) }, undelegate: function(a, b, c) { return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c) } }), la.parseJSON = JSON.parse, "function" == typeof define && define.amd && define("jquery", [], function() { return la }); var Rb = a.jQuery, Sb = a.$; return la.noConflict = function(b) { return a.$ === la && (a.$ = Sb), b && a.jQuery === la && (a.jQuery = Rb), la }, b || (a.jQuery = a.$ = la), la }), function(a) { var b = "object" == typeof self && self.self === self && self || "object" == typeof global && global.global === global && global; if ("function" == typeof define && define.amd) define("backbone", ["underscore", "jquery", "exports"], function(c, d, e) { b.Backbone = a(b, e, c, d) }); else if ("undefined" != typeof exports) { var c, d = require("underscore"); try { c = require("jquery") } catch (a) {} a(b, exports, d, c) } else b.Backbone = a(b, {}, b._, b.jQuery || b.Zepto || b.ender || b.$) }(function(a, b, c, d) { var e = a.Backbone, f = Array.prototype.slice; b.VERSION = "1.4.0", b.$ = d, b.noConflict = function() { return a.Backbone = e, this }, b.emulateHTTP = !1, b.emulateJSON = !1; var g, h = b.Events = {}, i = /\s+/, j = function(a, b, d, e, f) { var g, h = 0; if (d && "object" == typeof d) { void 0 !== e && "context" in f && void 0 === f.context && (f.context = e); for (g = c.keys(d); h < g.length; h++) b = j(a, b, g[h], d[g[h]], f) } else if (d && i.test(d)) for (g = d.split(i); h < g.length; h++) b = a(b, g[h], e, f); else b = a(b, d, e, f); return b }; h.on = function(a, b, c) { if (this._events = j(k, this._events || {}, a, b, { context: c, ctx: this, listening: g }), g) { (this._listeners || (this._listeners = {}))[g.id] = g, g.interop = !1 } return this }, h.listenTo = function(a, b, d) { if (!a) return this; var e = a._listenId || (a._listenId = c.uniqueId("l")), f = this._listeningTo || (this._listeningTo = {}), h = g = f[e]; h || (this._listenId || (this._listenId = c.uniqueId("l")), h = g = f[e] = new q(this, a)); var i = l(a, b, d, this); if (g = void 0, i) throw i; return h.interop && h.on(b, d), this }; var k = function(a, b, c, d) { if (c) { var e = a[b] || (a[b] = []), f = d.context, g = d.ctx, h = d.listening; h && h.count++, e.push({ callback: c, context: f, ctx: f || g, listening: h }) } return a }, l = function(a, b, c, d) { try { a.on(b, c, d) } catch (a) { return a } }; h.off = function(a, b, c) { return this._events ? (this._events = j(m, this._events, a, b, { context: c, listeners: this._listeners }), this) : this }, h.stopListening = function(a, b, d) { var e = this._listeningTo; if (!e) return this; for (var f = a ? [a._listenId] : c.keys(e), g = 0; g < f.length; g++) { var h = e[f[g]]; if (!h) break; h.obj.off(b, d, this), h.interop && h.off(b, d) } return c.isEmpty(e) && (this._listeningTo = void 0), this }; var m = function(a, b, d, e) { if (a) { var f, g = e.context, h = e.listeners, i = 0; if (b || g || d) { for (f = b ? [b] : c.keys(a); i < f.length; i++) { b = f[i]; var j = a[b]; if (!j) break; for (var k = [], l = 0; l < j.length; l++) { var m = j[l]; if (d && d !== m.callback && d !== m.callback._callback || g && g !== m.context) k.push(m); else { var n = m.listening; n && n.off(b, d) } } k.length ? a[b] = k : delete a[b] } return a } for (f = c.keys(h); i < f.length; i++) h[f[i]].cleanup() } }; h.once = function(a, b, c) { var d = j(n, {}, a, b, this.off.bind(this)); return "string" == typeof a && null == c && (b = void 0), this.on(d, b, c) }, h.listenToOnce = function(a, b, c) { var d = j(n, {}, b, c, this.stopListening.bind(this, a)); return this.listenTo(a, d) }; var n = function(a, b, d, e) { if (d) { var f = a[b] = c.once(function() { e(b, f), d.apply(this, arguments) }); f._callback = d } return a }; h.trigger = function(a) { if (!this._events) return this; for (var b = Math.max(0, arguments.length - 1), c = Array(b), d = 0; d < b; d++) c[d] = arguments[d + 1]; return j(o, this._events, a, void 0, c), this }; var o = function(a, b, c, d) { if (a) { var e = a[b], f = a.all; e && f && (f = f.slice()), e && p(e, d), f && p(f, [b].concat(d)) } return a }, p = function(a, b) { var c, d = -1, e = a.length, f = b[0], g = b[1], h = b[2]; switch (b.length) { case 0: for (; ++d < e;)(c = a[d]).callback.call(c.ctx); return; case 1: for (; ++d < e;)(c = a[d]).callback.call(c.ctx, f); return; case 2: for (; ++d < e;)(c = a[d]).callback.call(c.ctx, f, g); return; case 3: for (; ++d < e;)(c = a[d]).callback.call(c.ctx, f, g, h); return; default: for (; ++d < e;)(c = a[d]).callback.apply(c.ctx, b); return } }, q = function(a, b) { this.id = a._listenId, this.listener = a, this.obj = b, this.interop = !0, this.count = 0, this._events = void 0 }; q.prototype.on = h.on, q.prototype.off = function(a, b) { var c; this.interop ? (this._events = j(m, this._events, a, b, { context: void 0, listeners: void 0 }), c = !this._events) : (this.count--, c = 0 === this.count), c && this.cleanup() }, q.prototype.cleanup = function() { delete this.listener._listeningTo[this.obj._listenId], this.interop || delete this.obj._listeners[this.id] }, h.bind = h.on, h.unbind = h.off, c.extend(b, h); var r = b.Model = function(a, b) { var d = a || {}; b || (b = {}), this.preinitialize.apply(this, arguments), this.cid = c.uniqueId(this.cidPrefix), this.attributes = {}, b.collection && (this.collection = b.collection), b.parse && (d = this.parse(d, b) || {}); var e = c.result(this, "defaults"); d = c.defaults(c.extend({}, e, d), e), this.set(d, b), this.changed = {}, this.initialize.apply(this, arguments) }; c.extend(r.prototype, h, { changed: null, validationError: null, idAttribute: "id", cidPrefix: "c", preinitialize: function() {}, initialize: function() {}, toJSON: function(a) { return c.clone(this.attributes) }, sync: function() { return b.sync.apply(this, arguments) }, get: function(a) { return this.attributes[a] }, escape: function(a) { return c.escape(this.get(a)) }, has: function(a) { return null != this.get(a) }, matches: function(a) { return !!c.iteratee(a, this)(this.attributes) }, set: function(a, b, d) { if (null == a) return this; var e; if ("object" == typeof a ? (e = a, d = b) : (e = {})[a] = b, d || (d = {}), !this._validate(e, d)) return !1; var f = d.unset, g = d.silent, h = [], i = this._changing; this._changing = !0, i || (this._previousAttributes = c.clone(this.attributes), this.changed = {}); var j = this.attributes, k = this.changed, l = this._previousAttributes; for (var m in e) b = e[m], c.isEqual(j[m], b) || h.push(m), c.isEqual(l[m], b) ? delete k[m] : k[m] = b, f ? delete j[m] : j[m] = b; if (this.idAttribute in e && (this.id = this.get(this.idAttribute)), !g) { h.length && (this._pending = d); for (var n = 0; n < h.length; n++) this.trigger("change:" + h[n], this, j[h[n]], d) } if (i) return this; if (!g) for (; this._pending;) d = this._pending, this._pending = !1, this.trigger("change", this, d); return this._pending = !1, this._changing = !1, this }, unset: function(a, b) { return this.set(a, void 0, c.extend({}, b, { unset: !0 })) }, clear: function(a) { var b = {}; for (var d in this.attributes) b[d] = void 0; return this.set(b, c.extend({}, a, { unset: !0 })) }, hasChanged: function(a) { return null == a ? !c.isEmpty(this.changed) : c.has(this.changed, a) }, changedAttributes: function(a) { if (!a) return !!this.hasChanged() && c.clone(this.changed); var b, d = this._changing ? this._previousAttributes : this.attributes, e = {}; for (var f in a) { var g = a[f]; c.isEqual(d[f], g) || (e[f] = g, b = !0) } return !!b && e }, previous: function(a) { return null != a && this._previousAttributes ? this._previousAttributes[a] : null }, previousAttributes: function() { return c.clone(this._previousAttributes) }, fetch: function(a) { a = c.extend({ parse: !0 }, a); var b = this, d = a.success; return a.success = function(c) { var e = a.parse ? b.parse(c, a) : c; if (!b.set(e, a)) return !1; d && d.call(a.context, b, c, a), b.trigger("sync", b, c, a) }, W(this, a), this.sync("read", this, a) }, save: function(a, b, d) { var e; null == a || "object" == typeof a ? (e = a, d = b) : (e = {})[a] = b, d = c.extend({ validate: !0, parse: !0 }, d); var f = d.wait; if (e && !f) { if (!this.set(e, d)) return !1 } else if (!this._validate(e, d)) return !1; var g = this, h = d.success, i = this.attributes; d.success = function(a) { g.attributes = i; var b = d.parse ? g.parse(a, d) : a; if (f && (b = c.extend({}, e, b)), b && !g.set(b, d)) return !1; h && h.call(d.context, g, a, d), g.trigger("sync", g, a, d) }, W(this, d), e && f && (this.attributes = c.extend({}, i, e)); var j = this.isNew() ? "create" : d.patch ? "patch" : "update"; "patch" !== j || d.attrs || (d.attrs = e); var k = this.sync(j, this, d); return this.attributes = i, k }, destroy: function(a) { a = a ? c.clone(a) : {}; var b = this, d = a.success, e = a.wait, f = function() { b.stopListening(), b.trigger("destroy", b, b.collection, a) }; a.success = function(c) { e && f(), d && d.call(a.context, b, c, a), b.isNew() || b.trigger("sync", b, c, a) }; var g = !1; return this.isNew() ? c.defer(a.success) : (W(this, a), g = this.sync("delete", this, a)), e || f(), g }, url: function() { var a = c.result(this, "urlRoot") || c.result(this.collection, "url") || V(); if (this.isNew()) return a; var b = this.get(this.idAttribute); return a.replace(/[^\/]$/, "$&/") + encodeURIComponent(b) }, parse: function(a, b) { return a }, clone: function() { return new this.constructor(this.attributes) }, isNew: function() { return !this.has(this.idAttribute) }, isValid: function(a) { return this._validate({}, c.extend({}, a, { validate: !0 })) }, _validate: function(a, b) { if (!b.validate || !this.validate) return !0; a = c.extend({}, this.attributes, a); var d = this.validationError = this.validate(a, b) || null; return !d || (this.trigger("invalid", this, d, c.extend(b, { validationError: d })), !1) } }); var s = b.Collection = function(a, b) { b || (b = {}), this.preinitialize.apply(this, arguments), b.model && (this.model = b.model), void 0 !== b.comparator && (this.comparator = b.comparator), this._reset(), this.initialize.apply(this, arguments), a && this.reset(a, c.extend({ silent: !0 }, b)) }, t = { add: !0, remove: !0, merge: !0 }, u = { add: !0, remove: !1 }, v = function(a, b, c) { c = Math.min(Math.max(c, 0), a.length); var d, e = Array(a.length - c), f = b.length; for (d = 0; d < e.length; d++) e[d] = a[d + c]; for (d = 0; d < f; d++) a[d + c] = b[d]; for (d = 0; d < e.length; d++) a[d + f + c] = e[d] }; c.extend(s.prototype, h, { model: r, preinitialize: function() {}, initialize: function() {}, toJSON: function(a) { return this.map(function(b) { return b.toJSON(a) }) }, sync: function() { return b.sync.apply(this, arguments) }, add: function(a, b) { return this.set(a, c.extend({ merge: !1 }, b, u)) }, remove: function(a, b) { b = c.extend({}, b); var d = !c.isArray(a); a = d ? [a] : a.slice(); var e = this._removeModels(a, b); return !b.silent && e.length && (b.changes = { added: [], merged: [], removed: e }, this.trigger("update", this, b)), d ? e[0] : e }, set: function(a, b) { if (null != a) { b = c.extend({}, t, b), b.parse && !this._isModel(a) && (a = this.parse(a, b) || []); var d = !c.isArray(a); a = d ? [a] : a.slice(); var e = b.at; null != e && (e = +e), e > this.length && (e = this.length), e < 0 && (e += this.length + 1); var f, g, h = [], i = [], j = [], k = [], l = {}, m = b.add, n = b.merge, o = b.remove, p = !1, q = this.comparator && null == e && !1 !== b.sort, r = c.isString(this.comparator) ? this.comparator : null; for (g = 0; g < a.length; g++) { f = a[g]; var s = this.get(f); if (s) { if (n && f !== s) { var u = this._isModel(f) ? f.attributes : f; b.parse && (u = s.parse(u, b)), s.set(u, b), j.push(s), q && !p && (p = s.hasChanged(r)) } l[s.cid] || (l[s.cid] = !0, h.push(s)), a[g] = s } else m && (f = a[g] = this._prepareModel(f, b)) && (i.push(f), this._addReference(f, b), l[f.cid] = !0, h.push(f)) } if (o) { for (g = 0; g < this.length; g++) f = this.models[g], l[f.cid] || k.push(f); k.length && this._removeModels(k, b) } var w = !1, x = !q && m && o; if (h.length && x ? (w = this.length !== h.length || c.some(this.models, function(a, b) { return a !== h[b] }), this.models.length = 0, v(this.models, h, 0), this.length = this.models.length) : i.length && (q && (p = !0), v(this.models, i, null == e ? this.length : e), this.length = this.models.length), p && this.sort({ silent: !0 }), !b.silent) { for (g = 0; g < i.length; g++) null != e && (b.index = e + g), f = i[g], f.trigger("add", f, this, b); (p || w) && this.trigger("sort", this, b), (i.length || k.length || j.length) && (b.changes = { added: i, removed: k, merged: j }, this.trigger("update", this, b)) } return d ? a[0] : a } }, reset: function(a, b) { b = b ? c.clone(b) : {}; for (var d = 0; d < this.models.length; d++) this._removeReference(this.models[d], b); return b.previousModels = this.models, this._reset(), a = this.add(a, c.extend({ silent: !0 }, b)), b.silent || this.trigger("reset", this, b), a }, push: function(a, b) { return this.add(a, c.extend({ at: this.length }, b)) }, pop: function(a) { var b = this.at(this.length - 1); return this.remove(b, a) }, unshift: function(a, b) { return this.add(a, c.extend({ at: 0 }, b)) }, shift: function(a) { var b = this.at(0); return this.remove(b, a) }, slice: function() { return f.apply(this.models, arguments) }, get: function(a) { if (null != a) return this._byId[a] || this._byId[this.modelId(this._isModel(a) ? a.attributes : a)] || a.cid && this._byId[a.cid] }, has: function(a) { return null != this.get(a) }, at: function(a) { return a < 0 && (a += this.length), this.models[a] }, where: function(a, b) { return this[b ? "find" : "filter"](a) }, findWhere: function(a) { return this.where(a, !0) }, sort: function(a) { var b = this.comparator; if (!b) throw new Error("Cannot sort a set without a comparator"); a || (a = {}); var d = b.length; return c.isFunction(b) && (b = b.bind(this)), 1 === d || c.isString(b) ? this.models = this.sortBy(b) : this.models.sort(b), a.silent || this.trigger("sort", this, a), this }, pluck: function(a) { return this.map(a + "") }, fetch: function(a) { a = c.extend({ parse: !0 }, a); var b = a.success, d = this; return a.success = function(c) { var e = a.reset ? "reset" : "set"; d[e](c, a), b && b.call(a.context, d, c, a), d.trigger("sync", d, c, a) }, W(this, a), this.sync("read", this, a) }, create: function(a, b) { b = b ? c.clone(b) : {}; var d = b.wait; if (!(a = this._prepareModel(a, b))) return !1; d || this.add(a, b); var e = this, f = b.success; return b.success = function(a, b, c) { d && e.add(a, c), f && f.call(c.context, a, b, c) }, a.save(null, b), a }, parse: function(a, b) { return a }, clone: function() { return new this.constructor(this.models, { model: this.model, comparator: this.comparator }) }, modelId: function(a) { return a[this.model.prototype.idAttribute || "id"] }, values: function() { return new x(this, y) }, keys: function() { return new x(this, z) }, entries: function() { return new x(this, A) }, _reset: function() { this.length = 0, this.models = [], this._byId = {} }, _prepareModel: function(a, b) { if (this._isModel(a)) return a.collection || (a.collection = this), a; b = b ? c.clone(b) : {}, b.collection = this; var d = new this.model(a, b); return d.validationError ? (this.trigger("invalid", this, d.validationError, b), !1) : d }, _removeModels: function(a, b) { for (var c = [], d = 0; d < a.length; d++) { var e = this.get(a[d]); if (e) { var f = this.indexOf(e); this.models.splice(f, 1), this.length--, delete this._byId[e.cid]; var g = this.modelId(e.attributes); null != g && delete this._byId[g], b.silent || (b.index = f, e.trigger("remove", e, this, b)), c.push(e), this._removeReference(e, b) } } return c }, _isModel: function(a) { return a instanceof r }, _addReference: function(a, b) { this._byId[a.cid] = a; var c = this.modelId(a.attributes); null != c && (this._byId[c] = a), a.on("all", this._onModelEvent, this) }, _removeReference: function(a, b) { delete this._byId[a.cid]; var c = this.modelId(a.attributes); null != c && delete this._byId[c], this === a.collection && delete a.collection, a.off("all", this._onModelEvent, this) }, _onModelEvent: function(a, b, c, d) { if (b) { if (("add" === a || "remove" === a) && c !== this) return; if ("destroy" === a && this.remove(b, d), "change" === a) { var e = this.modelId(b.previousAttributes()), f = this.modelId(b.attributes); e !== f && (null != e && delete this._byId[e], null != f && (this._byId[f] = b)) } } this.trigger.apply(this, arguments) } }); var w = "function" == typeof Symbol && Symbol.iterator; w && (s.prototype[w] = s.prototype.values); var x = function(a, b) { this._collection = a, this._kind = b, this._index = 0 }, y = 1, z = 2, A = 3; w && (x.prototype[w] = function() { return this }), x.prototype.next = function() { if (this._collection) { if (this._index < this._collection.length) { var a = this._collection.at(this._index); this._index++; var b; if (this._kind === y) b = a; else { var c = this._collection.modelId(a.attributes); b = this._kind === z ? c : [c, a] } return { value: b, done: !1 } } this._collection = void 0 } return { value: void 0, done: !0 } }; var B = b.View = function(a) { this.cid = c.uniqueId("view"), this.preinitialize.apply(this, arguments), c.extend(this, c.pick(a, D)), this._ensureElement(), this.initialize.apply(this, arguments) }, C = /^(\S+)\s*(.*)$/, D = ["model", "collection", "el", "id", "attributes", "className", "tagName", "events"]; c.extend(B.prototype, h, { tagName: "div", $: function(a) { return this.$el.find(a) }, preinitialize: function() {}, initialize: function() {}, render: function() { return this }, remove: function() { return this._removeElement(), this.stopListening(), this }, _removeElement: function() { this.$el.remove() }, setElement: function(a) { return this.undelegateEvents(), this._setElement(a), this.delegateEvents(), this }, _setElement: function(a) { this.$el = a instanceof b.$ ? a : b.$(a), this.el = this.$el[0] }, delegateEvents: function(a) { if (a || (a = c.result(this, "events")), !a) return this; this.undelegateEvents(); for (var b in a) { var d = a[b]; if (c.isFunction(d) || (d = this[d]), d) { var e = b.match(C); this.delegate(e[1], e[2], d.bind(this)) } } return this }, delegate: function(a, b, c) { return this.$el.on(a + ".delegateEvents" + this.cid, b, c), this }, undelegateEvents: function() { return this.$el && this.$el.off(".delegateEvents" + this.cid), this }, undelegate: function(a, b, c) { return this.$el.off(a + ".delegateEvents" + this.cid, b, c), this }, _createElement: function(a) { return document.createElement(a) }, _ensureElement: function() { if (this.el) this.setElement(c.result(this, "el")); else { var a = c.extend({}, c.result(this, "attributes")); this.id && (a.id = c.result(this, "id")), this.className && (a.class = c.result(this, "className")), this.setElement(this._createElement(c.result(this, "tagName"))), this._setAttributes(a) } }, _setAttributes: function(a) { this.$el.attr(a) } }); var E = function(a, b, c, d) { switch (b) { case 1: return function() { return a[c](this[d]) }; case 2: return function(b) { return a[c](this[d], b) }; case 3: return function(b, e) { return a[c](this[d], G(b, this), e) }; case 4: return function(b, e, f) { return a[c](this[d], G(b, this), e, f) }; default: return function() { var b = f.call(arguments); return b.unshift(this[d]), a[c].apply(a, b) } } }, F = function(a, b, d, e) { c.each(d, function(c, d) { b[d] && (a.prototype[d] = E(b, c, d, e)) }) }, G = function(a, b) { return c.isFunction(a) ? a : c.isObject(a) && !b._isModel(a) ? H(a) : c.isString(a) ? function(b) { return b.get(a) } : a }, H = function(a) { var b = c.matches(a); return function(a) { return b(a.attributes) } }, I = { forEach: 3, each: 3, map: 3, collect: 3, reduce: 0, foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3, select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3, contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3, head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3, without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3, isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3, sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3 }, J = { keys: 1, values: 1, pairs: 1, invert: 1, pick: 0, omit: 0, chain: 1, isEmpty: 1 }; c.each([ [s, I, "models"], [r, J, "attributes"] ], function(a) { var b = a[0], d = a[1], e = a[2]; b.mixin = function(a) { var d = c.reduce(c.functions(a), function(a, b) { return a[b] = 0, a }, {}); F(b, a, d, e) }, F(b, c, d, e) }), b.sync = function(a, d, e) { var f = K[a]; c.defaults(e || (e = {}), { emulateHTTP: b.emulateHTTP, emulateJSON: b.emulateJSON }); var g = { type: f, dataType: "json" }; if (e.url || (g.url = c.result(d, "url") || V()), null != e.data || !d || "create" !== a && "update" !== a && "patch" !== a || (g.contentType = "application/json", g.data = JSON.stringify(e.attrs || d.toJSON(e))), e.emulateJSON && (g.contentType = "application/x-www-form-urlencoded", g.data = g.data ? { model: g.data } : {}), e.emulateHTTP && ("PUT" === f || "DELETE" === f || "PATCH" === f)) { g.type = "POST", e.emulateJSON && (g.data._method = f); var h = e.beforeSend; e.beforeSend = function(a) { if (a.setRequestHeader("X-HTTP-Method-Override", f), h) return h.apply(this, arguments) } } "GET" === g.type || e.emulateJSON || (g.processData = !1); var i = e.error; e.error = function(a, b, c) { e.textStatus = b, e.errorThrown = c, i && i.call(e.context, a, b, c) }; var j = e.xhr = b.ajax(c.extend(g, e)); return d.trigger("request", d, j, e), j }; var K = { create: "POST", update: "PUT", patch: "PATCH", delete: "DELETE", read: "GET" }; b.ajax = function() { return b.$.ajax.apply(b.$, arguments) }; var L = b.Router = function(a) { a || (a = {}), this.preinitialize.apply(this, arguments), a.routes && (this.routes = a.routes), this._bindRoutes(), this.initialize.apply(this, arguments) }, M = /\((.*?)\)/g, N = /(\(\?)?:\w+/g, O = /\*\w+/g, P = /[\-{}\[\]+?.,\\\^$|#\s]/g; c.extend(L.prototype, h, { preinitialize: function() {}, initialize: function() {}, route: function(a, d, e) { c.isRegExp(a) || (a = this._routeToRegExp(a)), c.isFunction(d) && (e = d, d = ""), e || (e = this[d]); var f = this; return b.history.route(a, function(c) { var g = f._extractParameters(a, c);!1 !== f.execute(e, g, d) && (f.trigger.apply(f, ["route:" + d].concat(g)), f.trigger("route", d, g), b.history.trigger("route", f, d, g)) }), this }, execute: function(a, b, c) { a && a.apply(this, b) }, navigate: function(a, c) { return b.history.navigate(a, c), this }, _bindRoutes: function() { if (this.routes) { this.routes = c.result(this, "routes"); for (var a, b = c.keys(this.routes); null != (a = b.pop());) this.route(a, this.routes[a]) } }, _routeToRegExp: function(a) { return a = a.replace(P, "\\$&").replace(M, "(?:$1)?").replace(N, function(a, b) { return b ? a : "([^/?]+)" }).replace(O, "([^?]*?)"), new RegExp("^" + a + "(?:\\?([\\s\\S]*))?$") }, _extractParameters: function(a, b) { var d = a.exec(b).slice(1); return c.map(d, function(a, b) { return b === d.length - 1 ? a || null : a ? decodeURIComponent(a) : null }) } }); var Q = b.History = function() { this.handlers = [], this.checkUrl = this.checkUrl.bind(this), "undefined" != typeof window && (this.location = window.location, this.history = window.history) }, R = /^[#\/]|\s+$/g, S = /^\/+|\/+$/g, T = /#.*$/; Q.started = !1, c.extend(Q.prototype, h, { interval: 50, atRoot: function() { return this.location.pathname.replace(/[^\/]$/, "$&/") === this.root && !this.getSearch() }, matchRoot: function() { return this.decodeFragment(this.location.pathname).slice(0, this.root.length - 1) + "/" === this.root }, decodeFragment: function(a) { return decodeURI(a.replace(/%25/g, "%2525")) }, getSearch: function() { var a = this.location.href.replace(/#.*/, "").match(/\?.+/); return a ? a[0] : "" }, getHash: function(a) { var b = (a || this).location.href.match(/#(.*)$/); return b ? b[1] : "" }, getPath: function() { var a = this.decodeFragment(this.location.pathname + this.getSearch()).slice(this.root.length - 1); return "/" === a.charAt(0) ? a.slice(1) : a }, getFragment: function(a) { return null == a && (a = this._usePushState || !this._wantsHashChange ? this.getPath() : this.getHash()), a.replace(R, "") }, start: function(a) { if (Q.started) throw new Error("Backbone.history has already been started"); if (Q.started = !0, this.options = c.extend({ root: "/" }, this.options, a), this.root = this.options.root, this._wantsHashChange = !1 !== this.options.hashChange, this._hasHashChange = "onhashchange" in window && (void 0 === document.documentMode || document.documentMode > 7), this._useHashChange = this._wantsHashChange && this._hasHashChange, this._wantsPushState = !!this.options.pushState, this._hasPushState = !(!this.history || !this.history.pushState), this._usePushState = this._wantsPushState && this._hasPushState, this.fragment = this.getFragment(), this.root = ("/" + this.root + "/").replace(S, "/"), this._wantsHashChange && this._wantsPushState) { if (!this._hasPushState && !this.atRoot()) { var b = this.root.slice(0, -1) || "/"; return this.location.replace(b + "#" + this.getPath()), !0 } this._hasPushState && this.atRoot() && this.navigate(this.getHash(), { replace: !0 }) } if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) { this.iframe = document.createElement("iframe"), this.iframe.src = "javascript:0", this.iframe.style.display = "none", this.iframe.tabIndex = -1; var d = document.body, e = d.insertBefore(this.iframe, d.firstChild).contentWindow; e.document.open(), e.document.close(), e.location.hash = "#" + this.fragment } var f = window.addEventListener || function(a, b) { return attachEvent("on" + a, b) }; if (this._usePushState ? f("popstate", this.checkUrl, !1) : this._useHashChange && !this.iframe ? f("hashchange", this.checkUrl, !1) : this._wantsHashChange && (this._checkUrlInterval = setInterval(this.checkUrl, this.interval)), !this.options.silent) return this.loadUrl() }, stop: function() { var a = window.removeEventListener || function(a, b) { return detachEvent("on" + a, b) }; this._usePushState ? a("popstate", this.checkUrl, !1) : this._useHashChange && !this.iframe && a("hashchange", this.checkUrl, !1), this.iframe && (document.body.removeChild(this.iframe), this.iframe = null), this._checkUrlInterval && clearInterval(this._checkUrlInterval), Q.started = !1 }, route: function(a, b) { this.handlers.unshift({ route: a, callback: b }) }, checkUrl: function(a) { var b = this.getFragment(); if (b === this.fragment && this.iframe && (b = this.getHash(this.iframe.contentWindow)), b === this.fragment) return !1; this.iframe && this.navigate(b), this.loadUrl() }, loadUrl: function(a) { return !!this.matchRoot() && (a = this.fragment = this.getFragment(a), c.some(this.handlers, function(b) { if (b.route.test(a)) return b.callback(a), !0 })) }, navigate: function(a, b) { if (!Q.started) return !1; b && !0 !== b || (b = { trigger: !!b }), a = this.getFragment(a || ""); var c = this.root; "" !== a && "?" !== a.charAt(0) || (c = c.slice(0, -1) || "/"); var d = c + a; a = a.replace(T, ""); var e = this.decodeFragment(a); if (this.fragment !== e) { if (this.fragment = e, this._usePushState) this.history[b.replace ? "replaceState" : "pushState"]({}, document.title, d); else { if (!this._wantsHashChange) return this.location.assign(d); if (this._updateHash(this.location, a, b.replace), this.iframe && a !== this.getHash(this.iframe.contentWindow)) { var f = this.iframe.contentWindow; b.replace || (f.document.open(), f.document.close()), this._updateHash(f.location, a, b.replace) } } return b.trigger ? this.loadUrl(a) : void 0 } }, _updateHash: function(a, b, c) { if (c) { var d = a.href.replace(/(javascript:|#).*$/, ""); a.replace(d + "#" + b) } else a.hash = "#" + b } }), b.history = new Q; var U = function(a, b) { var d, e = this; return d = a && c.has(a, "constructor") ? a.constructor : function() { return e.apply(this, arguments) }, c.extend(d, e, b), d.prototype = c.create(e.prototype, a), d.prototype.constructor = d, d.__super__ = e.prototype, d }; r.extend = s.extend = L.extend = B.extend = Q.extend = U; var V = function() { throw new Error('A "url" property or function must be specified') }, W = function(a, b) { var c = b.error; b.error = function(d) { c && c.call(b.context, a, d, b), a.trigger("error", a, d, b) } }; return b }), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("ProgressModel", ["backbone"], function(c) { "use strict"; return function(c) { function d(b) { this.save = a(this.save, this), this.getStored = a(this.getStored, this), this.erase = a(this.erase, this), this.betterThan = a(this.betterThan, this), this.setPlayed = a(this.setPlayed, this), this.update = a(this.update, this), this.unlockLevels = a(this.unlockLevels, this), this.setStates = a(this.setStates, this), this.process = a(this.process, this), this.initStore = a(this.initStore, this), this.fetch = a(this.fetch, this), d.__super__.constructor.call(this), this.on("sync", this.process), this.game = b } return b(d, c), d.prototype.url = "", d.prototype.myKeys = [], d.prototype.fetch = function() { var a, b, c, d, e, f, g; for (e = [], a = this.game.gameConfig, f = [].concat(a.temples), b = 0, c = f.length; b < c; b++) g = f[b], d = $.ajax("./data/" + g + "/temple.json"), e.push(d); return $.when.apply($, e).then(function(a) { return function() { var b, c, f; for (console.log("all loaded ", e), f = { temples: [] }, b = 0, c = e.length; b < c; b++) d = e[b], f.temples.push(JSON.parse(d.responseText)); return a.getStored().then(function(b) { var c, d; b || (b = {}), f = _.deepObjectExtend(f, b); for (c in f) d = f[c], a.set(c, d); return "cordova" === a.game.gameConfig.target && null != window.store ? a.initStore() : (console.log("store not available"), a.myKeys = []), a.trigger("sync") }) } }(this)) }, d.prototype.initStore = function() { return console.log("Initing store"), store.register({ id: "elements_full", alias: "Unlock all", type: store.NON_CONSUMABLE }), store.when("product").updated(function(a) { return function(b) { return console.log("product updated: " + b.id + " is owned: " + b.owned), b.owned && a.myKeys.push(b.id), a.process() } }(this)), store.when("product").approved(function(a) { return function(a) { return console.log("Order approved"), a.finish() } }()), console.log("refresh"), store.refresh() }, d.prototype.process = function() { var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w; for (a = 0, b = !0, q = this.get("temples"), c = 0, f = q.length; c < f; c++) { for (w = q[c], m = 1 / 0, r = w.levels, d = 0, g = r.length; d < g; d++) e = r[d], null != e.best && (a += e.best.stars), (null == e.best || e.best.stars < 3) && (b = !1), e.required < m && (m = e.required); w.minRequired = m } for (b && !this.get("gameComplete") && (this.firstComplete = !0), this.set("gameComplete", b), this.totalStars = a, s = this.get("temples"), l = 0, h = s.length; l < h; l++) w = s[l], w.softLocked = this.totalStars < w.minRequired; for (this.unlockLevels(), t = this.get("temples"), n = 0, i = t.length; n < i; n++) w = t[n], this.setStates(w); for (u = this.get("temples"), o = 0, j = u.length; o < j; o++) for (w = u[o], delete w.hasNew, v = w.levels, p = 0, k = v.length; p < k; p++) e = v[p], e.played || e.initial || e.locked ? delete e.isNew : (e.isNew = !0, e.state > 0 && (w.hasNew = !0)); return this.save() }, d.prototype.setStates = function(a) { var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q; if (c = function(b) { return function(b) { return _.find(a.levels, function(a) { return a._id === b }) } }(), "tree" === a.type) { for (k = a.levels, d = 0, g = k.length; d < g; d++) f = k[d], null != f.best ? 3 === f.best.stars ? f.state = 4 : 2 === f.best.stars ? f.state = 3 : 1 === f.best.stars && (f.state = 2) : f.state = f.initial ? 1 : 0, this.game.config.devUnlock && (f.state = Math.max(f.state, 1)); for (l = a.edges, n = [], e = 0, h = l.length; e < h; e++) b = l[e], p = c(b.source), q = c(b.target), p.state > 1 && 0 === q.state ? n.push(q.state = 1) : 0 === p.state && q.state > 1 ? n.push(p.state = 1) : n.push(void 0); return n } for (m = a.levels, o = [], j = 0, i = m.length; j < i; j++) f = m[j], null != f.best && f.best.stars > 0 ? 3 === f.best.stars ? f.state = 4 : 2 === f.best.stars ? f.state = 3 : 1 === f.best.stars && (f.state = 2) : this.game.progress.totalStars >= f.required && !f.locked ? f.state = 1 : f.state = 0, this.game.config.devUnlock ? o.push(f.state = Math.max(f.state, 1)) : o.push(void 0); return o }, d.prototype.unlockLevels = function() { var a, b, c, d, e, f, g; for (console.log("Unlocking with keys ", this.myKeys), b = function(a) { return function(b) { return null != b.unlock_key && "free" !== b.unlock_key && a.myKeys.indexOf(b.unlock_key) < 0 } }(this), e = this.get("temples"), f = [], a = 0, d = e.length; a < d; a++) g = e[a], g.locked = b(g), f.push(function() { var a, d, e, f; for (e = g.levels, f = [], a = 0, d = e.length; a < d; a++) c = e[a], f.push(c.locked = b(c)); return f }()); return f }, d.prototype.update = function(a) { var b, c, d, e, f; if (console.log("merge " + a.state + " into " + a.data), b = a.state.diamonds, c = a.data.totalDiamonds, e = a.state.time, f = "single" === this.game.settings.controls && a.data.mobileTime || a.data.time, d = 0, "puzzle" === a.data.type ? a.state.silverDiamond > 0 && (d = 3) : "dark" === a.data.type ? d = e <= f ? 3 : 2 : (d = 1, b >= c && d++, e <= f && d++), a.state.stars = d, a.state.stars > 0 && (null == a.data.best || this.betterThan(a.state, a.data.best))) return a.data.best = a.state, this.process() }, d.prototype.setPlayed = function(a) { if (!a.played) return a.played = !0, this.process() }, d.prototype.betterThan = function(a, b) { return a.stars > b.stars || !(a.stars < b.stars) && (a.diamonds > b.diamonds || !(a.diamonds < b.diamonds) && (a.time < b.time || (a.time, b.time, !1))) }, d.prototype.erase = function() { return this.game.storage.setNamespace("fb-" + this.game.gameConfig.id), this.game.storage.clear() }, d.prototype.getStored = function() { return this.game.storage.setNamespace("fb-" + this.game.gameConfig.id), this.game.storage.getItem("progress").then(function(a) { return function(a) { return JSON.parse(a) } }(), function(a) { return function(a) { return null } }()) }, d.prototype.save = function() { return this.game.storage.setNamespace("fb-" + this.game.gameConfig.id), this.game.storage.setItem("progress", JSON.stringify(this.toJSON())) }, d }(c.Model) }) }.call(this), function(a, b) { "object" == typeof exports && "undefined" != typeof module ? b() : "function" == typeof define && define.amd ? define("promise-polyfill", b) : b() }(0, function() { "use strict"; function a(a) { var b = this.constructor; return this.then(function(c) { return b.resolve(a()).then(function() { return c }) }, function(c) { return b.resolve(a()).then(function() { return b.reject(c) }) }) } function b(a) { return Boolean(a && void 0 !== a.length) } function c() {} function d(a, b) { return function() { a.apply(b, arguments) } } function e(a) { if (!(this instanceof e)) throw new TypeError("Promises must be constructed via new"); if ("function" != typeof a) throw new TypeError("not a function"); this._state = 0, this._handled = !1, this._value = void 0, this._deferreds = [], k(a, this) } function f(a, b) { for (; 3 === a._state;) a = a._value; if (0 === a._state) return void a._deferreds.push(b); a._handled = !0, e._immediateFn(function() { var c = 1 === a._state ? b.onFulfilled : b.onRejected; if (null === c) return void(1 === a._state ? g : h)(b.promise, a._value); var d; try { d = c(a._value) } catch (a) { return void h(b.promise, a) } g(b.promise, d) }) } function g(a, b) { try { if (b === a) throw new TypeError("A promise cannot be resolved with itself."); if (b && ("object" == typeof b || "function" == typeof b)) { var c = b.then; if (b instanceof e) return a._state = 3, a._value = b, void i(a); if ("function" == typeof c) return void k(d(c, b), a) } a._state = 1, a._value = b, i(a) } catch (b) { h(a, b) } } function h(a, b) { a._state = 2, a._value = b, i(a) } function i(a) { 2 === a._state && 0 === a._deferreds.length && e._immediateFn(function() { a._handled || e._unhandledRejectionFn(a._value) }); for (var b = 0, c = a._deferreds.length; b < c; b++) f(a, a._deferreds[b]); a._deferreds = null } function j(a, b, c) { this.onFulfilled = "function" == typeof a ? a : null, this.onRejected = "function" == typeof b ? b : null, this.promise = c } function k(a, b) { var c = !1; try { a(function(a) { c || (c = !0, g(b, a)) }, function(a) { c || (c = !0, h(b, a)) }) } catch (a) { if (c) return; c = !0, h(b, a) } } var l = setTimeout; e.prototype.catch = function(a) { return this.then(null, a) }, e.prototype.then = function(a, b) { var d = new this.constructor(c); return f(this, new j(a, b, d)), d }, e.prototype.finally = a, e.all = function(a) { return new e(function(c, d) { function e(a, b) { try { if (b && ("object" == typeof b || "function" == typeof b)) { var h = b.then; if ("function" == typeof h) return void h.call(b, function(b) { e(a, b) }, d) } f[a] = b, 0 == --g && c(f) } catch (a) { d(a) } } if (!b(a)) return d(new TypeError("Promise.all accepts an array")); var f = Array.prototype.slice.call(a); if (0 === f.length) return c([]); for (var g = f.length, h = 0; h < f.length; h++) e(h, f[h]) }) }, e.resolve = function(a) { return a && "object" == typeof a && a.constructor === e ? a : new e(function(b) { b(a) }) }, e.reject = function(a) { return new e(function(b, c) { c(a) }) }, e.race = function(a) { return new e(function(c, d) { if (!b(a)) return d(new TypeError("Promise.race accepts an array")); for (var f = 0, g = a.length; f < g; f++) e.resolve(a[f]).then(c, d) }) }, e._immediateFn = "function" == typeof setImmediate && function(a) { setImmediate(a) } || function(a) { l(a, 0) }, e._unhandledRejectionFn = function(a) { "undefined" != typeof console && console && console.warn("Possible Unhandled Promise Rejection:", a) }; var m = function() { if ("undefined" != typeof self) return self; if ("undefined" != typeof window) return window; if ("undefined" != typeof global) return global; throw new Error("unable to locate global object") }(); "Promise" in m ? m.Promise.prototype.finally || (m.Promise.prototype.finally = a) : m.Promise = e }), function(a) { var b = b || function(a, b) { var c = {}, d = c.lib = {}, e = function() {}, f = d.Base = { extend: function(a) { e.prototype = this; var b = new e; return a && b.mixIn(a), b.hasOwnProperty("init") || (b.init = function() { b.$super.init.apply(this, arguments) }), b.init.prototype = b, b.$super = this, b }, create: function() { var a = this.extend(); return a.init.apply(a, arguments), a }, init: function() {}, mixIn: function(a) { for (var b in a) a.hasOwnProperty(b) && (this[b] = a[b]); a.hasOwnProperty("toString") && (this.toString = a.toString) }, clone: function() { return this.init.prototype.extend(this) } }, g = d.WordArray = f.extend({ init: function(a, b) { a = this.words = a || [], this.sigBytes = void 0 != b ? b : 4 * a.length }, toString: function(a) { return (a || i).stringify(this) }, concat: function(a) { var b = this.words, c = a.words, d = this.sigBytes; if (a = a.sigBytes, this.clamp(), d % 4) for (var e = 0; e < a; e++) b[d + e >>> 2] |= (c[e >>> 2] >>> 24 - e % 4 * 8 & 255) << 24 - (d + e) % 4 * 8; else if (65535 < c.length) for (e = 0; e < a; e += 4) b[d + e >>> 2] = c[e >>> 2]; else b.push.apply(b, c); return this.sigBytes += a, this }, clamp: function() { var b = this.words, c = this.sigBytes; b[c >>> 2] &= 4294967295 << 32 - c % 4 * 8, b.length = a.ceil(c / 4) }, clone: function() { var a = f.clone.call(this); return a.words = this.words.slice(0), a }, random: function(b) { for (var c = [], d = 0; d < b; d += 4) c.push(4294967296 * a.random() | 0); return new g.init(c, b) } }), h = c.enc = {}, i = h.Hex = { stringify: function(a) { var b = a.words; a = a.sigBytes; for (var c = [], d = 0; d < a; d++) { var e = b[d >>> 2] >>> 24 - d % 4 * 8 & 255; c.push((e >>> 4).toString(16)), c.push((15 & e).toString(16)) } return c.join("") }, parse: function(a) { for (var b = a.length, c = [], d = 0; d < b; d += 2) c[d >>> 3] |= parseInt(a.substr(d, 2), 16) << 24 - d % 8 * 4; return new g.init(c, b / 2) } }, j = h.Latin1 = { stringify: function(a) { var b = a.words; a = a.sigBytes; for (var c = [], d = 0; d < a; d++) c.push(String.fromCharCode(b[d >>> 2] >>> 24 - d % 4 * 8 & 255)); return c.join("") }, parse: function(a) { for (var b = a.length, c = [], d = 0; d < b; d++) c[d >>> 2] |= (255 & a.charCodeAt(d)) << 24 - d % 4 * 8; return new g.init(c, b) } }, k = h.Utf8 = { stringify: function(a) { try { return decodeURIComponent(escape(j.stringify(a))) } catch (a) { throw Error("Malformed UTF-8 data") } }, parse: function(a) { return j.parse(unescape(encodeURIComponent(a))) } }, l = d.BufferedBlockAlgorithm = f.extend({ reset: function() { this._data = new g.init, this._nDataBytes = 0 }, _append: function(a) { "string" == typeof a && (a = k.parse(a)), this._data.concat(a), this._nDataBytes += a.sigBytes }, _process: function(b) { var c = this._data, d = c.words, e = c.sigBytes, f = this.blockSize, h = e / (4 * f), h = b ? a.ceil(h) : a.max((0 | h) - this._minBufferSize, 0); if (b = h * f, e = a.min(4 * b, e), b) { for (var i = 0; i < b; i += f) this._doProcessBlock(d, i); i = d.splice(0, b), c.sigBytes -= e } return new g.init(i, e) }, clone: function() { var a = f.clone.call(this); return a._data = this._data.clone(), a }, _minBufferSize: 0 }); d.Hasher = l.extend({ cfg: f.extend(), init: function(a) { this.cfg = this.cfg.extend(a), this.reset() }, reset: function() { l.reset.call(this), this._doReset() }, update: function(a) { return this._append(a), this._process(), this }, finalize: function(a) { return a && this._append(a), this._doFinalize() }, blockSize: 16, _createHelper: function(a) { return function(b, c) { return new a.init(c).finalize(b) } }, _createHmacHelper: function(a) { return function(b, c) { return new m.HMAC.init(a, c).finalize(b) } } }); var m = c.algo = {}; return c }(Math); ! function(a) { for (var c = b, d = c.lib, e = d.WordArray, f = d.Hasher, d = c.algo, g = [], h = [], i = function(a) { return 4294967296 * (a - (0 | a)) | 0 }, j = 2, k = 0; 64 > k;) { var l; a: { l = j; for (var m = a.sqrt(l), n = 2; n <= m; n++) if (!(l % n)) { l = !1; break a } l = !0 } l && (8 > k && (g[k] = i(a.pow(j, .5))), h[k] = i(a.pow(j, 1 / 3)), k++), j++ } var o = [], d = d.SHA256 = f.extend({ _doReset: function() { this._hash = new e.init(g.slice(0)) }, _doProcessBlock: function(a, b) { for (var c = this._hash.words, d = c[0], e = c[1], f = c[2], g = c[3], i = c[4], j = c[5], k = c[6], l = c[7], m = 0; 64 > m; m++) { if (16 > m) o[m] = 0 | a[b + m]; else { var n = o[m - 15], p = o[m - 2]; o[m] = ((n << 25 | n >>> 7) ^ (n << 14 | n >>> 18) ^ n >>> 3) + o[m - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + o[m - 16] } n = l + ((i << 26 | i >>> 6) ^ (i << 21 | i >>> 11) ^ (i << 7 | i >>> 25)) + (i & j ^ ~i & k) + h[m] + o[m], p = ((d << 30 | d >>> 2) ^ (d << 19 | d >>> 13) ^ (d << 10 | d >>> 22)) + (d & e ^ d & f ^ e & f), l = k, k = j, j = i, i = g + n | 0, g = f, f = e, e = d, d = n + p | 0 } c[0] = c[0] + d | 0, c[1] = c[1] + e | 0, c[2] = c[2] + f | 0, c[3] = c[3] + g | 0, c[4] = c[4] + i | 0, c[5] = c[5] + j | 0, c[6] = c[6] + k | 0, c[7] = c[7] + l | 0 }, _doFinalize: function() { var b = this._data, c = b.words, d = 8 * this._nDataBytes, e = 8 * b.sigBytes; return c[e >>> 5] |= 128 << 24 - e % 32, c[14 + (e + 64 >>> 9 << 4)] = a.floor(d / 4294967296), c[15 + (e + 64 >>> 9 << 4)] = d, b.sigBytes = 4 * c.length, this._process(), this._hash }, clone: function() { var a = f.clone.call(this); return a._hash = this._hash.clone(), a } }); c.SHA256 = f._createHelper(d), c.HmacSHA256 = f._createHmacHelper(d) }(Math), function() { var a = b, c = a.enc.Utf8; a.algo.HMAC = a.lib.Base.extend({ init: function(a, b) { a = this._hasher = new a.init, "string" == typeof b && (b = c.parse(b)); var d = a.blockSize, e = 4 * d; b.sigBytes > e && (b = a.finalize(b)), b.clamp(); for (var f = this._oKey = b.clone(), g = this._iKey = b.clone(), h = f.words, i = g.words, j = 0; j < d; j++) h[j] ^= 1549556828, i[j] ^= 909522486; f.sigBytes = g.sigBytes = e, this.reset() }, reset: function() { var a = this._hasher; a.reset(), a.update(this._iKey) }, update: function(a) { return this._hasher.update(a), this }, finalize: function(a) { var b = this._hasher; return a = b.finalize(a), b.reset(), b.finalize(this._oKey.clone().concat(a)) } }) }(), function() { var a = b, c = a.lib.WordArray; a.enc.Base64 = { stringify: function(a) { var b = a.words, c = a.sigBytes, d = this._map; a.clamp(), a = []; for (var e = 0; e < c; e += 3) for (var f = (b[e >>> 2] >>> 24 - e % 4 * 8 & 255) << 16 | (b[e + 1 >>> 2] >>> 24 - (e + 1) % 4 * 8 & 255) << 8 | b[e + 2 >>> 2] >>> 24 - (e + 2) % 4 * 8 & 255, g = 0; 4 > g && e + .75 * g < c; g++) a.push(d.charAt(f >>> 6 * (3 - g) & 63)); if (b = d.charAt(64)) for (; a.length % 4;) a.push(b); return a.join("") }, parse: function(a) { var b = a.length, d = this._map, e = d.charAt(64); e && -1 != (e = a.indexOf(e)) && (b = e); for (var e = [], f = 0, g = 0; g < b; g++) if (g % 4) { var h = d.indexOf(a.charAt(g - 1)) << g % 4 * 2, i = d.indexOf(a.charAt(g)) >>> 6 - g % 4 * 2; e[f >>> 2] |= (h | i) << 24 - f % 4 * 8, f++ } return c.create(e, f) }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" } }(); var c; ! function(a) {! function(a) { a[a.Undefined = 0] = "Undefined", a[a.Debug = 1] = "Debug", a[a.Info = 2] = "Info", a[a.Warning = 3] = "Warning", a[a.Error = 4] = "Error", a[a.Critical = 5] = "Critical" }(a.EGAErrorSeverity || (a.EGAErrorSeverity = {})), function(a) { a[a.Undefined = 0] = "Undefined", a[a.Male = 1] = "Male", a[a.Female = 2] = "Female" }(a.EGAGender || (a.EGAGender = {})), function(a) { a[a.Undefined = 0] = "Undefined", a[a.Start = 1] = "Start", a[a.Complete = 2] = "Complete", a[a.Fail = 3] = "Fail" }(a.EGAProgressionStatus || (a.EGAProgressionStatus = {})), function(a) { a[a.Undefined = 0] = "Undefined", a[a.Source = 1] = "Source", a[a.Sink = 2] = "Sink" }(a.EGAResourceFlowType || (a.EGAResourceFlowType = {})), function(a) {! function(a) { a[a.Undefined = 0] = "Undefined", a[a.Rejected = 1] = "Rejected" }(a.EGASdkErrorType || (a.EGASdkErrorType = {})), function(a) { a[a.NoResponse = 0] = "NoResponse", a[a.BadResponse = 1] = "BadResponse", a[a.RequestTimeout = 2] = "RequestTimeout", a[a.JsonEncodeFailed = 3] = "JsonEncodeFailed", a[a.JsonDecodeFailed = 4] = "JsonDecodeFailed", a[a.InternalServerError = 5] = "InternalServerError", a[a.BadRequest = 6] = "BadRequest", a[a.Unauthorized = 7] = "Unauthorized", a[a.UnknownResponseCode = 8] = "UnknownResponseCode", a[a.Ok = 9] = "Ok" }(a.EGAHTTPApiResponse || (a.EGAHTTPApiResponse = {})) }(a.http || (a.http = {})) }(c || (c = {})); var c; c.EGAErrorSeverity, c.EGAGender, c.EGAProgressionStatus, c.EGAResourceFlowType; ! function(a) {! function(a) { var b;! function(a) { a[a.Error = 0] = "Error", a[a.Warning = 1] = "Warning", a[a.Info = 2] = "Info", a[a.Debug = 3] = "Debug" }(b || (b = {})); var c = function() { function a() { a.debugEnabled = !1 } return a.setInfoLog = function(b) { a.instance.infoLogEnabled = b }, a.setVerboseLog = function(b) { a.instance.infoLogVerboseEnabled = b }, a.i = function(c) { if (a.instance.infoLogEnabled) { var d = "Info/" + a.Tag + ": " + c; a.instance.sendNotificationMessage(d, b.Info) } }, a.w = function(c) { var d = "Warning/" + a.Tag + ": " + c; a.instance.sendNotificationMessage(d, b.Warning) }, a.e = function(c) { var d = "Error/" + a.Tag + ": " + c; a.instance.sendNotificationMessage(d, b.Error) }, a.ii = function(c) { if (a.instance.infoLogVerboseEnabled) { var d = "Verbose/" + a.Tag + ": " + c; a.instance.sendNotificationMessage(d, b.Info) } }, a.d = function(c) { if (a.debugEnabled) { var d = "Debug/" + a.Tag + ": " + c; a.instance.sendNotificationMessage(d, b.Debug) } }, a.prototype.sendNotificationMessage = function(a, c) { switch (c) { case b.Error: console.error(a); break; case b.Warning: console.warn(a); break; case b.Debug: "function" == typeof console.debug ? console.debug(a) : console.log(a); break; case b.Info: console.log(a) } }, a.instance = new a, a.Tag = "GameAnalytics", a }(); a.GALogger = c }(a.logging || (a.logging = {})) }(c || (c = {})); var c; ! function(a) {! function(c) { var d = a.logging.GALogger, e = function() { function a() {} return a.getHmac = function(a, c) { var d = b.HmacSHA256(c, a); return b.enc.Base64.stringify(d) }, a.stringMatch = function(a, b) { return !(!a || !b) && b.test(a) }, a.joinStringArray = function(a, b) { for (var c = "", d = 0, e = a.length; d < e; d++) d > 0 && (c += b), c += a[d]; return c }, a.stringArrayContainsString = function(a, b) { if (0 === a.length) return !1; for (var c in a) if (a[c] === b) return !0; return !1 }, a.encode64 = function(b) { b = encodeURI(b); var c, d, e, f, g, h = "", i = 0, j = 0, k = 0; do { c = b.charCodeAt(k++), d = b.charCodeAt(k++), i = b.charCodeAt(k++), e = c >> 2, f = (3 & c) << 4 | d >> 4, g = (15 & d) << 2 | i >> 6, j = 63 & i, isNaN(d) ? g = j = 64 : isNaN(i) && (j = 64), h = h + a.keyStr.charAt(e) + a.keyStr.charAt(f) + a.keyStr.charAt(g) + a.keyStr.charAt(j), c = d = i = 0, e = f = g = j = 0 } while (k < b.length); return h }, a.decode64 = function(b) { var c, e, f, g, h, i = "", j = 0, k = 0, l = 0; /[^A-Za-z0-9\+\/\=]/g.exec(b) && d.w("There were invalid base64 characters in the input text. Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='. Expect errors in decoding."), b = b.replace(/[^A-Za-z0-9\+\/\=]/g, ""); do { f = a.keyStr.indexOf(b.charAt(l++)), g = a.keyStr.indexOf(b.charAt(l++)), h = a.keyStr.indexOf(b.charAt(l++)), k = a.keyStr.indexOf(b.charAt(l++)), c = f << 2 | g >> 4, e = (15 & g) << 4 | h >> 2, j = (3 & h) << 6 | k, i += String.fromCharCode(c), 64 != h && (i += String.fromCharCode(e)), 64 != k && (i += String.fromCharCode(j)), c = e = j = 0, f = g = h = k = 0 } while (l < b.length); return decodeURI(i) }, a.timeIntervalSince1970 = function() { var a = new Date; return Math.round(a.getTime() / 1e3) }, a.createGuid = function() { return (a.s4() + a.s4() + "-" + a.s4() + "-4" + a.s4().substr(0, 3) + "-" + a.s4() + "-" + a.s4() + a.s4() + a.s4()).toLowerCase() }, a.s4 = function() { return (65536 * (1 + Math.random()) | 0).toString(16).substring(1) }, a.keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", a }(); c.GAUtilities = e }(a.utilities || (a.utilities = {})) }(c || (c = {})); var c; ! function(a) { ! function(b) { var c = a.logging.GALogger, d = a.http.EGASdkErrorType, e = a.utilities.GAUtilities, f = function() { function b() {} return b.validateBusinessEvent = function(a, d, e, f, g) { return b.validateCurrency(a) ? d < 0 ? (c.w("Validation fail - business event - amount. Cannot be less than 0. Failed amount: " + d), !1) : b.validateShortString(e, !0) ? b.validateEventPartLength(f, !1) ? b.validateEventPartCharacters(f) ? b.validateEventPartLength(g, !1) ? !!b.validateEventPartCharacters(g) || (c.w("Validation fail - business event - itemId: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + g), !1) : (c.w("Validation fail - business event - itemId. Cannot be (null), empty or above 64 characters. String: " + g), !1) : (c.w("Validation fail - business event - itemType: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + f), !1) : (c.w("Validation fail - business event - itemType: Cannot be (null), empty or above 64 characters. String: " + f), !1) : (c.w("Validation fail - business event - cartType. Cannot be above 32 length. String: " + e), !1) : (c.w("Validation fail - business event - currency: Cannot be (null) and need to be A-Z, 3 characters and in the standard at openexchangerates.org. Failed currency: " + a), !1) }, b.validateResourceEvent = function(d, f, g, h, i, j, k) { return d == a.EGAResourceFlowType.Undefined ? (c.w("Validation fail - resource event - flowType: Invalid flow type."), !1) : f ? e.stringArrayContainsString(j, f) ? g > 0 ? h ? b.validateEventPartLength(h, !1) ? b.validateEventPartCharacters(h) ? e.stringArrayContainsString(k, h) ? b.validateEventPartLength(i, !1) ? !!b.validateEventPartCharacters(i) || (c.w("Validation fail - resource event - itemId: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + i), !1) : (c.w("Validation fail - resource event - itemId: Cannot be (null), empty or above 64 characters. String: " + i), !1) : (c.w("Validation fail - resource event - itemType: Not found in list of pre-defined available resource itemTypes. String: " + h), !1) : (c.w("Validation fail - resource event - itemType: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + h), !1) : (c.w("Validation fail - resource event - itemType: Cannot be (null), empty or above 64 characters. String: " + h), !1) : (c.w("Validation fail - resource event - itemType: Cannot be (null)"), !1) : (c.w("Validation fail - resource event - amount: Float amount cannot be 0 or negative. Value: " + g), !1) : (c.w("Validation fail - resource event - currency: Not found in list of pre-defined available resource currencies. String: " + f), !1) : (c.w("Validation fail - resource event - currency: Cannot be (null)"), !1) }, b.validateProgressionEvent = function(d, e, f, g) { if (d == a.EGAProgressionStatus.Undefined) return c.w("Validation fail - progression event: Invalid progression status."), !1; if (g && !f && e) return c.w("Validation fail - progression event: 03 found but 01+02 are invalid. Progression must be set as either 01, 01+02 or 01+02+03."), !1; if (f && !e) return c.w("Validation fail - progression event: 02 found but not 01. Progression must be set as either 01, 01+02 or 01+02+03"), !1; if (!e) return c.w("Validation fail - progression event: progression01 not valid. Progressions must be set as either 01, 01+02 or 01+02+03"), !1; if (!b.validateEventPartLength(e, !1)) return c.w("Validation fail - progression event - progression01: Cannot be (null), empty or above 64 characters. String: " + e), !1; if (!b.validateEventPartCharacters(e)) return c.w("Validation fail - progression event - progression01: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + e), !1; if (f) { if (!b.validateEventPartLength(f, !0)) return c.w("Validation fail - progression event - progression02: Cannot be empty or above 64 characters. String: " + f), !1; if (!b.validateEventPartCharacters(f)) return c.w("Validation fail - progression event - progression02: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + f), !1 } if (g) { if (!b.validateEventPartLength(g, !0)) return c.w("Validation fail - progression event - progression03: Cannot be empty or above 64 characters. String: " + g), !1; if (!b.validateEventPartCharacters(g)) return c.w("Validation fail - progression event - progression03: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: " + g), !1 } return !0 }, b.validateDesignEvent = function(a, d) { return b.validateEventIdLength(a) ? !!b.validateEventIdCharacters(a) || (c.w("Validation fail - design event - eventId: Non valid characters. Only allowed A-z, 0-9, -_., ()!?. String: " + a), !1) : (c.w("Validation fail - design event - eventId: Cannot be (null) or empty. Only 5 event parts allowed seperated by :. Each part need to be 32 characters or less. String: " + a), !1) }, b.validateErrorEvent = function(d, e) { return d == a.EGAErrorSeverity.Undefined ? (c.w("Validation fail - error event - severity: Severity was unsupported value."), !1) : !!b.validateLongString(e, !0) || (c.w("Validation fail - error event - message: Message cannot be above 8192 characters."), !1) }, b.validateSdkErrorEvent = function(a, e, f) { return !(!b.validateKeys(a, e) || f === d.Undefined && (c.w("Validation fail - sdk error event - type: Type was unsupported value."), 1)) }, b.validateKeys = function(a, b) { return !(!e.stringMatch(a, /^[A-z0-9]{32}$/) || !e.stringMatch(b, /^[A-z0-9]{40}$/)) }, b.validateCurrency = function(a) { return !!a && !!e.stringMatch(a, /^[A-Z]{3}$/) }, b.validateEventPartLength = function(a, b) { return !(!b || a) || !!a && !(a.length > 64) }, b.validateEventPartCharacters = function(a) { return !!e.stringMatch(a, /^[A-Za-z0-9\s\-_\.\(\)\!\?]{1,64}$/) }, b.validateEventIdLength = function(a) { return !!a && !!e.stringMatch(a, /^[^:]{1,64}(?::[^:]{1,64}){0,4}$/) }, b.validateEventIdCharacters = function(a) { return !!a && !!e.stringMatch(a, /^[A-Za-z0-9\s\-_\.\(\)\!\?]{1,64}(:[A-Za-z0-9\s\-_\.\(\)\!\?]{1,64}){0,4}$/) }, b.validateAndCleanInitRequestResponse = function(a) { if (null == a) return c.w("validateInitRequestResponse failed - no response dictionary."), null; var b = {}; try { b.enabled = a.enabled } catch (a) { return c.w("validateInitRequestResponse failed - invalid type in 'enabled' field."), null } try { var d = a.server_ts; if (!(d > 0)) return c.w("validateInitRequestResponse failed - invalid value in 'server_ts' field."), null; b.server_ts = d } catch (b) { return c.w("validateInitRequestResponse failed - invalid type in 'server_ts' field. type=" + typeof a.server_ts + ", value=" + a.server_ts + ", " + b), null } try { var e = a.configurations; b.configurations = e } catch (b) { return c.w("validateInitRequestResponse failed - invalid type in 'configurations' field. type=" + typeof a.configurations + ", value=" + a.configurations + ", " + b), null } return b }, b.validateBuild = function(a) { return !!b.validateShortString(a, !1) }, b.validateSdkWrapperVersion = function(a) { return !!e.stringMatch(a, /^(unity|unreal|gamemaker|cocos2d|construct|defold) [0-9]{0,5}(\.[0-9]{0,5}){0,2}$/) }, b.validateEngineVersion = function(a) { return !(!a || !e.stringMatch(a, /^(unity|unreal|gamemaker|cocos2d|construct|defold) [0-9]{0,5}(\.[0-9]{0,5}){0,2}$/)) }, b.validateUserId = function(a) { return !!b.validateString(a, !1) || (c.w("Validation fail - user id: id cannot be (null), empty or above 64 characters."), !1) }, b.validateShortString = function(a, b) { return !(!b || a) || !(!a || a.length > 32) }, b.validateString = function(a, b) { return !(!b || a) || !(!a || a.length > 64) }, b.validateLongString = function(a, b) { return !(!b || a) || !(!a || a.length > 8192) }, b.validateConnectionType = function(a) { return e.stringMatch(a, /^(wwan|wifi|lan|offline)$/) }, b.validateCustomDimensions = function(a) { return b.validateArrayOfStrings(20, 32, !1, "custom dimensions", a) }, b.validateResourceCurrencies = function(a) { if (!b.validateArrayOfStrings(20, 64, !1, "resource currencies", a)) return !1; for (var d = 0; d < a.length; ++d) if (!e.stringMatch(a[d], /^[A-Za-z]+$/)) return c.w("resource currencies validation failed: a resource currency can only be A-Z, a-z. String was: " + a[d]), !1; return !0 }, b.validateResourceItemTypes = function(a) { if (!b.validateArrayOfStrings(20, 32, !1, "resource item types", a)) return !1; for (var d = 0; d < a.length; ++d) if (!b.validateEventPartCharacters(a[d])) return c.w("resource item types validation failed: a resource item type cannot contain other characters than A-z, 0-9, -_., ()!?. String was: " + a[d]), !1; return !0 }, b.validateDimension01 = function(a, b) { return !a || !!e.stringArrayContainsString(b, a) }, b.validateDimension02 = function(a, b) { return !a || !!e.stringArrayContainsString(b, a) }, b.validateDimension03 = function(a, b) { return !a || !!e.stringArrayContainsString(b, a) }, b.validateArrayOfStrings = function(a, b, d, e, f) { var g = e; if (g || (g = "Array"), !f) return c.w(g + " validation failed: array cannot be null. "), !1; if (0 == d && 0 == f.length) return c.w(g + " validation failed: array cannot be empty. "), !1; if (a > 0 && f.length > a) return c.w(g + " validation failed: array cannot exceed " + a + " values. It has " + f.length + " values."), !1; for (var h = 0; h < f.length; ++h) { var i = f[h] ? f[h].length : 0; if (0 === i) return c.w(g + " validation failed: contained an empty string. Array=" + JSON.stringify(f)), !1; if (b > 0 && i > b) return c.w(g + " validation failed: a string exceeded max allowed length (which is: " + b + "). String was: " + f[h]), !1 } return !0 }, b.validateFacebookId = function(a) { return !!b.validateString(a, !1) || (c.w("Validation fail - facebook id: id cannot be (null), empty or above 64 characters."), !1) }, b.validateGender = function(b) { if (isNaN(Number(a.EGAGender[b]))) { if (b == a.EGAGender.Undefined || b != a.EGAGender.Male && b != a.EGAGender.Female) return c.w("Validation fail - gender: Has to be 'male' or 'female'. Was: " + b), !1 } else if (b == a.EGAGender[a.EGAGender.Undefined] || b != a.EGAGender[a.EGAGender.Male] && b != a.EGAGender[a.EGAGender.Female]) return c.w("Validation fail - gender: Has to be 'male' or 'female'. Was: " + b), !1; return !0 }, b.validateBirthyear = function(a) { return !(a < 0 || a > 9999) || (c.w("Validation fail - birthYear: Cannot be (null) or invalid range."), !1) }, b.validateClientTs = function(a) { return !(a < -4294967294 || a > 4294967294) }, b }(); b.GAValidator = f }(a.validators || (a.validators = {})) }(c || (c = {})); var c; ! function(a) {! function(a) { var b = function() { function a(a, b, c) { this.name = a, this.value = b, this.version = c } return a }(); a.NameValueVersion = b; var c = function() { function a(a, b) { this.name = a, this.version = b } return a }(); a.NameVersion = c; var d = function() { function a() {} return a.touch = function() {}, a.getRelevantSdkVersion = function() { return a.sdkGameEngineVersion ? a.sdkGameEngineVersion : a.sdkWrapperVersion }, a.getConnectionType = function() { return a.connectionType }, a.updateConnectionType = function() { navigator.onLine ? "ios" === a.buildPlatform || "android" === a.buildPlatform ? a.connectionType = "wwan" : a.connectionType = "lan" : a.connectionType = "offline" }, a.getOSVersionString = function() { return a.buildPlatform + " " + a.osVersionPair.version }, a.runtimePlatformToString = function() { return a.osVersionPair.name }, a.getBrowserVersionString = function() { var b, c = navigator.userAgent, d = c.match(/(opera|chrome|safari|firefox|ubrowser|msie|trident|fbav(?=\/))\/?\s*(\d+)/i) || []; if (0 == d.length && "ios" === a.buildPlatform) return "webkit_" + a.osVersion; if (/trident/i.test(d[1])) return b = /\brv[ :]+(\d+)/g.exec(c) || [], "IE " + (b[1] || ""); if ("Chrome" === d[1] && null != (b = c.match(/\b(OPR|Edge|UBrowser)\/(\d+)/))) return b.slice(1).join(" ").replace("OPR", "Opera").replace("UBrowser", "UC").toLowerCase(); if (d[1] && "fbav" === d[1].toLowerCase() && (d[1] = "facebook", d[2])) return "facebook " + d[2]; var e = d[2] ? [d[1], d[2]] : [navigator.appName, navigator.appVersion, "-?"]; return null != (b = c.match(/version\/(\d+)/i)) && e.splice(1, 1, b[1]), e.join(" ").toLowerCase() }, a.getDeviceModel = function() { return "unknown" }, a.getDeviceManufacturer = function() { return "unknown" }, a.matchItem = function(a, b) { var d, e, f, g, h, i = new c("unknown", "0.0.0"), j = 0, k = 0; for (j = 0; j < b.length; j += 1) if (d = new RegExp(b[j].value, "i"), d.test(a)) { if (e = new RegExp(b[j].version + "[- /:;]([\\d._]+)", "i"), f = a.match(e), h = "", f && f[1] && (g = f[1]), g) { var l = g.split(/[._]+/); for (k = 0; k < Math.min(l.length, 3); k += 1) h += l[k] + (k < Math.min(l.length, 3) - 1 ? "." : "") } else h = "0.0.0"; return i.name = b[j].name, i.version = h, i } return i }, a.sdkWrapperVersion = "javascript 3.1.2", a.osVersionPair = a.matchItem([navigator.platform, navigator.userAgent, navigator.appVersion, navigator.vendor].join(" "), [new b("windows_phone", "Windows Phone", "OS"), new b("windows", "Win", "NT"), new b("ios", "iPhone", "OS"), new b("ios", "iPad", "OS"), new b("ios", "iPod", "OS"), new b("android", "Android", "Android"), new b("blackBerry", "BlackBerry", "/"), new b("mac_osx", "Mac", "OS X"), new b("tizen", "Tizen", "Tizen"), new b("linux", "Linux", "rv")]), a.buildPlatform = a.runtimePlatformToString(), a.deviceModel = a.getDeviceModel(), a.deviceManufacturer = a.getDeviceManufacturer(), a.osVersion = a.getOSVersionString(), a.browserVersion = a.getBrowserVersionString(), a.maxSafeInteger = Math.pow(2, 53) - 1, a }(); a.GADevice = d }(a.device || (a.device = {})) }(c || (c = {})); var c; ! function(a) {! function(a) { var b = function() { function a(b) { this.deadline = b, this.ignore = !1, this.async = !1, this.running = !1, this.id = ++a.idCounter } return a.idCounter = 0, a }(); a.TimedBlock = b }(a.threading || (a.threading = {})) }(c || (c = {})); var c; ! function(a) {! function(a) { var b = function() { function a(a) { this.comparer = a, this._subQueues = {}, this._sortedKeys = [] } return a.prototype.enqueue = function(a, b) {-1 === this._sortedKeys.indexOf(a) && this.addQueueOfPriority(a), this._subQueues[a].push(b) }, a.prototype.addQueueOfPriority = function(a) { var b = this; this._sortedKeys.push(a), this._sortedKeys.sort(function(a, c) { return b.comparer.compare(a, c) }), this._subQueues[a] = [] }, a.prototype.peek = function() { if (this.hasItems()) return this._subQueues[this._sortedKeys[0]][0]; throw new Error("The queue is empty") }, a.prototype.hasItems = function() { return this._sortedKeys.length > 0 }, a.prototype.dequeue = function() { if (this.hasItems()) return this.dequeueFromHighPriorityQueue(); throw new Error("The queue is empty") }, a.prototype.dequeueFromHighPriorityQueue = function() { var a = this._sortedKeys[0], b = this._subQueues[a].shift(); return 0 === this._subQueues[a].length && (this._sortedKeys.shift(), delete this._subQueues[a]), b }, a }(); a.PriorityQueue = b }(a.threading || (a.threading = {})) }(c || (c = {})); var c; ! function(a) {! function(b) { var c, d = a.logging.GALogger;! function(a) { a[a.Equal = 0] = "Equal", a[a.LessOrEqual = 1] = "LessOrEqual", a[a.NotEqual = 2] = "NotEqual" }(c = b.EGAStoreArgsOperator || (b.EGAStoreArgsOperator = {})); var e;! function(a) { a[a.Events = 0] = "Events", a[a.Sessions = 1] = "Sessions", a[a.Progression = 2] = "Progression" }(e = b.EGAStore || (b.EGAStore = {})); var f = function() { function a() { this.eventsStore = [], this.sessionsStore = [], this.progressionStore = [], this.storeItems = {}; try { "object" == typeof localStorage ? (localStorage.setItem("testingLocalStorage", "yes"), localStorage.removeItem("testingLocalStorage"), a.storageAvailable = !0) : a.storageAvailable = !1 } catch (a) {} } return a.isStorageAvailable = function() { return a.storageAvailable }, a.isStoreTooLargeForEvents = function() { return a.instance.eventsStore.length + a.instance.sessionsStore.length > a.MaxNumberOfEntries }, a.select = function(b, d, e, f) { void 0 === d && (d = []), void 0 === e && (e = !1), void 0 === f && (f = 0); var g = a.getStore(b); if (!g) return null; for (var h = [], i = 0; i < g.length; ++i) { for (var j = g[i], k = !0, l = 0; l < d.length; ++l) { var m = d[l]; if (j[m[0]]) switch (m[1]) { case c.Equal: k = j[m[0]] == m[2]; break; case c.LessOrEqual: k = j[m[0]] <= m[2]; break; case c.NotEqual: k = j[m[0]] != m[2]; break; default: k = !1 } else k = !1; if (!k) break } k && h.push(j) } return e && h.sort(function(a, b) { return a.client_ts - b.client_ts }), f > 0 && h.length > f && (h = h.slice(0, f + 1)), h }, a.update = function(b, d, e) { void 0 === e && (e = []); var f = a.getStore(b); if (!f) return !1; for (var g = 0; g < f.length; ++g) { for (var h = f[g], i = !0, j = 0; j < e.length; ++j) { var k = e[j]; if (h[k[0]]) switch (k[1]) { case c.Equal: i = h[k[0]] == k[2]; break; case c.LessOrEqual: i = h[k[0]] <= k[2]; break; case c.NotEqual: i = h[k[0]] != k[2]; break; default: i = !1 } else i = !1; if (!i) break } if (i) for (var j = 0; j < d.length; ++j) { var l = d[j]; h[l[0]] = l[1] } } return !0 }, a.delete = function(b, d) { var e = a.getStore(b); if (e) for (var f = 0; f < e.length; ++f) { for (var g = e[f], h = !0, i = 0; i < d.length; ++i) { var j = d[i]; if (g[j[0]]) switch (j[1]) { case c.Equal: h = g[j[0]] == j[2]; break; case c.LessOrEqual: h = g[j[0]] <= j[2]; break; case c.NotEqual: h = g[j[0]] != j[2]; break; default: h = !1 } else h = !1; if (!h) break } h && (e.splice(f, 1), --f) } }, a.insert = function(b, c, d, e) { void 0 === d && (d = !1), void 0 === e && (e = null); var f = a.getStore(b); if (f) if (d) { if (!e) return; for (var g = !1, h = 0; h < f.length; ++h) { var i = f[h]; if (i[e] == c[e]) { for (var j in c) i[j] = c[j]; g = !0; break } } g || f.push(c) } else f.push(c) }, a.save = function() { if (!a.isStorageAvailable()) return void d.w("Storage is not available, cannot save."); localStorage.setItem(a.KeyPrefix + a.EventsStoreKey, JSON.stringify(a.instance.eventsStore)), localStorage.setItem(a.KeyPrefix + a.SessionsStoreKey, JSON.stringify(a.instance.sessionsStore)), localStorage.setItem(a.KeyPrefix + a.ProgressionStoreKey, JSON.stringify(a.instance.progressionStore)), localStorage.setItem(a.KeyPrefix + a.ItemsStoreKey, JSON.stringify(a.instance.storeItems)) }, a.load = function() { if (!a.isStorageAvailable()) return void d.w("Storage is not available, cannot load."); try { a.instance.eventsStore = JSON.parse(localStorage.getItem(a.KeyPrefix + a.EventsStoreKey)), a.instance.eventsStore || (a.instance.eventsStore = []) } catch (b) { d.w("Load failed for 'events' store. Using empty store."), a.instance.eventsStore = [] } try { a.instance.sessionsStore = JSON.parse(localStorage.getItem(a.KeyPrefix + a.SessionsStoreKey)), a.instance.sessionsStore || (a.instance.sessionsStore = []) } catch (b) { d.w("Load failed for 'sessions' store. Using empty store."), a.instance.sessionsStore = [] } try { a.instance.progressionStore = JSON.parse(localStorage.getItem(a.KeyPrefix + a.ProgressionStoreKey)), a.instance.progressionStore || (a.instance.progressionStore = []) } catch (b) { d.w("Load failed for 'progression' store. Using empty store."), a.instance.progressionStore = [] } try { a.instance.storeItems = JSON.parse(localStorage.getItem(a.KeyPrefix + a.ItemsStoreKey)), a.instance.storeItems || (a.instance.storeItems = {}) } catch (b) { d.w("Load failed for 'items' store. Using empty store."), a.instance.progressionStore = [] } }, a.setItem = function(b, c) { var d = a.KeyPrefix + b; c ? a.instance.storeItems[d] = c : d in a.instance.storeItems && delete a.instance.storeItems[d] }, a.getItem = function(b) { var c = a.KeyPrefix + b; return c in a.instance.storeItems ? a.instance.storeItems[c] : null }, a.getStore = function(b) { switch (b) { case e.Events: return a.instance.eventsStore; case e.Sessions: return a.instance.sessionsStore; case e.Progression: return a.instance.progressionStore; default: return d.w("GAStore.getStore(): Cannot find store: " + b), null } }, a.instance = new a, a.MaxNumberOfEntries = 2e3, a.KeyPrefix = "GA::", a.EventsStoreKey = "ga_event", a.SessionsStoreKey = "ga_session", a.ProgressionStoreKey = "ga_progression", a.ItemsStoreKey = "ga_items", a }(); b.GAStore = f }(a.store || (a.store = {})) }(c || (c = {})); var c; ! function(a) {! function(b) { var c = a.validators.GAValidator, d = a.utilities.GAUtilities, e = a.logging.GALogger, f = a.store.GAStore, g = a.device.GADevice, h = a.store.EGAStore, i = a.store.EGAStoreArgsOperator, j = function() { function b() { this.availableCustomDimensions01 = [], this.availableCustomDimensions02 = [], this.availableCustomDimensions03 = [], this.availableResourceCurrencies = [], this.availableResourceItemTypes = [], this.configurations = {}, this.commandCenterListeners = [], this.sdkConfigDefault = {}, this.sdkConfig = {}, this.progressionTries = {}, this._isEventSubmissionEnabled = !0 } return b.setUserId = function(a) { b.instance.userId = a, b.cacheIdentifier() }, b.getIdentifier = function() { return b.instance.identifier }, b.isInitialized = function() { return b.instance.initialized }, b.setInitialized = function(a) { b.instance.initialized = a }, b.getSessionStart = function() { return b.instance.sessionStart }, b.getSessionNum = function() { return b.instance.sessionNum }, b.getTransactionNum = function() { return b.instance.transactionNum }, b.getSessionId = function() { return b.instance.sessionId }, b.getCurrentCustomDimension01 = function() { return b.instance.currentCustomDimension01 }, b.getCurrentCustomDimension02 = function() { return b.instance.currentCustomDimension02 }, b.getCurrentCustomDimension03 = function() { return b.instance.currentCustomDimension03 }, b.getGameKey = function() { return b.instance.gameKey }, b.getGameSecret = function() { return b.instance.gameSecret }, b.getAvailableCustomDimensions01 = function() { return b.instance.availableCustomDimensions01 }, b.setAvailableCustomDimensions01 = function(a) { c.validateCustomDimensions(a) && (b.instance.availableCustomDimensions01 = a, b.validateAndFixCurrentDimensions(), e.i("Set available custom01 dimension values: (" + d.joinStringArray(a, ", ") + ")")) }, b.getAvailableCustomDimensions02 = function() { return b.instance.availableCustomDimensions02 }, b.setAvailableCustomDimensions02 = function(a) { c.validateCustomDimensions(a) && (b.instance.availableCustomDimensions02 = a, b.validateAndFixCurrentDimensions(), e.i("Set available custom02 dimension values: (" + d.joinStringArray(a, ", ") + ")")) }, b.getAvailableCustomDimensions03 = function() { return b.instance.availableCustomDimensions03 }, b.setAvailableCustomDimensions03 = function(a) { c.validateCustomDimensions(a) && (b.instance.availableCustomDimensions03 = a, b.validateAndFixCurrentDimensions(), e.i("Set available custom03 dimension values: (" + d.joinStringArray(a, ", ") + ")")) }, b.getAvailableResourceCurrencies = function() { return b.instance.availableResourceCurrencies }, b.setAvailableResourceCurrencies = function(a) { c.validateResourceCurrencies(a) && (b.instance.availableResourceCurrencies = a, e.i("Set available resource currencies: (" + d.joinStringArray(a, ", ") + ")")) }, b.getAvailableResourceItemTypes = function() { return b.instance.availableResourceItemTypes }, b.setAvailableResourceItemTypes = function(a) { c.validateResourceItemTypes(a) && (b.instance.availableResourceItemTypes = a, e.i("Set available resource item types: (" + d.joinStringArray(a, ", ") + ")")) }, b.getBuild = function() { return b.instance.build }, b.setBuild = function(a) { b.instance.build = a, e.i("Set build version: " + a) }, b.getUseManualSessionHandling = function() { return b.instance.useManualSessionHandling }, b.isEventSubmissionEnabled = function() { return b.instance._isEventSubmissionEnabled }, b.prototype.setDefaultId = function(a) { this.defaultUserId = a || "", b.cacheIdentifier() }, b.getDefaultId = function() { return b.instance.defaultUserId }, b.getSdkConfig = function() { var a, c = 0; for (var d in b.instance.sdkConfig) 0 === c && (a = d), ++c; if (a && c > 0) return b.instance.sdkConfig; var a, c = 0; for (var d in b.instance.sdkConfigCached) 0 === c && (a = d), ++c; return a && c > 0 ? b.instance.sdkConfigCached : b.instance.sdkConfigDefault }, b.isEnabled = function() { var a = b.getSdkConfig(); return !(a.enabled && "false" == a.enabled || !b.instance.initAuthorized) }, b.setCustomDimension01 = function(a) { b.instance.currentCustomDimension01 = a, f.setItem(b.Dimension01Key, a), e.i("Set custom01 dimension value: " + a) }, b.setCustomDimension02 = function(a) { b.instance.currentCustomDimension02 = a, f.setItem(b.Dimension02Key, a), e.i("Set custom02 dimension value: " + a) }, b.setCustomDimension03 = function(a) { b.instance.currentCustomDimension03 = a, f.setItem(b.Dimension03Key, a), e.i("Set custom03 dimension value: " + a) }, b.setFacebookId = function(a) { b.instance.facebookId = a, f.setItem(b.FacebookIdKey, a), e.i("Set facebook id: " + a) }, b.setGender = function(c) { b.instance.gender = isNaN(Number(a.EGAGender[c])) ? a.EGAGender[c].toString().toLowerCase() : a.EGAGender[a.EGAGender[c]].toString().toLowerCase(), f.setItem(b.GenderKey, b.instance.gender), e.i("Set gender: " + b.instance.gender) }, b.setBirthYear = function(a) { b.instance.birthYear = a, f.setItem(b.BirthYearKey, a.toString()), e.i("Set birth year: " + a) }, b.incrementSessionNum = function() { var a = b.getSessionNum() + 1; b.instance.sessionNum = a }, b.incrementTransactionNum = function() { var a = b.getTransactionNum() + 1; b.instance.transactionNum = a }, b.incrementProgressionTries = function(a) { var c = b.getProgressionTries(a) + 1; b.instance.progressionTries[a] = c; var d = {}; d.progression = a, d.tries = c, f.insert(h.Progression, d, !0, "progression") }, b.getProgressionTries = function(a) { return a in b.instance.progressionTries ? b.instance.progressionTries[a] : 0 }, b.clearProgressionTries = function(a) { a in b.instance.progressionTries && delete b.instance.progressionTries[a]; var c = []; c.push(["progression", i.Equal, a]), f.delete(h.Progression, c) }, b.setKeys = function(a, c) { b.instance.gameKey = a, b.instance.gameSecret = c }, b.setManualSessionHandling = function(a) { b.instance.useManualSessionHandling = a, e.i("Use manual session handling: " + a) }, b.setEnabledEventSubmission = function(a) { b.instance._isEventSubmissionEnabled = a }, b.getEventAnnotations = function() { var a = {}; a.v = 2, a.user_id = b.instance.identifier, a.client_ts = b.getClientTsAdjusted(), a.sdk_version = g.getRelevantSdkVersion(), a.os_version = g.osVersion, a.manufacturer = g.deviceManufacturer, a.device = g.deviceModel, a.browser_version = g.browserVersion, a.platform = g.buildPlatform, a.session_id = b.instance.sessionId, a[b.SessionNumKey] = b.instance.sessionNum; var d = g.getConnectionType(); return c.validateConnectionType(d) && (a.connection_type = d), g.gameEngineVersion && (a.engine_version = g.gameEngineVersion), b.instance.build && (a.build = b.instance.build), b.instance.facebookId && (a[b.FacebookIdKey] = b.instance.facebookId), b.instance.gender && (a[b.GenderKey] = b.instance.gender), 0 != b.instance.birthYear && (a[b.BirthYearKey] = b.instance.birthYear), a }, b.getSdkErrorEventAnnotations = function() { var a = {}; a.v = 2, a.category = b.CategorySdkError, a.sdk_version = g.getRelevantSdkVersion(), a.os_version = g.osVersion, a.manufacturer = g.deviceManufacturer, a.device = g.deviceModel, a.platform = g.buildPlatform; var d = g.getConnectionType(); return c.validateConnectionType(d) && (a.connection_type = d), g.gameEngineVersion && (a.engine_version = g.gameEngineVersion), a }, b.getInitAnnotations = function() { var a = {}; return a.user_id = b.getIdentifier(), a.sdk_version = g.getRelevantSdkVersion(), a.os_version = g.osVersion, a.platform = g.buildPlatform, a }, b.getClientTsAdjusted = function() { var a = d.timeIntervalSince1970(), e = a + b.instance.clientServerTimeOffset; return c.validateClientTs(e) ? e : a }, b.sessionIsStarted = function() { return 0 != b.instance.sessionStart }, b.cacheIdentifier = function() { b.instance.userId ? b.instance.identifier = b.instance.userId : b.instance.defaultUserId && (b.instance.identifier = b.instance.defaultUserId) }, b.ensurePersistedStates = function() { f.isStorageAvailable() && f.load(); var a = b.instance; a.setDefaultId(null != f.getItem(b.DefaultUserIdKey) ? f.getItem(b.DefaultUserIdKey) : d.createGuid()), a.sessionNum = null != f.getItem(b.SessionNumKey) ? Number(f.getItem(b.SessionNumKey)) : 0, a.transactionNum = null != f.getItem(b.TransactionNumKey) ? Number(f.getItem(b.TransactionNumKey)) : 0, a.facebookId ? f.setItem(b.FacebookIdKey, a.facebookId) : (a.facebookId = null != f.getItem(b.FacebookIdKey) ? f.getItem(b.FacebookIdKey) : "", a.facebookId), a.gender ? f.setItem(b.GenderKey, a.gender) : (a.gender = null != f.getItem(b.GenderKey) ? f.getItem(b.GenderKey) : "", a.gender), a.birthYear && 0 != a.birthYear ? f.setItem(b.BirthYearKey, a.birthYear.toString()) : (a.birthYear = null != f.getItem(b.BirthYearKey) ? Number(f.getItem(b.BirthYearKey)) : 0, a.birthYear), a.currentCustomDimension01 ? f.setItem(b.Dimension01Key, a.currentCustomDimension01) : (a.currentCustomDimension01 = null != f.getItem(b.Dimension01Key) ? f.getItem(b.Dimension01Key) : "", a.currentCustomDimension01), a.currentCustomDimension02 ? f.setItem(b.Dimension02Key, a.currentCustomDimension02) : (a.currentCustomDimension02 = null != f.getItem(b.Dimension02Key) ? f.getItem(b.Dimension02Key) : "", a.currentCustomDimension02), a.currentCustomDimension03 ? f.setItem(b.Dimension03Key, a.currentCustomDimension03) : (a.currentCustomDimension03 = null != f.getItem(b.Dimension03Key) ? f.getItem(b.Dimension03Key) : "", a.currentCustomDimension03); var c = null != f.getItem(b.SdkConfigCachedKey) ? f.getItem(b.SdkConfigCachedKey) : ""; if (c) { var e = JSON.parse(d.decode64(c)); e && (a.sdkConfigCached = e) } var g = f.select(h.Progression); if (g) for (var i = 0; i < g.length; ++i) { var j = g[i]; j && (a.progressionTries[j.progression] = j.tries) } }, b.calculateServerTimeOffset = function(a) { return a - d.timeIntervalSince1970() }, b.validateAndCleanCustomFields = function(a) { var c = {}; if (a) { var f = 0; for (var g in a) { var h = a[g]; if (g && h) if (f < b.MAX_CUSTOM_FIELDS_COUNT) { var i = new RegExp("^[a-zA-Z0-9_]{1," + b.MAX_CUSTOM_FIELDS_KEY_LENGTH + "}$"); if (d.stringMatch(g, i)) { var j = typeof h; if ("string" === j || h instanceof String) { var k = h; k.length <= b.MAX_CUSTOM_FIELDS_VALUE_STRING_LENGTH && k.length > 0 ? (c[g] = k, ++f) : e.w("validateAndCleanCustomFields: entry with key=" + g + ", value=" + h + " has been omitted because its value is an empty string or exceeds the max number of characters (" + b.MAX_CUSTOM_FIELDS_VALUE_STRING_LENGTH + ")") } else if ("number" === j || h instanceof Number) { var l = h; c[g] = l, ++f } else e.w("validateAndCleanCustomFields: entry with key=" + g + ", value=" + h + " has been omitted because its value is not a string or number") } else e.w("validateAndCleanCustomFields: entry with key=" + g + ", value=" + h + " has been omitted because its key contains illegal character, is empty or exceeds the max number of characters (" + b.MAX_CUSTOM_FIELDS_KEY_LENGTH + ")") } else e.w("validateAndCleanCustomFields: entry with key=" + g + ", value=" + h + " has been omitted because it exceeds the max number of custom fields (" + b.MAX_CUSTOM_FIELDS_COUNT + ")"); else e.w("validateAndCleanCustomFields: entry with key=" + g + ", value=" + h + " has been omitted because its key or value is null") } } return c }, b.validateAndFixCurrentDimensions = function() { c.validateDimension01(b.getCurrentCustomDimension01(), b.getAvailableCustomDimensions01()) || b.setCustomDimension01(""), c.validateDimension02(b.getCurrentCustomDimension02(), b.getAvailableCustomDimensions02()) || b.setCustomDimension02(""), c.validateDimension03(b.getCurrentCustomDimension03(), b.getAvailableCustomDimensions03()) || b.setCustomDimension03("") }, b.getConfigurationStringValue = function(a, c) { return b.instance.configurations[a] ? b.instance.configurations[a].toString() : c }, b.isCommandCenterReady = function() { return b.instance.commandCenterIsReady }, b.addCommandCenterListener = function(a) { b.instance.commandCenterListeners.indexOf(a) < 0 && b.instance.commandCenterListeners.push(a) }, b.removeCommandCenterListener = function(a) { var c = b.instance.commandCenterListeners.indexOf(a); c > -1 && b.instance.commandCenterListeners.splice(c, 1) }, b.getConfigurationsContentAsString = function() { return JSON.stringify(b.instance.configurations) }, b.populateConfigurations = function(a) { var c = a.configurations; if (c) for (var d = 0; d < c.length; ++d) { var e = c[d]; if (e) { var f = e.key, g = e.value, h = e.start ? e.start : Number.MIN_VALUE, i = e.end ? e.end : Number.MAX_VALUE, j = b.getClientTsAdjusted(); f && g && j > h && j < i && (b.instance.configurations[f] = g) } } b.instance.commandCenterIsReady = !0; for (var k = b.instance.commandCenterListeners, d = 0; d < k.length; ++d) k[d] && k[d].onCommandCenterUpdated() }, b.CategorySdkError = "sdk_error", b.MAX_CUSTOM_FIELDS_COUNT = 50, b.MAX_CUSTOM_FIELDS_KEY_LENGTH = 64, b.MAX_CUSTOM_FIELDS_VALUE_STRING_LENGTH = 256, b.instance = new b, b.DefaultUserIdKey = "default_user_id", b.SessionNumKey = "session_num", b.TransactionNumKey = "transaction_num", b.FacebookIdKey = "facebook_id", b.GenderKey = "gender", b.BirthYearKey = "birth_year", b.Dimension01Key = "dimension01", b.Dimension02Key = "dimension02", b.Dimension03Key = "dimension03", b.SdkConfigCachedKey = "sdk_config_cached", b }(); b.GAState = j }(a.state || (a.state = {})) }(c || (c = {})); var c; ! function(a) {! function(b) { var c = a.utilities.GAUtilities, d = a.logging.GALogger, e = function() { function a() {} return a.execute = function(b, e, f, g) { if (a.countMap[e] || (a.countMap[e] = 0), !(a.countMap[e] >= a.MaxCount)) { var h = c.getHmac(g, f), i = new XMLHttpRequest; i.onreadystatechange = function() { if (4 === i.readyState) { if (!i.responseText) return; if (200 != i.status) return void d.w("sdk error failed. response code not 200. status code: " + i.status + ", description: " + i.statusText + ", body: " + i.responseText); a.countMap[e] = a.countMap[e] + 1 } }, i.open("POST", b, !0), i.setRequestHeader("Content-Type", "application/json"), i.setRequestHeader("Authorization", h); try { i.send(f) } catch (a) { console.error(a) } } }, a.MaxCount = 10, a.countMap = {}, a }(); b.SdkErrorTask = e }(a.tasks || (a.tasks = {})) }(c || (c = {})); var c; ! function(a) {! function(b) { var c = a.state.GAState, d = a.logging.GALogger, e = a.utilities.GAUtilities, f = a.validators.GAValidator, g = a.tasks.SdkErrorTask, h = function() { function a() { this.protocol = "https", this.hostName = "api.gameanalytics.com", this.version = "v2", this.baseUrl = this.protocol + "://" + this.hostName + "/" + this.version, this.initializeUrlPath = "init", this.eventsUrlPath = "events", this.useGzip = !1 } return a.prototype.requestInit = function(d) { var e = c.getGameKey(), f = this.baseUrl + "/" + e + "/" + this.initializeUrlPath; f = "https://rubick.gameanalytics.com/v2/command_center?game_key=" + e + "&interval_seconds=1000000"; var g = c.getInitAnnotations(), h = JSON.stringify(g); if (!h) return void d(b.EGAHTTPApiResponse.JsonEncodeFailed, null); var i = this.createPayloadData(h, this.useGzip), j = []; j.push(h), a.sendRequest(f, i, j, this.useGzip, a.initRequestCallback, d) }, a.prototype.sendEventsInArray = function(d, e, f) { if (0 != d.length) { var g = c.getGameKey(), h = this.baseUrl + "/" + g + "/" + this.eventsUrlPath, i = JSON.stringify(d); if (!i) return void f(b.EGAHTTPApiResponse.JsonEncodeFailed, null, e, d.length); var j = this.createPayloadData(i, this.useGzip), k = []; k.push(i), k.push(e), k.push(d.length.toString()), a.sendRequest(h, j, k, this.useGzip, a.sendEventInArrayRequestCallback, f) } }, a.prototype.sendSdkErrorEvent = function(b) { if (c.isEventSubmissionEnabled()) { var e = c.getGameKey(), h = c.getGameSecret(); if (f.validateSdkErrorEvent(e, h, b)) { var i = this.baseUrl + "/" + e + "/" + this.eventsUrlPath, j = "", k = c.getSdkErrorEventAnnotations(), l = a.sdkErrorTypeToString(b); k.type = l; var m = []; if (m.push(k), !(j = JSON.stringify(m))) return void d.w("sendSdkErrorEvent: JSON encoding failed."); g.execute(i, b, j, h) } } }, a.sendEventInArrayRequestCallback = function(c, d, e, f) { void 0 === f && (f = null); var g = (f[0], f[1], f[2]), h = parseInt(f[3]), i = "", j = 0; i = c.responseText, j = c.status; var k = a.instance.processRequestResponse(j, c.statusText, i, "Events"); if (k != b.EGAHTTPApiResponse.Ok && k != b.EGAHTTPApiResponse.BadRequest) return void e(k, null, g, h); var l = i ? JSON.parse(i) : {}; if (null == l) return void e(b.EGAHTTPApiResponse.JsonDecodeFailed, null, g, h); b.EGAHTTPApiResponse.BadRequest, e(k, l, g, h) }, a.sendRequest = function(a, b, d, f, g, h) { var i = new XMLHttpRequest, j = c.getGameSecret(), k = e.getHmac(j, b), l = []; l.push(k); for (var m in d) l.push(d[m]); if (i.onreadystatechange = function() { 4 === i.readyState && g(i, a, h, l) }, i.open("POST", a, !0), i.setRequestHeader("Content-Type", "text/plain"), i.setRequestHeader("Authorization", k), f) throw new Error("gzip not supported"); try { i.send(b) } catch (a) { console.error(a.stack) } }, a.initRequestCallback = function(c, d, e, g) { void 0 === g && (g = null); var h = (g[0], g[1], ""), i = 0; h = c.responseText, i = c.status; var j = h ? JSON.parse(h) : {}, k = a.instance.processRequestResponse(i, c.statusText, h, "Init"); if (k != b.EGAHTTPApiResponse.Ok && k != b.EGAHTTPApiResponse.BadRequest) return void e(k, null, "", 0); if (null == j) return void e(b.EGAHTTPApiResponse.JsonDecodeFailed, null, "", 0); if (k === b.EGAHTTPApiResponse.BadRequest) return void e(k, null, "", 0); var l = f.validateAndCleanInitRequestResponse(j); if (!l) return void e(b.EGAHTTPApiResponse.BadResponse, null, "", 0); e(b.EGAHTTPApiResponse.Ok, l, "", 0) }, a.prototype.createPayloadData = function(a, b) { if (b) throw new Error("gzip not supported"); return a }, a.prototype.processRequestResponse = function(a, c, d, e) { return d ? 200 === a ? b.EGAHTTPApiResponse.Ok : 0 === a || 401 === a ? b.EGAHTTPApiResponse.Unauthorized : 400 === a ? b.EGAHTTPApiResponse.BadRequest : 500 === a ? b.EGAHTTPApiResponse.InternalServerError : b.EGAHTTPApiResponse.UnknownResponseCode : b.EGAHTTPApiResponse.NoResponse }, a.sdkErrorTypeToString = function(a) { switch (a) { case b.EGASdkErrorType.Rejected: return "rejected"; default: return "" } }, a.instance = new a, a }(); b.GAHTTPApi = h }(a.http || (a.http = {})) }(c || (c = {})); var c; ! function(a) { ! function(b) { var c = a.store.GAStore, d = a.store.EGAStore, e = a.store.EGAStoreArgsOperator, f = a.state.GAState, g = a.logging.GALogger, h = a.utilities.GAUtilities, i = a.http.EGAHTTPApiResponse, j = a.http.GAHTTPApi, k = a.validators.GAValidator, l = a.http.EGASdkErrorType, m = function() { function b() {} return b.addSessionStartEvent = function() { if (f.isEventSubmissionEnabled()) { var a = {}; a.category = b.CategorySessionStart, f.incrementSessionNum(), c.setItem(f.SessionNumKey, f.getSessionNum().toString()), b.addDimensionsToEvent(a), b.addEventToStore(a), g.i("Add SESSION START event"), b.processEvents(b.CategorySessionStart, !1) } }, b.addSessionEndEvent = function() { if (f.isEventSubmissionEnabled()) { var a = f.getSessionStart(), c = f.getClientTsAdjusted(), d = c - a; d < 0 && (g.w("Session length was calculated to be less then 0. Should not be possible. Resetting to 0."), d = 0); var e = {}; e.category = b.CategorySessionEnd, e.length = d, b.addDimensionsToEvent(e), b.addEventToStore(e), g.i("Add SESSION END event."), b.processEvents("", !1) } }, b.addBusinessEvent = function(a, d, e, h, i, m) { if (void 0 === i && (i = null), f.isEventSubmissionEnabled()) { if (!k.validateBusinessEvent(a, d, i, e, h)) return void j.instance.sendSdkErrorEvent(l.Rejected); var n = {}; f.incrementTransactionNum(), c.setItem(f.TransactionNumKey, f.getTransactionNum().toString()), n.event_id = e + ":" + h, n.category = b.CategoryBusiness, n.currency = a, n.amount = d, n[f.TransactionNumKey] = f.getTransactionNum(), i && (n.cart_type = i), b.addDimensionsToEvent(n), b.addFieldsToEvent(n, f.validateAndCleanCustomFields(m)), g.i("Add BUSINESS event: {currency:" + a + ", amount:" + d + ", itemType:" + e + ", itemId:" + h + ", cartType:" + i + "}"), b.addEventToStore(n) } }, b.addResourceEvent = function(c, d, e, h, i, m) { if (f.isEventSubmissionEnabled()) { if (!k.validateResourceEvent(c, d, e, h, i, f.getAvailableResourceCurrencies(), f.getAvailableResourceItemTypes())) return void j.instance.sendSdkErrorEvent(l.Rejected); c === a.EGAResourceFlowType.Sink && (e *= -1); var n = {}, o = b.resourceFlowTypeToString(c); n.event_id = o + ":" + d + ":" + h + ":" + i, n.category = b.CategoryResource, n.amount = e, b.addDimensionsToEvent(n), b.addFieldsToEvent(n, f.validateAndCleanCustomFields(m)), g.i("Add RESOURCE event: {currency:" + d + ", amount:" + e + ", itemType:" + h + ", itemId:" + i + "}"), b.addEventToStore(n) } }, b.addProgressionEvent = function(c, d, e, h, i, m, n) { if (f.isEventSubmissionEnabled()) { var o = b.progressionStatusToString(c); if (!k.validateProgressionEvent(c, d, e, h)) return void j.instance.sendSdkErrorEvent(l.Rejected); var p, q = {}; p = e ? h ? d + ":" + e + ":" + h : d + ":" + e : d, q.category = b.CategoryProgression, q.event_id = o + ":" + p; var r = 0; m && c != a.EGAProgressionStatus.Start && (q.score = i), c === a.EGAProgressionStatus.Fail && f.incrementProgressionTries(p), c === a.EGAProgressionStatus.Complete && (f.incrementProgressionTries(p), r = f.getProgressionTries(p), q.attempt_num = r, f.clearProgressionTries(p)), b.addDimensionsToEvent(q), b.addFieldsToEvent(q, f.validateAndCleanCustomFields(n)), g.i("Add PROGRESSION event: {status:" + o + ", progression01:" + d + ", progression02:" + e + ", progression03:" + h + ", score:" + i + ", attempt:" + r + "}"), b.addEventToStore(q) } }, b.addDesignEvent = function(a, c, d, e) { if (f.isEventSubmissionEnabled()) { if (!k.validateDesignEvent(a, c)) return void j.instance.sendSdkErrorEvent(l.Rejected); var h = {}; h.category = b.CategoryDesign, h.event_id = a, d && (h.value = c), b.addDimensionsToEvent(h), b.addFieldsToEvent(h, f.validateAndCleanCustomFields(e)), g.i("Add DESIGN event: {eventId:" + a + ", value:" + c + "}"), b.addEventToStore(h) } }, b.addErrorEvent = function(a, c, d) { if (f.isEventSubmissionEnabled()) { var e = b.errorSeverityToString(a); if (!k.validateErrorEvent(a, c)) return void j.instance.sendSdkErrorEvent(l.Rejected); var h = {}; h.category = b.CategoryError, h.severity = e, h.message = c, b.addDimensionsToEvent(h), b.addFieldsToEvent(h, f.validateAndCleanCustomFields(d)), g.i("Add ERROR event: {severity:" + e + ", message:" + c + "}"), b.addEventToStore(h) } }, b.processEvents = function(a, i) { if (f.isEventSubmissionEnabled()) try { var k = h.createGuid(); i && (b.cleanupEvents(), b.fixMissingSessionEndEvents()); var l = []; l.push(["status", e.Equal, "new"]); var m = []; m.push(["status", e.Equal, "new"]), a && (l.push(["category", e.Equal, a]), m.push(["category", e.Equal, a])); var n = []; n.push(["status", k]); var o = c.select(d.Events, l); if (!o || 0 == o.length) return g.i("Event queue: No events to send"), void b.updateSessionStore(); if (o.length > b.MaxEventCount) { if (!(o = c.select(d.Events, l, !0, b.MaxEventCount))) return; var p = o[o.length - 1], q = p.client_ts; if (l.push(["client_ts", e.LessOrEqual, q]), !(o = c.select(d.Events, l))) return; m.push(["client_ts", e.LessOrEqual, q]) } if (g.i("Event queue: Sending " + o.length + " events."), !c.update(d.Events, n, m)) return; for (var r = [], s = 0; s < o.length; ++s) { var t = o[s], u = JSON.parse(h.decode64(t.event)); 0 != u.length && r.push(u) } j.instance.sendEventsInArray(r, k, b.processEventsCallback) } catch (a) { g.e("Error during ProcessEvents(): " + a.stack) } }, b.processEventsCallback = function(a, b, f, h) { var j = []; if (j.push(["status", e.Equal, f]), a === i.Ok) c.delete(d.Events, j), g.i("Event queue: " + h + " events sent."); else if (a === i.NoResponse) { var k = []; k.push(["status", "new"]), g.w("Event queue: Failed to send events to collector - Retrying next time"), c.update(d.Events, k, j) } else { if (b) { var l, m = 0; for (var n in b) 0 == m && (l = b[n]), ++m; a === i.BadRequest && l.constructor === Array ? g.w("Event queue: " + h + " events sent. " + m + " events failed GA server validation.") : g.w("Event queue: Failed to send events.") } else g.w("Event queue: Failed to send events."); c.delete(d.Events, j) } }, b.cleanupEvents = function() { c.update(d.Events, [ ["status", "new"] ]) }, b.fixMissingSessionEndEvents = function() { if (f.isEventSubmissionEnabled()) { var a = []; a.push(["session_id", e.NotEqual, f.getSessionId()]); var i = c.select(d.Sessions, a); if (i && 0 != i.length) { g.i(i.length + " session(s) located with missing session_end event."); for (var j = 0; j < i.length; ++j) { var k = JSON.parse(h.decode64(i[j].event)), l = k.client_ts, m = i[j].timestamp, n = l - m; n = Math.max(0, n), k.category = b.CategorySessionEnd, k.length = n, b.addEventToStore(k) } } } }, b.addEventToStore = function(a) { if (f.isEventSubmissionEnabled()) { if (!f.isInitialized()) return void g.w("Could not add event: SDK is not initialized"); try { if (c.isStoreTooLargeForEvents() && !h.stringMatch(a.category, /^(user|session_end|business)$/)) return void g.w("Database too large. Event has been blocked."); var i = f.getEventAnnotations(), j = h.encode64(JSON.stringify(i)); for (var k in a) i[k] = a[k]; var l = JSON.stringify(i); g.ii("Event added to queue: " + l); var m = {}; m.status = "new", m.category = i.category, m.session_id = i.session_id, m.client_ts = i.client_ts, m.event = h.encode64(JSON.stringify(i)), c.insert(d.Events, m), a.category == b.CategorySessionEnd ? c.delete(d.Sessions, [ ["session_id", e.Equal, i.session_id] ]) : (m = {}, m.session_id = i.session_id, m.timestamp = f.getSessionStart(), m.event = j, c.insert(d.Sessions, m, !0, "session_id")), c.isStorageAvailable() && c.save() } catch (k) { g.e("addEventToStore: error"), g.e(k.stack) } } }, b.updateSessionStore = function() { if (f.sessionIsStarted()) { var a = {}; a.session_id = f.instance.sessionId, a.timestamp = f.getSessionStart(), a.event = h.encode64(JSON.stringify(f.getEventAnnotations())), c.insert(d.Sessions, a, !0, "session_id"), c.isStorageAvailable() && c.save() } }, b.addDimensionsToEvent = function(a) { a && (f.getCurrentCustomDimension01() && (a.custom_01 = f.getCurrentCustomDimension01()), f.getCurrentCustomDimension02() && (a.custom_02 = f.getCurrentCustomDimension02()), f.getCurrentCustomDimension03() && (a.custom_03 = f.getCurrentCustomDimension03())) }, b.addFieldsToEvent = function(a, b) { a && b && Object.keys(b).length > 0 && (a.custom_fields = b) }, b.resourceFlowTypeToString = function(b) { return b == a.EGAResourceFlowType.Source || b == a.EGAResourceFlowType[a.EGAResourceFlowType.Source] ? "Source" : b == a.EGAResourceFlowType.Sink || b == a.EGAResourceFlowType[a.EGAResourceFlowType.Sink] ? "Sink" : "" }, b.progressionStatusToString = function(b) { return b == a.EGAProgressionStatus.Start || b == a.EGAProgressionStatus[a.EGAProgressionStatus.Start] ? "Start" : b == a.EGAProgressionStatus.Complete || b == a.EGAProgressionStatus[a.EGAProgressionStatus.Complete] ? "Complete" : b == a.EGAProgressionStatus.Fail || b == a.EGAProgressionStatus[a.EGAProgressionStatus.Fail] ? "Fail" : "" }, b.errorSeverityToString = function(b) { return b == a.EGAErrorSeverity.Debug || b == a.EGAErrorSeverity[a.EGAErrorSeverity.Debug] ? "debug" : b == a.EGAErrorSeverity.Info || b == a.EGAErrorSeverity[a.EGAErrorSeverity.Info] ? "info" : b == a.EGAErrorSeverity.Warning || b == a.EGAErrorSeverity[a.EGAErrorSeverity.Warning] ? "warning" : b == a.EGAErrorSeverity.Error || b == a.EGAErrorSeverity[a.EGAErrorSeverity.Error] ? "error" : b == a.EGAErrorSeverity.Critical || b == a.EGAErrorSeverity[a.EGAErrorSeverity.Critical] ? "critical" : "" }, b.instance = new b, b.CategorySessionStart = "user", b.CategorySessionEnd = "session_end", b.CategoryDesign = "design", b.CategoryBusiness = "business", b.CategoryProgression = "progression", b.CategoryResource = "resource", b.CategoryError = "error", b.MaxEventCount = 500, b }(); b.GAEvents = m }(a.events || (a.events = {})) }(c || (c = {})); var c; ! function(a) {! function(b) { var c = a.logging.GALogger, d = a.state.GAState, e = a.events.GAEvents, f = function() { function a() { this.blocks = new b.PriorityQueue({ compare: function(a, b) { return a - b } }), this.id2TimedBlockMap = {}, a.startThread() } return a.createTimedBlock = function(a) { void 0 === a && (a = 0); var c = new Date; return c.setSeconds(c.getSeconds() + a), new b.TimedBlock(c) }, a.performTaskOnGAThread = function(c, d) { void 0 === d && (d = 0); var e = new Date; e.setSeconds(e.getSeconds() + d); var f = new b.TimedBlock(e); f.block = c, a.instance.id2TimedBlockMap[f.id] = f, a.instance.addTimedBlock(f) }, a.performTimedBlockOnGAThread = function(b) { a.instance.id2TimedBlockMap[b.id] = b, a.instance.addTimedBlock(b) }, a.scheduleTimer = function(c, d) { var e = new Date; e.setSeconds(e.getSeconds() + c); var f = new b.TimedBlock(e); return f.block = d, a.instance.id2TimedBlockMap[f.id] = f, a.instance.addTimedBlock(f), f.id }, a.getTimedBlockById = function(b) { return b in a.instance.id2TimedBlockMap ? a.instance.id2TimedBlockMap[b] : null }, a.ensureEventQueueIsRunning = function() { a.instance.keepRunning = !0, a.instance.isRunning || (a.instance.isRunning = !0, a.scheduleTimer(a.ProcessEventsIntervalInSeconds, a.processEventQueue)) }, a.endSessionAndStopQueue = function() { d.isInitialized() && (c.i("Ending session."), a.stopEventQueue(), d.isEnabled() && d.sessionIsStarted() && (e.addSessionEndEvent(), d.instance.sessionStart = 0)) }, a.stopEventQueue = function() { a.instance.keepRunning = !1 }, a.ignoreTimer = function(b) { b in a.instance.id2TimedBlockMap && (a.instance.id2TimedBlockMap[b].ignore = !0) }, a.setEventProcessInterval = function(b) { b > 0 && (a.ProcessEventsIntervalInSeconds = b) }, a.prototype.addTimedBlock = function(a) { this.blocks.enqueue(a.deadline.getTime(), a) }, a.run = function() { clearTimeout(a.runTimeoutId); try { for (var b; b = a.getNextBlock();) if (!b.ignore) if (b.async) { if (!b.running) { b.running = !0, b.block(); break } } else b.block(); return void(a.runTimeoutId = setTimeout(a.run, a.ThreadWaitTimeInMs)) } catch (a) { c.e("Error on GA thread"), c.e(a.stack) } }, a.startThread = function() { a.runTimeoutId = setTimeout(a.run, 0) }, a.getNextBlock = function() { var b = new Date; return a.instance.blocks.hasItems() && a.instance.blocks.peek().deadline.getTime() <= b.getTime() ? a.instance.blocks.peek().async && a.instance.blocks.peek().running ? a.instance.blocks.peek() : a.instance.blocks.dequeue() : null }, a.processEventQueue = function() { e.processEvents("", !0), a.instance.keepRunning ? a.scheduleTimer(a.ProcessEventsIntervalInSeconds, a.processEventQueue) : a.instance.isRunning = !1 }, a.instance = new a, a.ThreadWaitTimeInMs = 1e3, a.ProcessEventsIntervalInSeconds = 8, a }(); b.GAThreading = f }(a.threading || (a.threading = {})) }(c || (c = {})); var c; ! function(a) { var b = a.threading.GAThreading, c = a.logging.GALogger, d = a.store.GAStore, e = a.state.GAState, f = a.http.GAHTTPApi, g = a.device.GADevice, h = a.validators.GAValidator, i = a.http.EGAHTTPApiResponse, j = a.utilities.GAUtilities, k = a.events.GAEvents, l = function() { function l() {} return l.init = function() { if (g.touch(), l.methodMap.configureAvailableCustomDimensions01 = l.configureAvailableCustomDimensions01, l.methodMap.configureAvailableCustomDimensions02 = l.configureAvailableCustomDimensions02, l.methodMap.configureAvailableCustomDimensions03 = l.configureAvailableCustomDimensions03, l.methodMap.configureAvailableResourceCurrencies = l.configureAvailableResourceCurrencies, l.methodMap.configureAvailableResourceItemTypes = l.configureAvailableResourceItemTypes, l.methodMap.configureBuild = l.configureBuild, l.methodMap.configureSdkGameEngineVersion = l.configureSdkGameEngineVersion, l.methodMap.configureGameEngineVersion = l.configureGameEngineVersion, l.methodMap.configureUserId = l.configureUserId, l.methodMap.initialize = l.initialize, l.methodMap.addBusinessEvent = l.addBusinessEvent, l.methodMap.addResourceEvent = l.addResourceEvent, l.methodMap.addProgressionEvent = l.addProgressionEvent, l.methodMap.addDesignEvent = l.addDesignEvent, l.methodMap.addErrorEvent = l.addErrorEvent, l.methodMap.addErrorEvent = l.addErrorEvent, l.methodMap.setEnabledInfoLog = l.setEnabledInfoLog, l.methodMap.setEnabledVerboseLog = l.setEnabledVerboseLog, l.methodMap.setEnabledManualSessionHandling = l.setEnabledManualSessionHandling, l.methodMap.setEnabledEventSubmission = l.setEnabledEventSubmission, l.methodMap.setCustomDimension01 = l.setCustomDimension01, l.methodMap.setCustomDimension02 = l.setCustomDimension02, l.methodMap.setCustomDimension03 = l.setCustomDimension03, l.methodMap.setFacebookId = l.setFacebookId, l.methodMap.setGender = l.setGender, l.methodMap.setBirthYear = l.setBirthYear, l.methodMap.setEventProcessInterval = l.setEventProcessInterval, l.methodMap.startSession = l.startSession, l.methodMap.endSession = l.endSession, l.methodMap.onStop = l.onStop, l.methodMap.onResume = l.onResume, l.methodMap.addCommandCenterListener = l.addCommandCenterListener, l.methodMap.removeCommandCenterListener = l.removeCommandCenterListener, l.methodMap.getCommandCenterValueAsString = l.getCommandCenterValueAsString, l.methodMap.isCommandCenterReady = l.isCommandCenterReady, l.methodMap.getConfigurationsContentAsString = l.getConfigurationsContentAsString, "undefined" != typeof window && void 0 !== window.GameAnalytics && void 0 !== window.GameAnalytics.q) { var a = window.GameAnalytics.q; for (var b in a) l.gaCommand.apply(null, a[b]) } }, l.gaCommand = function() { for (var b = [], c = 0; c < arguments.length; c++) b[c] = arguments[c]; b.length > 0 && b[0] in a.GameAnalytics.methodMap && (b.length > 1 ? a.GameAnalytics.methodMap[b[0]].apply(null, Array.prototype.slice.call(b, 1)) : a.GameAnalytics.methodMap[b[0]]()) }, l.configureAvailableCustomDimensions01 = function(a) { void 0 === a && (a = []), b.performTaskOnGAThread(function() { if (l.isSdkReady(!0, !1)) return void c.w("Available custom dimensions must be set before SDK is initialized"); e.setAvailableCustomDimensions01(a) }) }, l.configureAvailableCustomDimensions02 = function(a) { void 0 === a && (a = []), b.performTaskOnGAThread(function() { if (l.isSdkReady(!0, !1)) return void c.w("Available custom dimensions must be set before SDK is initialized"); e.setAvailableCustomDimensions02(a) }) }, l.configureAvailableCustomDimensions03 = function(a) { void 0 === a && (a = []), b.performTaskOnGAThread(function() { if (l.isSdkReady(!0, !1)) return void c.w("Available custom dimensions must be set before SDK is initialized"); e.setAvailableCustomDimensions03(a) }) }, l.configureAvailableResourceCurrencies = function(a) { void 0 === a && (a = []), b.performTaskOnGAThread(function() { if (l.isSdkReady(!0, !1)) return void c.w("Available resource currencies must be set before SDK is initialized"); e.setAvailableResourceCurrencies(a) }) }, l.configureAvailableResourceItemTypes = function(a) { void 0 === a && (a = []), b.performTaskOnGAThread(function() { if (l.isSdkReady(!0, !1)) return void c.w("Available resource item types must be set before SDK is initialized"); e.setAvailableResourceItemTypes(a) }) }, l.configureBuild = function(a) { void 0 === a && (a = ""), b.performTaskOnGAThread(function() { return l.isSdkReady(!0, !1) ? void c.w("Build version must be set before SDK is initialized.") : h.validateBuild(a) ? void e.setBuild(a) : void c.i("Validation fail - configure build: Cannot be null, empty or above 32 length. String: " + a) }) }, l.configureSdkGameEngineVersion = function(a) { void 0 === a && (a = ""), b.performTaskOnGAThread(function() { if (!l.isSdkReady(!0, !1)) return h.validateSdkWrapperVersion(a) ? void(g.sdkGameEngineVersion = a) : void c.i("Validation fail - configure sdk version: Sdk version not supported. String: " + a) }) }, l.configureGameEngineVersion = function(a) { void 0 === a && (a = ""), b.performTaskOnGAThread(function() { if (!l.isSdkReady(!0, !1)) return h.validateEngineVersion(a) ? void(g.gameEngineVersion = a) : void c.i("Validation fail - configure game engine version: Game engine version not supported. String: " + a) }) }, l.configureUserId = function(a) { void 0 === a && (a = ""), b.performTaskOnGAThread(function() { return l.isSdkReady(!0, !1) ? void c.w("A custom user id must be set before SDK is initialized.") : h.validateUserId(a) ? void e.setUserId(a) : void c.i("Validation fail - configure user_id: Cannot be null, empty or above 64 length. Will use default user_id method. Used string: " + a) }) }, l.initialize = function(a, d) { void 0 === a && (a = ""), void 0 === d && (d = ""), g.updateConnectionType(); var f = b.createTimedBlock(); f.async = !0, l.initTimedBlockId = f.id, f.block = function() { return l.isSdkReady(!0, !1) ? void c.w("SDK already initialized. Can only be called once.") : h.validateKeys(a, d) ? (e.setKeys(a, d), void l.internalInitialize()) : void c.w("SDK failed initialize. Game key or secret key is invalid. Can only contain characters A-z 0-9, gameKey is 32 length, gameSecret is 40 length. Failed keys - gameKey: " + a + ", secretKey: " + d) }, b.performTimedBlockOnGAThread(f) }, l.addBusinessEvent = function(a, c, d, e, f) { void 0 === a && (a = ""), void 0 === c && (c = 0), void 0 === d && (d = ""), void 0 === e && (e = ""), void 0 === f && (f = ""), g.updateConnectionType(), b.performTaskOnGAThread(function() { l.isSdkReady(!0, !0, "Could not add business event") && k.addBusinessEvent(a, c, d, e, f, {}) }) }, l.addResourceEvent = function(c, d, e, f, h) { void 0 === c && (c = a.EGAResourceFlowType.Undefined), void 0 === d && (d = ""), void 0 === e && (e = 0), void 0 === f && (f = ""), void 0 === h && (h = ""), g.updateConnectionType(), b.performTaskOnGAThread(function() { l.isSdkReady(!0, !0, "Could not add resource event") && k.addResourceEvent(c, d, e, f, h, {}) }) }, l.addProgressionEvent = function(c, d, e, f, h) { void 0 === c && (c = a.EGAProgressionStatus.Undefined), void 0 === d && (d = ""), void 0 === e && (e = ""), void 0 === f && (f = ""), g.updateConnectionType(), b.performTaskOnGAThread(function() { if (l.isSdkReady(!0, !0, "Could not add progression event")) { var a = "number" == typeof h; k.addProgressionEvent(c, d, e, f, a ? h : 0, a, {}) } }) }, l.addDesignEvent = function(a, c) { g.updateConnectionType(), b.performTaskOnGAThread(function() { if (l.isSdkReady(!0, !0, "Could not add design event")) { var b = "number" == typeof c; k.addDesignEvent(a, b ? c : 0, b, {}) } }) }, l.addErrorEvent = function(c, d) { void 0 === c && (c = a.EGAErrorSeverity.Undefined), void 0 === d && (d = ""), g.updateConnectionType(), b.performTaskOnGAThread(function() { l.isSdkReady(!0, !0, "Could not add error event") && k.addErrorEvent(c, d, {}) }) }, l.setEnabledInfoLog = function(a) { void 0 === a && (a = !1), b.performTaskOnGAThread(function() { a ? (c.setInfoLog(a), c.i("Info logging enabled")) : (c.i("Info logging disabled"), c.setInfoLog(a)) }) }, l.setEnabledVerboseLog = function(a) { void 0 === a && (a = !1), b.performTaskOnGAThread(function() { a ? (c.setVerboseLog(a), c.i("Verbose logging enabled")) : (c.i("Verbose logging disabled"), c.setVerboseLog(a)) }) }, l.setEnabledManualSessionHandling = function(a) { void 0 === a && (a = !1), b.performTaskOnGAThread(function() { e.setManualSessionHandling(a) }) }, l.setEnabledEventSubmission = function(a) { void 0 === a && (a = !1), b.performTaskOnGAThread(function() { a ? (e.setEnabledEventSubmission(a), c.i("Event submission enabled")) : (c.i("Event submission disabled"), e.setEnabledEventSubmission(a)) }) }, l.setCustomDimension01 = function(a) { void 0 === a && (a = ""), b.performTaskOnGAThread(function() { if (!h.validateDimension01(a, e.getAvailableCustomDimensions01())) return void c.w("Could not set custom01 dimension value to '" + a + "'. Value not found in available custom01 dimension values"); e.setCustomDimension01(a) }) }, l.setCustomDimension02 = function(a) { void 0 === a && (a = ""), b.performTaskOnGAThread(function() { if (!h.validateDimension02(a, e.getAvailableCustomDimensions02())) return void c.w("Could not set custom02 dimension value to '" + a + "'. Value not found in available custom02 dimension values"); e.setCustomDimension02(a) }) }, l.setCustomDimension03 = function(a) { void 0 === a && (a = ""), b.performTaskOnGAThread(function() { if (!h.validateDimension03(a, e.getAvailableCustomDimensions03())) return void c.w("Could not set custom03 dimension value to '" + a + "'. Value not found in available custom03 dimension values"); e.setCustomDimension03(a) }) }, l.setFacebookId = function(a) { void 0 === a && (a = ""), b.performTaskOnGAThread(function() { h.validateFacebookId(a) && e.setFacebookId(a) }) }, l.setGender = function(c) { void 0 === c && (c = a.EGAGender.Undefined), b.performTaskOnGAThread(function() { h.validateGender(c) && e.setGender(c) }) }, l.setBirthYear = function(a) { void 0 === a && (a = 0), b.performTaskOnGAThread(function() { h.validateBirthyear(a) && e.setBirthYear(a) }) }, l.setEventProcessInterval = function(a) { b.performTaskOnGAThread(function() { b.setEventProcessInterval(a) }) }, l.startSession = function() { if (e.isInitialized()) { var a = b.createTimedBlock(); a.async = !0, l.initTimedBlockId = a.id, a.block = function() { e.isEnabled() && e.sessionIsStarted() && b.endSessionAndStopQueue(), l.resumeSessionAndStartQueue() }, b.performTimedBlockOnGAThread(a) } }, l.endSession = function() { l.onStop() }, l.onStop = function() { b.performTaskOnGAThread(function() { try { b.endSessionAndStopQueue() } catch (a) {} }) }, l.onResume = function() { var a = b.createTimedBlock(); a.async = !0, l.initTimedBlockId = a.id, a.block = function() { l.resumeSessionAndStartQueue() }, b.performTimedBlockOnGAThread(a) }, l.getCommandCenterValueAsString = function(a, b) { return void 0 === b && (b = null), e.getConfigurationStringValue(a, b) }, l.isCommandCenterReady = function() { return e.isCommandCenterReady() }, l.addCommandCenterListener = function(a) { e.addCommandCenterListener(a) }, l.removeCommandCenterListener = function(a) { e.removeCommandCenterListener(a) }, l.getConfigurationsContentAsString = function() { return e.getConfigurationsContentAsString() }, l.internalInitialize = function() { e.ensurePersistedStates(), d.setItem(e.DefaultUserIdKey, e.getDefaultId()), e.setInitialized(!0), l.newSession(), e.isEnabled() && b.ensureEventQueueIsRunning() }, l.newSession = function() { c.i("Starting a new session."), e.validateAndFixCurrentDimensions(), f.instance.requestInit(l.startNewSessionCallback) }, l.startNewSessionCallback = function(a, f) { if (a === i.Ok && f) { var g = 0; if (f.server_ts) { var h = f.server_ts; g = e.calculateServerTimeOffset(h) } f.time_offset = g, d.setItem(e.SdkConfigCachedKey, j.encode64(JSON.stringify(f))), e.instance.sdkConfigCached = f, e.instance.sdkConfig = f, e.instance.initAuthorized = !0 } else a == i.Unauthorized ? (c.w("Initialize SDK failed - Unauthorized"), e.instance.initAuthorized = !1) : (a === i.NoResponse || a === i.RequestTimeout ? c.i("Init call (session start) failed - no response. Could be offline or timeout.") : a === i.BadResponse || a === i.JsonEncodeFailed || a === i.JsonDecodeFailed ? c.i("Init call (session start) failed - bad response. Could be bad response from proxy or GA servers.") : a !== i.BadRequest && a !== i.UnknownResponseCode || c.i("Init call (session start) failed - bad request or unknown response."), null == e.instance.sdkConfig ? null != e.instance.sdkConfigCached ? (c.i("Init call (session start) failed - using cached init values."), e.instance.sdkConfig = e.instance.sdkConfigCached) : (c.i("Init call (session start) failed - using default init values."), e.instance.sdkConfig = e.instance.sdkConfigDefault) : c.i("Init call (session start) failed - using cached init values."), e.instance.initAuthorized = !0); if (e.instance.clientServerTimeOffset = e.getSdkConfig().time_offset ? e.getSdkConfig().time_offset : 0, e.populateConfigurations(e.getSdkConfig()), !e.isEnabled()) return c.w("Could not start session: SDK is disabled."), void b.stopEventQueue(); b.ensureEventQueueIsRunning(); var m = j.createGuid(); e.instance.sessionId = m, e.instance.sessionStart = e.getClientTsAdjusted(), k.addSessionStartEvent(); var n = b.getTimedBlockById(l.initTimedBlockId); null != n && (n.running = !1), l.initTimedBlockId = -1 }, l.resumeSessionAndStartQueue = function() { e.isInitialized() && (c.i("Resuming session."), e.sessionIsStarted() || l.newSession()) }, l.isSdkReady = function(a, b, d) { return void 0 === b && (b = !0), void 0 === d && (d = ""), d && (d += ": "), a && !e.isInitialized() ? (b && c.w(d + "SDK is not initialized"), !1) : a && !e.isEnabled() ? (b && c.w(d + "SDK is disabled"), !1) : !(a && !e.sessionIsStarted() && (b && c.w(d + "Session has not started yet"), 1)) }, l.initTimedBlockId = -1, l.methodMap = {}, l }(); a.GameAnalytics = l }(c || (c = {})), c.GameAnalytics.init(); var d = c.GameAnalytics.gaCommand; a.gameanalytics = c, a.GameAnalytics = d }(this), define("gameanalytics", function() {}), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("States/Boot", ["require", "Phaser", "States/Menu/SingleMenu", "States/Menu/MultiMenu", "ProgressModel", "States/Complete/Complete", "promise-polyfill", "h5branding", "gameanalytics"], function(c) { var d, e, f, g, h; return e = c("Phaser"), g = c("States/Menu/SingleMenu"), d = c("States/Menu/MultiMenu"), f = c("ProgressModel"), c("States/Complete/Complete"), c("promise-polyfill"), h = c("h5branding"), c("gameanalytics"), function(c) { function e() { this.initialize = a(this.initialize, this), this.loadSettings = a(this.loadSettings, this), this.setStorageAdapter = a(this.setStorageAdapter, this), this.gameName = "Fireboy Watergirl Forest Temple", this.GAME_ANALYTICS_GAME_KEY = "gameanalyticsgamekey", this.GAME_ANALYTICS_SECRET_KEY = "gameanalyticssecretkey", this.GOOGLE_ANALYTICS_KEY = "googleanalyticskey", this.GAME_DISTRIBUTION_ID = "gamedistributionid" } return b(e, c), e.prototype.preload = function() { return console.log("Preloading Boot State"), this.game.load.json("gameConfig", "game.json"), this.game.load.atlasJSONArray("PreloaderAssets", "assets/atlasses/PreloaderAssets.png", "assets/atlasses/PreloaderAssets.json"), this.game.load.image("KiziLogo", "assets/images/branding/branding_logo_kizi.png") }, e.prototype.create = function() { return this.game.add.plugin(PhaserSuperStorage.StoragePlugin), this.game.add.plugin(PhaserCachebuster.CacheBuster), this.game.load.cacheBuster = version, window.gameanalytics.GameAnalytics.configureBuild(version), window.gameanalytics.GameAnalytics.initialize(this.GAME_ANALYTICS_GAME_KEY, this.GAME_ANALYTICS_SECRET_KEY), window.gameanalytics.GameAnalytics.startSession(), h.google.setup(this.GOOGLE_ANALYTICS_KEY, this.gameName, version), h.SplashLoader.getInstance({ gameId: this.GAME_DISTRIBUTION_ID, gameName: this.gameName, gameTitle: this.gameName, libs: [], version: version }).create().catch(function(a) { return console.log(a) }).then(function() { return console.log("Splash Loaded") }), h.google.sendScreenView("splash"), this.game.AdManager.start(this.game), this.game.SideBanners.start(this.game), this.game.gameConfig = this.game.cache.getJSON("gameConfig"), this.setStorageAdapter().then(function(a) { return function() { return a.loadSettings().then(function() { return a.initialize().then(function() { return a.game.state.start("load") }) }) } }(this)) }, e.prototype.setStorageAdapter = function() { var a; return a = function() { try { return window.self !== window.top } catch (a) { return a, !0 } }, new Promise(function(b) { return function(c) { var d; return a() ? (d = new PhaserSuperStorage.StorageAdapters.IframeStorage("", document.referrer), d.init().then(function() { return b.game.storage.setAdapter(d), c() }).catch(function(a) { return b.game.storage.forcePromises = !0, c() })) : (b.game.storage.forcePromises = !0, c()) } }(this)) }, e.prototype.loadSettings = function() { return this.game.loadSettings() }, e.prototype.initialize = function() { var a, b; return this.game.camera.reset = function() { return this.target = null, this._shake.duration = 0, this.resetFX() }, "multi" === this.game.gameConfig.type ? this.game.state.add("menu", d) : this.game.state.add("menu", g), this.game.sound.volume = .1, this.game.sound.mute = !this.game.settings.fx, this.game.stage.disableVisibilityChange = !0, this.game.onBlur.add(function(a) { return function() { return a.game.sound.mute = !0 } }(this)), this.game.onPause.add(function(a) { return function() { return a.game.sound.mute = !0 } }(this)), this.game.onFocus.add(function(a) { return function() { return a.game.sound.mute = !a.game.settings.fx } }(this)), this.game.onResume.add(function(a) { return function() { return a.game.sound.mute = !a.game.settings.fx } }(this)), this.game.camera.bounds = null, b = 800, a = 600, (this.game.width < b || this.game.height < a) && this.game.camera.scale.set(Math.min(this.game.width / b, this.game.height / a)), this.game.camera.x = -this.game.width / 2, this.game.camera.y = -this.game.height / 2, this.game.realWidth = this.game.width / this.game.camera.scale.x, this.game.realHeight = this.game.height / this.game.camera.scale.y, this.game.make.resSprite = function(a, b, c, d) { return this.game.make.sprite(a, b, c, d) }, this.game.gameConfig.temples = this.game.gameConfig.temples, "cordova" === this.game.gameConfig.target ? reutnr(new Promise(function(a) { return function(b) { return document.addEventListener("deviceready", function() { return a.doStart().then(function() { return b() }) }, !1) } }(this))) : this.doStart() }, e.prototype.doStart = function() { return this.game.progress = new f(this.game), new Promise(function(a) { return function(b) { return a.game.progress.on("sync", b), a.game.progress.fetch() } }(this)) }, e }(e.State) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Common/LoaderBar", ["./Button", "Phaser"], function(b) { "use strict"; return function(b) { function c(a, b, d) { var e, f, g, h, i, j, k, l; c.__super__.constructor.call(this, a, b, d), i = 200, g = 20, f = this.game.make.sprite(0, 0, "PreloaderAssets", "LoaderBar0000"), f.x = -i / 2, f.y = -g / 2, this.addChild(f), j = new Phaser.Rectangle(0, 0, 0, g), f.crop(j), h = new Phaser.Sprite(this.game, 0, 0, "PreloaderAssets", "LoaderHolder0000"), h.anchor.set(.5), this.addChild(h), k = new Phaser.Sprite(this.game, 0, -80, "PreloaderAssets", "LoaderTitle0000"), k.anchor.set(.47), this.addChild(k), l = function(a) { return function(a) { var b; return null != window.parent && (b = { bytesLoaded: a, bytesTotal: 100 }, window.parent.postMessage(b, "*")), j.width = a / 100 * i, f.crop(j) } }(), e = function(a) { return function() { return a.game.load.onFileComplete.remove(l), a.game.load.onLoadComplete.remove(e), a.destroy() } }(this), this.game.load.onFileComplete.add(l), this.game.load.onLoadComplete.add(e) } return a(c, b), c }(Phaser.Group) }) }.call(this), function() { var a = function(a, c) { function d() { this.constructor = a } for (var e in c) b.call(c, e) && (a[e] = c[e]); return d.prototype = c.prototype, a.prototype = new d, a.__super__ = c.prototype, a }, b = {}.hasOwnProperty; define("States/Load", ["require", "Phaser", "ProgressModel", "States/Common/LoaderBar", "h5branding"], function(b) { var c, d; return c = b("Phaser"), b("ProgressModel"), b("States/Common/LoaderBar"), d = b("h5branding"), function(b) { function e() { return e.__super__.constructor.apply(this, arguments) } return a(e, b), e.prototype.preload = function() { return console.log("Loading"), this.game.load.onFileComplete.add(this.onFileComplete), this.game.load.onLoadComplete.add(this.onLoadComplete), d.SplashLoader.getInstance().setButtonCallback(function(a) { return function() { return d.SplashLoader.getInstance().destroy(), a.game.AdManager.showAd(function() { return a.game.state.start("menu"), a.game.load.onFileComplete.remove(a.onFileComplete), a.game.load.onLoadComplete.remove(a.onLoadComplete) }, "splash") } }(this)), this.loadAssets() }, e.prototype.onFileComplete = function(a) { return d.SplashLoader.getInstance().setLoadProgress(a) }, e.prototype.onLoadComplete = function() { return d.SplashLoader.getInstance().setLoadProgress(100) }, e.prototype.loadAssets = function() { var a, b, d, e, f, g, h, i, j, k, l, m, n, o, p; if (this.game.load.atlasJSONArray("MenuAssets", "assets/atlasses/MenuAssets.png", "assets/atlasses/MenuAssets.json"), this.game.load.atlasJSONArray("PopupAssets", "assets/atlasses/PopupAssets.png", "assets/atlasses/PopupAssets.json"), this.game.load.bitmapFont("font_en", "assets/fonts/font.png", "assets/fonts/font.fnt"), this.game.load.bitmapFont("font_ru", "assets/fonts/fbwg_font_cyrillic.png", "assets/fonts/fbwg_font_cyrillic.fnt"), this.game.load.atlasJSONArray("MenuBackgrounds", "assets/atlasses/MenuBackgrounds.png", "assets/atlasses/MenuBackgrounds.json"), o = _.isArray(this.game.gameConfig.assets) ? this.game.gameConfig.assets : [this.game.gameConfig.assets], "multi" === this.game.gameConfig.type) { for (this.game.load.atlasJSONArray("TempleIcons", "assets/atlasses/TempleIcons.png", "assets/atlasses/TempleIcons.json"), e = 0, h = o.length; e < h; e++) a = o[e], k = a.charAt(0).toUpperCase() + a.slice(1), this.game.load.image("TempleHall" + k, "assets/images/TempleHall" + k + ".jpg"); this.game.load.image("GameName", "assets/images/GameNameElements.png") } else a = o[0], k = a.charAt(0).toUpperCase() + a.slice(1), this.game.load.image("TempleHall", "assets/images/TempleHall" + k + ".jpg"), this.game.load.image("GameName", "assets/images/GameName" + k + ".png"); for (this.game.load.atlasJSONArray("CharAssets", "assets/atlasses/CharAssets.png", "assets/atlasses/CharAssets.json"), this.game.load.image("HallBeam", "assets/images/Beam.png"), this.game.load.image("ios-store", "assets/images/stores/ios.png"), this.game.load.image("android-store", "assets/images/stores/android.png"), this.game.load.image("microsoft-store", "assets/images/stores/microsoft.png"), this.game.load.image("steam-store", "assets/images/stores/steam.png"), this.game.load.image("skirby-upsell", "assets/images/TOASTER-MINI-new.png"), this.game.load.atlasJSONArray("PopupAssets", "assets/atlasses/PopupAssets.png", "assets/atlasses/PopupAssets.json"), this.game.load.json("Ground", "assets/tilemaps/tilesets/Ground.json", null, c.Tilemap.TILED_JSON), this.game.load.json("Objects", "assets/tilemaps/tilesets/Objects.json", null, c.Tilemap.TILED_JSON), this.game.load.json("LargeObjects", "assets/tilemaps/tilesets/LargeObjects.json", null, c.Tilemap.TILED_JSON), this.game.load.json("Chars", "assets/tilemaps/tilesets/Chars.json", null, c.Tilemap.TILED_JSON), f = 0, i = o.length; f < i; f++) d = o[f], p = "assets/atlasses/Temples/" + d, this.game.load.atlasJSONArray("TempleAssets", p + "/TempleAssets.png", p + "/TempleAssets.json"); for (this.game.load.atlasJSONArray("GroundAssets", "assets/atlasses/GroundAssets.png", "assets/atlasses/GroundAssets.json"), this.game.load.atlasJSONArray("CharAssets", "assets/atlasses/CharAssets.png", "assets/atlasses/CharAssets.json"), this.game.load.atlasJSONArray("MechAssets", "assets/atlasses/MechAssets.png", "assets/atlasses/MechAssets.json"), n = ["menuMusic", "levelMusic_speed", "levelMusic_dark", "levelMusicFinish_speed", "levelMusic", "levelMusicOver", "levelMusicFinish", "charToggle1", "charToggle2", "endPass", "endFail", "endDiamond", "jump_fb", "jump_wg", "waterSteps", "iceSteps_fb", "iceSteps_wg", "death", "diamond", "door", "freeze", "melt", "lever", "pusher", "platform", "wind", "portalOpen", "portalLoop", "portalClose", "portalTransport", "clock", "slider", "lightPusher"], l = [], g = 0, j = n.length; g < j; g++) m = n[g], b = m.charAt(0).toUpperCase() + m.slice(1), l.push(this.game.load.audio(m, "assets/audio/" + b + ".mp3")); return l }, e.prototype.create = function() { return window.h5branding = d }, e }(c.State) }) }.call(this), function() { define("utils/lang/en", ["require"], function(a) { return { Play: "Play", "More Games": "More Games", Walkthrough: "Walkthrough", Ok: "Ok", Continue: "Continue", credits_to: "All credit goes to", Back: "Back", "Level Numbers": "Level Numbers", Paused: "Paused", End: "End", Retry: "Retry", Resume: "Resume", Menu: "Menu", "Game Over": "Game Over", congratulations: "Congratulations!", you_completed: "You completed the game", you_almost_completed_1: "Now try to get", you_almost_completed_2: "all the green gems!", Cancel: "Cancel", this: "This", menu: "menu", level: "level", temple: "temple", not_yet: "is not available yet", complete_more: "Complete more levels", in_other_temples: "in other temples to unlock", to_unlock: "to unlock", "Ok!": "Ok!", loading: "Loading", "Forest Temple": "Forest Temple", "Water Temple": "Water Temple", "Fire Temple": "Fire Temple", "Light Temple": "Light Temple", "Ice Temple": "Ice Temple", "Crystal Temple": "Crystal Temple", "Wind Temple": "Wind Temple", new: "New!", "Next Level": "Next Level", skip_tut: "Skip Tutorial", unlock_all: "Unlock all levels!", level_numbers: "Level Numbers", play_more_levels: "Play more levels", get_more_levels: "Get more levels", tutorial_forest1: "Tap the right buttons ", tutorial_forest2: "to move WaterGirl", tutorial_forest3: "Never mix Fire & Water!", tutorial_forest4: "Buttons however", tutorial_forest5: "must be held", tutorial_forest6: "Don't forget to ", tutorial_forest7: "grab some", tutorial_forest8: "diamonds!", tutorial_forest9: "to move FireBoy", tutorial_forest10: "Use the left buttons ", tutorial_forest11: "Open the finish doors", tutorial_forest12: "by standing in front of them.", tutorial_forest13: "They can push ", tutorial_forest14: "boxes around", tutorial_forest15: "Levers remain as", tutorial_forest16: "you leave them", tutorial_forest17: "Green goo", tutorial_forest18: "hurts them both", tutorial_forest19: "Use the buttons ", tutorial_forest20: "to move WaterGirl", tutorial_forest21: "Tap the arrow to", tutorial_forest22: "control FireBoy", tutorial_forest23: "Never mix Fire & Water!", tutorial_forest24: "Green goo", tutorial_forest25: "hurts them both", tutorial_forest26: "Levers remain as", tutorial_forest27: "you leave them", tutorial_forest28: "Buttons however", tutorial_forest29: "must be held", tutorial_forest30: "They can push ", tutorial_forest33: "boxes around", tutorial_forest31: "Don't forget to ", tutorial_forest32: "grab some", tutorial_forest34: "diamonds!", tutorial_forest35: "You can tap FireBoy or WaterGirl", tutorial_forest36: "to change control", tutorial_forest37: "Use A,W,D ", tutorial_forest38: "to move WaterGirl", tutorial_forest39: "Use the arrow keys", tutorial_forest40: "to move FireBoy", tutorial_forest41: "Never mix Fire & Water!", tutorial_forest42: "Green goo", tutorial_forest43: "hurts them both", tutorial_forest44: "Levers remain as", tutorial_forest45: "you leave them", tutorial_forest46: "Buttons however", tutorial_forest47: "must be held", tutorial_forest48: "They can push ", tutorial_forest49: "Don't forget to ", tutorial_forest50: "grab some", tutorial_forest51: "Open the finish doors", tutorial_forest52: "by standing in front of them.", tutorial_forest53: "boxes around", tutorial_forest54: "diamonds!", tutorial_fire1: "In the Fire Temple", tutorial_fire2: "FireBoy can go everywhere", tutorial_fire3: "WaterGirl will need ", tutorial_fire4: "more help", tutorial_fire5: "Use objects ", tutorial_fire6: "to avoid the lava", tutorial_fire7: "Work as a team", tutorial_fire8: "and get to the end!", tutorial_light1: "Get the light to the detectors to", tutorial_light2: "activate platforms...", tutorial_light3: "... Move boxes with", tutorial_light4: "mirrors to direct", tutorial_light5: "the light...", tutorial_light6: "... Some mirrors", tutorial_light7: "can rotate 90º...", tutorial_light8: "... Some mirrors are a bit more", tutorial_light9: "accurate.", tutorial_light10: "Good Luck!", tutorial_light_elements1: "In the Light Temple ", tutorial_light_elements2: "light activates things!", tutorial_light_elements3: "mirrors", tutorial_light_elements4: "can help", tutorial_light_elements5: "redirect light", tutorial_light_elements6: "Some mirrors", tutorial_light_elements7: "can rotate 90º", tutorial_light_elements8: "Some mirrors", tutorial_light_elements9: " are a bit more accurate", tutorial_crystal1: "Use crystal portals to ", tutorial_crystal2: "teleport!", tutorial_crystal3: "That's it!", tutorial_crystal4: "Some portals must be", tutorial_crystal5: "activated...", tutorial_crystal6: "... Portals can teleport", tutorial_crystal7: "objects...", tutorial_crystal8: "Pay attention to", tutorial_crystal9: "the sides of each ", tutorial_crystal10: "portal... Black", tutorial_crystal11: "goes to black and ", tutorial_crystal12: "white goes to ", tutorial_crystal13: "white.", tutorial_crystal_elements1: "In the Crystal Temple", tutorial_crystal_elements2: "you can teleport!", tutorial_crystal_elements3: "That's it!", tutorial_crystal_elements4: "Some portals must be", tutorial_crystal_elements5: "activated", tutorial_crystal_elements6: "... Portals can teleport", tutorial_crystal_elements7: "objects...", tutorial_crystal_elements8: "And remember!", tutorial_crystal_elements9: "Black", tutorial_crystal_elements10: "goes to black", tutorial_crystal_elements11: "and white", tutorial_crystal_elements12: "goes to white", tutorial_ice1: "FireBoy slides on snow,", tutorial_ice2: "WaterGirl is slowed...", tutorial_ice3: "... however FireBoy ", tutorial_ice4: "can't climb snowy", tutorial_ice5: "slopes.", tutorial_ice6: "Neither of them can", tutorial_ice7: "jump on ice nor snow!", tutorial_ice8: "blue light...", tutorial_ice9: "Freeze water with ", tutorial_ice10: "... And melt it with red", tutorial_ice11: "light.", tutorial_ice12: "This is a timed button,", tutorial_ice13: "hurry up before the", tutorial_ice14: "door closes!", tutorial_ice_elements1: "In the Ice Temple", tutorial_ice_elements2: "snow can slow down WaterGirl", tutorial_ice_elements3: "FireBoy however", tutorial_ice_elements4: "can't climb slopes", tutorial_ice_elements5: "blue light", tutorial_ice_elements6: "Freeze water with ", tutorial_ice_elements7: "Melt it with", tutorial_ice_elements8: "red light", tutorial_ice_elements9: "hurry up before the", tutorial_ice_elements10: "door closes!", tutorial_wind1: "Use wind to jump", tutorial_wind2: "higher than ever", tutorial_wind3: "Wind can also", tutorial_wind4: "block your path", tutorial_wind5: "Good luck soaring", tutorial_wind6: "in the winds!", tutorial_water1: "In the Water Temple", tutorial_water2: "WaterGirl will take the lead", tutorial_water3: "and help FireBoy", tutorial_water4: "Work as a team", tutorial_water5: "and get to the end!", tutorial_water6: "avoid the water" } }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }; define("utils/lang/Lang", ["require", "./en"], function(b) { var c; return c = b("./en"), function() { function b() { this.locale = a(this.locale, this) } return b.prototype.dict = c, b.prototype.font = "font_en", b.prototype.locale = function(a) { return this.dict[a] || a + "|locale" }, b }() }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("TouchManager", ["Phaser"], function(c) { "use strict"; return function(d) { function e() { return this.update = a(this.update, this), this.hammerIt = a(this.hammerIt, this), this.unregister = a(this.unregister, this), this.register = a(this.register, this), this.resize = a(this.resize, this), this.start = a(this.start, this), e.__super__.constructor.apply(this, arguments) } return b(e, d), e.prototype.start = function(a) { return this.game = a, this.$el = $("#hammer"), this.$el.css({ position: "absolute", top: 0, lef: 0, width: window.innerWidth || $(window).width(), height: window.innerHeight || $(window).height() }), this.hammerIt(), this.events = {} }, e.prototype.resize = function() { return this.$el.css({ position: "absolute", top: 0, lef: 0, width: window.innerWidth || $(window).width(), height: window.innerHeight || $(window).height() }) }, e.prototype.register = function(a, b, c) { var d, e, f, g, h; for (b = b.split(" ").length > 0 ? b.split(" ") : [ev], h = [], f = 0, g = b.length; f < g; f++) e = b[f], (d = this.events)[e] || (d[e] = []), h.push(this.events[e].unshift({ sprite: a, callback: c })); return h }, e.prototype.unregister = function(a, b) { var c, d, e, f, g; for (b = b.split(" ").length > 0 ? b.split(" ") : [ev], g = [], e = 0, f = b.length; e < f; e++) c = b[e], d = _.find(this.events[c], function(b) { return b.sprite === a }), g.push(this.events[c].splice(this.events[c].indexOf(d), 1)); return g }, e.prototype.hammerIt = function() { var a; return a = new Hammer(this.$el[0], {}), a.get("pinch").set({ enable: !0 }), a.get("swipe").set({ enable: !0 }), a.get("pinch").recognizeWith(a.get("pan")), (this.game.bowser.mobile || this.game.bowser.tablet || this.game.device.iPad) && a.on("tap", function(a) { return function(b) { var d, e, f, g, h; if (null != a.events.tap) { for (g = a.events.tap, h = [], e = 0, f = g.length; e < f; e++) if (null != (d = g[e])) { if (null == d.sprite || d.sprite.visible && a.game.input.hitTest(d.sprite, b.center, new c.Point)) { d.callback(b); break } h.push(void 0) } return h } } }(this)), a.on("pan", function(a) { return function(b) { var d, e, f, g, h; if (null != a.events.pan) { for (g = a.events.pan, h = [], e = 0, f = g.length; e < f; e++) null != (d = g[e]) && (null == d.sprite || d.sprite.visible && a.game.input.hitTest(d.sprite, b.center, new c.Point) ? h.push(d.callback(b)) : h.push(void 0)); return h } } }(this)), a.on("panstart", function(a) { return function(b) { var d, e, f, g, h; if (null != a.events.panstart) { for (g = a.events.panstart, h = [], e = 0, f = g.length; e < f; e++) if (null != (d = g[e])) { if (null == d.sprite || d.sprite.visible && a.game.input.hitTest(d.sprite, b.center, new c.Point)) { d.callback(b); break } h.push(void 0) } return h } } }(this)), a.on("panmove", function(a) { return function(b) { var c, d, e, f, g; if (null != a.events.panmove) { for (f = a.events.panmove, g = [], d = 0, e = f.length; d < e; d++) null != (c = f[d]) && g.push(c.callback(b)); return g } } }(this)), a.on("panend", function(a) { return function(b) { var c, d, e, f, g; if (null != a.events.panend) { for (f = a.events.panend, g = [], d = 0, e = f.length; d < e; d++) null != (c = f[d]) && g.push(c.callback(b)); return g } } }(this)), a.on("swipe", function(a) { return function(b) { var c, d, e, f, g; if (null != a.events.swipe) { for (f = a.events.swipe, g = [], d = 0, e = f.length; d < e; d++) null != (c = f[d]) && (null == c.sprite || c.sprite.visible ? g.push(c.callback(b)) : g.push(void 0)); return g } } }(this)), a.on("pinch", function(a) { return function(b) { var c, d, e, f, g; if (null != a.events.pinch) { for (f = a.events.pinch, g = [], d = 0, e = f.length; d < e; d++) null != (c = f[d]) && g.push(c.callback(b)); return g } } }(this)), a.on("pinchend", function(a) { return function(b) { var c, d, e, f, g; if (null != a.events.pinchend) { for (f = a.events.pinchend, g = [], d = 0, e = f.length; d < e; d++) null != (c = f[d]) && g.push(c.callback(b)); return g } } }(this)), this.game.bowser.mobile || this.game.bowser.tablet || this.game.device.iPad ? (this.$el.on("touchstart", function(a) { return function(b) { var d, e, f, g, h, i, j; for (h = b.originalEvent.changedTouches, i = [], e = 0, f = h.length; e < f; e++) j = h[e], null != a.events.touchstart ? (g = { x: j.clientX, y: j.clientY }, i.push(function() { var a, e, f, h; for (f = this.events.touchstart, h = [], a = 0, e = f.length; a < e; a++) if (null != (d = f[a])) { if (null == d.sprite || d.sprite.visible && this.game.input.hitTest(d.sprite, g, new c.Point)) { d.callback(b), d.sprite.touchId = j.identifier; break } h.push(void 0) } return h }.call(a))) : i.push(void 0); return i } }(this)), this.$el.on("touchend touchcancel", function(a) { return function(b) { var d, e, f, g, h, i, j, k; if (null != a.events.touchend) { for (h = b.originalEvent.changedTouches, i = [], e = 0, f = h.length; e < f; e++) k = h[e], g = { x: k.clientX, y: k.clientY }, i.push(function() { var a, e, f, h; for (f = this.events.touchend, h = [], a = 0, e = f.length; a < e; a++) null != (d = f[a]) && (null == d.sprite || d.sprite.touchId === k.identifier ? (d.sprite.touchId = null, j = this.game.input.hitTest(d.sprite, g, new c.Point), h.push(d.callback(b, j))) : h.push(void 0)); return h }.call(a)); return i } } }(this))) : (this.$el.on("mousedown", function(a) { return function(b) { var d, e, f, g, h, i; if (null != a.events.mousedown) { for (g = { x: b.originalEvent.clientX, y: b.originalEvent.clientY }, h = a.events.mousedown, i = [], e = 0, f = h.length; e < f; e++) if (null != (d = h[e])) { if (null == d.sprite || d.sprite.visible && a.game.input.hitTest(d.sprite, g, new c.Point)) { d.callback(b), d.sprite.mousedowned = !0; break } i.push(d.sprite.mousedowned = !1) } return i } } }(this)), this.$el.on("mouseup", function(a) { return function(b) { var d, e, f, g, h, i, j; if (null != a.events.mouseup) { for (g = { x: b.originalEvent.clientX, y: b.originalEvent.clientY }, h = a.events.mouseup, i = [], e = 0, f = h.length; e < f; e++) null != (d = h[e]) && (null == d.sprite || d.sprite.visible && d.sprite.mousedowned ? (d.sprite.mousedowned = !1, j = a.game.input.hitTest(d.sprite, g, new c.Point), i.push(d.callback(b, j))) : i.push(void 0)); return i } } }(this))) }, e.prototype.update = function() {}, e }(c.Signal) }) }.call(this), function(a, b) { "object" == typeof exports && "undefined" != typeof module ? b(exports) : "function" == typeof define && define.amd ? define("h5ads", ["exports"], b) : b(a.h5ads = a.h5ads || {}) }(this, function(a) { "use strict"; function b(a, b) { function c() { this.constructor = a } d(a, b), a.prototype = null === b ? Object.create(b) : (c.prototype = b.prototype, new c) } var c, d = function(a, b) { return (d = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(a, b) { a.__proto__ = b } || function(a, b) { for (var c in b) b.hasOwnProperty(c) && (a[c] = b[c]) })(a, b) }, e = function(a, b) { return b = { exports: {} }, a(b, b.exports), b.exports }(function(a) { function b() {} function c(a, b, c) { this.fn = a, this.context = b, this.once = c || !1 } function d(a, b, d, e, f) { if ("function" != typeof d) throw new TypeError("The listener must be a function"); var g = new c(d, e || a, f), i = h ? h + b : b; return a._events[i] ? a._events[i].fn ? a._events[i] = [a._events[i], g] : a._events[i].push(g) : (a._events[i] = g, a._eventsCount++), a } function e(a, c) { 0 == --a._eventsCount ? a._events = new b : delete a._events[c] } function f() { this._events = new b, this._eventsCount = 0 } var g = Object.prototype.hasOwnProperty, h = "~"; Object.create && (b.prototype = Object.create(null), (new b).__proto__ || (h = !1)), f.prototype.eventNames = function() { var a, b, c = []; if (0 === this._eventsCount) return c; for (b in a = this._events) g.call(a, b) && c.push(h ? b.slice(1) : b); return Object.getOwnPropertySymbols ? c.concat(Object.getOwnPropertySymbols(a)) : c }, f.prototype.listeners = function(a) { var b = h ? h + a : a, c = this._events[b]; if (!c) return []; if (c.fn) return [c.fn]; for (var d = 0, e = c.length, f = new Array(e); d < e; d++) f[d] = c[d].fn; return f }, f.prototype.listenerCount = function(a) { var b = h ? h + a : a, c = this._events[b]; return c ? c.fn ? 1 : c.length : 0 }, f.prototype.emit = function(a, b, c, d, e, f) { var g = h ? h + a : a; if (!this._events[g]) return !1; var i, j, k = this._events[g], l = arguments.length; if (k.fn) { switch (k.once && this.removeListener(a, k.fn, void 0, !0), l) { case 1: return k.fn.call(k.context), !0; case 2: return k.fn.call(k.context, b), !0; case 3: return k.fn.call(k.context, b, c), !0; case 4: return k.fn.call(k.context, b, c, d), !0; case 5: return k.fn.call(k.context, b, c, d, e), !0; case 6: return k.fn.call(k.context, b, c, d, e, f), !0 } for (j = 1, i = new Array(l - 1); j < l; j++) i[j - 1] = arguments[j]; k.fn.apply(k.context, i) } else { var m, n = k.length; for (j = 0; j < n; j++) switch (k[j].once && this.removeListener(a, k[j].fn, void 0, !0), l) { case 1: k[j].fn.call(k[j].context); break; case 2: k[j].fn.call(k[j].context, b); break; case 3: k[j].fn.call(k[j].context, b, c); break; case 4: k[j].fn.call(k[j].context, b, c, d); break; default: if (!i) for (m = 1, i = new Array(l - 1); m < l; m++) i[m - 1] = arguments[m]; k[j].fn.apply(k[j].context, i) } } return !0 }, f.prototype.on = function(a, b, c) { return d(this, a, b, c, !1) }, f.prototype.once = function(a, b, c) { return d(this, a, b, c, !0) }, f.prototype.removeListener = function(a, b, c, d) { var f = h ? h + a : a; if (!this._events[f]) return this; if (!b) return e(this, f), this; var g = this._events[f]; if (g.fn) g.fn !== b || d && !g.once || c && g.context !== c || e(this, f); else { for (var i = 0, j = [], k = g.length; i < k; i++)(g[i].fn !== b || d && !g[i].once || c && g[i].context !== c) && j.push(g[i]); j.length ? this._events[f] = 1 === j.length ? j[0] : j : e(this, f) } return this }, f.prototype.removeAllListeners = function(a) { var c; return a ? (c = h ? h + a : a, this._events[c] && e(this, c)) : (this._events = new b, this._eventsCount = 0), this }, f.prototype.off = f.prototype.removeListener, f.prototype.addListener = f.prototype.on, f.prefixed = h, f.EventEmitter = f, a.exports = f }), f = function() { function a(a, b, c) { if (void 0 === c && (c = !1), this.adsEnabled = !1, void 0 === cordova.plugins || void 0 !== cordova.plugins && void 0 === cordova.plugins.gdApi) return void console.log("gdApi not available!"); c && cordova.plugins.gdApi.enableTestAds(), this.setAdListeners(), cordova.plugins.gdApi.init([a, b], function(a) { console.log("API init success!", a) }, function(a) { console.log("API init error!", a) }) } return a.prototype.setAdListeners = function() { var a = this; cordova.plugins.gdApi.setAdListener(function(b) { switch (console.log("banner reply, data.event", b.event, b), b.event) { case "BANNER_STARTED": a.adManager.emit(l.CONTENT_PAUSED); break; case "API_IS_READY": a.adsEnabled = !0; break; case "API_ALREADY_INITIALIZED": break; case "BANNER_CLOSED": case "API_NOT_READY": case "BANNER_FAILED": a.adManager.emit(l.CONTENT_RESUMED) } }, function(b) { console.log("Set listener error:", b), a.adsEnabled = !1 }) }, a.prototype.setManager = function(a) { this.adManager = a }, a.prototype.showAd = function(a) { var b = this; this.adsEnabled ? (console.log("show banner called"), cordova.plugins.gdApi.showBanner(function(a) { console.log("Show banner worked", a) }, function(a) { console.log("Could not show banner:", a), b.adManager.emit(l.CONTENT_RESUMED) })) : (console.log("Ads not enabled, resuming"), this.adManager.emit(l.CONTENT_RESUMED)) }, a.prototype.adAvailable = function(a) { return !0 }, a.prototype.preloadAd = function(a) {}, a.prototype.destroyAd = function(a) {}, a.prototype.hideAd = function(a) {}, a }(), g = function() { function a(a) { var b = this; this.adsEnabled = !1, this.adsEnabled = !0, HeyzapAds.start(a).then(function() {}, function(a) { b.adsEnabled = !1 }) } return a.prototype.setManager = function(a) { this.adManager = a }, a.prototype.showAd = function(a, b) { var c = this; switch (this.adsEnabled || this.adManager.emit(l.CONTENT_RESUMED), a) { case n.interstitial: HeyzapAds.InterstitialAd.addEventListener(HeyzapAds.InterstitialAd.Events.HIDE, function() { c.adManager.emit(l.CONTENT_RESUMED, HeyzapAds.InterstitialAd.Events.HIDE) }), HeyzapAds.InterstitialAd.addEventListener(HeyzapAds.InterstitialAd.Events.SHOW_FAILED, function() { c.adManager.emit(l.CONTENT_RESUMED, HeyzapAds.InterstitialAd.Events.SHOW_FAILED) }), HeyzapAds.InterstitialAd.addEventListener(HeyzapAds.InterstitialAd.Events.CLICKED, function() { c.adManager.emit(l.AD_CLICKED, HeyzapAds.InterstitialAd.Events.CLICKED) }), HeyzapAds.InterstitialAd.show().then(function() { c.adManager.emit(l.CONTENT_PAUSED) }, function(a) { c.adManager.emit(l.CONTENT_RESUMED) }); break; case n.interstitial: HeyzapAds.VideoAd.addEventListener(HeyzapAds.VideoAd.Events.HIDE, function() { c.adManager.emit(l.CONTENT_RESUMED, HeyzapAds.VideoAd.Events.HIDE) }), HeyzapAds.VideoAd.addEventListener(HeyzapAds.VideoAd.Events.SHOW_FAILED, function() { c.adManager.emit(l.CONTENT_RESUMED, HeyzapAds.VideoAd.Events.SHOW_FAILED) }), HeyzapAds.VideoAd.addEventListener(HeyzapAds.VideoAd.Events.CLICKED, function() { c.adManager.emit(l.AD_CLICKED, HeyzapAds.VideoAd.Events.CLICKED) }), HeyzapAds.VideoAd.show().then(function() { c.adManager.emit(l.CONTENT_PAUSED) }, function(a) { c.adManager.emit(l.CONTENT_RESUMED) }); break; case n.rewarded: HeyzapAds.IncentivizedAd.addEventListener(HeyzapAds.IncentivizedAd.Events.HIDE, function() { c.adManager.emit(l.CONTENT_RESUMED, HeyzapAds.IncentivizedAd.Events.HIDE) }), HeyzapAds.IncentivizedAd.addEventListener(HeyzapAds.IncentivizedAd.Events.SHOW_FAILED, function() { c.adManager.emit(l.CONTENT_RESUMED, HeyzapAds.IncentivizedAd.Events.SHOW_FAILED) }), HeyzapAds.IncentivizedAd.addEventListener(HeyzapAds.IncentivizedAd.Events.CLICKED, function() { c.adManager.emit(l.AD_CLICKED, HeyzapAds.IncentivizedAd.Events.CLICKED) }), HeyzapAds.IncentivizedAd.show().then(function() { c.adManager.emit(l.CONTENT_PAUSED) }, function(a) { c.adManager.emit(l.CONTENT_RESUMED) }); break; case n.banner: if (void 0 === b) return; HeyzapAds.BannerAd.show(b).then(function() {}, function(a) {}) } }, a.prototype.adAvailable = function(a) { return !0 }, a.prototype.preloadAd = function(a) { this.adsEnabled && a === n.rewarded && HeyzapAds.IncentivizedAd.fetch().then(function() {}, function(a) {}) }, a.prototype.destroyAd = function(a) { this.adsEnabled && a === n.banner && HeyzapAds.BannerAd.destroy().then(function() {}, function(a) {}) }, a.prototype.hideAd = function(a) { this.adsEnabled && a === n.banner && HeyzapAds.BannerAd.hide().then(function() {}, function(a) {}) }, a }(), h = function() { function a(a) { var b = this; if (this.adsEnabled = !1, this.interstitialLoaded = !1, this.rewardedLoaded = !1, "undefined" != typeof IronSourceAds) { IronSourceAds.init({ appKey: a }); var c = function() { return b.resumeGameplay() }; window.addEventListener("interstitialClosed", c), window.addEventListener("interstitialShowFailed", c), window.addEventListener("interstitialLoaded", function() { return b.interstitialChanged(!0) }), window.addEventListener("rewardedVideoClosed", c), window.addEventListener("rewardedVideoFailed", c), IronSourceAds.hasRewardedVideo({ onSuccess: this.rewardedChanged.bind(this) }), window.addEventListener("rewardedVideoAvailabilityChanged", function(a) { return b.rewardedChanged(a.available) }) } } return a.prototype.setManager = function(a) { this.adManager = a }, a.prototype.showAd = function(a) { switch (void 0 === a && (a = n.interstitial), a) { case n.interstitial: if (!this.interstitialLoaded) { this.resumeGameplay(); break } this.interstitialChanged(!1), this.adManager.emit(l.CONTENT_PAUSED), IronSourceAds.showInterstitial(); break; case n.rewarded: if (!this.rewardedLoaded) { this.resumeGameplay(); break } this.adManager.emit(l.CONTENT_PAUSED), IronSourceAds.showRewardedVideo(); break; default: this.resumeGameplay() } }, a.prototype.resumeGameplay = function() { this.adManager.emit(l.CONTENT_RESUMED) }, a.prototype.preloadAd = function(a) { void 0 === a && (a = n.interstitial), a === n.interstitial && IronSourceAds.loadInterstitial() }, a.prototype.destroyAd = function() {}, a.prototype.hideAd = function() {}, a.prototype.adAvailable = function(a) { switch (a) { case n.interstitial: return this.interstitialLoaded; case n.rewarded: return this.rewardedLoaded } return !1 }, a.prototype.interstitialChanged = function(a) { this.interstitialLoaded = a }, a.prototype.rewardedChanged = function(a) { this.rewardedLoaded = a }, a }(); ! function(a) { a.interstitial = "interstitial", a.rewarded = "rewarded", a.display = "display" }(c || (c = {})), function(a) { a[a.LargeRectangle = 0] = "LargeRectangle", a[a.MediumRectangle = 1] = "MediumRectangle", a[a.Billboard = 2] = "Billboard", a[a.Leaderboard = 3] = "Leaderboard", a[a.Skyscraper = 4] = "Skyscraper", a[a.WideSkyscraper = 5] = "WideSkyscraper" }(a.GameDistributionBannerSize || (a.GameDistributionBannerSize = {})), function(a) { a[a.TopLeft = 0] = "TopLeft", a[a.TopCenter = 1] = "TopCenter", a[a.TopRight = 2] = "TopRight", a[a.CenterLeft = 3] = "CenterLeft", a[a.Center = 4] = "Center", a[a.CenterRight = 5] = "CenterRight", a[a.BottomLeft = 6] = "BottomLeft", a[a.BottomCenter = 7] = "BottomCenter", a[a.BottomRight = 8] = "BottomRight" }(a.GameDistributionAlignment || (a.GameDistributionAlignment = {})); var i, j = function() { function b() { this.offsetX = 0, this.offsetY = 0, this.element = document.createElement("div"), this.element.style.position = "absolute", this.element.style.top = "0px", this.element.style.left = "0px", this.element.id = "banner-" + Date.now() + (1e7 * Math.random() | 0), document.body.appendChild(this.element) } return b.prototype.loadBanner = function() { return "undefined" == typeof gdsdk ? Promise.reject("GD Sdk not available, probably due to adblocker") : gdsdk.showAd(c.display, { containerId: this.element.id }) }, b.prototype.destroy = function() { document.body.removeChild(this.element), this.resizeListener && window.removeEventListener("resize", this.resizeListener), delete this.element, delete this.parent, delete this.alignment }, b.prototype.alignIn = function(a, b) { var c = this; if (this.parent) return void console.warn("Banner already aligned, ignoring..."); this.parent = a, this.alignment = b, this.resizeListener = function() { return c.resize() }, window.addEventListener("resize", this.resizeListener), this.resize() }, b.prototype.setOffset = function(a, b) { void 0 === a && (a = 0), void 0 === b && (b = 0), this.offsetX = a, this.offsetY = b, this.resize() }, b.prototype.resize = function() { if (this.parent) { var b = this.parent.getBoundingClientRect(); switch (this.alignment) { case a.GameDistributionAlignment.TopLeft: this.position(b.left, b.top); break; case a.GameDistributionAlignment.TopCenter: this.position(b.left + b.width / 2 - this.width / 2, b.top); break; case a.GameDistributionAlignment.TopRight: this.position(b.left + b.width - this.width, b.top); break; case a.GameDistributionAlignment.CenterLeft: this.position(b.left, b.top + b.height / 2 - this.height / 2); break; case a.GameDistributionAlignment.Center: this.position(b.left + b.width / 2 - this.width / 2, b.top + b.height / 2 - this.height / 2); break; case a.GameDistributionAlignment.CenterRight: this.position(b.left + b.width - this.width, b.top + b.height / 2 - this.height / 2); break; case a.GameDistributionAlignment.BottomLeft: this.position(b.left, b.top + b.height - this.height); break; case a.GameDistributionAlignment.BottomCenter: this.position(b.left + b.width / 2 - this.width / 2, b.top + b.height - this.height); break; case a.GameDistributionAlignment.BottomRight: this.position(b.left + b.width - this.width, b.top + b.height - this.height) } } }, b.prototype.setSize = function(b) { var c, d; switch (b) { default: case a.GameDistributionBannerSize.LargeRectangle: c = 336, d = 280; break; case a.GameDistributionBannerSize.MediumRectangle: c = 300, d = 250; break; case a.GameDistributionBannerSize.Billboard: c = 970, d = 250; break; case a.GameDistributionBannerSize.Leaderboard: c = 728, d = 90; break; case a.GameDistributionBannerSize.Skyscraper: c = 120, d = 600; break; case a.GameDistributionBannerSize.WideSkyscraper: c = 160, d = 600 } this.width = c, this.height = d, this.element.style.width = c + "px", this.element.style.height = d + "px" }, b.prototype.position = function(a, b) { this.element.style.left = a + this.offsetX + "px", this.element.style.top = b + this.offsetY + "px" }, b }(), k = function() { function a(a) { var b = this; this.adsEnabled = !1, this.hasRewarded = !1, this.adShowing = !1, this.areAdsEnabled(), window.GD_OPTIONS = { gameId: a, advertisementSettings: { autoplay: !1 }, onEvent: function(a) { switch (a.name) { case "SDK_GAME_PAUSE": b.adManager.emit(l.CONTENT_PAUSED); break; case "SDK_READY": b.sdkLoaded() } } }, function(a, b, c) { var d, e = a.getElementsByTagName(b)[0]; a.getElementById(c) || (d = a.createElement(b), d.id = c, d.src = "main.min.js", e.parentNode && e.parentNode.insertBefore(d, e)) }(document, "script", "gamedistribution-jssdk") } return a.prototype.setManager = function(a) { this.adManager = a }, a.prototype.sdkLoaded = function() { var a = this; this.areAdsEnabled().then(function(b) { b && (a.adsEnabled = !0, a.adManager.emit(l.AD_PROVIDER_LOADED)) }) }, a.prototype.showAd = function(a) { var b = this; if (this.adsEnabled) { if ("undefined" == typeof gdsdk || gdsdk && void 0 === gdsdk.showAd) return this.adsEnabled = !1, void this.adManager.emit(l.CONTENT_RESUMED); gdsdk.showAd(a === n.rewarded ? c.rewarded : c.interstitial).then(function() { a === n.rewarded && (b.adManager.emit(l.AD_REWARDED), b.hasRewarded = !1), b.adManager.emit(l.CONTENT_RESUMED) }).catch(function() { a === n.rewarded && b.hasRewarded && (b.hasRewarded = !1), b.adManager.emit(l.CONTENT_RESUMED) }) } else this.adManager.emit(l.CONTENT_RESUMED) }, a.prototype.createBanner = function(a) { if (this.adsEnabled) { var b = new j; return b.setSize(a), b } }, a.prototype.loadBanner = function(a) { if (this.adsEnabled) { var b = new j; return b.setSize(a), b.loadBanner(), b } }, a.prototype.preloadAd = function(a) { var b = this;!this.hasRewarded && this.adsEnabled && a === n.rewarded && (console.log("preloading ad"), gdsdk.preloadAd(c.rewarded).then(function() { b.hasRewarded = !0, b.adManager.emit(l.AD_LOADED, a) })) }, a.prototype.adAvailable = function(a) { return a !== n.rewarded || this.hasRewarded }, a.prototype.destroyAd = function() {}, a.prototype.hideAd = function() {}, a.prototype.areAdsEnabled = function() { var a = document.createElement("div"); a.innerHTML = " ", a.className = "adsbox", a.style.position = "absolute", a.style.fontSize = "10px", document.body.appendChild(a); var b = function() { var b = !0; return 0 === a.offsetHeight && (b = !1), a.parentNode && a.parentNode.removeChild(a), b }; return new Promise(function(a) { window.setTimeout(function() { a(b()) }, 100) }) }, a }(); ! function(a) { a[a.start = 0] = "start", a[a.firstQuartile = 1] = "firstQuartile", a[a.midPoint = 2] = "midPoint", a[a.thirdQuartile = 3] = "thirdQuartile", a[a.complete = 4] = "complete" }(i || (i = {})); var l, m = function() { function a(a, b) { this.googleEnabled = !1, this.adsEnabled = !0, this.adTagUrl = "", this.adRequested = !1, this.areAdsEnabled(), "undefined" != typeof google && (this.googleEnabled = !0, this.gameContent = "string" == typeof a.parentElement ? document.getElementById(a.parentElement) : a.parentElement, this.gameContent.style.position = "absolute", this.gameContent.style.width = "100%", this.adContent = this.gameContent.parentNode.appendChild(document.createElement("div")), this.adContent.id = "phaser-ad-container", this.adContent.style.position = "absolute", this.adContent.style.zIndex = "9999", this.adContent.style.display = "none", this.adContent.style.top = "0", this.adContent.style.left = "0", this.adContent.style.width = "100%", this.adContent.style.height = "100%", this.adContent.style.overflow = "hidden", this.adTagUrl = b, this.adDisplay = new google.ima.AdDisplayContainer(this.adContent), google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED), google.ima.settings.setLocale("nl"), this.adLoader = new google.ima.AdsLoader(this.adDisplay), this.adLoader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, this.onAdManagerLoader, !1, this), this.adLoader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, this.onAdError, !1, this)) } return a.prototype.setManager = function(a) { this.adManager = a }, a.prototype.showAd = function(a, b) { if (console.log("Ad Requested"), !this.adRequested) { if (this.adsEnabled || this.adManager.emit(l.AD_DISABLED, !0), !this.googleEnabled) return void this.onContentResumeRequested(); this.adDisplay.initialize(); var c = new google.ima.AdsRequest; c.adTagUrl = this.adTagUrl + this.parseCustomParams(b); var d = window.innerWidth, e = window.innerHeight; document.body.clientHeight < window.innerHeight && (e = document.body.clientHeight, d = document.body.clientWidth), c.linearAdSlotWidth = d, c.linearAdSlotHeight = e, c.nonLinearAdSlotWidth = d, c.nonLinearAdSlotHeight = e, c.forceNonLinearFullSlot = !0; try { this.adRequested = !0, this.adLoader.requestAds(c) } catch (a) { console.log(a), this.onContentResumeRequested() } } }, a.prototype.adAvailable = function(a) { return !0 }, a.prototype.preloadAd = function() {}, a.prototype.destroyAd = function() {}, a.prototype.hideAd = function() {}, a.prototype.onAdManagerLoader = function(a) { var b = this; console.log("AdsManager loaded"); var c = new google.ima.AdsRenderingSettings; c.restoreCustomPlaybackStateOnAdBreakComplete = !0; var d = a.getAdsManager(this.gameContent, c); this.adsManager = d, console.log(d.isCustomClickTrackingUsed()), d.addEventListener(google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, this.onContentPauseRequested, !1, this), d.addEventListener(google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, this.onContentResumeRequested, !1, this), d.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, this.onAdError, !1, this), [google.ima.AdEvent.Type.ALL_ADS_COMPLETED, google.ima.AdEvent.Type.CLICK, google.ima.AdEvent.Type.COMPLETE, google.ima.AdEvent.Type.FIRST_QUARTILE, google.ima.AdEvent.Type.LOADED, google.ima.AdEvent.Type.MIDPOINT, google.ima.AdEvent.Type.PAUSED, google.ima.AdEvent.Type.STARTED, google.ima.AdEvent.Type.THIRD_QUARTILE].forEach(function(a) { d.addEventListener(a, b.onAdEvent, !1, b) }); try { this.adContent.style.display = "block"; var e = window.innerWidth, f = window.innerHeight; this.adsManager.init(e, f, google.ima.ViewMode.NORMAL), this.adsManager.start(), this.resizeListener = function() { null !== b.adsManager && (console.log("Resizing ad size"), b.adsManager.resize(window.innerWidth, window.innerHeight, google.ima.ViewMode.NORMAL)) }, window.addEventListener("resize", this.resizeListener) } catch (a) { console.log("Adsmanager error:", a), this.onAdError(a) } }, a.prototype.onAdEvent = function(a) { switch (console.log("onAdEvent", a), a.type) { case google.ima.AdEvent.Type.CLICK: this.adManager.emit(l.AD_CLICKED); break; case google.ima.AdEvent.Type.LOADED: this.adRequested = !1; var b = a.getAd(); console.log("is ad linear?", b.isLinear()), b.isLinear() || this.onContentResumeRequested(); break; case google.ima.AdEvent.Type.STARTED: this.adManager.emit(l.AD_PROGRESSION, i.start); break; case google.ima.AdEvent.Type.FIRST_QUARTILE: this.adManager.emit(l.AD_PROGRESSION, i.firstQuartile); break; case google.ima.AdEvent.Type.MIDPOINT: this.adManager.emit(l.AD_PROGRESSION, i.midPoint); break; case google.ima.AdEvent.Type.THIRD_QUARTILE: this.adManager.emit(l.AD_PROGRESSION, i.thirdQuartile); break; case google.ima.AdEvent.Type.COMPLETE: this.adManager.emit(l.AD_PROGRESSION, i.complete); break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: this.onContentResumeRequested() } }, a.prototype.onAdError = function(a) { console.log("gneric ad error", a), null !== this.adsManager && (this.adsManager.destroy(), null !== this.resizeListener && window.removeEventListener("resize", this.resizeListener)), this.adRequested && (this.adRequested = !1), this.onContentResumeRequested() }, a.prototype.onContentPauseRequested = function() { console.log("onContentPauseRequested", arguments), this.adManager.emit(l.CONTENT_PAUSED) }, a.prototype.onContentResumeRequested = function() { if (console.log("onContentResumeRequested", arguments), "undefined" == typeof google) return void this.adManager.emit(l.CONTENT_RESUMED); this.adContent.style.display = "none", this.adManager.emit(l.CONTENT_RESUMED) }, a.prototype.parseCustomParams = function(a) { if (void 0 !== a) { var b = ""; for (var c in a) if (a.hasOwnProperty(c)) { b.length > 0 && (b += "&"); var d = Array.isArray(a[c]) ? a[c].join(",") : a[c]; b += c + "=" + d } return "&cust_params=" + encodeURIComponent(b) } return "" }, a.prototype.areAdsEnabled = function() { var a = this, b = document.createElement("div"); b.innerHTML = " ", b.className = "adsbox", b.style.position = "absolute", b.style.fontSize = "10px", document.body.appendChild(b); var c = function() { var a = !0; return 0 === b.offsetHeight && (a = !1), b.parentNode && b.parentNode.removeChild(b), a }; window.setTimeout(function() { a.adsEnabled = c() }, 100) }, a }(); ! function(a) { a.CONTENT_PAUSED = "onContentPaused", a.CONTENT_RESUMED = "onContentResumed", a.AD_PROGRESSION = "onAdProgression", a.AD_DISABLED = "onAdsDisabled", a.AD_CLICKED = "onAdClicked", a.AD_REWARDED = "onAdRewardGranted", a.BANNER_SHOWN = "onBannerShown", a.BANNER_HIDDEN = "onBannerHidden", a.AD_LOADED = "onAdLoaded", a.AD_PROVIDER_LOADED = "onAdProviderLoaded" }(l || (l = {})); var n; ! function(a) { a[a.interstitial = 0] = "interstitial", a[a.rewarded = 1] = "rewarded", a[a.banner = 2] = "banner" }(n || (n = {})); var o, p = function(a) { function c() { var b = null !== a && a.apply(this, arguments) || this; return b.bannerActive = !1, b.provider = null, b } return b(c, a), c.prototype.setAdProvider = function(a) { this.provider = a, this.provider.setManager(this) }, c.prototype.showAd = function(a) { for (var b = [], c = 1; c < arguments.length; c++) b[c - 1] = arguments[c]; if (null === this.provider) throw new Error("Can not request an ad without an provider, please attach an ad provider!"); b.unshift(a), this.provider.showAd.apply(this.provider, b) }, c.prototype.createBanner = function() { for (var a = [], b = 0; b < arguments.length; b++) a[b] = arguments[b]; return this.provider.loadBanner.apply(this.provider, a) }, c.prototype.loadBanner = function() { for (var a = [], b = 0; b < arguments.length; b++) a[b] = arguments[b]; return this.provider.loadBanner.apply(this.provider, a) }, c.prototype.preloadAd = function(a) { for (var b = [], c = 1; c < arguments.length; c++) b[c - 1] = arguments[c]; if (null === this.provider) throw new Error("Can not preload an ad without an provider, please attach an ad provider!"); b.unshift(a), this.provider.preloadAd.apply(this.provider, b) }, c.prototype.destroyAd = function(a) { for (var b = [], c = 1; c < arguments.length; c++) b[c - 1] = arguments[c]; if (null === this.provider) throw new Error("Can not destroy an ad without an provider, please attach an ad provider!"); b.unshift(a), this.provider.destroyAd.apply(this.provider, b) }, c.prototype.hideAd = function(a) { for (var b = [], c = 1; c < arguments.length; c++) b[c - 1] = arguments[c]; if (null === this.provider) throw new Error("Can not hide an ad without an provider, please attach an ad provider!"); b.unshift(a), this.provider.hideAd.apply(this.provider, b) }, c.prototype.adsEnabled = function() { if (null === this.provider) throw new Error("Can not hide an ad without an provider, please attach an ad provider!"); return this.provider.adsEnabled }, c.prototype.adAvailable = function(a) { for (var b = [], c = 1; c < arguments.length; c++) b[c - 1] = arguments[c]; if (null === this.provider) throw new Error("Can not hide an ad without an provider, please attach an ad provider!"); return b.unshift(a), this.provider.adAvailable.apply(this.provider, b) }, c }(e); new p; ! function(a) { a[a.AdMob = 0] = "AdMob", a[a.MoPub = 1] = "MoPub", a[a.Chartboost = 2] = "Chartboost", a[a.Heyzap = 3] = "Heyzap" }(o || (o = {})); var q = function() { function a(a, b) { if (this.adsEnabled = !1, this.bannerShowable = !1, this.interstitialShowable = !1, this.insentiveShowable = !1, Cocoon && Cocoon.Ad) { switch (this.adsEnabled = !0, a) { default: case o.AdMob: this.cocoonProvider = Cocoon.Ad.AdMob; break; case o.Chartboost: this.cocoonProvider = Cocoon.Ad.Chartboost; break; case o.Heyzap: this.cocoonProvider = Cocoon.Ad.Heyzap; break; case o.MoPub: this.cocoonProvider = Cocoon.Ad.MoPub } this.cocoonProvider.configure(b) } } return a.prototype.setManager = function(a) { this.adManager = a }, a.prototype.showAd = function(a) { if (!this.adsEnabled) return void(a !== n.banner && this.adManager.emit(l.CONTENT_RESUMED)); if (a === n.banner) { if (!this.bannerShowable || null === this.banner) return; this.adManager.emit(l.BANNER_SHOWN, this.banner.width, this.banner.height), this.adManager.bannerActive = !0, this.banner.show() } if (a === n.interstitial) { if (!this.interstitialShowable || null === this.interstitial) return void this.adManager.emit(l.CONTENT_RESUMED, n.interstitial); this.interstitial.show() } if (a === n.rewarded) { if (!this.insentiveShowable || null === this.insentive) return void this.adManager.emit(l.CONTENT_RESUMED, n.rewarded); this.insentive.show() } }, a.prototype.adAvailable = function(a) { return !0 }, a.prototype.preloadAd = function(a, b, c) { var d = this; this.adsEnabled && (this.destroyAd(a), a === n.banner && (this.banner = this.cocoonProvider.createBanner(b), c && this.banner.setLayout(c), this.banner.on("load", function() { d.bannerShowable = !0 }), this.banner.on("fail", function() { d.bannerShowable = !1, d.banner = null }), this.banner.on("click", function() { d.adManager.emit(l.AD_CLICKED, n.banner) }), this.banner.on("show", function() {}), this.banner.on("dismiss", function() {}), this.banner.load()), a === n.interstitial && (this.interstitial = this.cocoonProvider.createInterstitial(b), this.interstitial.on("load", function() { d.interstitialShowable = !0 }), this.interstitial.on("fail", function() { d.interstitialShowable = !1, d.interstitial = null }), this.interstitial.on("click", function() { d.adManager.emit(l.AD_CLICKED, n.interstitial) }), this.interstitial.on("show", function() { d.adManager.emit(l.CONTENT_PAUSED, n.interstitial) }), this.interstitial.on("dismiss", function() { d.adManager.emit(l.CONTENT_RESUMED, n.interstitial), d.interstitialShowable = !1, d.interstitial = null }), this.interstitial.load()), a === n.rewarded && (this.insentive = this.cocoonProvider.createRewardedVideo(b), this.insentive.on("load", function() { d.insentiveShowable = !0 }), this.insentive.on("fail", function() { d.insentiveShowable = !1, d.insentive = null }), this.insentive.on("click", function() { d.adManager.emit(l.AD_CLICKED, n.rewarded) }), this.insentive.on("show", function() { d.adManager.emit(l.CONTENT_PAUSED, n.rewarded) }), this.insentive.on("dismiss", function() { d.adManager.emit(l.CONTENT_RESUMED, n.rewarded), d.insentiveShowable = !1, d.insentive = null }), this.insentive.on("reward", function() { d.adManager.emit(l.AD_REWARDED, n.rewarded), d.insentiveShowable = !1, d.insentive = null }), this.insentive.load())) }, a.prototype.destroyAd = function(a) { if (this.adsEnabled) { if (a === n.banner && null !== this.banner) { try { this.cocoonProvider.releaseBanner(this.banner) } catch (a) {} this.banner = null, this.bannerShowable = !1 } a === n.interstitial && null !== this.interstitial && (this.cocoonProvider.releaseInterstitial(this.interstitial), this.interstitial = null, this.interstitialShowable = !1) } }, a.prototype.hideAd = function(a) { this.adsEnabled && (a === n.interstitial && null !== this.interstitial && this.interstitial.hide(), a === n.banner && null !== this.banner && (this.adManager.bannerActive && (this.adManager.bannerActive = !1, this.adManager.emit(l.BANNER_HIDDEN, this.banner.width, this.banner.height)), this.banner.hide()), a === n.rewarded && null !== this.insentive && this.insentive.hide()) }, a }(); ! function(a) { a.CONTENT_PAUSED = "onContentPaused", a.CONTENT_RESUMED = "onContentResumed", a.AD_PROGRESSION = "onAdProgression", a.AD_DISABLED = "onAdsDisabled", a.AD_CLICKED = "onAdClicked", a.AD_REWARDED = "onAdRewardGranted", a.BANNER_SHOWN = "onBannerShown", a.BANNER_HIDDEN = "onBannerHidden", a.AD_LOADED = "onAdLoaded", a.AD_PROVIDER_LOADED = "onAdProviderLoaded" }(a.AdEvents || (a.AdEvents = {})), function(a) { a[a.interstitial = 0] = "interstitial", a[a.rewarded = 1] = "rewarded", a[a.banner = 2] = "banner" }(a.AdType || (a.AdType = {})); var r = function(a) { function c() { var b = null !== a && a.apply(this, arguments) || this; return b.bannerActive = !1, b.provider = null, b } return b(c, a), c.prototype.setAdProvider = function(a) { this.provider = a, this.provider.setManager(this) }, c.prototype.showAd = function(a) { for (var b = [], c = 1; c < arguments.length; c++) b[c - 1] = arguments[c]; if (null === this.provider) throw new Error("Can not request an ad without an provider, please attach an ad provider!"); b.unshift(a), this.provider.showAd.apply(this.provider, b) }, c.prototype.createBanner = function() { for (var a = [], b = 0; b < arguments.length; b++) a[b] = arguments[b]; return this.provider.loadBanner.apply(this.provider, a) }, c.prototype.loadBanner = function() { for (var a = [], b = 0; b < arguments.length; b++) a[b] = arguments[b]; return this.provider.loadBanner.apply(this.provider, a) }, c.prototype.preloadAd = function(a) { for (var b = [], c = 1; c < arguments.length; c++) b[c - 1] = arguments[c]; if (null === this.provider) throw new Error("Can not preload an ad without an provider, please attach an ad provider!"); b.unshift(a), this.provider.preloadAd.apply(this.provider, b) }, c.prototype.destroyAd = function(a) { for (var b = [], c = 1; c < arguments.length; c++) b[c - 1] = arguments[c]; if (null === this.provider) throw new Error("Can not destroy an ad without an provider, please attach an ad provider!"); b.unshift(a), this.provider.destroyAd.apply(this.provider, b) }, c.prototype.hideAd = function(a) { for (var b = [], c = 1; c < arguments.length; c++) b[c - 1] = arguments[c]; if (null === this.provider) throw new Error("Can not hide an ad without an provider, please attach an ad provider!"); b.unshift(a), this.provider.hideAd.apply(this.provider, b) }, c.prototype.adsEnabled = function() { if (null === this.provider) throw new Error("Can not hide an ad without an provider, please attach an ad provider!"); return this.provider.adsEnabled }, c.prototype.adAvailable = function(a) { for (var b = [], c = 1; c < arguments.length; c++) b[c - 1] = arguments[c]; if (null === this.provider) throw new Error("Can not hide an ad without an provider, please attach an ad provider!"); return b.unshift(a), this.provider.adAvailable.apply(this.provider, b) }, c }(e), s = new r; a.H5AdWrapper = r, a.adWrapper = s, a.CocoonAds = q, a.CordovaGamedistribution = f, a.CordovaHeyzap = g, a.CordovaIronSource = h, a.GameDistribution = k, a.GameDistributionBanner = j, a.Ima3 = m, Object.defineProperty(a, "__esModule", { value: !0 }) }), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }, b = function(a, b) { function d() { this.constructor = a } for (var e in b) c.call(b, e) && (a[e] = b[e]); return d.prototype = b.prototype, a.prototype = new d, a.__super__ = b.prototype, a }, c = {}.hasOwnProperty; define("Ads/AdManager", ["require", "Phaser", "h5ads"], function(c) { var d, e; return d = c("Phaser"), e = c("h5ads"), function(c) { function d() { return this.pauseGame = a(this.pauseGame, this), this.resumeGame = a(this.resumeGame, this), this.showAd = a(this.showAd, this), this.start = a(this.start, this), d.__super__.constructor.apply(this, arguments) } return b(d, c), d.prototype.start = function(a) { if (this.game = a, !this.game.config.devSkipAds) return this.provider = new e.GameDistribution("a55c9cc9c21e4fc683c8c6857f3d0c75"), e.adWrapper.setAdProvider(this.provider) }, d.prototype.showAd = function(a, b) { return console.log("----------------------------------------", b), h5branding.google.sendScreenView("advertisement_" + b), e.adWrapper.once(e.AdEvents.CONTENT_PAUSED, function(a) { return function() { return a.pauseGame() } }(this)), e.adWrapper.once(e.AdEvents.CONTENT_RESUMED, function(a) { return function() { return a.resumeGame() } }(this)), this.game.config.devSkipAds ? void(null != a && a()) : (this.callback = a, e.adWrapper.showAd(e.AdType.interstitial)) }, d.prototype.resumeGame = function() { return this.game.paused = !1, null != this.callback && this.callback(), this.callback = null, e.adWrapper.removeAllListeners(e.AdEvents.CONTENT_PAUSED), e.adWrapper.removeAllListeners(e.AdEvents.CONTENT_RESUMED) }, d.prototype.pauseGame = function() { return this.game.paused = !0 }, d }(d.Signal) }) }.call(this), function() { var a = function(a, b) { return function() { return a.apply(b, arguments) } }; define("Ads/SideBanners", ["require", "Phaser", "h5ads"], function(b) { var c; return b("Phaser"), c = b("h5ads"), function() { function b() { this.resize = a(this.resize, this), this.destroyBanners = a(this.destroyBanners, this), this.start = a(this.start, this) } return b.prototype.start = function(a) { return this.game = a, this.leftBanner = null, this.rightBanner = null }, b.prototype.destroyBanners = function() { if (this.leftBanner && (this.leftBanner.destroy(), this.leftBanner = null), this.rightBanner) return this.rightBanner.destroy(), this.rightBanner = null }, b.prototype.resize = function(a) { var b, d; if (a = !0, null != this.game && this.game.device.desktop && (d = !0, b = this.game.state.getCurrentState(), "level" === b.key && (d = this.game.paused || !1 || b.ended || !1), d)) { if (!(this.game.realWidth >= 1250 && this.game.realHeight >= 810)) return this.destroyBanners(); if (this.leftBanner ? this.leftBanner && this.leftBanner.alignIn(document.body, a ? c.GameDistributionAlignment.TopLeft : c.GameDistributionAlignment.CenterLeft) : (this.leftBanner = c.adWrapper.loadBanner(c.GameDistributionBannerSize.Skyscraper), this.leftBanner && this.leftBanner.alignIn(document.body, a ? c.GameDistributionAlignment.TopLeft : c.GameDistributionAlignment.CenterLeft)), this.rightBanner) { if (this.rightBanner) return this.rightBanner.alignIn(document.body, a ? c.GameDistributionAlignment.TopRight : c.GameDistributionAlignment.CenterRight) } else if (this.rightBanner = c.adWrapper.loadBanner(c.GameDistributionBannerSize.Skyscraper), this.rightBanner) return this.rightBanner.alignIn(document.body, a ? c.GameDistributionAlignment.TopRight : c.GameDistributionAlignment.CenterRight) } }, b }() }) }.call(this), function(a, b, c) { "undefined" != typeof module && module.exports ? module.exports = c() : "function" == typeof define && define.amd ? define("bowser", c) : a.bowser = c() }(this, 0, function() { function a(a) { function b(b) { var c = a.match(b); return c && c.length > 1 && c[1] || "" } function c(b) { var c = a.match(b); return c && c.length > 1 && c[2] || "" } var e, f = b(/(ipod|iphone|ipad)/i).toLowerCase(), h = /like android/i.test(a), i = !h && /android/i.test(a), j = /nexus\s*[0-6]\s*/i.test(a), k = !j && /nexus\s*[0-9]+/i.test(a), l = /CrOS/.test(a), m = /silk/i.test(a), n = /sailfish/i.test(a), o = /tizen/i.test(a), p = /(web|hpw)(o|0)s/i.test(a), q = /windows phone/i.test(a), r = (/SamsungBrowser/i.test(a), !q && /windows/i.test(a)), s = !f && !m && /macintosh/i.test(a), t = !i && !n && !o && !p && /linux/i.test(a), u = c(/edg([ea]|ios)\/(\d+(\.\d+)?)/i), v = b(/version\/(\d+(\.\d+)?)/i), w = /tablet/i.test(a) && !/tablet pc/i.test(a), x = !w && /[^-]mobi/i.test(a), y = /xbox/i.test(a); /opera/i.test(a) ? e = { name: "Opera", opera: g, version: v || b(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i) } : /opr\/|opios/i.test(a) ? e = { name: "Opera", opera: g, version: b(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i) || v } : /SamsungBrowser/i.test(a) ? e = { name: "Samsung Internet for Android", samsungBrowser: g, version: v || b(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i) } : /Whale/i.test(a) ? e = { name: "NAVER Whale browser", whale: g, version: b(/(?:whale)[\s\/](\d+(?:\.\d+)+)/i) } : /MZBrowser/i.test(a) ? e = { name: "MZ Browser", mzbrowser: g, version: b(/(?:MZBrowser)[\s\/](\d+(?:\.\d+)+)/i) } : /coast/i.test(a) ? e = { name: "Opera Coast", coast: g, version: v || b(/(?:coast)[\s\/](\d+(\.\d+)?)/i) } : /focus/i.test(a) ? e = { name: "Focus", focus: g, version: b(/(?:focus)[\s\/](\d+(?:\.\d+)+)/i) } : /yabrowser/i.test(a) ? e = { name: "Yandex Browser", yandexbrowser: g, version: v || b(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i) } : /ucbrowser/i.test(a) ? e = { name: "UC Browser", ucbrowser: g, version: b(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i) } : /mxios/i.test(a) ? e = { name: "Maxthon", maxthon: g, version: b(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i) } : /epiphany/i.test(a) ? e = { name: "Epiphany", epiphany: g, version: b(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i) } : /puffin/i.test(a) ? e = { name: "Puffin", puffin: g, version: b(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i) } : /sleipnir/i.test(a) ? e = { name: "Sleipnir", sleipnir: g, version: b(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i) } : /k-meleon/i.test(a) ? e = { name: "K-Meleon", kMeleon: g, version: b(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i) } : q ? (e = { name: "Windows Phone", osname: "Windows Phone", windowsphone: g }, u ? (e.msedge = g, e.version = u) : (e.msie = g, e.version = b(/iemobile\/(\d+(\.\d+)?)/i))) : /msie|trident/i.test(a) ? e = { name: "Internet Explorer", msie: g, version: b(/(?:msie |rv:)(\d+(\.\d+)?)/i) } : l ? e = { name: "Chrome", osname: "Chrome OS", chromeos: g, chromeBook: g, chrome: g, version: b(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) } : /edg([ea]|ios)/i.test(a) ? e = { name: "Microsoft Edge", msedge: g, version: u } : /vivaldi/i.test(a) ? e = { name: "Vivaldi", vivaldi: g, version: b(/vivaldi\/(\d+(\.\d+)?)/i) || v } : n ? e = { name: "Sailfish", osname: "Sailfish OS", sailfish: g, version: b(/sailfish\s?browser\/(\d+(\.\d+)?)/i) } : /seamonkey\//i.test(a) ? e = { name: "SeaMonkey", seamonkey: g, version: b(/seamonkey\/(\d+(\.\d+)?)/i) } : /firefox|iceweasel|fxios/i.test(a) ? (e = { name: "Firefox", firefox: g, version: b(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i) }, /\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(a) && (e.firefoxos = g, e.osname = "Firefox OS")) : m ? e = { name: "Amazon Silk", silk: g, version: b(/silk\/(\d+(\.\d+)?)/i) } : /phantom/i.test(a) ? e = { name: "PhantomJS", phantom: g, version: b(/phantomjs\/(\d+(\.\d+)?)/i) } : /slimerjs/i.test(a) ? e = { name: "SlimerJS", slimer: g, version: b(/slimerjs\/(\d+(\.\d+)?)/i) } : /blackberry|\bbb\d+/i.test(a) || /rim\stablet/i.test(a) ? e = { name: "BlackBerry", osname: "BlackBerry OS", blackberry: g, version: v || b(/blackberry[\d]+\/(\d+(\.\d+)?)/i) } : p ? (e = { name: "WebOS", osname: "WebOS", webos: g, version: v || b(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i) }, /touchpad\//i.test(a) && (e.touchpad = g)) : /bada/i.test(a) ? e = { name: "Bada", osname: "Bada", bada: g, version: b(/dolfin\/(\d+(\.\d+)?)/i) } : o ? e = { name: "Tizen", osname: "Tizen", tizen: g, version: b(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || v } : /qupzilla/i.test(a) ? e = { name: "QupZilla", qupzilla: g, version: b(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || v } : /chromium/i.test(a) ? e = { name: "Chromium", chromium: g, version: b(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || v } : /chrome|crios|crmo/i.test(a) ? e = { name: "Chrome", chrome: g, version: b(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) } : i ? e = { name: "Android", version: v } : /safari|applewebkit/i.test(a) ? (e = { name: "Safari", safari: g }, v && (e.version = v)) : f ? (e = { name: "iphone" == f ? "iPhone" : "ipad" == f ? "iPad" : "iPod" }, v && (e.version = v)) : e = /googlebot/i.test(a) ? { name: "Googlebot", googlebot: g, version: b(/googlebot\/(\d+(\.\d+))/i) || v } : { name: b(/^(.*)\/(.*) /), version: c(/^(.*)\/(.*) /) }, !e.msedge && /(apple)?webkit/i.test(a) ? (/(apple)?webkit\/537\.36/i.test(a) ? (e.name = e.name || "Blink", e.blink = g) : (e.name = e.name || "Webkit", e.webkit = g), !e.version && v && (e.version = v)) : !e.opera && /gecko\//i.test(a) && (e.name = e.name || "Gecko", e.gecko = g, e.version = e.version || b(/gecko\/(\d+(\.\d+)?)/i)), e.windowsphone || !i && !e.silk ? !e.windowsphone && f ? (e[f] = g, e.ios = g, e.osname = "iOS") : s ? (e.mac = g, e.osname = "macOS") : y ? (e.xbox = g, e.osname = "Xbox") : r ? (e.windows = g, e.osname = "Windows") : t && (e.linux = g, e.osname = "Linux") : (e.android = g, e.osname = "Android"); var z = ""; e.windows ? z = function(a) { switch (a) { case "NT": return "NT"; case "XP": return "XP"; case "NT 5.0": return "2000"; case "NT 5.1": return "XP"; case "NT 5.2": return "2003"; case "NT 6.0": return "Vista"; case "NT 6.1": return "7"; case "NT 6.2": return "8"; case "NT 6.3": return "8.1"; case "NT 10.0": return "10"; default: return } }(b(/Windows ((NT|XP)( \d\d?.\d)?)/i)) : e.windowsphone ? z = b(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i) : e.mac ? (z = b(/Mac OS X (\d+([_\.\s]\d+)*)/i), z = z.replace(/[_\s]/g, ".")) : f ? (z = b(/os (\d+([_\s]\d+)*) like mac os x/i), z = z.replace(/[_\s]/g, ".")) : i ? z = b(/android[ \/-](\d+(\.\d+)*)/i) : e.webos ? z = b(/(?:web|hpw)os\/(\d+(\.\d+)*)/i) : e.blackberry ? z = b(/rim\stablet\sos\s(\d+(\.\d+)*)/i) : e.bada ? z = b(/bada\/(\d+(\.\d+)*)/i) : e.tizen && (z = b(/tizen[\/\s](\d+(\.\d+)*)/i)), z && (e.osversion = z); var A = !e.windows && z.split(".")[0]; return w || k || "ipad" == f || i && (3 == A || A >= 4 && !x) || e.silk ? e.tablet = g : (x || "iphone" == f || "ipod" == f || i || j || e.blackberry || e.webos || e.bada) && (e.mobile = g), e.msedge || e.msie && e.version >= 10 || e.yandexbrowser && e.version >= 15 || e.vivaldi && e.version >= 1 || e.chrome && e.version >= 20 || e.samsungBrowser && e.version >= 4 || e.whale && 1 === d([e.version, "1.0"]) || e.mzbrowser && 1 === d([e.version, "6.0"]) || e.focus && 1 === d([e.version, "1.0"]) || e.firefox && e.version >= 20 || e.safari && e.version >= 6 || e.opera && e.version >= 10 || e.ios && e.osversion && e.osversion.split(".")[0] >= 6 || e.blackberry && e.version >= 10.1 || e.chromium && e.version >= 20 ? e.a = g : e.msie && e.version < 10 || e.chrome && e.version < 20 || e.firefox && e.version < 20 || e.safari && e.version < 6 || e.opera && e.version < 10 || e.ios && e.osversion && e.osversion.split(".")[0] < 6 || e.chromium && e.version < 20 ? e.c = g : e.x = g, e } function b(a) { return a.split(".").length } function c(a, b) { var c, d = []; if (Array.prototype.map) return Array.prototype.map.call(a, b); for (c = 0; c < a.length; c++) d.push(b(a[c])); return d } function d(a) { for (var d = Math.max(b(a[0]), b(a[1])), e = c(a, function(a) { var e = d - b(a); return a += new Array(e + 1).join(".0"), c(a.split("."), function(a) { return new Array(20 - a.length).join("0") + a }).reverse() }); --d >= 0;) { if (e[0][d] > e[1][d]) return 1; if (e[0][d] !== e[1][d]) return -1; if (0 === d) return 0 } } function e(b, c, e) { var f = h; "string" == typeof c && (e = c, c = void 0), void 0 === c && (c = !1), e && (f = a(e)); var g = "" + f.version; for (var i in b) if (b.hasOwnProperty(i) && f[i]) { if ("string" != typeof b[i]) throw new Error("Browser version in the minVersion map should be a string: " + i + ": " + String(b)); return d([g, b[i]]) < 0 } return c } function f(a, b, c) { return !e(a, b, c) } var g = !0, h = a("undefined" != typeof navigator ? navigator.userAgent || "" : ""); return h.test = function(a) { for (var b = 0; b < a.length; ++b) { var c = a[b]; if ("string" == typeof c && c in h) return !0 } return !1 }, h.isUnsupportedBrowser = e, h.compareVersions = d, h.check = f, h._detect = a, h.detect = a, h }), define("bowser", function() {}); var PhaserSuperStorage; ! function(a) {! function(a) { var b = function() { function a(a) { void 0 === a && (a = ""), this.namespace = "", this.forcePromises = !1, this.setNamespace(a) } return Object.defineProperty(a.prototype, "length", { get: function() { return null !== this.getNameSpaceMatches() ? this.getNameSpaceMatches().length : 0 }, enumerable: !0, configurable: !0 }), a.prototype.key = function(a) { var b = this.getNameSpaceMatches()[a], c = this.getCookiesForNameSpace()[b] || null; return this.forcePromises ? this.promisefy(c) : c }, a.prototype.getItem = function(a) { var b = this.getCookiesForNameSpace()[a] || null; return this.forcePromises ? this.promisefy(b) : b }, a.prototype.setItem = function(a, b) { if (document.cookie = encodeURIComponent(this.namespace + a) + "=" + encodeURIComponent(b) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/", this.forcePromises) return this.promisefy(null) }, a.prototype.removeItem = function(a) { if (document.cookie = encodeURIComponent(this.namespace + a) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/", this.forcePromises) return this.promisefy(null) }, a.prototype.clear = function() { var a = this.getCookiesForNameSpace(); for (var b in a) a.hasOwnProperty(b) && this.removeItem(b); if (this.forcePromises) return this.promisefy(null) }, a.prototype.setNamespace = function(a) { if (a && (this.namespace = a + ":", this.reg = new RegExp("^" + this.namespace + "[a-zA-Z0-9]*", "g")), this.forcePromises) return this.promisefy(a) }, a.prototype.getNameSpaceMatches = function() { var a = this; return decodeURIComponent(document.cookie).split("; ").filter(function(b) { return null !== b.match(a.reg) && b.match(a.reg).length > 0 }) }, a.prototype.getCookiesForNameSpace = function() { var a = this, b = {}; return this.getNameSpaceMatches().forEach(function(c) { var d = c.replace(a.namespace, "").split("="); b[d[0]] = d[1] }), b }, a.prototype.promisefy = function(a) { return new Promise(function(b, c) { b(a) }) }, a }(); a.CookieStorage = b }(a.StorageAdapters || (a.StorageAdapters = {})) }(PhaserSuperStorage || (PhaserSuperStorage = {})); var PhaserSuperStorage; ! function(a) {! function(a) { var b = function() { function a() { this.namespace = "", this.keys = [] } return Object.defineProperty(a.prototype, "forcePromises", { get: function() { return !0 }, set: function(a) {}, enumerable: !0, configurable: !0 }), Object.defineProperty(a.prototype, "length", { get: function() { return this.keys.length }, enumerable: !0, configurable: !0 }), a.prototype.key = function(a) { return this.promisefy(this.keys[a]) }, a.prototype.getItem = function(a) { var b = this; return new Promise(function(c, d) { NativeStorage.getItem(b.namespace + a, function(a) { c(a) }, function(a) { 2 === a.code ? c(null) : d(a) }) }) }, a.prototype.setItem = function(a, b) { var c = this; return a.length < 1 ? void console.error("CordovaStorage: Key cannot be an empty string!") : new Promise(function(d, e) { NativeStorage.setItem(c.namespace + a, b, function() { c.keys.indexOf(a) < 0 && (c.keys.push(a), c.save()), d(null) }, function(a) { e(a) }) }) }, a.prototype.removeItem = function(a) { var b = this; return new Promise(function(c, d) { NativeStorage.remove(b.namespace + a, function() { var d = b.keys.indexOf(a); d >= 0 && (b.keys.splice(d, 1), b.save()), c(null) }, function(a) { d(a) }) }) }, a.prototype.clear = function() { var a = this; return new Promise(function(b, c) { for (var d = 0, e = 0; e < a.keys.length; e++) NativeStorage.remove(a.namespace + a.keys[e], function() {++d >= a.keys.length && (a.keys = [], a.save(), b(null)) }, function(a) { c(a) }) }) }, a.prototype.setNamespace = function(a) { var b = this; return void 0 === a && (a = ""), this.namespace = a + ":", this.keys = [], new Promise(function(a, c) { b.load().then(a).catch(a) }) }, a.prototype.promisefy = function(a) { return new Promise(function(b, c) { b(a) }) }, a.prototype.load = function() { var a = this; return new Promise(function(b, c) { NativeStorage.getItem(a.namespace, function(c) { a.keys = JSON.parse(c), b(null) }, function(a) { c(a) }) }) }, a.prototype.save = function() { NativeStorage.setItem(this.namespace, JSON.stringify(this.keys), function() {}, function(a) { console.warn("CordovaStorage: Failed to save keys of namespace.") }) }, a }(); a.CordovaStorage = b }(a.StorageAdapters || (a.StorageAdapters = {})) }(PhaserSuperStorage || (PhaserSuperStorage = {})); var PhaserSuperStorage; ! function(a) {! function(b) { var c = function() { function b(a, b) { void 0 === a && (a = ""), void 0 === b && (b = "*"), this.namespace = "", this.expectedOrigin = "", this.storageLength = 0, this.enabled = !1, "" !== a && this.setNamespace(a), this.expectedOrigin = b } return Object.defineProperty(b.prototype, "forcePromises", { get: function() { return !0 }, set: function(a) {}, enumerable: !0, configurable: !0 }), Object.defineProperty(b.prototype, "length", { get: function() { return this.storageLength }, enumerable: !0, configurable: !0 }), b.prototype.init = function() { var b = this; return this.sendMessage({ command: a.StorageCommand.init }).then(function() { b.enabled = !0 }) }, b.prototype.key = function(b) { return this.sendMessage({ command: a.StorageCommand.key, value: b }) }, b.prototype.getItem = function(b) { return this.sendMessage({ command: a.StorageCommand.getItem, key: b }) }, b.prototype.setItem = function(b, c) { return this.sendMessage({ command: a.StorageCommand.setItem, key: b, value: c }) }, b.prototype.removeItem = function(b) { return this.sendMessage({ command: a.StorageCommand.removeItem, key: b }) }, b.prototype.clear = function() { return this.sendMessage({ command: a.StorageCommand.clear }) }, b.prototype.setNamespace = function(b) { return this.sendMessage({ command: a.StorageCommand.setNamespace, value: b }) }, b.prototype.sendMessage = function(b) { var c, d = this; b.command === a.StorageCommand.init && (c = !1); var e = new MessageChannel; return new Promise(function(f, g) { d.enabled || b.command === a.StorageCommand.init || g("Messaging not enabled!"), b.command === a.StorageCommand.init && setTimeout(function() { c || g("Unable to get a response in time") }, 1e3), e.port1.onmessage = function(b) { console.log("Frame received message", b); var e = a.StorageUtils.validateMessage(b.data); switch (e.command === a.StorageCommand.init && (c = !0), void 0 !== e.status && "ok" === e.status || g(e.value), void 0 !== e.length && (d.storageLength = e.length), e.command) { case a.StorageCommand.setNamespace: d.namespace = e.value + ":"; case a.StorageCommand.getItem: case a.StorageCommand.length: case a.StorageCommand.key: f(e.value); break; case a.StorageCommand.setItem: case a.StorageCommand.removeItem: case a.StorageCommand.clear: case a.StorageCommand.init: f(e.status); break; default: g(e.value) } }, (d.enabled || b.command === a.StorageCommand.init) && (console.log("Sending message to parent: ", b), window.parent.postMessage(b, d.expectedOrigin, [e.port2])) }) }, b }(); b.IframeStorage = c }(a.StorageAdapters || (a.StorageAdapters = {})) }(PhaserSuperStorage || (PhaserSuperStorage = {})); var PhaserSuperStorage; ! function(a) {! function(b) { var c = function() { function b(a) { void 0 === a && (a = ""), this.namespace = "", this.forcePromises = !1, this.setNamespace(a) } return Object.defineProperty(b.prototype, "length", { get: function() { var b = Object.keys(localStorage); return a.StorageUtils.nameSpaceKeyFilter(b, this.namespace).length }, enumerable: !0, configurable: !0 }), b.prototype.key = function(a) { return this.forcePromises ? this.promisefy(this._key, arguments) : this._key(a) }, b.prototype._key = function(b) { var c = Object.keys(localStorage), d = a.StorageUtils.nameSpaceKeyFilter(c, this.namespace); return localStorage.getItem(d[b]) }, b.prototype.getItem = function(a) { return this.forcePromises ? this.promisefy(this._getItem, arguments) : this._getItem(a) }, b.prototype._getItem = function(a) { return localStorage.getItem(this.namespace + a) }, b.prototype.setItem = function(a, b) { return this.forcePromises ? this.promisefy(this._setItem, arguments) : this._setItem(a, b) }, b.prototype._setItem = function(a, b) { return localStorage.setItem(this.namespace + a, b) }, b.prototype.removeItem = function(a) { return this.forcePromises ? this.promisefy(this._removeItem, arguments) : this._removeItem(a) }, b.prototype._removeItem = function(a) { return localStorage.removeItem(this.namespace + a) }, b.prototype.clear = function() { return this.forcePromises ? this.promisefy(this._clear, arguments) : this._clear() }, b.prototype._clear = function() { for (var b = Object.keys(localStorage), c = a.StorageUtils.nameSpaceKeyFilter(b, this.namespace), d = 0; d < c.length; d++) localStorage.removeItem(c[d]) }, b.prototype.setNamespace = function(a) { return this.forcePromises ? this.promisefy(this._setNameSpace, arguments) : this._setNameSpace(a) }, b.prototype._setNameSpace = function(a) { a && (this.namespace = a + ":") }, b.prototype.promisefy = function(a, b) { var c = this; return new Promise(function(d, e) { d(a.apply(c, b)) }) }, b }(); b.LocalStorage = c }(a.StorageAdapters || (a.StorageAdapters = {})) }(PhaserSuperStorage || (PhaserSuperStorage = {})); var PhaserSuperStorage; ! function(a) { var b = function() { function b(c) { if (void 0 !== c) Object.defineProperty(c, "storage", { value: this }); else { if (null !== b.instance) return b.instance; b.instance = this } a.StorageUtils.isLocalStorageSupport() ? this.setAdapter(new a.StorageAdapters.LocalStorage) : this.setAdapter(new a.StorageAdapters.CookieStorage) } return b.prototype.setAdapter = function(a) { this.storage = a }, Object.defineProperty(b.prototype, "forcePromises", { get: function() { return this.storage.forcePromises }, set: function(a) { this.storage.forcePromises = a }, enumerable: !0, configurable: !0 }), Object.defineProperty(b.prototype, "length", { get: function() { return null === this.storage ? 0 : this.storage.length }, enumerable: !0, configurable: !0 }), b.prototype.setNamespace = function(a) { if (null !== this.storage) return this.storage.setNamespace(a) }, b.prototype.key = function(a) { return null === this.storage ? "" : this.storage.key(a) }, b.prototype.getItem = function(a) { return null === this.storage ? null : this.storage.getItem(a) }, b.prototype.setItem = function(a, b) { if (null !== this.storage) return this.storage.setItem(a, b) }, b.prototype.removeItem = function(a) { if (null !== this.storage) return this.storage.removeItem(a) }, b.prototype.clear = function() { if (null !== this.storage) return this.storage.clear() }, b.instance = null, b }(); a.StoragePlugin = b }(PhaserSuperStorage || (PhaserSuperStorage = {})), void 0 !== window.Phaser && Phaser.Utils.mixinPrototype(PhaserSuperStorage.StoragePlugin, Phaser.Plugin); var PhaserSuperStorage; ! function(a) {! function(a) { a[a.init = 0] = "init", a[a.setItem = 1] = "setItem", a[a.getItem = 2] = "getItem", a[a.removeItem = 3] = "removeItem", a[a.clear = 4] = "clear", a[a.setNamespace = 5] = "setNamespace", a[a.length = 6] = "length", a[a.key = 7] = "key", a[a.error = 8] = "error" }(a.StorageCommand || (a.StorageCommand = {})); var b = (a.StorageCommand, function() { function a() {} return a.isLocalStorageSupport = function() { try { if ("object" == typeof localStorage) return localStorage.setItem("testingLocalStorage", "foo"), localStorage.removeItem("testingLocalStorage"), !0 } catch (a) { return !1 } return !1 }, a.validateMessage = function(a) { return a.hasOwnProperty("command") ? a : null }, a.nameSpaceKeyFilter = function(a, b) { return a.filter(function(a) { return a.substring(0, b.length) === b }) }, a }()); a.StorageUtils = b }(PhaserSuperStorage || (PhaserSuperStorage = {})), define("superStorage", ["Phaser"], function(a) { return function() { return a.superStorage } }(this)); var __extends = this && this.__extends || function(a, b) { function c() { this.constructor = a } for (var d in b) b.hasOwnProperty(d) && (a[d] = b[d]); a.prototype = null === b ? Object.create(b) : (c.prototype = b.prototype, new c) }, PhaserCachebuster; ! function(a) { var b = function(a) { function b(b, c) { var d = a.call(this, b, c) || this; return d.patchLoader(), d } return __extends(b, a), b.prototype.patchLoader = function() { Object.defineProperty(Phaser.Loader, "cacheBuster", { value: null }), Phaser.Loader.prototype.transformUrl = function(a, b) { return a ? (null !== this.cacheBuster && null === a.match(/^(data:)/) && (a += "?v=" + this.cacheBuster), a.match(/^(?:blob:|data:|http:\/\/|https:\/\/|\/\/)/) ? a : this.baseURL + b.path + a) : "" } }, b }(Phaser.Plugin); a.CacheBuster = b }(PhaserCachebuster || (PhaserCachebuster = {})), define("cacheBuster", ["Phaser"], function(a) { return function() { return a.cacheBuster } }(this)); var RaygunHelper; ! function(a) { var b = function() { function a() { var a = this; this.apiKey = "raygunapikey", this.recurringError = [], function(a, b, c, d, e, f, g, h) { a.RaygunObject = e, a[e] = a[e] || function() { (a[e].o = a[e].o || []).push(arguments) }, f = b.createElement(c), g = b.getElementsByTagName(c)[0], f.async = 1, f.src = "//cdn.raygun.io/raygun4js/raygun.min.js", g.parentNode.insertBefore(f, g), h = a.onerror, a.onerror = function(b, c, d, f, g) { h && h(b, c, d, f, g), g || (g = new Error(b)), a[e].q = a[e].q || [], a[e].q.push({ e: g }) } }(window, document, "script", 0, "rg4js"), rg4js("apiKey", this.apiKey), rg4js("enableCrashReporting", !0), rg4js("setVersion", version), rg4js("options", { ignore3rdPartyErrors: !0 }), rg4js("onBeforeSend", function(b) { return a.filterError(b) }), rg4js("enablePulse", !1) } return a.getInstance = function() { return null === a.instance && (a.instance = new a), a.instance }, a.prototype.filterError = function(a) { if (void 0 !== a && a.Details && a.Details.Error && a.Details.Error.Message) { if (-1 !== this.recurringError.indexOf(a.Details.Error.Message)) return !1; this.recurringError.push(a.Details.Error.Message) } return a }, a.instance = null, a }(); a.RayGun = b }(RaygunHelper || (RaygunHelper = {})), define("RaygunHelper", function() {}), function() { define("main", ["require", "Phaser", "States/Boot", "States/Load", "States/Level/Level", "utils/lang/Lang", "TouchManager", "Ads/AdManager", "Ads/SideBanners", "bowser", "jquery", "underscore", "superStorage", "cacheBuster", "RaygunHelper"], function(a) { var b, c, d, e, f, g, h, i, j, k, l; return g = a("Phaser"), c = a("States/Boot"), f = a("States/Load"), a("States/Level/Level"), e = a("utils/lang/Lang"), i = a("TouchManager"), b = a("Ads/AdManager"), h = a("Ads/SideBanners"), d = a("bowser"), a("jquery"), a("underscore"), a("superStorage"), a("cacheBuster"), a("RaygunHelper"), k = { vibrate: !1, music: !0, fx: !0, controls: null }, j = { width: window.innerWidth || $(window).width(), height: window.innerHeight || $(window).height(), renderer: g.AUTO, parent: "container", transparent: !1, multiTexture: !1, antialias: !0, resolution: window.devicePixelRatio, enableDebug: !1, showFps: !1, devUnlock: !1, devSkipAds: !1, simulateCordova: !1, log: !1 }, j.log || (console.log = function(a) { return function() {} }()), RaygunHelper.RayGun.getInstance(), $.ajaxSetup({ data: { v: version } }), l = new g.Game(j), g.Device.whenReady(function(a) { return function() { var j, m, n, o, p, q, r; return l.stage.disableVisibilityChange = !0, n = null != (p = l.device.desktop || !l.device.iPad) ? p : { click: "touchstart" }, document.getElementById("container").addEventListener(n, function(a) { return l.gameResumed(a) }), l.bowser = d, l.settingsSignal = new g.Signal, l.settingsSignal.add(function(a) { var b; if ("fx" === a && (l.paused || (l.sound.mute = !l.settings.fx)), "music" === a && (b = l.state.states[l.state.current], null != b.updateMusic)) return b.updateMusic() }), l.lang = new e, l.saveSettings = function() { return this.storage.setNamespace("fb-" + this.gameConfig.id), this.storage.setItem("settings", JSON.stringify(this.settings)) }, l.loadSettings = function() { return this.storage.setNamespace("fb-" + this.gameConfig.id), this.storage.getItem("settings").then(function(a) { return function(b) { return b ? a.settings = JSON.parse(b) : (a.settings = k, a.bowser.tablet || a.bowser.mobile || a.device.iPad ? a.settings.controls = "single" : a.settings.controls = "keyboard"), new Promise(function(a) { return a() }) } }(this)) }, l.state.add("load", f), l.state.add("boot", c), l.TouchManager = new i, l.TouchManager.start(l), l.AdManager = new b, l.SideBanners = new h, l.state.start("boot"), m = function(b) { var c, d, e, f, g; return f = l.make.sprite(), d = l.make.graphics(0, 0), d.beginFill(0, 1), d.drawRect(0, 0, l.realWidth, l.realHeight), d.endFill(), f.addChild(d), b.showText && (g = l.make.bitmapText(0, 0, l.lang.font, l.lang.locale("loading"), Math.min(30, 36 / Math.max(1, l.resolution))), g.anchor.set(0), g.alpha = 0, g.x = window.innerWidth / 2 - g.textWidth / 2, g.y = window.innerHeight / 2 - g.textHeight / 2, f.addChild(g), d.text = g, e = l.time.time, c = function() { var b, d, f; if (d = l.time.elapsedSince(e), f = 800, d > f && (g.alpha = 1), b = Math.floor((d - f) / 300) % 4, 0 === b && (g.text = l.lang.locale("loading") + "..."), 1 === b && (g.text = l.lang.locale("loading")), 2 === b && (g.text = l.lang.locale("loading") + "."), 3 === b && (g.text = l.lang.locale("loading") + ".."), a.fading) return requestAnimationFrame(c) }, requestAnimationFrame(c)), l.stage.addChild(f), f }, r = function(a, b) { var c; return l.paused = !1, a.alpha = 0, c = l.add.tween(a), c.to({ alpha: 1 }, 500, null), c.onComplete.add(function() { return l.stage.backgroundColor = "#000000", l.tweens.remove(c), b() }), c.start() }, o = function(a, b) { var c; return l.stage.backgroundColor = "#000000", l.paused = !1, c = l.add.tween(a), c.to({ alpha: 0 }, 500, null), c.onComplete.add(function() { return l.tweens.remove(c), b(), a.kill() }), c.start() }, function() { var a; if (l.bowser.tablet || l.bowser.mobile || l.device.iPad) { if (a = document.getElementById("root"), a.requestFullscreen) return a.requestFullscreen(); if (a.webkitRequestFullscreen) return a.webkitRequestFullscreen(); if (a.mozRequestFullScreen) return a.mozRequestFullScreen(); if (a.msRequestFullscreen) return a.msRequestFullscreen() } }, l.state.fade = function(a, b, c, d) { var e; if (!this.fading) return this.fading = !0, this.overlay = e = m({ showText: !0 }), r(e, function(f) { return function() { return f.game.AdManager.showAd(function() { var g; return f.game.state.start(a, b, c, d), f.game.paused = !1, g = function() { return f.fading = !1, null != f.overlay && f.overlay.kill(), f.overlay = e = m({ showText: !1 }), e.alpha = 1, requestAnimationFrame(function() { return o(e, function() { if (f.fading = !1, null != f.game.state.states[a].start) return f.game.state.states[a].start() }) }) }, null != f.game.state.states[a].onReady ? f.game.state.states[a].onReady.addOnce(g) : requestAnimationFrame(function() { return g() }) }, a) } }(this)) }, _.deepObjectExtend = function(a, b) { var c; for (c in b) null != a[c] && "object" == typeof a[c] && "object" == typeof b[c] ? _.deepObjectExtend(a[c], b[c]) : null == a[c] && (a[c] = _.clone(b[c])); return a }, l.secondsToString = function(a) { var b, c, d; return c = function(a) { return (a < 10 ? "0" : "") + a }, d = a % 60, b = (a - d) / 60, c(b) + ":" + c(d) }, j = function() { var a, b, c, d, e; return console.log("_resize to height: ", window.innerWidth, "or", $(window).width()), l.TouchManager.resize(), e = window.innerWidth || $(window).width(), b = window.innerHeight || $(window).height(), l.scale.setGameSize(e, b), d = 800, c = 600, l.width < d || l.height < c ? l.camera.scale.set(Math.min(l.width / d, l.height / c)) : l.camera.scale.set(1, 1), l.camera.x = -l.width / 2, l.camera.y = -l.height / 2, l.realWidth = l.width / l.camera.scale.x, l.realHeight = l.height / l.camera.scale.y, l.bounds = new g.Rectangle(0, 0, l.width, l.height), a = l.state.states[l.state.current], null != a && null != a.layoutContent && a.layoutContent(), l.SideBanners.resize("level" !== a.key), l.camera.update() }, g.Sound.prototype.playInstance = function() { return this.instances || (this.instances = 0), 0 === this.instances || this.loop ? this.play() : this.restart(), this.instances++, this }, g.Sound.prototype.stopInstance = function() { if (0 === --this.instances) return this.stop() }, q = _.debounce(j, 200), $(window).on("resize", q), q(), l.getStoreObjects = function() { var a, b, c, d, e, f, g, h; for (a = ["ios", "android", "microsoft"], e = [], g = [], l.bowser.windows ? (a.indexOf("android") >= 0 && g.push("android"), a.indexOf("ios") >= 0 && g.push("ios")) : l.bowser.windowsphone ? a.indexOf("microsoft") >= 0 && g.push("microsoft") : l.bowser.macos ? a.indexOf("ios") >= 0 && g.push("ios") : l.bowser.android ? a.indexOf("android") >= 0 && g.push("android") : l.bowser.ios ? a.indexOf("ios") >= 0 && g.push("ios") : (a.indexOf("microsoft") >= 0 && g.push("microsoft"), a.indexOf("android") >= 0 && g.push("android"), a.indexOf("ios") >= 0 && g.push("ios")); g.length > 2;) g.splice(Math.floor(Math.random() * g.length), 1); for (b = 0, d = g.length; b < d; b++) f = g[b], "microsoft" === f ? (c = "microsoft-store", h = "https://www.microsoft.com/store/apps/9NSP5N3B7Q32?cid=GDNetwork") : "android" === f ? (c = "android-store", h = "https://play.google.com/store/apps/details?id=com.osloalbet.fb&referrer=utm_source%3DGDNetwork") : "ios" === f && (c = "ios-store", h = "https://itunes.apple.com/app/apple-store/id1446352801?pt=119475155&ct=GDNetwork&mt=8"), e.push({ image: c, url: h }); return e } } }(this)) }) }.call(this), function() { require.config({ baseUrl: "js", deps: ["main"], findNestedDependencies: !1, shim: { marionette: { deps: ["backbone"], exports: "Marionette" }, box2d: { deps: ["Phaser"], exports: "box2d" }, outlineFilter: { deps: ["Phaser"], exports: "outlineFilter" }, inlineFilter: { deps: ["Phaser"], exports: "inlineFilter" }, shadowFilter: { deps: ["Phaser"], exports: "shadowFilter" }, bevelFilter: { deps: ["Phaser"], exports: "bevelFilter" }, colorMatrix: { deps: ["Phaser"], exports: "colorMatrix" }, bwMatrix: { deps: ["Phaser"], exports: "bwMatrix" }, glowFilter: { deps: ["Phaser"], exports: "glowFilter" }, superStorage: { deps: ["Phaser"], exports: "superStorage" }, cacheBuster: { deps: ["Phaser"], exports: "cacheBuster" } }, paths: { jquery: "../../../bower_components/jquery/dist/jquery", underscore: "../../../bower_components/underscore/underscore", backbone: "../../../bower_components/backbone/backbone", "backbone.radio": "../../..//bower_components/backbone.radio/build/backbone.radio", "backbone.marionette": "../../../bower_components/backbone.marionette/lib/backbone.marionette", h5branding: "../../../node_modules/@azerion/h5-azerion-branding/dist/h5-azerion-branding.umd", gameanalytics: "../../../node_modules/gameanalytics/dist/GameAnalytics", Phaser: "../../../node_modules/@azerion/phaser/build/phaser", box2d: "../scripts/lib/box2d-plugin-full", hammer: "../../../bower_components/hammerjs/hammer", outlineFilter: "../scripts/lib/OutlineFilter", inlineFilter: "../scripts/lib/InlineFilter", shadowFilter: "../scripts/lib/ShadowFilter", bevelFilter: "../scripts/lib/BevelFilter", colorMatrix: "../scripts/lib/ColorMatrix", bwMatrix: "../scripts/lib/BWMatrix", glowFilter: "../scripts/lib/GlowFilter", seedrandom: "../../../bower_components/seedrandom/seedrandom.min", bowser: "../../../bower_components/bowser/src/bowser", RaygunHelper: "../scripts/lib/RaygunHelper", h5ads: "../../../node_modules/@azerion/h5-ad-wrapper/dist/h5-ad-wrapper.umd", superStorage: "../scripts/lib/phaser-super-storage", cacheBuster: "../scripts/lib/phaser-cachebuster", "promise-polyfill": "../../../bower_components/promise-polyfill/dist/polyfill" } }) }.call(this), define("init", function() {});